@budiauktioner/buildi-primitives 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.
Files changed (107) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/LICENSE +21 -0
  3. package/README.md +253 -0
  4. package/THIRD_PARTY_NOTICES.md +52 -0
  5. package/dist/banking/index.cjs +6491 -0
  6. package/dist/banking/index.cjs.map +1 -0
  7. package/dist/banking/index.d.cts +58 -0
  8. package/dist/banking/index.d.ts +58 -0
  9. package/dist/banking/index.js +6464 -0
  10. package/dist/banking/index.js.map +1 -0
  11. package/dist/contact/index.cjs +6678 -0
  12. package/dist/contact/index.cjs.map +1 -0
  13. package/dist/contact/index.d.cts +709 -0
  14. package/dist/contact/index.d.ts +709 -0
  15. package/dist/contact/index.js +6586 -0
  16. package/dist/contact/index.js.map +1 -0
  17. package/dist/country-BhD51LDL.d.cts +433 -0
  18. package/dist/country-p0n0EVQ9.d.ts +433 -0
  19. package/dist/finance/index.cjs +3592 -0
  20. package/dist/finance/index.cjs.map +1 -0
  21. package/dist/finance/index.d.cts +83 -0
  22. package/dist/finance/index.d.ts +83 -0
  23. package/dist/finance/index.js +3584 -0
  24. package/dist/finance/index.js.map +1 -0
  25. package/dist/geography/index.cjs +4227 -0
  26. package/dist/geography/index.cjs.map +1 -0
  27. package/dist/geography/index.d.cts +34 -0
  28. package/dist/geography/index.d.ts +34 -0
  29. package/dist/geography/index.js +4202 -0
  30. package/dist/geography/index.js.map +1 -0
  31. package/dist/index.cjs +14087 -0
  32. package/dist/index.cjs.map +1 -0
  33. package/dist/index.d.cts +75 -0
  34. package/dist/index.d.ts +75 -0
  35. package/dist/index.js +13868 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/isin-EeVPpNWu.d.ts +39 -0
  38. package/dist/isin-ZlQLBVm8.d.cts +39 -0
  39. package/dist/organization/index.cjs +2376 -0
  40. package/dist/organization/index.cjs.map +1 -0
  41. package/dist/organization/index.d.cts +117 -0
  42. package/dist/organization/index.d.ts +117 -0
  43. package/dist/organization/index.js +2346 -0
  44. package/dist/organization/index.js.map +1 -0
  45. package/dist/person/index.cjs +1144 -0
  46. package/dist/person/index.cjs.map +1 -0
  47. package/dist/person/index.d.cts +60 -0
  48. package/dist/person/index.d.ts +60 -0
  49. package/dist/person/index.js +1125 -0
  50. package/dist/person/index.js.map +1 -0
  51. package/dist/person-full-name-Cmc9Ynuc.d.cts +82 -0
  52. package/dist/person-full-name-D6Hbsab6.d.ts +82 -0
  53. package/dist/phone-number-C24--ggy.d.ts +139 -0
  54. package/dist/phone-number-DZ-YxCQQ.d.cts +139 -0
  55. package/dist/property/index.cjs +487 -0
  56. package/dist/property/index.cjs.map +1 -0
  57. package/dist/property/index.d.cts +56 -0
  58. package/dist/property/index.d.ts +56 -0
  59. package/dist/property/index.js +480 -0
  60. package/dist/property/index.js.map +1 -0
  61. package/dist/sample-data/index.cjs +12310 -0
  62. package/dist/sample-data/index.cjs.map +1 -0
  63. package/dist/sample-data/index.d.cts +260 -0
  64. package/dist/sample-data/index.d.ts +260 -0
  65. package/dist/sample-data/index.js +12302 -0
  66. package/dist/sample-data/index.js.map +1 -0
  67. package/dist/swedish-address-DNC3ftRF.d.cts +297 -0
  68. package/dist/swedish-address-GMzjqgxb.d.ts +297 -0
  69. package/dist/swedish-bank-account-holder-name-BFJ8h1aO.d.cts +45 -0
  70. package/dist/swedish-bank-account-holder-name-CAAru07F.d.ts +45 -0
  71. package/dist/swedish-municipality-DlUS7g7h.d.cts +87 -0
  72. package/dist/swedish-municipality-nDRHYRAd.d.ts +87 -0
  73. package/dist/swedish-organization-name-D7NvERxA.d.cts +33 -0
  74. package/dist/swedish-organization-name-rR0Q836C.d.ts +33 -0
  75. package/dist/swedish-organization-number-Bcj7V_lh.d.cts +130 -0
  76. package/dist/swedish-organization-number-DM8dpXwR.d.ts +130 -0
  77. package/dist/swedish-organization-type-CZOdETwG.d.cts +29 -0
  78. package/dist/swedish-organization-type-CZOdETwG.d.ts +29 -0
  79. package/dist/swedish-personal-identity-number-BiIg4io3.d.ts +149 -0
  80. package/dist/swedish-personal-identity-number-Cp9Coz55.d.cts +149 -0
  81. package/dist/swedish-property-designation-BM-gdd9x.d.ts +46 -0
  82. package/dist/swedish-property-designation-BaHXufqV.d.cts +46 -0
  83. package/dist/swedish-sni-code-Ccsswpni.d.ts +53 -0
  84. package/dist/swedish-sni-code-CuJFyM6l.d.cts +53 -0
  85. package/dist/swedish-swish-number-CL6Gx_h3.d.cts +397 -0
  86. package/dist/swedish-swish-number-DDG3mNDg.d.ts +397 -0
  87. package/dist/text-candidate-qg2bD9PY.d.cts +110 -0
  88. package/dist/text-candidate-qg2bD9PY.d.ts +110 -0
  89. package/dist/text-scanning/index.cjs +10414 -0
  90. package/dist/text-scanning/index.cjs.map +1 -0
  91. package/dist/text-scanning/index.d.cts +153 -0
  92. package/dist/text-scanning/index.d.ts +153 -0
  93. package/dist/text-scanning/index.js +10406 -0
  94. package/dist/text-scanning/index.js.map +1 -0
  95. package/dist/validation/index.cjs +83 -0
  96. package/dist/validation/index.cjs.map +1 -0
  97. package/dist/validation/index.d.cts +63 -0
  98. package/dist/validation/index.d.ts +63 -0
  99. package/dist/validation/index.js +79 -0
  100. package/dist/validation/index.js.map +1 -0
  101. package/dist/web/index.cjs +3994 -0
  102. package/dist/web/index.cjs.map +1 -0
  103. package/dist/web/index.d.cts +203 -0
  104. package/dist/web/index.d.ts +203 -0
  105. package/dist/web/index.js +3987 -0
  106. package/dist/web/index.js.map +1 -0
  107. package/package.json +211 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/organization/swedish-organization-type.ts","../../src/organization/swedish-organization-identifier-type.ts","../../src/primitives-defaults.ts","../../src/internal/input-sanitization.ts","../../src/internal/clock.ts","../../src/text-scanning/text-candidate-category.ts","../../src/text-scanning/text-candidate.ts","../../src/text-scanning/text-match-confidence.ts","../../src/validation/validation-error-reason.ts","../../src/validation/validation-issue.ts","../../src/validation/validation-result.ts","../../src/internal/luhn.ts","../../src/person/personnummer-parser.ts","../../src/person/swedish-personal-identity-number.ts","../../src/person/swedish-coordination-number.ts","../../src/organization/duns-number.ts","../../src/organization/organization-validation-utils.ts","../../src/organization/swedish-organization-name.ts","../../src/organization/swedish-organization-number.ts","../../src/organization/eu-vat-number.ts","../../src/organization/lei-code.ts","../../src/organization/organization-extensions.ts","../../src/organization/swedish-organization-identifier.ts","../../src/organization/eu-organization-name.ts","../../src/organization/elf-code.ts","../../src/organization/swedish-cfar-number.ts","../../src/organization/swedish-sni-code.ts"],"names":["SwedishOrganizationType","SwedishOrganizationIdentifierType","MAX_INPUT_LENGTH","SCAN_PATTERN","nameType","COMPANY_NAME_PATTERN"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Hint about the legal form of a Swedish organization. */\nexport enum SwedishOrganizationType {\n Unknown = 0,\n\n Aktiebolag = 1,\n Dodsbo = 2,\n\n HandelsbolagEllerKommanditbolag = 10,\n Handelsbolag = 11,\n Kommanditbolag = 12,\n\n EkonomiskForening = 20,\n Bostadsrattsforening = 21,\n Samfallighetsforening = 22,\n\n IdeellForening = 30,\n Stiftelse = 31,\n\n OffentligSektor = 40,\n Kommun = 41,\n Region = 42,\n Forsamling = 43,\n\n EnkeltBolag = 50,\n Filial = 51,\n Europabolag = 52,\n EuropeiskEkonomiskIntressegruppering = 53,\n SCEForening = 54,\n\n EnskildFirmaEllerPrivatperson = 60,\n EnskildFirma = 61,\n Privatperson = 62,\n\n Other = 99,\n}\n","/** Type of identifier parsed by the unified organization identifier parser. */\nexport enum SwedishOrganizationIdentifierType {\n Unknown = 0,\n\n SwedishOrganizationNumber = 1,\n SwedishPersonalIdentityNumber = 2,\n SwedishCoordinationNumber = 3,\n\n EuVatNumber = 10,\n DunsNumber = 20,\n LeiCode = 30,\n}\n","/**\n * Configurable defaults that control locale-sensitive behaviour across all\n * primitive types. When not explicitly set, values fall back to safe Swedish\n * defaults (the .NET version derives them from `CultureInfo.CurrentCulture`,\n * which has no direct equivalent in standard JavaScript).\n *\n * Set properties at application startup or override per-request as needed.\n */\n\nconst DEFAULT_CULTURE = \"sv-SE\";\nconst DEFAULT_UI_CULTURE = \"sv-SE\";\nconst DEFAULT_COUNTRY = \"SE\";\nconst DEFAULT_CALLING_CODE = \"46\";\n\ninterface PrimitivesDefaultsState {\n culture: string;\n uiCulture: string;\n countryAlpha2Code: string;\n defaultCallingCode: string;\n}\n\nconst state: PrimitivesDefaultsState = {\n culture: DEFAULT_CULTURE,\n uiCulture: DEFAULT_UI_CULTURE,\n countryAlpha2Code: DEFAULT_COUNTRY,\n defaultCallingCode: DEFAULT_CALLING_CODE,\n};\n\n/**\n * Configurable global defaults for locale, UI language, and default country.\n *\n * These mirror the .NET `PrimitivesDefaults` static class. `culture` controls\n * formatting and casing (Swedish-aware character handling for `Å`/`Ä`/`Ö`),\n * `uiCulture` controls display-name language selection (Swedish vs English),\n * and `countryAlpha2Code` is used as the default ISO 3166-1 alpha-2 country\n * when no explicit country is supplied.\n */\nexport const PrimitivesDefaults = {\n /**\n * BCP-47 locale tag used for casing and number formatting.\n * Defaults to `'sv-SE'`.\n */\n get culture(): string {\n return state.culture;\n },\n set culture(value: string) {\n state.culture = value;\n },\n\n /**\n * BCP-47 locale tag used for display-name language selection.\n * Defaults to `'sv-SE'`.\n */\n get uiCulture(): string {\n return state.uiCulture;\n },\n set uiCulture(value: string) {\n state.uiCulture = value;\n },\n\n /**\n * Default ISO 3166-1 alpha-2 country code. Used by types like\n * `PhoneNumber` and `SwedishOrganizationIdentifierParser` when no explicit\n * country is supplied. Defaults to `'SE'`.\n */\n get countryAlpha2Code(): string {\n return state.countryAlpha2Code;\n },\n set countryAlpha2Code(value: string) {\n state.countryAlpha2Code = value;\n },\n\n /**\n * Default phone calling code (digits only, no `+`). Used by {@link PhoneNumber}\n * for inputs without an explicit country prefix. Defaults to `'46'` (Sweden).\n */\n get defaultCallingCode(): string {\n return state.defaultCallingCode;\n },\n set defaultCallingCode(value: string) {\n state.defaultCallingCode = value;\n },\n\n /**\n * `true` when {@link uiCulture} is Swedish (`sv` or `sv-*`).\n * Types use this to select between localized and English display names.\n */\n get useLocalizedDisplayNames(): boolean {\n const lang = state.uiCulture.toLowerCase().split(\"-\")[0];\n return lang === \"sv\";\n },\n\n /** Resets all overrides to the package defaults. */\n reset(): void {\n state.culture = DEFAULT_CULTURE;\n state.uiCulture = DEFAULT_UI_CULTURE;\n state.countryAlpha2Code = DEFAULT_COUNTRY;\n state.defaultCallingCode = DEFAULT_CALLING_CODE;\n },\n};\n","/**\n * Shared input sanitization for text inputs across domain types.\n * Provides invisible-character stripping, whitespace normalization, and common\n * character-filtering helpers (digits-only, alphanumeric-only, collapse whitespace).\n *\n * Real-world inputs (e.g. from CRM/banking systems) commonly contain invisible\n * Unicode characters that break validation while being completely invisible in UIs\n * and logs. The most frequent offender is `U+202A` LEFT-TO-RIGHT EMBEDDING,\n * especially on values originating from RTL-language contexts (Arabic, Hebrew).\n * Other common contaminants include non-breaking spaces from web/PDF copy-paste,\n * null bytes from binary data, stray newlines from multi-line form fields,\n * and typographic (smart/curly) quotes from mobile keyboards and word processors.\n *\n * Equivalent of `Buildi.Primitives.InputSanitization` (internal in .NET).\n * Exposed via `internal/` and not re-exported from the public package entry.\n */\n\nconst FORMAT_OR_NOT_ASSIGNED = /[\\p{Cf}\\p{Cn}]/u;\nconst SPACE_SEPARATOR = /[\\p{Zs}\\p{Zl}\\p{Zp}]/u;\nconst CONTROL = /\\p{Cc}/u;\n\n/**\n * Strips invisible/non-printable characters, normalizes all whitespace variants\n * to ASCII space (`U+0020`), normalizes typographic single quotes to ASCII\n * apostrophe (`'`), and normalizes typographic and guillemet double quotes to\n * ASCII quotation mark (`\"`).\n */\nexport function sanitizeInput(input: string): string {\n let out = \"\";\n for (const c of input) {\n // Smart single quotes -> ASCII apostrophe.\n if (c === \"\\u2018\" || c === \"\\u2019\" || c === \"\\u201A\" || c === \"\\u201B\") {\n out += \"'\";\n continue;\n }\n // Smart and guillemet double quotes -> ASCII quotation mark.\n if (\n c === \"\\u201C\" ||\n c === \"\\u201D\" ||\n c === \"\\u201E\" ||\n c === \"\\u201F\" ||\n c === \"\\u00AB\" ||\n c === \"\\u00BB\"\n ) {\n out += '\"';\n continue;\n }\n\n if (FORMAT_OR_NOT_ASSIGNED.test(c)) {\n // Drop format characters (Cf) and unassigned code points (Cn).\n continue;\n }\n\n if (CONTROL.test(c)) {\n if (c === \"\\t\" || c === \"\\n\" || c === \"\\r\") out += \" \";\n continue;\n }\n\n if (SPACE_SEPARATOR.test(c)) {\n out += \" \";\n continue;\n }\n\n out += c;\n }\n return out;\n}\n\nconst WHITESPACE_RUN = /\\s+/g;\n\n/**\n * Sanitizes the input, trims, and collapses whitespace runs to a single space.\n * Returns an empty string when `input` is `null` or `undefined`.\n */\nexport function collapseWhitespace(input: string | null | undefined): string {\n if (input == null) return \"\";\n return sanitizeInput(input).trim().replace(WHITESPACE_RUN, \" \");\n}\n\n/** Keeps only ASCII digits (`0`-`9`), stripping everything else. */\nexport function keepDigits(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) out += input[i];\n }\n return out;\n}\n\n/**\n * Keeps only ASCII letters and digits, uppercasing letters.\n * Strips whitespace, hyphens, and all other non-alphanumeric characters.\n */\nexport function keepAsciiAlphanumericUppercase(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) out += input[i];\n else if (c >= 0x41 && c <= 0x5a) out += input[i];\n else if (c >= 0x61 && c <= 0x7a) out += String.fromCharCode(c - 32);\n }\n return out;\n}\n","/**\n * Provides the current date/time for date-dependent primitives such as\n * `SwedishPersonalIdentityNumber` (century derivation), `PersonAge`, and\n * coordination numbers.\n *\n * The .NET equivalent is `IBudiTimeProvider`. JS doesn't have an idiomatic\n * \"ambient clock\" abstraction, so date-dependent functions accept an optional\n * `Clock` parameter and fall back to {@link systemClock} when absent.\n */\nexport interface Clock {\n /** Returns the current date/time. */\n now(): Date;\n}\n\n/** A {@link Clock} backed by `new Date()`. */\nexport const systemClock: Clock = {\n now: () => new Date(),\n};\n\n/**\n * Creates a {@link Clock} that always returns the same {@link Date} instance\n * (the date object is cloned on each `now()` call so callers can't mutate it).\n */\nexport function fixedClock(date: Date): Clock {\n const ms = date.getTime();\n return { now: () => new Date(ms) };\n}\n","/**\n * Broad classification of a {@link TextCandidate} for filtering and selective\n * masking.\n */\nexport const TextCandidateCategory = {\n PersonalIdentifier: \"PersonalIdentifier\",\n OrganizationIdentifier: \"OrganizationIdentifier\",\n Financial: \"Financial\",\n Contact: \"Contact\",\n Vehicle: \"Vehicle\",\n Property: \"Property\",\n Product: \"Product\",\n Geography: \"Geography\",\n Measurement: \"Measurement\",\n} as const;\n\nexport type TextCandidateCategory =\n (typeof TextCandidateCategory)[keyof typeof TextCandidateCategory];\n","import { TextCandidateCategory } from \"./text-candidate-category.js\";\nimport { TextMatchConfidence } from \"./text-match-confidence.js\";\n\n/**\n * A potential match of a structured type found in unstructured text.\n *\n * Text scanning is heuristic-based. Candidates may be false positives, and\n * valid occurrences may be missed. No guarantee is made that the matched text\n * actually represents the identified type in its original context.\n */\nexport class TextCandidate<T = unknown> {\n /** Zero-based start position in the scanned text. */\n readonly startIndex: number;\n /** Number of characters in the original matched span. */\n readonly length: number;\n /** The raw substring from the input text that was matched. */\n readonly originalText: string;\n /**\n * Short type name, e.g. `EmailAddress` or `SwedishPersonalIdentityNumber`.\n */\n readonly typeName: string;\n /** Broad category of the matched type. */\n readonly category: TextCandidateCategory;\n /** Machine-comparable canonical form of the matched value. */\n readonly normalizedForm: string;\n /** Human-readable display form of the matched value. */\n readonly formattedForm: string;\n /**\n * Display form with sensitive content masked (e.g. `990807-****`).\n * Produced by the type's `toMaskedString()` helper.\n */\n readonly maskedForm: string;\n /** Heuristic confidence level. */\n readonly confidence: TextMatchConfidence;\n /** The successfully parsed instance of the matched type. */\n readonly value: T;\n\n constructor(opts: {\n startIndex: number;\n length: number;\n originalText: string;\n typeName: string;\n category: TextCandidateCategory;\n normalizedForm: string;\n formattedForm: string;\n maskedForm: string;\n confidence: TextMatchConfidence;\n value: T;\n }) {\n this.startIndex = opts.startIndex;\n this.length = opts.length;\n this.originalText = opts.originalText;\n this.typeName = opts.typeName;\n this.category = opts.category;\n this.normalizedForm = opts.normalizedForm;\n this.formattedForm = opts.formattedForm;\n this.maskedForm = opts.maskedForm;\n this.confidence = opts.confidence;\n this.value = opts.value;\n }\n\n /** Exclusive end position (`startIndex + length`). */\n get endIndex(): number {\n return this.startIndex + this.length;\n }\n\n /** Returns `true` if this candidate's span overlaps with `other`. */\n overlaps(other: TextCandidate): boolean {\n return this.startIndex < other.endIndex && other.startIndex < this.endIndex;\n }\n\n /** Returns `true` if this candidate's span fully contains `other`. */\n contains(other: TextCandidate): boolean {\n return this.startIndex <= other.startIndex && this.endIndex >= other.endIndex;\n }\n}\n","/**\n * Indicates the confidence level of a candidate found by text scanning.\n * Higher confidence means stronger structural evidence, but no level guarantees\n * the absence of false positives.\n */\nexport const TextMatchConfidence = {\n /**\n * Pattern match only. High false-positive risk — the matched text merely\n * fits a syntactic pattern (e.g. a run of digits that happens to be the\n * right length).\n */\n Low: 0,\n /**\n * Structural match with partial validation — the format is correct but no\n * checksum or strong distinguishing feature confirms the match.\n */\n Medium: 1,\n /**\n * Strong match with checksum or format-specific validation (e.g. a personal\n * identity number with a valid Luhn check digit and plausible date, or an\n * IBAN with valid MOD-97).\n */\n High: 2,\n} as const;\n\nexport type TextMatchConfidence = (typeof TextMatchConfidence)[keyof typeof TextMatchConfidence];\n","/**\n * Describes why a value failed validation. Shared across all types that support\n * the `validate` method. Not every reason applies to every type.\n *\n * Maps 1:1 to the .NET `ValidationErrorReason` enum.\n */\nexport const ValidationErrorReason = {\n // --- Common ---\n InputIsEmpty: \"InputIsEmpty\",\n InputTooLong: \"InputTooLong\",\n InputTooShort: \"InputTooShort\",\n InvalidLength: \"InvalidLength\",\n InvalidFormat: \"InvalidFormat\",\n InvalidCharacters: \"InvalidCharacters\",\n InvalidCheckDigit: \"InvalidCheckDigit\",\n\n // --- Banking / clearing ---\n UnknownClearingRange: \"UnknownClearingRange\",\n InvalidSwedbankFormat: \"InvalidSwedbankFormat\",\n InvalidAccountLengthForBank: \"InvalidAccountLengthForBank\",\n InvalidClearingNumber: \"InvalidClearingNumber\",\n\n // --- Identity / organization ---\n InvalidDate: \"InvalidDate\",\n InvalidPrefix: \"InvalidPrefix\",\n InvalidEntityPattern: \"InvalidEntityPattern\",\n\n // --- International / country ---\n UnknownCountryCode: \"UnknownCountryCode\",\n InvalidCountryPrefix: \"InvalidCountryPrefix\",\n InvalidLengthForCountry: \"InvalidLengthForCountry\",\n\n // --- OCR ---\n InvalidLengthDigit: \"InvalidLengthDigit\",\n\n // --- Email ---\n MissingAtSign: \"MissingAtSign\",\n InvalidLocalPart: \"InvalidLocalPart\",\n InvalidDomain: \"InvalidDomain\",\n} as const;\n\nexport type ValidationErrorReason =\n (typeof ValidationErrorReason)[keyof typeof ValidationErrorReason];\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * A single validation problem detected during `validate`, carrying a\n * machine-readable {@link reason} and human-readable descriptions in English\n * and the current locale.\n */\nexport class ValidationIssue {\n readonly reason: ValidationErrorReason;\n readonly englishDescription: string;\n readonly localizedDescription: string;\n\n constructor(\n reason: ValidationErrorReason,\n englishDescription: string,\n localizedDescription: string,\n ) {\n this.reason = reason;\n this.englishDescription = englishDescription;\n this.localizedDescription = localizedDescription;\n }\n\n /**\n * Returns {@link localizedDescription} when\n * {@link PrimitivesDefaults.useLocalizedDisplayNames} is `true`, otherwise\n * {@link englishDescription}.\n */\n get description(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames\n ? this.localizedDescription\n : this.englishDescription;\n }\n}\n","import { ValidationIssue } from \"./validation-issue.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * The outcome of a `validate` call, carrying the original input, a validity\n * flag, and zero or more {@link ValidationIssue} entries that explain why the\n * input is invalid.\n */\nexport class ValidationResult {\n readonly rawInput: string | null;\n readonly isValid: boolean;\n readonly issues: readonly ValidationIssue[];\n\n /** @internal — use `validResult` / `invalidResult` factories. */\n constructor(\n rawInput: string | null | undefined,\n isValid: boolean,\n issues: readonly ValidationIssue[],\n ) {\n this.rawInput = rawInput ?? null;\n this.isValid = isValid;\n this.issues = Object.freeze([...issues]);\n }\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function validResult(rawInput: string | null | undefined): ValidationResult {\n return new ValidationResult(rawInput, true, []);\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function invalidResult(\n rawInput: string | null | undefined,\n reasonOrIssues: ValidationErrorReason | readonly ValidationIssue[],\n englishDescription?: string,\n localizedDescription?: string,\n): ValidationResult {\n if (typeof reasonOrIssues === \"string\") {\n if (englishDescription === undefined || localizedDescription === undefined) {\n throw new Error(\"invalidResult requires both english and localized descriptions\");\n }\n return new ValidationResult(rawInput, false, [\n new ValidationIssue(reasonOrIssues, englishDescription, localizedDescription),\n ]);\n }\n return new ValidationResult(rawInput, false, reasonOrIssues);\n}\n","/**\n * Validates a standard Luhn (mod 10) checksum.\n * Checks the entire string: the last digit is assumed to be the control digit.\n *\n * Equivalent of `Buildi.Primitives.Luhn.IsValid` (internal in .NET).\n */\nexport function luhnIsValid(digits: string): boolean {\n if (!digits) return false;\n\n let sum = 0;\n const len = digits.length;\n for (let i = 0; i < len; i++) {\n const code = digits.charCodeAt(i);\n if (code < 0x30 || code > 0x39) return false;\n let d = code - 0x30;\n if ((len - i) % 2 === 0) {\n d *= 2;\n if (d > 9) d -= 9;\n }\n sum += d;\n }\n return sum % 10 === 0;\n}\n","/**\n * Local parser for Swedish personnummer and samordningsnummer.\n *\n * Replaces the .NET dependency on ActiveLogin.Identity with an in-house\n * implementation that supports the same input shapes:\n *\n * - 12 digits: `199908072391`\n * - 10 digits: `9908072391` (century inferred)\n * - Separator forms: `YYMMDD-NNNC` or `YYYYMMDD-NNNC`. The separator may be\n * `-` (standard) or `+` (used when the person is 100 years or older;\n * only valid when the input was given in 10-digit form).\n *\n * For coordination numbers (`samordningsnummer`) the day-of-month is shifted\n * by 60 (i.e. real day = day - 60), so valid days for coordination numbers\n * are 61-91 (or 60 when day-of-month is unknown).\n */\n\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { Clock, systemClock } from \"../internal/clock.js\";\n\nconst defaultClock: Clock = systemClock;\n\nexport type PinKind = \"personal\" | \"coordination\";\n\nexport interface ParsedPin {\n kind: PinKind;\n /** Full 4-digit year. */\n year: number;\n /** 1-12. */\n month: number;\n /**\n * For personal numbers: 1-31. For coordination numbers: realDay (1-31) or\n * `0` when the day-of-month is unknown (raw day was 60).\n */\n realDay: number;\n /** Three-digit individual number. */\n individual: string;\n /** Single check digit. */\n checkDigit: string;\n /** Whether the input had a `+` separator (indicates 100+ years old at parse time). */\n hadPlusSeparator: boolean;\n}\n\nconst TWELVE = /^(\\d{4})(\\d{2})(\\d{2})(\\d{3})(\\d)$/;\nconst TEN = /^(\\d{2})(\\d{2})(\\d{2})(\\d{3})(\\d)$/;\nconst TEN_WITH_SEP = /^(\\d{2})(\\d{2})(\\d{2})([-+])(\\d{3})(\\d)$/;\nconst TWELVE_WITH_SEP = /^(\\d{4})(\\d{2})(\\d{2})([-+])(\\d{3})(\\d)$/;\n\nexport function parsePin(input: string, clock: Clock = defaultClock): ParsedPin | null {\n if (!input) return null;\n const cleaned = input.trim();\n if (cleaned.length === 0) return null;\n\n let year: number, month: number, day: number;\n let individual: string, check: string;\n let hadPlus = false;\n let isTwelve = false;\n\n let m = TWELVE.exec(cleaned);\n if (m) {\n year = +m[1]!;\n month = +m[2]!;\n day = +m[3]!;\n individual = m[4]!;\n check = m[5]!;\n isTwelve = true;\n } else if ((m = TEN.exec(cleaned))) {\n const yy = +m[1]!;\n year = inferCenturyForTenDigit(yy, false, clock);\n month = +m[2]!;\n day = +m[3]!;\n individual = m[4]!;\n check = m[5]!;\n } else if ((m = TEN_WITH_SEP.exec(cleaned))) {\n const yy = +m[1]!;\n hadPlus = m[4] === \"+\";\n year = inferCenturyForTenDigit(yy, hadPlus, clock);\n month = +m[2]!;\n day = +m[3]!;\n individual = m[5]!;\n check = m[6]!;\n } else if ((m = TWELVE_WITH_SEP.exec(cleaned))) {\n year = +m[1]!;\n month = +m[2]!;\n day = +m[3]!;\n individual = m[5]!;\n check = m[6]!;\n if (m[4] === \"+\") return null;\n } else {\n return null;\n }\n\n if (month < 1 || month > 12) return null;\n\n const isCoordination = day >= 60 && day <= 91;\n let realDay: number;\n let kind: PinKind;\n if (isCoordination) {\n kind = \"coordination\";\n realDay = day === 60 ? 0 : day - 60;\n if (realDay !== 0 && !isValidDay(year, month, realDay)) return null;\n } else {\n kind = \"personal\";\n if (!isValidDay(year, month, day)) return null;\n realDay = day;\n }\n\n const luhnInput =\n String(year % 100).padStart(2, \"0\") +\n String(month).padStart(2, \"0\") +\n String(day).padStart(2, \"0\") +\n individual +\n check;\n if (!luhnIsValid(luhnInput)) return null;\n\n // 12-digit form must use a 4-digit year that matches the inferred century.\n if (isTwelve && (year < 1800 || year > 2200)) return null;\n\n return {\n kind,\n year,\n month,\n realDay,\n individual,\n checkDigit: check,\n hadPlusSeparator: hadPlus,\n };\n}\n\nfunction isValidDay(year: number, month: number, day: number): boolean {\n if (day < 1) return false;\n const dim = daysInMonth(year, month);\n return day <= dim;\n}\n\nfunction daysInMonth(year: number, month: number): number {\n if (month === 2) {\n const leap = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n return leap ? 29 : 28;\n }\n if ([4, 6, 9, 11].includes(month)) return 30;\n return 31;\n}\n\nfunction inferCenturyForTenDigit(yy: number, plusSeparator: boolean, clock: Clock): number {\n const now = clock.now();\n const currentYear = now.getUTCFullYear();\n const currentCentury = Math.floor(currentYear / 100);\n const candidate = currentCentury * 100 + yy;\n let year = candidate;\n if (year > currentYear) year -= 100;\n if (plusSeparator) year -= 100;\n return year;\n}\n\n/** Build the canonical 12-digit form. */\nexport function pinTo12Digit(p: ParsedPin): string {\n const day = p.kind === \"coordination\" ? (p.realDay === 0 ? 60 : p.realDay + 60) : p.realDay;\n return (\n String(p.year).padStart(4, \"0\") +\n String(p.month).padStart(2, \"0\") +\n String(day).padStart(2, \"0\") +\n p.individual +\n p.checkDigit\n );\n}\n\n/** Build the canonical 10-digit display form (`YYMMDD-NNNC` or `YYMMDD+NNNC`). */\nexport function pinTo10Digit(p: ParsedPin, clock: Clock = defaultClock): string {\n const day = p.kind === \"coordination\" ? (p.realDay === 0 ? 60 : p.realDay + 60) : p.realDay;\n const yy = String(p.year % 100).padStart(2, \"0\");\n const sep = ageInYears(p, clock) >= 100 ? \"+\" : \"-\";\n return (\n yy +\n String(p.month).padStart(2, \"0\") +\n String(day).padStart(2, \"0\") +\n sep +\n p.individual +\n p.checkDigit\n );\n}\n\nfunction ageInYears(p: ParsedPin, clock: Clock): number {\n if (p.kind === \"coordination\" && p.realDay === 0) return 0;\n const now = clock.now();\n const day = p.kind === \"coordination\" ? p.realDay : p.realDay;\n const birth = new Date(Date.UTC(p.year, p.month - 1, day || 1));\n const ms = now.getTime() - birth.getTime();\n return Math.floor(ms / (365.25 * 24 * 3600 * 1000));\n}\n\n/** Estimate gender. The third digit of the individual portion is even for female, odd for male. */\nexport function pinGender(p: ParsedPin): \"female\" | \"male\" {\n const d = parseInt(p.individual.charAt(p.individual.length - 1), 10);\n return d % 2 === 0 ? \"female\" : \"male\";\n}\n\n/** Best-effort date of birth (`null` if coordination day is unknown). */\nexport function pinDateOfBirth(p: ParsedPin): Date | null {\n if (p.kind === \"coordination\" && p.realDay === 0) return null;\n return new Date(Date.UTC(p.year, p.month - 1, p.realDay));\n}\n\n/** Age in whole years (`null` if coordination day is unknown). */\nexport function pinAgeInYears(p: ParsedPin, clock: Clock = defaultClock): number | null {\n if (p.kind === \"coordination\" && p.realDay === 0) return null;\n return ageInYears(p, clock);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Clock, systemClock } from \"../internal/clock.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport {\n ParsedPin,\n parsePin,\n pinAgeInYears,\n pinDateOfBirth,\n pinGender,\n pinTo10Digit,\n pinTo12Digit,\n} from \"./personnummer-parser.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst SCAN_PATTERN = /(?<!\\d)(\\d{6,8})([-+])(\\d{4})(?!\\d)/g;\n\n/** A Swedish Personal Identity Number (`personnummer`). */\nexport class SwedishPersonalIdentityNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Personal Identity Number\",\n localizedName: \"Personnummer\",\n emoji: \"\\u{1FAAA}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/personnummer.4.3810a01c150939e893f18c29.html\",\n \"https://sv.wikipedia.org/wiki/Personnummer_i_Sverige\",\n \"https://en.wikipedia.org/wiki/Luhn_algorithm\",\n ]),\n });\n\n readonly _pin: ParsedPin;\n readonly _clock: Clock;\n\n private constructor(pin: ParsedPin, clock: Clock) {\n this._pin = pin;\n this._clock = clock;\n }\n\n get formatted(): string {\n return pinTo10Digit(this._pin, this._clock);\n }\n get value(): string {\n return pinTo12Digit(this._pin);\n }\n get dateOfBirthHint(): Date {\n const d = pinDateOfBirth(this._pin);\n if (d === null) throw new Error(\"Date of birth is unknown.\");\n return d;\n }\n get ageHint(): number {\n const a = pinAgeInYears(this._pin, this._clock);\n if (a === null) throw new Error(\"Age is unknown.\");\n return a;\n }\n get genderHint(): \"female\" | \"male\" {\n return pinGender(this._pin);\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { clock?: Clock },\n ): SwedishPersonalIdentityNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n const clock = options?.clock ?? systemClock;\n const pin = parsePin(sanitized, clock);\n if (pin === null) return null;\n if (pin.kind !== \"personal\") return null;\n return new SwedishPersonalIdentityNumber(pin, clock);\n }\n\n static parse(input: string, options?: { clock?: Clock }): SwedishPersonalIdentityNumber {\n const r = SwedishPersonalIdentityNumber.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid Swedish personal identity number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishPersonalIdentityNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishPersonalIdentityNumber.tryParse(input, options);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishPersonalIdentityNumber.tryParse(input, options);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishPersonalIdentityNumber.normalize(input) === input;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n const pin = parsePin(sanitized);\n if (pin === null || pin.kind !== \"personal\") {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"Invalid personal identity number format.\",\n \"Ogiltigt format för personnummer.\",\n );\n }\n return validResult(input);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n\n to10DigitString(): string {\n return this.formatted;\n }\n to12DigitString(): string {\n return this.value;\n }\n\n static findCandidatesInText(\n text: string,\n ): readonly TextCandidate<SwedishPersonalIdentityNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishPersonalIdentityNumber>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const pin = SwedishPersonalIdentityNumber.tryParse(m[0]);\n if (!pin) continue;\n out.push(\n new TextCandidate<SwedishPersonalIdentityNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishPersonalIdentityNumber\",\n category: TextCandidateCategory.PersonalIdentifier,\n normalizedForm: pin.toNormalizedString(),\n formattedForm: pin.toString(),\n maskedForm: maskPersonalIdentityNumber(pin),\n confidence: TextMatchConfidence.High,\n value: pin,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishPersonalIdentityNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishPersonalIdentityNumber | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\n/** Mask a personal identity number, e.g. `990807-2391` -> `990807-****`. */\nexport function maskPersonalIdentityNumber(\n p: SwedishPersonalIdentityNumber,\n options?: { maskBirthDate?: boolean },\n): string {\n const f = p.formatted;\n if (options?.maskBirthDate) return \"******-****\";\n return f.slice(0, f.length - 4) + \"****\";\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Clock, systemClock } from \"../internal/clock.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport {\n ParsedPin,\n parsePin,\n pinAgeInYears,\n pinDateOfBirth,\n pinGender,\n pinTo10Digit,\n pinTo12Digit,\n} from \"./personnummer-parser.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst SCAN_PATTERN = /(?<!\\d)(\\d{6,8})([-+])(\\d{4})(?!\\d)/g;\n\n/** A Swedish Coordination Number (`samordningsnummer`). */\nexport class SwedishCoordinationNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Coordination Number\",\n localizedName: \"Samordningsnummer\",\n emoji: \"\\u{1F194}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/samordningsnummer.4.5c281c7015abecc2e201130b.html\",\n \"https://sv.wikipedia.org/wiki/Samordningsnummer\",\n ]),\n });\n\n readonly _pin: ParsedPin;\n readonly _clock: Clock;\n\n private constructor(pin: ParsedPin, clock: Clock) {\n this._pin = pin;\n this._clock = clock;\n }\n\n get formatted(): string {\n return pinTo10Digit(this._pin, this._clock);\n }\n get value(): string {\n return pinTo12Digit(this._pin);\n }\n get realDay(): number {\n return this._pin.realDay;\n }\n get dateOfBirthHint(): Date | null {\n return pinDateOfBirth(this._pin);\n }\n get ageHint(): number | null {\n return pinAgeInYears(this._pin, this._clock);\n }\n get genderHint(): \"female\" | \"male\" {\n return pinGender(this._pin);\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { clock?: Clock },\n ): SwedishCoordinationNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n const clock = options?.clock ?? systemClock;\n const pin = parsePin(sanitized, clock);\n if (pin === null) return null;\n if (pin.kind !== \"coordination\") return null;\n return new SwedishCoordinationNumber(pin, clock);\n }\n\n static parse(input: string, options?: { clock?: Clock }): SwedishCoordinationNumber {\n const r = SwedishCoordinationNumber.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid Swedish coordination number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishCoordinationNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishCoordinationNumber.tryParse(input, options);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishCoordinationNumber.tryParse(input, options);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishCoordinationNumber.normalize(input) === input;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n const pin = parsePin(sanitized);\n if (pin === null || pin.kind !== \"coordination\") {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"Invalid coordination number format.\",\n \"Ogiltigt format för samordningsnummer.\",\n );\n }\n return validResult(input);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n to10DigitString(): string {\n return this.formatted;\n }\n to12DigitString(): string {\n return this.value;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishCoordinationNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishCoordinationNumber>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const cn = SwedishCoordinationNumber.tryParse(m[0]);\n if (!cn) continue;\n out.push(\n new TextCandidate<SwedishCoordinationNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishCoordinationNumber\",\n category: TextCandidateCategory.PersonalIdentifier,\n normalizedForm: cn.toNormalizedString(),\n formattedForm: cn.toString(),\n maskedForm: maskCoordinationNumber(cn),\n confidence: TextMatchConfidence.High,\n value: cn,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishCoordinationNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishCoordinationNumber | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\n/** Mask a coordination number, e.g. `680164-2395` -> `680164-****`. */\nexport function maskCoordinationNumber(\n c: SwedishCoordinationNumber,\n options?: { maskBirthDate?: boolean },\n): string {\n const f = c.formatted;\n if (options?.maskBirthDate) return \"******-****\";\n return f.slice(0, f.length - 4) + \"****\";\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\n/** A 9-digit D-U-N-S number. */\nexport class DunsNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"D-U-N-S Number\",\n localizedName: \"D-U-N-S-nummer\",\n emoji: \"\\u{1F522}\",\n sources: Object.freeze([\n \"https://www.dnb.com/duns.html\",\n \"https://en.wikipedia.org/wiki/Data_Universal_Numbering_System\",\n ]),\n });\n\n readonly digits: string;\n private constructor(digits: string) {\n this.digits = digits;\n }\n\n static tryParse(input: string | null | undefined): DunsNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH || digits.length !== 9) return null;\n return new DunsNumber(digits);\n }\n\n static parse(input: string): DunsNumber {\n const r = DunsNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid D-U-N-S number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return DunsNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = DunsNumber.tryParse(input);\n if (r) return r.digits;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return DunsNumber.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && DunsNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.digits;\n }\n toString(): string {\n return this.digits;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<DunsNumber>[] {\n if (!text) return [];\n const out: TextCandidate<DunsNumber>[] = [];\n const re = /(?<!\\d)\\d{9}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = DunsNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<DunsNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"DunsNumber\",\n category: TextCandidateCategory.OrganizationIdentifier,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskDunsNumber(r),\n confidence: TextMatchConfidence.Low,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: DunsNumber | null | undefined): boolean {\n return other != null && this.digits === other.digits;\n }\n compareTo(other: DunsNumber | null | undefined): number {\n if (other == null) return 1;\n return this.digits < other.digits ? -1 : this.digits > other.digits ? 1 : 0;\n }\n}\n\n/** Masks all digits of a D-U-N-S number. */\nexport function maskDunsNumber(d: DunsNumber): string {\n return \"*\".repeat(d.digits.length);\n}\n","/**\n * Shared helpers for organization-number / VAT validation. Internal to the\n * `organization/` namespace.\n */\n\n/** Validates ISO 17442 / ISO 7064 Mod-97 checksum (used by LEI and IBAN). */\nexport function isValidIso7064Mod97(input: string): boolean {\n if (!input) return false;\n let s = \"\";\n for (const c of input) {\n if (c >= \"0\" && c <= \"9\") s += c;\n else if (c >= \"A\" && c <= \"Z\") s += String(c.charCodeAt(0) - 55);\n else if (c >= \"a\" && c <= \"z\") s += String(c.charCodeAt(0) - 87);\n else return false;\n }\n // Compute s % 97 using running modulo to avoid BigInt overhead.\n let mod = 0;\n for (let i = 0; i < s.length; i++) {\n mod = (mod * 10 + (s.charCodeAt(i) - 0x30)) % 97;\n }\n return mod === 1;\n}\n\n/** Removes spaces, dashes and non-breaking spaces. */\nexport function cleanSeparators(input: string): string {\n if (!input) return \"\";\n let out = \"\";\n for (const c of input) {\n if (c !== \" \" && c !== \"-\" && c !== \"\\u00A0\") out += c;\n }\n return out;\n}\n\n/** Trims and uppercases, removing a trailing `(PUBL)` suffix. */\nexport function cleanName(name: string | null | undefined): string {\n if (name == null || name.trim() === \"\") return \"\";\n let s = name.trim().toUpperCase();\n if (s.endsWith(\"(PUBL)\")) s = s.slice(0, -6).trim();\n return s;\n}\n\nexport function nameContains(haystack: string, ...needles: readonly string[]): boolean {\n if (!haystack) return false;\n for (const n of needles) if (haystack.indexOf(n) >= 0) return true;\n return false;\n}\n\nexport function nameContainsStandalone(haystack: string, ...needles: readonly string[]): boolean {\n if (!haystack) return false;\n for (const n of needles) {\n if (haystack === n) return true;\n if (haystack.startsWith(n + \" \")) return true;\n if (haystack.endsWith(\" \" + n)) return true;\n if (haystack.indexOf(\" \" + n + \" \") >= 0) return true;\n }\n return false;\n}\n\nexport function nameEndsWith(haystack: string, ...needles: readonly string[]): boolean {\n if (!haystack) return false;\n for (const n of needles) if (haystack.endsWith(n)) return true;\n return false;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\nimport { nameContains, nameContainsStandalone } from \"./organization-validation-utils.js\";\nimport { SwedishOrganizationType } from \"./swedish-organization-type.js\";\n\nconst MAX_INPUT_LENGTH = 300;\n\n/** Pattern matching strict Swedish company-name characters (Bolagsverket). */\nconst COMPANY_NAME_PATTERN = /^[\\p{L}\\d\\s\\-'&.,/:()+]+$/u;\n\nconst ORG_SUFFIX_TOKENS: readonly string[] = [\"AB\", \"HB\", \"KB\", \"BRF\", \"HSB\", \"EF\"];\nconst ORG_SUFFIX_PHRASES: readonly string[] = [\n \" EK.FÖR.\",\n \" EK FÖR\",\n \" EKONOMISK FÖRENING\",\n \" IDEELL FÖRENING\",\n \" SAMFÄLLIGHETSFÖRENING\",\n \" RIKSFÖRBUND\",\n];\nconst ORG_PREFIXES: readonly string[] = [\"STIFTELSEN \", \"BRF \", \"HSB \"];\nconst ORG_KEYWORDS: readonly string[] = [\n \" KOMMUN\",\n \" REGION\",\n \" LANDSTING\",\n \" MYNDIGHET\",\n \" STIFTELSE\",\n \" FÖRENING\",\n];\n\nconst KNOWN_ABBREVIATIONS = new Set([\"AB\", \"HB\", \"KB\", \"BRF\", \"HSB\", \"EF\"]);\n\nconst KNOWN_GOVERNMENT_AGENCIES: ReadonlySet<string> = new Set([\n \"SKATTEVERKET\",\n \"TULLVERKET\",\n \"KRONOFOGDEN\",\n \"STATISTISKA CENTRALBYRÅN\",\n \"KRIMINALVÅRDEN\",\n \"MIGRATIONSVERKET\",\n \"DOMSTOLSVERKET\",\n \"BROTTSFÖREBYGGANDE RÅDET\",\n \"FÖRSÄKRINGSKASSAN\",\n \"SOCIALSTYRELSEN\",\n \"SKOLVERKET\",\n \"CENTRALA STUDIESTÖDSNÄMNDEN\",\n \"UNIVERSITETS- OCH HÖGSKOLERÅDET\",\n \"BOLAGSVERKET\",\n \"TRAFIKVERKET\",\n \"TRANSPORTSTYRELSEN\",\n \"TILLVÄXTVERKET\",\n \"PATENT- OCH REGISTRERINGSVERKET\",\n \"ARBETSFÖRMEDLINGEN\",\n \"ARBETSMILJÖVERKET\",\n \"NATURVÅRDSVERKET\",\n \"FÖRSVARSMAKTEN\",\n \"POST- OCH TELESTYRELSEN\",\n \"SJÖFARTSVERKET\",\n \"RIKSBANKEN\",\n \"RIKSREVISIONEN\",\n \"RIKSGÄLDEN\",\n \"RIKSGÄLDSKONTORET\",\n \"EKONOMISTYRNINGSVERKET\",\n \"JORDBRUKSVERKET\",\n \"LIVSMEDELSVERKET\",\n \"LANTMÄTERIET\",\n \"BOVERKET\",\n \"KONSUMENTVERKET\",\n \"RIKSARKIVET\",\n \"KUNGLIGA BIBLIOTEKET\",\n \"KEMIKALIEINSPEKTIONEN\",\n \"INTEGRITETSSKYDDSMYNDIGHETEN\",\n \"ELSÄKERHETSVERKET\",\n \"HAVS- OCH VATTENMYNDIGHETEN\",\n \"SKOGSSTYRELSEN\",\n \"VALMYNDIGHETEN\",\n \"LÄNSSTYRELSEN\",\n \"DATAINSPEKTIONEN\",\n \"KONKURRENSVERKET\",\n \"UPPHANDLINGSMYNDIGHETEN\",\n]);\n\n/** A Swedish organization name (`organisationsnamn` / `företagsnamn`). */\nexport class SwedishOrganizationName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Organization Name\",\n localizedName: \"Organisationsnamn\",\n emoji: \"\\u{1F3F7}\\uFE0F\",\n sources: Object.freeze([\"https://bolagsverket.se\"]),\n });\n\n readonly value: string;\n readonly casingNormalizedValue: string;\n readonly hasOrganizationIndicators: boolean;\n readonly inferredSwedishOrganizationType: SwedishOrganizationType;\n\n private constructor(\n value: string,\n casingNormalized: string,\n hasIndicators: boolean,\n inferredType: SwedishOrganizationType,\n ) {\n this.value = value;\n this.casingNormalizedValue = casingNormalized;\n this.hasOrganizationIndicators = hasIndicators;\n this.inferredSwedishOrganizationType = inferredType;\n }\n\n static tryParse(input: string | null | undefined): SwedishOrganizationName | null {\n const normalized = collapseWhitespace(input);\n if (normalized.length === 0 || normalized.length > MAX_INPUT_LENGTH) return null;\n if (!validateName(normalized)) return null;\n\n const forInference = stripPublSuffix(normalized);\n const hasIndicators = detectOrganizationIndicators(forInference);\n const inferred = inferTypeFromName(forInference);\n const casing = SwedishOrganizationName.normalizeCasing(normalized);\n return new SwedishOrganizationName(normalized, casing, hasIndicators, inferred);\n }\n\n static parse(input: string): SwedishOrganizationName {\n const r = SwedishOrganizationName.tryParse(input);\n if (r === null) throw new Error(\"Invalid organization name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishOrganizationName.tryParse(input) !== null;\n }\n\n static isKnownGovernmentAgency(name: string | null | undefined): boolean {\n if (name == null || name.trim() === \"\") return false;\n return KNOWN_GOVERNMENT_AGENCIES.has(collapseWhitespace(name).toUpperCase());\n }\n\n static inferSwedishOrganizationType(name: string | null | undefined): SwedishOrganizationType {\n if (name == null || name.trim() === \"\") return SwedishOrganizationType.Unknown;\n return inferTypeFromName(stripPublSuffix(collapseWhitespace(name)));\n }\n\n static normalizeCasing(name: string): string {\n const letters = [...name].filter((c) => /\\p{L}/u.test(c));\n if (letters.length === 0) return name;\n const allLower = letters.every((c) => c === c.toLowerCase());\n const allUpper = letters.every((c) => c === c.toUpperCase());\n if (!allLower && !allUpper) return name;\n\n return name\n .split(\" \")\n .map((w) => (KNOWN_ABBREVIATIONS.has(w.toUpperCase()) ? w.toUpperCase() : capitalizeWord(w)))\n .join(\" \");\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOrganizationName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishOrganizationName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishOrganizationName.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: SwedishOrganizationName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishOrganizationName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction stripPublSuffix(name: string): string {\n const trimmed = name.trimEnd();\n if (trimmed.toUpperCase().endsWith(\"(PUBL)\")) return trimmed.slice(0, -6).trimEnd();\n return name;\n}\n\nfunction validateName(value: string): boolean {\n if (value.length < 2 || value.length > 200) return false;\n for (const c of value) {\n const code = c.charCodeAt(0);\n if (code < 0x20 || code === 0x7f) return false;\n }\n return COMPANY_NAME_PATTERN.test(value);\n}\n\nfunction detectOrganizationIndicators(collapsed: string): boolean {\n const upper = collapsed.toUpperCase();\n if (!upper) return false;\n const words = upper.split(\" \");\n if (words.length > 0 && ORG_SUFFIX_TOKENS.includes(words[words.length - 1]!)) return true;\n for (const p of ORG_SUFFIX_PHRASES) if (upper.endsWith(p)) return true;\n for (const p of ORG_PREFIXES) if (upper.startsWith(p)) return true;\n for (const k of ORG_KEYWORDS) if (upper.indexOf(k) >= 0) return true;\n if (KNOWN_GOVERNMENT_AGENCIES.has(upper)) return true;\n return false;\n}\n\nfunction inferTypeFromName(collapsed: string): SwedishOrganizationType {\n const upper = collapsed.toUpperCase();\n if (!upper) return SwedishOrganizationType.Unknown;\n\n const words = upper.split(\" \");\n const lastWord = words.length > 0 ? words[words.length - 1]! : \"\";\n\n if (lastWord === \"AB\") return SwedishOrganizationType.Aktiebolag;\n if (lastWord === \"KB\" || nameContains(upper, \"KOMMANDITBOLAG\"))\n return SwedishOrganizationType.Kommanditbolag;\n if (lastWord === \"HB\" || nameContains(upper, \"HANDELSBOLAG\"))\n return SwedishOrganizationType.Handelsbolag;\n\n if (\n nameContainsStandalone(upper, \"BRF\") ||\n nameContains(upper, \"BOSTADSRÄTTSFÖRENING\", \"BOSTADSRATTSFORENING\")\n )\n return SwedishOrganizationType.Bostadsrattsforening;\n\n if (\n nameContains(\n upper,\n \"SAMFÄLLIGHETSFÖRENING\",\n \"SAMFALLIGHETSFORENING\",\n \"SAMFALLIGHETSSFORENING\",\n \"SAMFÄLLIGHET\",\n \"SAMFALLIGHET\",\n )\n )\n return SwedishOrganizationType.Samfallighetsforening;\n\n if (lastWord === \"HSB\" || upper.startsWith(\"HSB \"))\n return SwedishOrganizationType.EkonomiskForening;\n\n if (\n upper.endsWith(\" EK.FÖR.\") ||\n upper.endsWith(\" EK FÖR\") ||\n nameContains(upper, \"EKONOMISK FÖRENING\")\n )\n return SwedishOrganizationType.EkonomiskForening;\n\n if (nameContains(upper, \"IDEELL FÖRENING\")) return SwedishOrganizationType.IdeellForening;\n\n if (upper.startsWith(\"STIFTELSEN \") || nameContains(upper, \"STIFTELSE\"))\n return SwedishOrganizationType.Stiftelse;\n\n if (nameContains(upper, \"KOMMUN\")) return SwedishOrganizationType.Kommun;\n if (nameContains(upper, \"REGION\", \"LANDSTING\")) return SwedishOrganizationType.Region;\n if (nameContains(upper, \"FÖRSAMLING\", \"FORSAMLING\")) return SwedishOrganizationType.Forsamling;\n if (nameContains(upper, \"MYNDIGHET\")) return SwedishOrganizationType.OffentligSektor;\n if (KNOWN_GOVERNMENT_AGENCIES.has(upper)) return SwedishOrganizationType.OffentligSektor;\n if (nameContains(upper, \"DÖDSBO\", \"DODSBO\")) return SwedishOrganizationType.Dodsbo;\n\n if (lastWord === \"EF\" || nameContains(upper, \"ENSKILD FIRMA\"))\n return SwedishOrganizationType.EnskildFirma;\n if (nameContains(upper, \"PRIVATPERSON\")) return SwedishOrganizationType.Privatperson;\n\n if (nameContainsStandalone(upper, \"EUROPABOLAG\", \"SE-BOLAG\"))\n return SwedishOrganizationType.Europabolag;\n if (nameContainsStandalone(upper, \"EUROPEISK EKONOMISK INTRESSEGRUPPERING\", \"EEIG\"))\n return SwedishOrganizationType.EuropeiskEkonomiskIntressegruppering;\n if (nameContainsStandalone(upper, \"SCE\") || nameContains(upper, \"EUROPEISK KOOPERATIV FÖRENING\"))\n return SwedishOrganizationType.SCEForening;\n if (nameContainsStandalone(upper, \"FILIAL\")) return SwedishOrganizationType.Filial;\n\n if (nameContains(upper, \"RIKSFÖRBUND\", \"FÖRENING\")) return SwedishOrganizationType.IdeellForening;\n\n return SwedishOrganizationType.Unknown;\n}\n\n/** Mask an organization name, keeping only the first letter of each word, e.g. `Volvo AB` -> `V**** A*`. */\nexport function maskSwedishOrganizationName(value: SwedishOrganizationName): string {\n return value.value\n .split(\" \")\n .filter((part) => part.length > 0)\n .map((part) => (part.length <= 1 ? \"*\" : part[0]! + \"*\".repeat(part.length - 1)))\n .join(\" \");\n}\n\nfunction capitalizeWord(word: string): string {\n if (!word) return word;\n const lowered = word.toLocaleLowerCase(\"sv-SE\");\n return lowered[0]!.toLocaleUpperCase(\"sv-SE\") + lowered.slice(1);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport { SwedishPersonalIdentityNumber } from \"../person/swedish-personal-identity-number.js\";\nimport { SwedishCoordinationNumber } from \"../person/swedish-coordination-number.js\";\nimport { SwedishOrganizationName } from \"./swedish-organization-name.js\";\nimport { SwedishOrganizationType } from \"./swedish-organization-type.js\";\n\nconst MAX_INPUT_LENGTH = 30;\nconst LEGAL_ENTITY_PREFIX = \"16\";\n\nexport interface SwedishOrganizationTypeHintResult {\n readonly certain: SwedishOrganizationType;\n readonly bestGuess: SwedishOrganizationType;\n}\n\n/** A Swedish organization number (`organisationsnummer`). */\nexport class SwedishOrganizationNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Organization Number\",\n localizedName: \"Organisationsnummer\",\n emoji: \"\\u{1F3E2}\",\n sources: Object.freeze([\n \"https://bolagsverket.se\",\n \"https://skatteverket.se/foretag/drivaforetag/startaforetag/organisationsnummer.html\",\n \"https://sv.wikipedia.org/wiki/Organisationsnummer\",\n ]),\n });\n\n readonly _tenWithDash: string;\n readonly _twelveDigits: string;\n readonly _isPerson: boolean;\n\n get isPerson(): boolean {\n return this._isPerson;\n }\n\n private constructor(tenWithDash: string, twelveDigits: string, isPerson: boolean) {\n this._tenWithDash = tenWithDash;\n this._twelveDigits = twelveDigits;\n this._isPerson = isPerson;\n }\n\n static tryParse(input: string | null | undefined): SwedishOrganizationNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) return null;\n\n const pin = SwedishPersonalIdentityNumber.tryParse(sanitized);\n if (pin) {\n return new SwedishOrganizationNumber(pin.formatted, pin.value, true);\n }\n const cn = SwedishCoordinationNumber.tryParse(sanitized);\n if (cn) {\n return new SwedishOrganizationNumber(cn.formatted, cn.value, true);\n }\n\n const digits = keepDigits(sanitized);\n if (digits.length === 0) return null;\n\n let tenDigits: string;\n if (digits.length === 10) tenDigits = digits;\n else if (digits.length === 12 && digits.startsWith(LEGAL_ENTITY_PREFIX))\n tenDigits = digits.slice(2);\n else return null;\n\n if (!isLegalEntityPattern(tenDigits)) return null;\n if (!luhnIsValid(tenDigits)) return null;\n\n const tenWithDash = `${tenDigits.slice(0, 6)}-${tenDigits.slice(6)}`;\n const twelve = LEGAL_ENTITY_PREFIX + tenDigits;\n return new SwedishOrganizationNumber(tenWithDash, twelve, false);\n }\n\n static parse(input: string): SwedishOrganizationNumber {\n const r = SwedishOrganizationNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swedish organization number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishOrganizationNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOrganizationNumber.tryParse(input);\n if (r) return r.to10DigitString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOrganizationNumber.tryParse(input);\n if (r) return r.to12DigitString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishOrganizationNumber.normalize(input) === input;\n }\n\n to10DigitsOnly(): string {\n return this._tenWithDash.replace(/[-+]/g, \"\");\n }\n to10DigitString(): string {\n return this._tenWithDash;\n }\n to12DigitString(): string {\n return this._twelveDigits;\n }\n toNormalizedString(): string {\n return this.to12DigitString();\n }\n toString(): string {\n return this.to10DigitString();\n }\n\n getSwedishOrganizationTypeHint(\n name?: string | null,\n isPrivatePerson?: boolean | null,\n ): SwedishOrganizationTypeHintResult {\n let certain: SwedishOrganizationType;\n let bestGuess: SwedishOrganizationType;\n\n if (this._isPerson) {\n certain = SwedishOrganizationType.EnskildFirmaEllerPrivatperson;\n if (isPrivatePerson === true) bestGuess = SwedishOrganizationType.Privatperson;\n else if (isPrivatePerson === false) bestGuess = SwedishOrganizationType.EnskildFirma;\n else {\n const nameType = SwedishOrganizationName.inferSwedishOrganizationType(name ?? null);\n bestGuess =\n nameType === SwedishOrganizationType.EnskildFirma ||\n nameType === SwedishOrganizationType.Privatperson\n ? nameType\n : certain;\n }\n return { certain, bestGuess };\n }\n\n const first = this.to10DigitsOnly()[0]!;\n const nameType = SwedishOrganizationName.inferSwedishOrganizationType(name ?? null);\n\n switch (first) {\n case \"1\":\n certain = SwedishOrganizationType.Dodsbo;\n bestGuess = certain;\n break;\n case \"2\":\n certain = SwedishOrganizationType.OffentligSektor;\n bestGuess =\n nameType === SwedishOrganizationType.Kommun ||\n nameType === SwedishOrganizationType.Region ||\n nameType === SwedishOrganizationType.Forsamling\n ? nameType\n : certain;\n break;\n case \"5\":\n certain = SwedishOrganizationType.Aktiebolag;\n bestGuess = nameType === SwedishOrganizationType.Kommanditbolag ? nameType : certain;\n break;\n case \"6\":\n certain = SwedishOrganizationType.HandelsbolagEllerKommanditbolag;\n bestGuess =\n nameType === SwedishOrganizationType.Kommanditbolag ||\n nameType === SwedishOrganizationType.Handelsbolag\n ? nameType\n : certain;\n break;\n case \"7\":\n certain = SwedishOrganizationType.EkonomiskForening;\n bestGuess =\n nameType === SwedishOrganizationType.Bostadsrattsforening ||\n nameType === SwedishOrganizationType.Samfallighetsforening\n ? nameType\n : certain;\n break;\n case \"8\":\n certain = SwedishOrganizationType.IdeellForening;\n bestGuess = nameType === SwedishOrganizationType.Stiftelse ? nameType : certain;\n break;\n case \"9\":\n certain = SwedishOrganizationType.HandelsbolagEllerKommanditbolag;\n bestGuess =\n nameType === SwedishOrganizationType.Kommanditbolag ||\n nameType === SwedishOrganizationType.Handelsbolag\n ? nameType\n : certain;\n break;\n default:\n certain = SwedishOrganizationType.Other;\n bestGuess =\n nameType === SwedishOrganizationType.EuropeiskEkonomiskIntressegruppering ||\n nameType === SwedishOrganizationType.Europabolag ||\n nameType === SwedishOrganizationType.SCEForening ||\n nameType === SwedishOrganizationType.Filial\n ? nameType\n : certain;\n break;\n }\n return { certain, bestGuess };\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n if (SwedishPersonalIdentityNumber.tryParse(sanitized)) return validResult(input);\n if (SwedishCoordinationNumber.tryParse(sanitized)) return validResult(input);\n\n const digits = keepDigits(sanitized);\n if (digits.length === 0) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"Input contains no digits.\",\n \"Värdet innehåller inga siffror.\",\n );\n }\n if (\n !(digits.length === 10 || (digits.length === 12 && digits.startsWith(LEGAL_ENTITY_PREFIX)))\n ) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Organization number must be 10 or 12 digits (12-digit form must start with 16).\",\n \"Organisationsnummer måste vara 10 eller 12 siffror (12-siffrig form måste börja med 16).\",\n );\n }\n const tenDigits = digits.length === 12 ? digits.slice(2) : digits;\n if (!isLegalEntityPattern(tenDigits)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidEntityPattern,\n \"Number does not match a valid organization type pattern.\",\n \"Numret matchar inte ett giltigt organisationstypsmönster.\",\n );\n }\n if (!luhnIsValid(tenDigits)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid check digit.\",\n \"Ogiltig kontrollsiffra.\",\n );\n }\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishOrganizationNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishOrganizationNumber>[] = [];\n const re = /(?<!\\d)(\\d{6})-?(\\d{4})(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishOrganizationNumber.tryParse(m[0]);\n if (!r || r.isPerson) continue;\n out.push(\n new TextCandidate<SwedishOrganizationNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishOrganizationNumber\",\n category: TextCandidateCategory.OrganizationIdentifier,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishOrganizationNumber(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishOrganizationNumber | null | undefined): boolean {\n return other != null && this._twelveDigits === other._twelveDigits;\n }\n compareTo(other: SwedishOrganizationNumber | null | undefined): number {\n if (other == null) return 1;\n return this._twelveDigits < other._twelveDigits\n ? -1\n : this._twelveDigits > other._twelveDigits\n ? 1\n : 0;\n }\n}\n\nfunction isLegalEntityPattern(tenDigits: string): boolean {\n if (tenDigits.length !== 10) return false;\n if (tenDigits[0] === \"1\") return true;\n const first = tenDigits[0]!;\n if (\n first !== \"2\" &&\n first !== \"3\" &&\n first !== \"5\" &&\n first !== \"6\" &&\n first !== \"7\" &&\n first !== \"8\" &&\n first !== \"9\"\n )\n return false;\n const m1 = tenDigits.charCodeAt(2) - 0x30;\n const m2 = tenDigits.charCodeAt(3) - 0x30;\n const mm = m1 * 10 + m2;\n return mm >= 20;\n}\n\n/**\n * Masks person-based Swedish organization identifiers by default.\n * Public legal-entity organization numbers are returned unmasked unless\n * `maskOrganizationNumbers` is set.\n */\nexport function maskSwedishOrganizationNumber(\n o: SwedishOrganizationNumber,\n options?: { maskOrganizationNumbers?: boolean; maskBirthDate?: boolean },\n): string {\n const s = o.to10DigitString();\n if (o.isPerson) {\n const sep = s[6]!;\n if (options?.maskBirthDate) return \"******\" + sep + \"****\";\n return s.slice(0, 6) + sep + \"****\";\n }\n if (options?.maskOrganizationNumbers) return s.slice(0, 7) + \"****\";\n return s;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport { cleanSeparators } from \"./organization-validation-utils.js\";\nimport { SwedishOrganizationNumber } from \"./swedish-organization-number.js\";\n\nconst MAX_INPUT_LENGTH = 30;\n\ninterface CountryInfo {\n countryCode: string;\n countryName: string;\n}\n\nconst COUNTRY_INFO: Readonly<Record<string, CountryInfo>> = Object.freeze({\n AT: { countryCode: \"AT\", countryName: \"Austria\" },\n BE: { countryCode: \"BE\", countryName: \"Belgium\" },\n BG: { countryCode: \"BG\", countryName: \"Bulgaria\" },\n HR: { countryCode: \"HR\", countryName: \"Croatia\" },\n CY: { countryCode: \"CY\", countryName: \"Cyprus\" },\n CZ: { countryCode: \"CZ\", countryName: \"Czech Republic\" },\n DK: { countryCode: \"DK\", countryName: \"Denmark\" },\n EE: { countryCode: \"EE\", countryName: \"Estonia\" },\n FI: { countryCode: \"FI\", countryName: \"Finland\" },\n FR: { countryCode: \"FR\", countryName: \"France\" },\n DE: { countryCode: \"DE\", countryName: \"Germany\" },\n EL: { countryCode: \"GR\", countryName: \"Greece\" },\n GR: { countryCode: \"GR\", countryName: \"Greece\" },\n HU: { countryCode: \"HU\", countryName: \"Hungary\" },\n IE: { countryCode: \"IE\", countryName: \"Ireland\" },\n IT: { countryCode: \"IT\", countryName: \"Italy\" },\n LV: { countryCode: \"LV\", countryName: \"Latvia\" },\n LT: { countryCode: \"LT\", countryName: \"Lithuania\" },\n LU: { countryCode: \"LU\", countryName: \"Luxembourg\" },\n MT: { countryCode: \"MT\", countryName: \"Malta\" },\n NL: { countryCode: \"NL\", countryName: \"Netherlands\" },\n PL: { countryCode: \"PL\", countryName: \"Poland\" },\n PT: { countryCode: \"PT\", countryName: \"Portugal\" },\n RO: { countryCode: \"RO\", countryName: \"Romania\" },\n SK: { countryCode: \"SK\", countryName: \"Slovakia\" },\n SI: { countryCode: \"SI\", countryName: \"Slovenia\" },\n ES: { countryCode: \"ES\", countryName: \"Spain\" },\n SE: { countryCode: \"SE\", countryName: \"Sweden\" },\n GB: { countryCode: \"GB\", countryName: \"United Kingdom\" },\n NO: { countryCode: \"NO\", countryName: \"Norway\" },\n IS: { countryCode: \"IS\", countryName: \"Iceland\" },\n LI: { countryCode: \"LI\", countryName: \"Liechtenstein\" },\n CH: { countryCode: \"CH\", countryName: \"Switzerland\" },\n AL: { countryCode: \"AL\", countryName: \"Albania\" },\n BA: { countryCode: \"BA\", countryName: \"Bosnia and Herzegovina\" },\n BY: { countryCode: \"BY\", countryName: \"Belarus\" },\n MK: { countryCode: \"MK\", countryName: \"North Macedonia\" },\n RS: { countryCode: \"RS\", countryName: \"Serbia\" },\n SM: { countryCode: \"SM\", countryName: \"San Marino\" },\n TR: { countryCode: \"TR\", countryName: \"Turkey\" },\n UA: { countryCode: \"UA\", countryName: \"Ukraine\" },\n RU: { countryCode: \"RU\", countryName: \"Russia\" },\n UZ: { countryCode: \"UZ\", countryName: \"Uzbekistan\" },\n AU: { countryCode: \"AU\", countryName: \"Australia\" },\n CN: { countryCode: \"CN\", countryName: \"China\" },\n HK: { countryCode: \"HK\", countryName: \"Hong Kong\" },\n IN: { countryCode: \"IN\", countryName: \"India\" },\n ID: { countryCode: \"ID\", countryName: \"Indonesia\" },\n IL: { countryCode: \"IL\", countryName: \"Israel\" },\n JP: { countryCode: \"JP\", countryName: \"Japan\" },\n KZ: { countryCode: \"KZ\", countryName: \"Kazakhstan\" },\n NZ: { countryCode: \"NZ\", countryName: \"New Zealand\" },\n PH: { countryCode: \"PH\", countryName: \"Philippines\" },\n SA: { countryCode: \"SA\", countryName: \"Saudi Arabia\" },\n SG: { countryCode: \"SG\", countryName: \"Singapore\" },\n TW: { countryCode: \"TW\", countryName: \"Taiwan\" },\n AR: { countryCode: \"AR\", countryName: \"Argentina\" },\n BZ: { countryCode: \"BZ\", countryName: \"Belize\" },\n BO: { countryCode: \"BO\", countryName: \"Bolivia\" },\n BR: { countryCode: \"BR\", countryName: \"Brazil\" },\n CA: { countryCode: \"CA\", countryName: \"Canada\" },\n CL: { countryCode: \"CL\", countryName: \"Chile\" },\n CO: { countryCode: \"CO\", countryName: \"Colombia\" },\n CR: { countryCode: \"CR\", countryName: \"Costa Rica\" },\n DO: { countryCode: \"DO\", countryName: \"Dominican Republic\" },\n EC: { countryCode: \"EC\", countryName: \"Ecuador\" },\n SV: { countryCode: \"SV\", countryName: \"El Salvador\" },\n GT: { countryCode: \"GT\", countryName: \"Guatemala\" },\n HN: { countryCode: \"HN\", countryName: \"Honduras\" },\n MX: { countryCode: \"MX\", countryName: \"Mexico\" },\n NI: { countryCode: \"NI\", countryName: \"Nicaragua\" },\n PA: { countryCode: \"PA\", countryName: \"Panama\" },\n PY: { countryCode: \"PY\", countryName: \"Paraguay\" },\n PE: { countryCode: \"PE\", countryName: \"Peru\" },\n UY: { countryCode: \"UY\", countryName: \"Uruguay\" },\n US: { countryCode: \"US\", countryName: \"United States\" },\n VE: { countryCode: \"VE\", countryName: \"Venezuela\" },\n NG: { countryCode: \"NG\", countryName: \"Nigeria\" },\n});\n\n/** VAT identification number (`momsnummer` / `momsregistreringsnummer`). */\nexport class EuVatNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"VAT Number\",\n localizedName: \"Momsnummer\",\n emoji: \"\\u{1F4B0}\",\n sources: Object.freeze([\n \"https://ec.europa.eu/taxation_customs/vies/#/vat-validation\",\n \"https://en.wikipedia.org/wiki/VAT_identification_number\",\n ]),\n });\n\n readonly vatPrefix: string;\n readonly countryCode: string;\n readonly countryName: string;\n readonly body: string;\n\n private constructor(vatPrefix: string, countryCode: string, countryName: string, body: string) {\n this.vatPrefix = vatPrefix;\n this.countryCode = countryCode;\n this.countryName = countryName;\n this.body = body;\n }\n\n static tryParse(input: string | null | undefined): EuVatNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const cleaned = cleanSeparators(sanitizeInput(input));\n if (cleaned.length > MAX_INPUT_LENGTH || cleaned.length < 3) return null;\n\n const cc = cleaned.slice(0, 2).toUpperCase();\n if (!/^[A-Z]{2}$/.test(cc)) return null;\n const info = COUNTRY_INFO[cc];\n if (!info) return null;\n\n const body = cleaned\n .slice(2)\n .split(\"\")\n .map((c) => {\n if (!/[A-Za-z0-9]/.test(c)) return null;\n return c.toUpperCase();\n });\n if (body.some((c) => c === null)) return null;\n const bodyString = body.join(\"\");\n if (bodyString.length === 0) return null;\n if (!validateCountryFormat(info.countryCode, bodyString)) return null;\n\n return new EuVatNumber(cc, info.countryCode, info.countryName, bodyString);\n }\n\n static parse(input: string): EuVatNumber {\n const r = EuVatNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid VAT number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return EuVatNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = EuVatNumber.tryParse(input);\n if (r) return r.vatPrefix + r.body;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return EuVatNumber.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && EuVatNumber.normalize(input) === input;\n }\n\n static tryParseForCountry(\n input: string | null | undefined,\n countryCode: string | null | undefined,\n ): EuVatNumber | null {\n if (countryCode == null || countryCode.trim() === \"\") return null;\n const vat = EuVatNumber.tryParse(input);\n if (!vat) return null;\n const normalized = countryCode.toUpperCase();\n if ((normalized === \"EL\" || normalized === \"GR\") && vat.countryCode === \"GR\") return vat;\n return vat.countryCode === normalized ? vat : null;\n }\n\n static parseForCountry(input: string, countryCode: string): EuVatNumber {\n const r = EuVatNumber.tryParseForCountry(input, countryCode);\n if (!r) throw new Error(`Invalid VAT number for country ${countryCode}.`);\n return r;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n\n const cleaned = cleanSeparators(sanitizeInput(input));\n if (cleaned.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n if (cleaned.length < 3) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooShort,\n \"VAT number is too short.\",\n \"Momsnumret är för kort.\",\n );\n }\n const cc = cleaned.slice(0, 2).toUpperCase();\n if (!/^[A-Z]{2}$/.test(cc)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCountryPrefix,\n \"VAT number must start with a two-letter country code.\",\n \"Momsnumret måste börja med en tvåbokstavig landskod.\",\n );\n }\n const info = COUNTRY_INFO[cc];\n if (!info) {\n return invalidResult(\n input,\n ValidationErrorReason.UnknownCountryCode,\n \"Unknown VAT country code.\",\n \"Okänd momsnummer-landskod.\",\n );\n }\n let body = \"\";\n for (const c of cleaned.slice(2)) {\n if (!/[A-Za-z0-9]/.test(c)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"VAT number body contains invalid characters.\",\n \"Momsnumrets innehåll har ogiltiga tecken.\",\n );\n }\n body += c.toUpperCase();\n }\n if (body.length === 0 || !validateCountryFormat(info.countryCode, body)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"VAT number format is invalid for the specified country.\",\n \"Momsnummerformatet är ogiltigt för det angivna landet.\",\n );\n }\n return validResult(input);\n }\n\n toNormalizedString(): string {\n return this.vatPrefix + this.body;\n }\n\n toString(): string {\n return this.vatPrefix + this.body;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<EuVatNumber>[] {\n if (!text) return [];\n const results: TextCandidate<EuVatNumber>[] = [];\n const re = /(?<![A-Z0-9])[A-Z]{2}[A-Z0-9]{5,14}(?![A-Z0-9])/gu;\n let match: RegExpExecArray | null;\n while ((match = re.exec(text)) !== null) {\n const vat = EuVatNumber.tryParse(match[0]);\n if (!vat) continue;\n results.push(\n new TextCandidate<EuVatNumber>({\n startIndex: match.index,\n length: match[0].length,\n originalText: match[0],\n typeName: \"EuVatNumber\",\n category: TextCandidateCategory.OrganizationIdentifier,\n normalizedForm: vat.toNormalizedString(),\n formattedForm: vat.toString(),\n maskedForm: maskEuVatNumber(vat),\n confidence: TextMatchConfidence.High,\n value: vat,\n }),\n );\n }\n return results;\n }\n\n equals(other: EuVatNumber | null | undefined): boolean {\n return other != null && this.vatPrefix === other.vatPrefix && this.body === other.body;\n }\n\n compareTo(other: EuVatNumber | null | undefined): number {\n if (other == null) return 1;\n const a = this.toNormalizedString();\n const b = other.toNormalizedString();\n return a < b ? -1 : a > b ? 1 : 0;\n }\n}\n\nfunction validateCountryFormat(countryCode: string, body: string): boolean {\n switch (countryCode.toUpperCase()) {\n case \"AT\":\n return body.length === 9 && body[0] === \"U\" && /^\\d{8}$/.test(body.slice(1));\n case \"BE\":\n return validateBelgianVat(body);\n case \"BG\":\n return /^\\d{9,10}$/.test(body);\n case \"HR\":\n return /^\\d{11}$/.test(body) && validateMod1110(body);\n case \"CY\":\n return /^\\d{8}[A-Z]$/.test(body);\n case \"CZ\":\n return /^\\d{8,10}$/.test(body);\n case \"DK\":\n return /^\\d{8}$/.test(body);\n case \"EE\":\n return /^\\d{9}$/.test(body);\n case \"FI\":\n return validateFinnishVat(body);\n case \"FR\":\n return /^[A-Z0-9]{2}\\d{9}$/.test(body);\n case \"DE\":\n case \"GR\":\n return /^\\d{9}$/.test(body);\n case \"HU\":\n return /^\\d{8}$/.test(body);\n case \"IE\":\n return validateIrishVat(body);\n case \"IT\":\n return /^\\d{11}$/.test(body) && luhnIsValid(body);\n case \"LV\":\n return /^\\d{11}$/.test(body);\n case \"LT\":\n return /^\\d{9}$/.test(body) || /^\\d{12}$/.test(body);\n case \"LU\":\n case \"MT\":\n return /^\\d{8}$/.test(body);\n case \"NL\":\n return /^\\d{9}B\\d{2}$/.test(body);\n case \"PL\":\n return validatePolishVat(body);\n case \"PT\":\n return /^\\d{9}$/.test(body);\n case \"RO\":\n return /^\\d{2,10}$/.test(body);\n case \"SK\":\n return validateSlovakVat(body);\n case \"SI\":\n return /^\\d{8}$/.test(body);\n case \"ES\":\n return body.length === 9;\n case \"SE\":\n return validateSwedishVat(body);\n case \"GB\":\n return validateUkVat(body);\n case \"NO\":\n return validateNorwegianVat(body);\n case \"CH\":\n return keepDigits(body).length === 9;\n default:\n return /\\d/.test(body);\n }\n}\n\nfunction validateSwedishVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 12 || !digits.endsWith(\"01\")) return false;\n return SwedishOrganizationNumber.tryParse(digits.slice(0, 10)) !== null;\n}\n\nfunction validateBelgianVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 10) return false;\n const baseNumber = parseInt(digits.slice(0, 8), 10);\n const checkDigits = 97 - (baseNumber % 97);\n return checkDigits === parseInt(digits.slice(8, 10), 10);\n}\n\nfunction validateFinnishVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 8) return false;\n const weights = [7, 9, 10, 5, 8, 4, 2];\n const sum = weights.reduce((acc, weight, i) => acc + (digits.charCodeAt(i) - 0x30) * weight, 0);\n const remainder = sum % 11;\n if (remainder === 1) return false;\n const checkDigit = remainder === 0 ? 0 : 11 - remainder;\n return checkDigit === digits.charCodeAt(7) - 0x30;\n}\n\nfunction validateIrishVat(body: string): boolean {\n if (body.length < 8 || body.length > 9) return false;\n if (body.length === 8) return /^\\d{7}[A-Z]$/.test(body);\n return /^\\d{7}[A-Z]{2}$/.test(body) || /^\\d[A-Z]\\d{5}[A-Z]$/.test(body);\n}\n\nfunction validatePolishVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 10) return false;\n const weights = [6, 5, 7, 2, 3, 4, 5, 6, 7];\n const sum = weights.reduce((acc, weight, i) => acc + (digits.charCodeAt(i) - 0x30) * weight, 0);\n const checkDigit = sum % 11;\n if (checkDigit === 10) return false;\n return checkDigit === digits.charCodeAt(9) - 0x30;\n}\n\nfunction validateSlovakVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 10) return false;\n return parseInt(digits, 10) % 11 === 0;\n}\n\nfunction validateUkVat(body: string): boolean {\n const digits = keepDigits(body);\n if (body.startsWith(\"GD\") || body.startsWith(\"HA\")) return body.length >= 5;\n return digits.length === 9 || digits.length === 12;\n}\n\nfunction validateNorwegianVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 9) return false;\n const weights = [3, 2, 7, 6, 5, 4, 3, 2];\n const sum = weights.reduce((acc, weight, i) => acc + (digits.charCodeAt(i) - 0x30) * weight, 0);\n const remainder = 11 - (sum % 11);\n if (remainder === 10) return false;\n const checkDigit = remainder === 11 ? 0 : remainder;\n return checkDigit === digits.charCodeAt(8) - 0x30;\n}\n\nfunction validateMod1110(digits: string): boolean {\n let checksum = 10;\n for (let i = 0; i < digits.length - 1; i++) {\n const digit = digits.charCodeAt(i) - 0x30;\n checksum = (checksum + digit) % 10;\n if (checksum === 0) checksum = 10;\n checksum = (checksum * 2) % 11;\n }\n const expectedCheck = (11 - checksum) % 10;\n const actualCheck = digits.charCodeAt(digits.length - 1) - 0x30;\n return expectedCheck === actualCheck;\n}\n\n/** Masks person-based Swedish VAT automatically; pass `alwaysMask` to mask all VAT bodies. */\nexport function maskEuVatNumber(vat: EuVatNumber, alwaysMask = false): string {\n if (vat.countryCode === \"SE\") {\n const body = vat.body;\n if (body.length >= 10) {\n const orgPart = body.slice(0, 10);\n const org = SwedishOrganizationNumber.tryParse(orgPart);\n if (org && (org.isPerson || alwaysMask)) {\n const suffix = body.length > 10 ? body.slice(10) : \"\";\n return `${vat.vatPrefix}${orgPart.slice(0, 6)}****${suffix}`;\n }\n }\n } else if (alwaysMask) {\n const visible = Math.min(4, vat.body.length);\n return `${vat.vatPrefix}${vat.body.slice(0, visible)}${\"*\".repeat(vat.body.length - visible)}`;\n }\n\n return vat.toString();\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { isValidIso7064Mod97 } from \"./organization-validation-utils.js\";\n\nconst MAX_INPUT_LENGTH = 30;\n\n/** Legal Entity Identifier (ISO 17442). */\nexport class LeiCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"LEI Code\",\n localizedName: \"LEI-kod\",\n emoji: \"\\u{1F3DB}\\uFE0F\",\n sources: Object.freeze([\n \"https://www.gleif.org/en/about-lei/iso-17442-the-lei-code-structure/\",\n \"https://en.wikipedia.org/wiki/Legal_Entity_Identifier\",\n ]),\n });\n\n readonly value: string;\n get louPrefix(): string {\n return this.value.slice(0, 4);\n }\n get reserved(): string {\n return this.value.slice(4, 6);\n }\n get entitySpecific(): string {\n return this.value.slice(6, 18);\n }\n get checkDigits(): string {\n return this.value.slice(18, 20);\n }\n\n private constructor(value: string) {\n this.value = value;\n }\n\n static tryParse(input: string | null | undefined): LeiCode | null {\n if (input == null || input.trim() === \"\") return null;\n const source = sanitizeInput(input);\n let cleaned = \"\";\n for (const c of source) {\n if (/[A-Za-z0-9]/.test(c)) cleaned += c.toUpperCase();\n }\n if (cleaned.length > MAX_INPUT_LENGTH || cleaned.length !== 20) return null;\n if (!isValidIso7064Mod97(cleaned)) return null;\n return new LeiCode(cleaned);\n }\n\n static parse(input: string): LeiCode {\n const r = LeiCode.tryParse(input);\n if (r === null) throw new Error(\"Invalid LEI code (length or checksum invalid).\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return LeiCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = LeiCode.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return LeiCode.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && LeiCode.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<LeiCode>[] {\n if (!text) return [];\n const out: TextCandidate<LeiCode>[] = [];\n const re = /(?<![A-Z0-9])[A-Z0-9]{18}\\d{2}(?![A-Z0-9])/gu;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = LeiCode.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<LeiCode>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"LeiCode\",\n category: TextCandidateCategory.OrganizationIdentifier,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskLeiCode(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: LeiCode | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: LeiCode | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\n/** Masks the LEI keeping only the first 4-character LOU prefix visible. */\nexport function maskLeiCode(l: LeiCode): string {\n const v = l.value;\n return v.slice(0, 4) + \"*\".repeat(v.length - 4);\n}\n","import { SwedishCoordinationNumber, SwedishPersonalIdentityNumber } from \"../person/index.js\";\nimport { keepDigits } from \"../internal/input-sanitization.js\";\nimport { EuVatNumber } from \"./eu-vat-number.js\";\nimport { LeiCode } from \"./lei-code.js\";\nimport { SwedishOrganizationNumber } from \"./swedish-organization-number.js\";\n\n/** Converts a PIN, coordination number, or SE VAT number to a Swedish organization number. */\nexport function toSwedishOrganizationNumber(\n value: SwedishPersonalIdentityNumber | SwedishCoordinationNumber | EuVatNumber,\n): SwedishOrganizationNumber | null {\n if (\n value instanceof SwedishPersonalIdentityNumber ||\n value instanceof SwedishCoordinationNumber\n ) {\n return SwedishOrganizationNumber.parse(value.to12DigitString());\n }\n\n if (value.countryCode !== \"SE\") return null;\n const digits = keepDigits(value.body);\n if (digits.length !== 12 || !digits.endsWith(\"01\")) return null;\n return SwedishOrganizationNumber.tryParse(digits.slice(0, 10));\n}\n\n/** Extracts a personal identity number from a person-based Swedish organization number or VAT number. */\nexport function toPersonalIdentityNumber(\n value: SwedishOrganizationNumber | EuVatNumber,\n): SwedishPersonalIdentityNumber | null {\n const org = value instanceof EuVatNumber ? toSwedishOrganizationNumber(value) : value;\n if (!org?.isPerson) return null;\n return SwedishPersonalIdentityNumber.tryParse(org.to12DigitString());\n}\n\n/** Extracts a coordination number from a person-based Swedish organization number or VAT number. */\nexport function toCoordinationNumber(\n value: SwedishOrganizationNumber | EuVatNumber,\n): SwedishCoordinationNumber | null {\n const org = value instanceof EuVatNumber ? toSwedishOrganizationNumber(value) : value;\n if (!org?.isPerson) return null;\n return SwedishCoordinationNumber.tryParse(org.to12DigitString());\n}\n\n/** Converts a Swedish organization number, PIN or coordination number to its corresponding SE VAT number. */\nexport function toEuVatNumber(\n value: SwedishOrganizationNumber | SwedishPersonalIdentityNumber | SwedishCoordinationNumber,\n): EuVatNumber {\n const digits =\n value instanceof SwedishOrganizationNumber\n ? value.to10DigitsOnly()\n : keepDigits(value.to10DigitString());\n return EuVatNumber.parse(`SE${digits}01`);\n}\n\n/** Bolagsverket company information URL. */\nexport function getBolagsverketUrl(org: SwedishOrganizationNumber): URL {\n return new URL(\n `https://foretagsinfo.bolagsverket.se/sok-foretagsinformation-web/foretag/${org.to10DigitString()}`,\n );\n}\n\n/** Allabolag lookup URL using the normalized organization number. */\nexport function getAllabolagUrl(org: SwedishOrganizationNumber): string {\n return `https://www.allabolag.se/${org.toNormalizedString()}`;\n}\n\n/** Allabolag company information URL using the public 10-digit organization number. */\nexport function getAllabolagExternalUrl(org: SwedishOrganizationNumber): URL {\n return new URL(`https://www.allabolag.se/${org.to10DigitsOnly()}`);\n}\n\n/** EU VIES validation URL. */\nexport function toViesUrl(vat: EuVatNumber): string {\n return `https://ec.europa.eu/taxation_customs/vies/#/vat-validation/${vat.toNormalizedString()}`;\n}\n\n/** GLEIF record URL. */\nexport function getGleifUrl(lei: LeiCode): URL {\n return new URL(`https://search.gleif.org/#/record/${lei.toNormalizedString()}`);\n}\n\n/** GLEIF lookup URL as string. */\nexport function toGleifUrl(lei: LeiCode): string {\n return `https://search.gleif.org/#/record/${lei.toNormalizedString()}`;\n}\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { SwedishCoordinationNumber, SwedishPersonalIdentityNumber } from \"../person/index.js\";\nimport { DunsNumber } from \"./duns-number.js\";\nimport { EuVatNumber } from \"./eu-vat-number.js\";\nimport { LeiCode } from \"./lei-code.js\";\nimport { toSwedishOrganizationNumber } from \"./organization-extensions.js\";\nimport { SwedishOrganizationIdentifierType } from \"./swedish-organization-identifier-type.js\";\nimport { SwedishOrganizationNumber } from \"./swedish-organization-number.js\";\nimport { SwedishOrganizationType } from \"./swedish-organization-type.js\";\n\nconst MAX_INPUT_LENGTH = 30;\n\nexport interface SwedishOrganizationIdentifier {\n readonly type: SwedishOrganizationIdentifierType;\n readonly organizationTypeHintCertain: SwedishOrganizationType;\n readonly organizationTypeHintBestGuess: SwedishOrganizationType;\n readonly normalizedValue: string;\n readonly swedishOrganizationNumber: SwedishOrganizationNumber | null;\n readonly euVatNumber: EuVatNumber | null;\n readonly dunsNumber: DunsNumber | null;\n readonly leiCode: LeiCode | null;\n}\n\ninterface ParseOptions {\n readonly organizationName?: string | null;\n readonly isPrivatePerson?: boolean | null;\n}\n\nfunction unknownResult(): SwedishOrganizationIdentifier {\n return {\n type: SwedishOrganizationIdentifierType.Unknown,\n organizationTypeHintCertain: SwedishOrganizationType.Unknown,\n organizationTypeHintBestGuess: SwedishOrganizationType.Unknown,\n normalizedValue: \"\",\n swedishOrganizationNumber: null,\n euVatNumber: null,\n dunsNumber: null,\n leiCode: null,\n };\n}\n\n/** Unified parser for Swedish organization, VAT, DUNS and LEI identifiers. */\nexport class SwedishOrganizationIdentifierParser {\n static tryParse(\n input: string | null | undefined,\n options?: ParseOptions,\n ): SwedishOrganizationIdentifier | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) return null;\n\n const isSwedishDefault = PrimitivesDefaults.countryAlpha2Code === \"SE\";\n if (isSwedishDefault) {\n const se = tryParseSwedishOrg(sanitized, options);\n if (se) return se;\n const vat = tryParseVat(sanitized, options);\n if (vat) return vat;\n } else {\n const vat = tryParseVat(sanitized, options);\n if (vat) return vat;\n const se = tryParseSwedishOrg(sanitized, options);\n if (se) return se;\n }\n\n const duns = DunsNumber.tryParse(sanitized);\n if (duns) {\n return {\n ...unknownResult(),\n type: SwedishOrganizationIdentifierType.DunsNumber,\n normalizedValue: duns.digits,\n dunsNumber: duns,\n };\n }\n\n const lei = LeiCode.tryParse(sanitized);\n if (lei) {\n return {\n ...unknownResult(),\n type: SwedishOrganizationIdentifierType.LeiCode,\n normalizedValue: lei.value,\n leiCode: lei,\n };\n }\n\n return null;\n }\n\n static parse(input: string, options?: ParseOptions): SwedishOrganizationIdentifier {\n const r = SwedishOrganizationIdentifierParser.tryParse(input, options);\n if (!r) throw new Error(\"Could not parse input as a known organization/identity number.\");\n return r;\n }\n\n static tryParseForCountry(\n input: string | null | undefined,\n countryCode: string | null | undefined,\n options?: ParseOptions,\n ): SwedishOrganizationIdentifier | null {\n if (input == null || input.trim() === \"\" || countryCode == null || countryCode.trim() === \"\") {\n return null;\n }\n const normalizedCountryCode = countryCode.toUpperCase();\n\n if (normalizedCountryCode === \"SE\") {\n const seOrg = SwedishOrganizationNumber.tryParse(input);\n if (seOrg) return buildSwedishOrgResult(seOrg, options);\n }\n\n const vat = EuVatNumber.tryParseForCountry(input, normalizedCountryCode);\n if (vat) return buildVatResult(vat, options);\n\n return null;\n }\n\n static parseForCountry(\n input: string,\n countryCode: string,\n options?: ParseOptions,\n ): SwedishOrganizationIdentifier {\n const r = SwedishOrganizationIdentifierParser.tryParseForCountry(input, countryCode, options);\n if (!r) {\n throw new Error(\n `Could not parse input as a known organization/identity number for country ${countryCode}.`,\n );\n }\n return r;\n }\n}\n\nfunction tryParseSwedishOrg(\n input: string,\n options?: ParseOptions,\n): SwedishOrganizationIdentifier | null {\n const seOrg = SwedishOrganizationNumber.tryParse(input);\n if (!seOrg) return null;\n return buildSwedishOrgResult(seOrg, options);\n}\n\nfunction buildSwedishOrgResult(\n seOrg: SwedishOrganizationNumber,\n options?: ParseOptions,\n): SwedishOrganizationIdentifier {\n let type = SwedishOrganizationIdentifierType.SwedishOrganizationNumber;\n if (seOrg.isPerson) {\n const twelve = seOrg.to12DigitString();\n if (SwedishPersonalIdentityNumber.tryParse(twelve)) {\n type = SwedishOrganizationIdentifierType.SwedishPersonalIdentityNumber;\n } else if (SwedishCoordinationNumber.tryParse(twelve)) {\n type = SwedishOrganizationIdentifierType.SwedishCoordinationNumber;\n }\n }\n const hint = seOrg.getSwedishOrganizationTypeHint(\n options?.organizationName ?? null,\n options?.isPrivatePerson ?? null,\n );\n return {\n ...unknownResult(),\n type,\n organizationTypeHintCertain: hint.certain,\n organizationTypeHintBestGuess: hint.bestGuess,\n normalizedValue: seOrg.to12DigitString(),\n swedishOrganizationNumber: seOrg,\n };\n}\n\nfunction tryParseVat(input: string, options?: ParseOptions): SwedishOrganizationIdentifier | null {\n const vat = EuVatNumber.tryParse(input);\n if (!vat) return null;\n return buildVatResult(vat, options);\n}\n\nfunction buildVatResult(vat: EuVatNumber, options?: ParseOptions): SwedishOrganizationIdentifier {\n let certain = SwedishOrganizationType.Unknown;\n let bestGuess = SwedishOrganizationType.Unknown;\n const seOrg = toSwedishOrganizationNumber(vat);\n if (seOrg) {\n const hint = seOrg.getSwedishOrganizationTypeHint(\n options?.organizationName ?? null,\n options?.isPrivatePerson ?? null,\n );\n certain = hint.certain;\n bestGuess = hint.bestGuess;\n }\n\n return {\n ...unknownResult(),\n type: SwedishOrganizationIdentifierType.EuVatNumber,\n organizationTypeHintCertain: certain,\n organizationTypeHintBestGuess: bestGuess,\n normalizedValue: vat.countryCode + vat.body,\n euVatNumber: vat,\n };\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\n\nconst MAX_INPUT_LENGTH = 300;\n\nconst COMPANY_NAME_PATTERN = /^[\\p{L}\\d\\s\\-'&.,/:()+|\"]+$/u;\nconst PIPE_SEPARATOR = /\\s*\\|+\\s*/;\n\n/** Registered name of a legal entity from any European jurisdiction. */\nexport class EuOrganizationName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"EU Organization Name\",\n localizedName: \"Europeiskt organisationsnamn\",\n emoji: \"\\u{1F1EA}\\u{1F1FA}\",\n sources: Object.freeze([\n \"https://ec.europa.eu/taxation_customs/vies/\",\n \"https://www.businessregisters.eu/\",\n ]),\n });\n\n readonly value: string;\n readonly legalName: string;\n readonly tradeName: string | null;\n\n get hasTradeName(): boolean {\n return this.tradeName !== null;\n }\n\n private constructor(value: string, legal: string, trade: string | null) {\n this.value = value;\n this.legalName = legal;\n this.tradeName = trade;\n }\n\n static tryParse(input: string | null | undefined): EuOrganizationName | null {\n const normalized = collapseWhitespace(input);\n if (normalized.length === 0 || normalized.length > MAX_INPUT_LENGTH) return null;\n if (!validate(normalized)) return null;\n const [legal, trade] = splitLegalAndTrade(normalized);\n return new EuOrganizationName(normalized, legal, trade);\n }\n\n static parse(input: string): EuOrganizationName {\n const r = EuOrganizationName.tryParse(input);\n if (r === null) throw new Error(\"Invalid EU organization name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return EuOrganizationName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = EuOrganizationName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return EuOrganizationName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && EuOrganizationName.normalize(input) === input;\n }\n\n static trySplitLegalAndTrade(\n input: string | null | undefined,\n ): { legalName: string; tradeName: string | null } | null {\n if (input == null || input.trim() === \"\") return null;\n const collapsed = collapseWhitespace(input);\n const [legal, trade] = splitLegalAndTrade(collapsed);\n return { legalName: legal, tradeName: trade };\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: EuOrganizationName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: EuOrganizationName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\n/** Mask each organization-name token while preserving structural separators. */\nexport function maskEuOrganizationName(value: EuOrganizationName): string {\n return value.value.replace(/[\\p{L}\\d]+/gu, (part) => {\n if (part.length <= 1) return part;\n return part[0]! + \"*\".repeat(part.length - 1);\n });\n}\n\nfunction splitLegalAndTrade(collapsed: string): [string, string | null] {\n if (collapsed.indexOf(\"|\") < 0) return [collapsed, null];\n const parts = collapsed.split(PIPE_SEPARATOR).filter((p) => p.length > 0);\n if (parts.length < 2) return [collapsed, null];\n return [parts[0]!, parts.slice(1).join(\" | \")];\n}\n\nfunction validate(value: string): boolean {\n if (value.length < 2 || value.length > 200) return false;\n for (const c of value) {\n const code = c.charCodeAt(0);\n if (code < 0x20 || code === 0x7f) return false;\n }\n return COMPANY_NAME_PATTERN.test(value);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { keepAsciiAlphanumericUppercase } from \"../internal/input-sanitization.js\";\n\nconst CODE_LENGTH = 4;\nconst MAX_INPUT_LENGTH = 20;\n\ninterface KnownElf {\n englishName: string;\n swedishName: string;\n}\n\nconst KNOWN_CODES: ReadonlyMap<string, KnownElf> = new Map<string, KnownElf>([\n [\"XTIQ\", { englishName: \"Limited company\", swedishName: \"Aktiebolag\" }],\n [\"N2GY\", { englishName: \"General partnership\", swedishName: \"Handelsbolag\" }],\n [\"FR3V\", { englishName: \"Limited partnership\", swedishName: \"Kommanditbolag\" }],\n [\"V2YH\", { englishName: \"Economic association\", swedishName: \"Ekonomisk förening\" }],\n [\"WJEL\", { englishName: \"Sole proprietorship\", swedishName: \"Enskild näringsidkare\" }],\n [\"CLBQ\", { englishName: \"Foundation\", swedishName: \"Stiftelse\" }],\n [\"F85L\", { englishName: \"Non-profit association\", swedishName: \"Ideell förening\" }],\n [\"O9FH\", { englishName: \"Housing cooperative\", swedishName: \"Bostadsrättsförening\" }],\n [\n \"H0PO\",\n {\n englishName: \"Cooperative housing association\",\n swedishName: \"Kooperativ hyresrättsförening\",\n },\n ],\n [\"2HBR\", { englishName: \"Government entity\", swedishName: \"Statlig enhet\" }],\n [\"EVKQ\", { englishName: \"Municipality\", swedishName: \"Kommun\" }],\n [\"R7GX\", { englishName: \"Region\", swedishName: \"Region\" }],\n [\"KQM9\", { englishName: \"Banking company\", swedishName: \"Bankaktiebolag\" }],\n [\"L5CF\", { englishName: \"Insurance company\", swedishName: \"Försäkringsaktiebolag\" }],\n [\"LRQE\", { englishName: \"Mutual insurance company\", swedishName: \"Ömsesidigt försäkringsbolag\" }],\n [\n \"J4GF\",\n { englishName: \"Branch of foreign company\", swedishName: \"Filial till utländskt företag\" },\n ],\n [\"9GQP\", { englishName: \"European company (SE)\", swedishName: \"Europabolag\" }],\n]);\n\n/** ISO 20275 Entity Legal Form code. */\nexport class ElfCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Entity Legal Form Code\",\n localizedName: \"Juridisk företagsform\",\n emoji: \"\\u{1F4CB}\",\n sources: Object.freeze([\n \"https://www.gleif.org/en/about-lei/code-lists/iso-20275-entity-legal-forms-code-list\",\n \"https://www.iso.org/standard/67462.html\",\n ]),\n });\n\n readonly code: string;\n readonly englishName: string | null;\n readonly localizedName: string | null;\n\n get displayName(): string {\n const localized = PrimitivesDefaults.useLocalizedDisplayNames\n ? this.localizedName\n : this.englishName;\n return localized ?? this.code;\n }\n\n get isKnown(): boolean {\n return this.englishName !== null;\n }\n\n private constructor(code: string, en: string | null, sv: string | null) {\n this.code = code;\n this.englishName = en;\n this.localizedName = sv;\n }\n\n static tryParse(input: string | null | undefined): ElfCode | null {\n if (input == null || input.trim() === \"\") return null;\n const cleaned = keepAsciiAlphanumericUppercase(input);\n if (cleaned.length > MAX_INPUT_LENGTH || cleaned.length !== CODE_LENGTH) return null;\n const known = KNOWN_CODES.get(cleaned);\n return new ElfCode(cleaned, known?.englishName ?? null, known?.swedishName ?? null);\n }\n\n static parse(input: string): ElfCode {\n const r = ElfCode.tryParse(input);\n if (r === null) {\n throw new Error(\"Invalid ELF code (must be exactly 4 alphanumeric characters).\");\n }\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return ElfCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = ElfCode.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = ElfCode.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && ElfCode.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n toString(): string {\n return this.displayName;\n }\n\n equals(other: ElfCode | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n compareTo(other: ElfCode | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\n/** Swedish CFAR number (`CFAR-nummer`) - 8-digit identifier for an establishment. */\nexport class SwedishCfarNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"CFAR Number\",\n localizedName: \"CFAR-nummer\",\n emoji: \"\\u{1F3ED}\",\n sources: Object.freeze([\n \"https://www.cfarnrsok.scb.se/\",\n \"https://www.scb.se/vara-tjanster/bestall-data-och-statistik/foretagsregistret/variabelbeskrivning/\",\n ]),\n });\n\n readonly number: string;\n private constructor(n: string) {\n this.number = n;\n }\n\n static tryParse(input: string | null | undefined): SwedishCfarNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (digits.length !== 8) return null;\n if (digits === \"00000000\") return null;\n return new SwedishCfarNumber(digits);\n }\n\n static parse(input: string): SwedishCfarNumber {\n const r = SwedishCfarNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid CFAR number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishCfarNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishCfarNumber.tryParse(input);\n if (r) return r.number;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishCfarNumber.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishCfarNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.number;\n }\n toString(): string {\n return this.number;\n }\n\n equals(other: SwedishCfarNumber | null | undefined): boolean {\n return other != null && this.number === other.number;\n }\n compareTo(other: SwedishCfarNumber | null | undefined): number {\n if (other == null) return 1;\n return this.number < other.number ? -1 : this.number > other.number ? 1 : 0;\n }\n}\n\n/** Masks the last 4 digits of a CFAR number. */\nexport function maskSwedishCfarNumber(c: SwedishCfarNumber): string {\n return c.number.slice(0, 4) + \"****\";\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits } from \"../internal/input-sanitization.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\n/** Swedish SNI code (`SNI-kod`). */\nexport class SwedishSniCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"SNI Code\",\n localizedName: \"SNI-kod\",\n emoji: \"\\u{1F4CA}\",\n sources: Object.freeze([\n \"https://www.scb.se/en/documentation/classifications-and-standards/swedish-standard-industrial-classification-sni/\",\n \"https://snisok.scb.se/en\",\n ]),\n });\n\n readonly code: string;\n readonly formatted: string;\n get divisionCode(): string {\n return this.code.slice(0, 2);\n }\n get groupCode(): string {\n return this.code.slice(0, 3);\n }\n get subGroupCode(): string {\n return this.code.slice(0, 4);\n }\n\n private constructor(code: string, formatted: string) {\n this.code = code;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): SwedishSniCode | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(input);\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (digits.length !== 5) return null;\n if (digits === \"00000\") return null;\n if (digits.slice(0, 2) === \"00\") return null;\n return new SwedishSniCode(digits, `${digits.slice(0, 2)}.${digits.slice(2)}`);\n }\n\n static parse(input: string): SwedishSniCode {\n const r = SwedishSniCode.tryParse(input);\n if (r === null) throw new Error(\"Invalid SNI code.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishSniCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishSniCode.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishSniCode.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishSniCode.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.formatted;\n }\n toString(): string {\n return this.formatted;\n }\n\n equals(other: SwedishSniCode | null | undefined): boolean {\n return other != null && this.formatted === other.formatted;\n }\n compareTo(other: SwedishSniCode | null | undefined): number {\n if (other == null) return 1;\n return this.formatted < other.formatted ? -1 : this.formatted > other.formatted ? 1 : 0;\n }\n}\n"]}