@cosyte/x12 0.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/profiles/default.ts","../src/parser/errors.ts","../src/parser/delimiters.ts","../src/parser/warnings.ts","../src/parser/release.ts","../src/decimal.ts","../src/parser/segment.ts","../src/parser/envelope.ts","../src/parser/index.ts","../src/loops/define.ts","../src/code-lists/meta.ts","../src/code-lists/carc.ts","../src/code-lists/claim-status-category.ts","../src/code-lists/claim-status.ts","../src/code-lists/clp-status.ts","../src/code-lists/maintenance-type.ts","../src/code-lists/service-type.ts","../src/code-lists/cagc.ts","../src/code-lists/rarc.ts","../src/code-lists/hi-qualifiers.ts","../src/transactions/remit/balance.ts","../src/transactions/remit/get-835.ts","../src/transactions/remit/build-errors.ts","../src/transactions/remit/build-835.ts","../src/transactions/remit/loop-spec.ts","../src/transactions/claim/get-837.ts","../src/transactions/claim/build-errors.ts","../src/transactions/claim/build-837.ts","../src/transactions/claim/loop-spec.ts","../src/transactions/shared/hl.ts","../src/transactions/eligibility/get-271.ts","../src/transactions/eligibility/build-errors.ts","../src/transactions/eligibility/build-271.ts","../src/transactions/eligibility/loop-spec.ts","../src/transactions/status/get-277.ts","../src/transactions/status/build-errors.ts","../src/transactions/status/build-277.ts","../src/transactions/status/loop-spec.ts","../src/transactions/premium/get-820.ts","../src/transactions/premium/build-errors.ts","../src/transactions/premium/build-820.ts","../src/transactions/premium/loop-spec.ts","../src/transactions/enrollment/get-834.ts","../src/transactions/enrollment/build-errors.ts","../src/transactions/enrollment/build-834.ts","../src/transactions/enrollment/loop-spec.ts","../src/transactions/auth/get-278.ts","../src/transactions/auth/build-errors.ts","../src/transactions/auth/build-278.ts","../src/transactions/auth/loop-spec.ts","../src/transactions/ack/errors.ts","../src/transactions/ack/codes.ts","../src/transactions/ack/parse-999.ts","../src/transactions/ack/parse-ta1.ts","../src/transactions/ack/build-999.ts","../src/transactions/ack/build-ta1.ts","../src/serialize/serialize.ts","../src/builder/errors.ts","../src/builder/build-interchange.ts","../src/profiles/errors.ts","../src/profiles/validate.ts","../src/profiles/describe.ts","../src/profiles/merge.ts","../src/profiles/define.ts","../src/profiles/apply.ts","../src/profiles/availity.ts","../src/profiles/bcbsCommon.ts","../src/profiles/index.ts","../src/index.ts"],"names":["state","freezeServiceLine","freezeClaim","decodeNm1","decodeN4","decodePer","decodeRef","openClaim","decodeAmt","openServiceLine","withAddress","withLines","EMPTY_ADDRESS","mergeAddress","withContact","withReference","X12_AGENCY_CODE","enforceStructuralSpec","padControl","pad","expandYY","emitClaim","emitRef","emitServiceLine","emitCasGroup","emitContact","HL_LEVEL_CODES","decodeHl","validateHl","EXPECTED_PARENT_LEVEL","decodeTrn","decodeDtp","HL_LEVEL","emitEntity","emitSubscriber","emitDate","emitAddress","decodeEntity","emitSource","enforceClaim","emitReceiver","emitProvider","emitMember","emitDependent","EMPTY_HEADER","decodeBpr","decodeN1","emitParty","emitPerson","openMember","freezeMember","noop","enforceAcceptIsClean","joinSeg"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Process-scoped default profile management. A single mutable module-scoped\n * `let` — the only mutable state in the library — so `parseX12(raw)` (with no\n * explicit profile) can consult a registered default.\n *\n * `setDefaultProfile` EXISTS but is DISCOURAGED: it is scoped to the current\n * Node process, NOT shared across workers, and NOT reset between test files.\n * Tests that touch it MUST clean up in `afterEach` (`setDefaultProfile(null)`)\n * to prevent cross-test bleed.\n *\n * Zero runtime deps.\n */\n\nimport type { X12Profile } from \"./types.js\";\n\n/**\n * Process-scoped default. `undefined` means \"unset\". `setDefaultProfile(null)`\n * resets to `undefined`.\n *\n * @internal\n */\nlet _defaultProfile: X12Profile | undefined = undefined;\n\n/**\n * Register a process-scoped default profile. `parseX12(raw)` (no explicit\n * profile arg) consults `getDefaultProfile()` and attaches the returned\n * profile to the result. Pass `null` (or `undefined`) to clear.\n *\n * Explicit args ALWAYS win — `parseX12(raw, { profile: myProfile })` uses\n * `myProfile` regardless of the default; `parseX12(raw, { profile: null })`\n * opts out of the default for a single call without changing the registered\n * default.\n *\n * **Test hygiene:** the only mutable module-scoped state in the library.\n * Tests that call this MUST clean up in `afterEach` (`setDefaultProfile(null)`).\n *\n * @example\n * ```ts\n * import { setDefaultProfile, getDefaultProfile, profiles, parseX12 } from \"@cosyte/x12\";\n * setDefaultProfile(profiles.availity);\n * const ix = parseX12(raw);\n * ix.profile?.name; // \"availity\"\n * setDefaultProfile(null); // clear (or in test teardown)\n * ```\n */\nexport function setDefaultProfile(profile: X12Profile | null): void {\n // Accept `undefined` defensively for JS callers — treat it like null.\n _defaultProfile = profile ?? undefined;\n}\n\n/**\n * Return the current default profile, or `undefined` if none is registered.\n *\n * @example\n * ```ts\n * import { getDefaultProfile } from \"@cosyte/x12\";\n * const p = getDefaultProfile();\n * if (p !== undefined) console.log(\"default profile:\", p.name);\n * ```\n */\nexport function getDefaultProfile(): X12Profile | undefined {\n return _defaultProfile;\n}\n","/**\n * Fatal error taxonomy for the `@cosyte/x12` parser pipeline. Four Tier-3\n * codes cover every unrecoverable structural failure in Phase 1; anything\n * less severe is a Tier-2 warning (see `./warnings.ts`). `X12ParseError` is\n * thrown directly; consumers narrow via the `code` discriminant. The set is\n * locked at 4 and is additions-only thereafter — adding a code is a\n * breaking-change tripwire (see `test/warning-codes.snapshot.test.ts`).\n */\n\nimport type { X12Position } from \"./types.js\";\n\n/**\n * Stable string codes for every Tier-3 fatal `parseX12` may throw. Phase 1\n * locks the registry at four codes: anything else MUST be a Tier-2 warning.\n * Consumers narrow on `err.code` to react to specific structural failures.\n *\n * @example\n * ```ts\n * import { parseX12, FATAL_CODES, X12ParseError } from \"@cosyte/x12\";\n * try {\n * parseX12(\"\");\n * } catch (err) {\n * if (err instanceof X12ParseError && err.code === FATAL_CODES.X12_EMPTY_INPUT) {\n * // handle empty input\n * }\n * }\n * ```\n */\nexport const FATAL_CODES = {\n X12_NO_ISA_HEADER: \"X12_NO_ISA_HEADER\",\n X12_ISA_TOO_SHORT: \"X12_ISA_TOO_SHORT\",\n X12_INVALID_DELIMITERS: \"X12_INVALID_DELIMITERS\",\n X12_EMPTY_INPUT: \"X12_EMPTY_INPUT\",\n} as const;\n\n/**\n * Discriminant type for `X12ParseError.code`. Narrowing a caught error by\n * this code lets consumers write exhaustive `switch` blocks (enabled by the\n * `switch-exhaustiveness-check` lint rule) and guarantees a typo-free\n * comparison against the `FATAL_CODES` registry.\n *\n * @example\n * ```ts\n * import type { X12FatalCode } from \"@cosyte/x12\";\n * function describe(code: X12FatalCode): string {\n * switch (code) {\n * case \"X12_EMPTY_INPUT\":\n * return \"input was empty\";\n * case \"X12_NO_ISA_HEADER\":\n * return \"missing ISA\";\n * case \"X12_ISA_TOO_SHORT\":\n * return \"ISA truncated\";\n * case \"X12_INVALID_DELIMITERS\":\n * return \"bad ISA delimiters\";\n * }\n * }\n * ```\n */\nexport type X12FatalCode = (typeof FATAL_CODES)[keyof typeof FATAL_CODES];\n\n/**\n * Maximum chars retained on `X12ParseError.snippet`. The snippet may carry\n * PHI/PII when parsing real interchanges — keeping it bounded limits the\n * blast radius and pairs with the documented consumer-redaction boundary.\n * Roadmap §7 (PHI posture) sets the upper bound at ~64 chars; we cap at 63\n * + the 1-char Unicode ellipsis = 64 total.\n *\n * @internal\n */\nconst SNIPPET_MAX_INPUT = 63;\n\n/**\n * Build a bounded snippet of input for attachment to a fatal error.\n * Truncates to {@link SNIPPET_MAX_INPUT} chars + a 1-char Unicode ellipsis\n * so the returned string is never longer than 64 chars.\n *\n * @internal\n */\nexport function snippet(input: string): string {\n return input.length > SNIPPET_MAX_INPUT ? input.slice(0, SNIPPET_MAX_INPUT) + \"…\" : input;\n}\n\n/**\n * Thrown by `parseX12` when the input violates one of the 4 unrecoverable\n * Tier-3 structural rules (missing ISA, truncated ISA, invalid ISA\n * delimiters, or empty input). Carries positional context plus a short\n * snippet of the offending input so consumers can log actionable errors.\n *\n * @remarks\n * Snippets may contain PHI/PII when parsing real interchanges (member IDs\n * appear in ISA-06/08 only as trading-partner IDs, not patient identity —\n * but real claim/eligibility bodies elsewhere in the input can carry PHI).\n * Redact at the call site if required by your compliance posture. The\n * library does not redact snippets itself.\n *\n * @example\n * ```ts\n * import { parseX12, X12ParseError } from \"@cosyte/x12\";\n * try {\n * parseX12(\"\");\n * } catch (err) {\n * if (err instanceof X12ParseError && err.code === \"X12_EMPTY_INPUT\") {\n * // handle empty input — err.position, err.snippet available\n * }\n * }\n * ```\n */\nexport class X12ParseError extends Error {\n public readonly code: X12FatalCode;\n public readonly position: X12Position;\n public readonly snippet: string;\n\n /**\n * Construct a new `X12ParseError`. All four fields are required so every\n * thrower populates full positional context.\n *\n * @internal\n */\n public constructor(\n code: X12FatalCode,\n message: string,\n position: X12Position,\n snippetText: string,\n ) {\n super(message);\n this.name = \"X12ParseError\";\n this.code = code;\n this.position = position;\n this.snippet = snippetText;\n }\n}\n","/**\n * ISA delimiter-detection stage for the `@cosyte/x12` parser pipeline.\n * Reads the four delimiters from FIXED byte positions inside the ISA\n * envelope (per ASC X12 .5, Interchange Control Structures) and throws a\n * Tier-3 `X12ParseError` if the structural preconditions fail. Downstream\n * stages (`envelope.ts`) consume the returned {@link Delimiters} verbatim\n * and NEVER assume any delimiter — in particular the component separator\n * (ISA-16) is rarely `:` outside Medicare; clearinghouses commonly use\n * `\\`, `^`, or `|`.\n *\n * Three of the four Tier-3 fatal codes originate here —\n * `X12_NO_ISA_HEADER`, `X12_ISA_TOO_SHORT`, `X12_INVALID_DELIMITERS`. The\n * fourth, `X12_EMPTY_INPUT`, is owned by the top-level `parseX12` entry.\n */\n\nimport { FATAL_CODES, X12ParseError, snippet } from \"./errors.js\";\nimport type { Delimiters } from \"./types.js\";\n\n/**\n * Minimum number of bytes a valid ISA segment occupies. ASC X12 .5 fixes\n * the ISA at 106 bytes total, **including** the trailing segment\n * terminator: 3 (\"ISA\") + 16 element separators + 86 element-value bytes\n * (sum of fixed widths 2+10+2+10+2+15+2+15+6+4+1+5+9+1+1+1) + 1\n * terminator = 106. Anything shorter cannot carry the 16 ISA elements and\n * is Tier-3 `X12_ISA_TOO_SHORT`.\n *\n * @example\n * ```ts\n * import { ISA_MIN_LENGTH } from \"@cosyte/x12\";\n * ISA_MIN_LENGTH; // 106 — a raw interchange shorter than this is X12_ISA_TOO_SHORT\n * ```\n */\nexport const ISA_MIN_LENGTH = 106;\n\n/**\n * Zero-indexed byte positions of the four delimiter classes inside the\n * 106-byte ISA. Locked by ASC X12 .5; do NOT make these configurable.\n *\n * - `element` at byte 3 — the byte immediately after the literal `\"ISA\"`.\n * - `repetition` at byte 82 — ISA-11 (the Control Standards Identifier\n * slot, repurposed as the repetition separator in 005010+).\n * - `component` at byte 104 — ISA-16 (the LAST element).\n * - `segment` at byte 105 — the byte immediately after ISA-16.\n *\n * @example\n * ```ts\n * import { DELIMITER_POSITIONS } from \"@cosyte/x12\";\n * // The element separator is always the 4th byte of a well-formed ISA:\n * raw.charAt(DELIMITER_POSITIONS.element); // e.g. \"*\"\n * ```\n *\n * @internal\n */\nexport const DELIMITER_POSITIONS = {\n element: 3,\n repetition: 82,\n component: 104,\n segment: 105,\n} as const;\n\n/**\n * Detect the four X12 delimiters from a raw input string by reading fixed\n * byte positions inside the ISA envelope. Validates that:\n *\n * - the input is at least {@link ISA_MIN_LENGTH} bytes (else\n * `X12_ISA_TOO_SHORT`),\n * - the input begins with the literal `\"ISA\"` (else `X12_NO_ISA_HEADER`),\n * - each delimiter is a single visible (non-whitespace, non-control)\n * character and the four are mutually distinct (else\n * `X12_INVALID_DELIMITERS`),\n * - the detected element separator actually appears at every fixed ISA\n * element-separator position (else `X12_INVALID_DELIMITERS`) — guards\n * against an input that begins with `\"ISA\"` followed by structurally\n * wrong bytes (e.g. a tab as element separator with `:` further in).\n *\n * Phase 1 is liberal in what it accepts AFTER the ISA — downstream\n * envelope walking emits Tier-2 warnings rather than throwing. But the\n * ISA itself MUST be structurally readable; otherwise no later stage has\n * a delimiter set to work with.\n *\n * @example\n * ```ts\n * import { detectDelimiters } from \"@cosyte/x12\";\n * const d = detectDelimiters(\"ISA*00* *00* *ZZ*SENDER *ZZ*RECEIVER *250101*1200*^*00501*000000001*0*P*:~GS*HC*S*R*20250101*1200*1*X*005010X222A2~...\");\n * d.element; // \"*\"\n * d.repetition; // \"^\"\n * d.component; // \":\"\n * d.segment; // \"~\"\n * ```\n */\nexport function detectDelimiters(raw: string): Delimiters {\n const fatalPosition = { segmentIndex: 0, interchangeIndex: 0 };\n const snip = snippet(raw);\n\n if (raw.length < 3 || raw.slice(0, 3) !== \"ISA\") {\n throw new X12ParseError(\n FATAL_CODES.X12_NO_ISA_HEADER,\n \"Input does not begin with an ISA segment — X12 interchanges must start with ISA.\",\n fatalPosition,\n snip,\n );\n }\n\n if (raw.length < ISA_MIN_LENGTH) {\n throw new X12ParseError(\n FATAL_CODES.X12_ISA_TOO_SHORT,\n `ISA segment is truncated — need ${String(ISA_MIN_LENGTH)} bytes including the segment terminator, got ${String(raw.length)}.`,\n fatalPosition,\n snip,\n );\n }\n\n const element = raw.charAt(DELIMITER_POSITIONS.element);\n const repetition = raw.charAt(DELIMITER_POSITIONS.repetition);\n const component = raw.charAt(DELIMITER_POSITIONS.component);\n const segment = raw.charAt(DELIMITER_POSITIONS.segment);\n\n // Per-character predicate: visible, single-byte at the delimiter\n // position, and not whitespace/control. `noUncheckedIndexedAccess`\n // already narrows charAt() to `string`; the prior `raw.length <\n // ISA_MIN_LENGTH` guard ensures every charAt() above is in bounds and\n // returns exactly one UTF-16 code unit.\n const isValidDelimiterChar = (c: string): boolean => {\n const code = c.charCodeAt(0);\n // Reject ASCII control chars (0x00–0x1F) and DEL (0x7F).\n if (code < 0x20 || code === 0x7f) return false;\n // Reject any whitespace per Unicode property.\n if (/\\s/u.test(c)) return false;\n return true;\n };\n\n for (const [name, ch] of [\n [\"element\", element],\n [\"repetition\", repetition],\n [\"component\", component],\n [\"segment\", segment],\n ] as const) {\n if (!isValidDelimiterChar(ch)) {\n throw new X12ParseError(\n FATAL_CODES.X12_INVALID_DELIMITERS,\n `Delimiter \"${name}\" at ISA byte ${String(DELIMITER_POSITIONS[name] + 1)} is whitespace, control, or empty.`,\n fatalPosition,\n snip,\n );\n }\n }\n\n const distinct = new Set([element, repetition, component, segment]);\n if (distinct.size !== 4) {\n throw new X12ParseError(\n FATAL_CODES.X12_INVALID_DELIMITERS,\n \"Detected ISA delimiters (element, repetition, component, segment) must all be distinct.\",\n fatalPosition,\n snip,\n );\n }\n\n // Verify the element separator actually appears at every fixed ISA\n // element-separator position — guards against an input that begins\n // with `\"ISA\"` followed by structurally wrong bytes. ISA has 16\n // elements, so there are 16 element separators (one before each\n // element). Positions: 3, 6, 17, 20, 31, 34, 50, 53, 69, 76, 81, 83,\n // 89, 99, 101, 103 (zero-indexed). The byte AT position 105 is the\n // segment terminator, not an element separator.\n const ELEMENT_SEP_POSITIONS = [3, 6, 17, 20, 31, 34, 50, 53, 69, 76, 81, 83, 89, 99, 101, 103];\n for (const pos of ELEMENT_SEP_POSITIONS) {\n if (raw.charAt(pos) !== element) {\n throw new X12ParseError(\n FATAL_CODES.X12_INVALID_DELIMITERS,\n `Element separator \"${element}\" was detected at ISA byte 4 but is missing at fixed ISA byte ${String(pos + 1)} — ISA element layout is not 005010-conformant.`,\n fatalPosition,\n snip,\n );\n }\n }\n\n return { element, repetition, component, segment };\n}\n","/**\n * Tier-2 warning registry and factories for the `@cosyte/x12` parser\n * pipeline. Consumers compare `warning.code === WARNING_CODES.<CODE>` to\n * narrow and react; the parser uses the factories here to construct every\n * warning it emits so messages, payload shape, and positional context stay\n * consistent across stages.\n *\n * The Phase 1 set is intentionally small (8 codes) — every additional code\n * is a public-surface addition that needs a snapshot bump\n * (see `test/warning-codes.snapshot.test.ts`). Phase 2+ extends, never\n * renames.\n *\n * Warning messages NEVER echo field VALUES (matches the hl7 H-PHI invariant\n * locked in 2026-06). They carry positional context plus bounded metadata\n * (e.g. counts, expected-vs-actual control numbers) — never the raw bytes\n * the warning describes. The `snippet` on a fatal {@link\n * \"./errors.js\".X12ParseError} is the documented consumer-redaction\n * boundary; warnings have no snippet.\n */\n\nimport type { X12Position } from \"./types.js\";\n\n/**\n * Stable string codes for every Tier-2 warning the parser may emit. The\n * registry is frozen via `as const` so TypeScript infers the exact string\n * literal union for {@link X12WarningCode} — zero runtime cost, no magic-\n * string comparisons for consumers.\n *\n * @example\n * ```ts\n * import { parseX12, WARNING_CODES } from \"@cosyte/x12\";\n * const ix = parseX12(raw);\n * if (ix.warnings.some((w) => w.code === WARNING_CODES.X12_PRE_005010)) {\n * // sender is on a pre-005010 version family\n * }\n * ```\n */\nexport const WARNING_CODES = {\n X12_CONTROL_NUMBER_MISMATCH: \"X12_CONTROL_NUMBER_MISMATCH\",\n X12_PRE_005010: \"X12_PRE_005010\",\n X12_GROUP_COUNT_MISMATCH: \"X12_GROUP_COUNT_MISMATCH\",\n X12_TRANSACTION_COUNT_MISMATCH: \"X12_TRANSACTION_COUNT_MISMATCH\",\n X12_SEGMENT_COUNT_MISMATCH: \"X12_SEGMENT_COUNT_MISMATCH\",\n X12_TRAILING_GARBAGE: \"X12_TRAILING_GARBAGE\",\n X12_MISSING_IEA: \"X12_MISSING_IEA\",\n X12_MISSING_GE: \"X12_MISSING_GE\",\n X12_MISSING_SE: \"X12_MISSING_SE\",\n X12_DANGLING_RELEASE_CHAR: \"X12_DANGLING_RELEASE_CHAR\",\n X12_UNEXPECTED_SEGMENT: \"X12_UNEXPECTED_SEGMENT\",\n X12_835_REMIT_BALANCE_MISMATCH: \"X12_835_REMIT_BALANCE_MISMATCH\",\n X12_UNKNOWN_CARC: \"X12_UNKNOWN_CARC\",\n X12_UNKNOWN_RARC: \"X12_UNKNOWN_RARC\",\n X12_HL_PARENT_MISMATCH: \"X12_HL_PARENT_MISMATCH\",\n X12_HL_PARENT_LEVEL_INVALID: \"X12_HL_PARENT_LEVEL_INVALID\",\n X12_UNKNOWN_HI_QUALIFIER: \"X12_UNKNOWN_HI_QUALIFIER\",\n X12_MISSING_REQUIRED_LOOP: \"X12_MISSING_REQUIRED_LOOP\",\n X12_837_UNKNOWN_VARIANT: \"X12_837_UNKNOWN_VARIANT\",\n X12_UNKNOWN_CLAIM_STATUS_CATEGORY: \"X12_UNKNOWN_CLAIM_STATUS_CATEGORY\",\n X12_UNKNOWN_CLAIM_STATUS: \"X12_UNKNOWN_CLAIM_STATUS\",\n X12_834_UNKNOWN_MAINTENANCE_TYPE: \"X12_834_UNKNOWN_MAINTENANCE_TYPE\",\n} as const;\n\n/**\n * Discriminant type for `X12ParseWarning.code`. Narrowing a warning by this\n * code lets consumers write exhaustive `switch` blocks and guarantees a\n * typo-free comparison against the `WARNING_CODES` registry.\n *\n * @example\n * ```ts\n * import type { X12ParseWarning, X12WarningCode } from \"@cosyte/x12\";\n * function describe(w: X12ParseWarning): string {\n * const code: X12WarningCode = w.code;\n * switch (code) {\n * case \"X12_PRE_005010\":\n * return \"pre-005010 sender\";\n * default:\n * return `warning: ${code}`;\n * }\n * }\n * ```\n */\nexport type X12WarningCode = (typeof WARNING_CODES)[keyof typeof WARNING_CODES];\n\n/**\n * Data shape for every Tier-2 warning emitted by the parser. Warnings are\n * plain data (distinct from `X12ParseError`, which is a thrown `Error`\n * subclass) so they can be safely accumulated on `X12Interchange.warnings`\n * and passed to `onWarning` callbacks.\n *\n * @example\n * ```ts\n * import type { X12ParseWarning } from \"@cosyte/x12\";\n * const w: X12ParseWarning = {\n * code: \"X12_PRE_005010\",\n * message: \"ISA-12 declares pre-005010 version.\",\n * position: { segmentIndex: 0, interchangeIndex: 0, elementIndex: 12 },\n * };\n * ```\n */\nexport interface X12ParseWarning {\n readonly code: X12WarningCode;\n readonly message: string;\n readonly position: X12Position;\n}\n\n/**\n * Build an `X12_CONTROL_NUMBER_MISMATCH` warning. Emitted when an\n * envelope-trailer control number does not match its matching header —\n * ISA-13 ↔ IEA-02, GS-06 ↔ GE-02, or ST-02 ↔ SE-02. Message carries the\n * field pair label and the expected-vs-actual values bounded to the 9-char\n * (interchange) / variable (group/transaction) numeric forms — these are\n * control numbers, not PHI.\n *\n * @example\n * ```ts\n * import { controlNumberMismatch } from \"@cosyte/x12\";\n * const w = controlNumberMismatch(\n * { segmentIndex: 1, interchangeIndex: 0, elementIndex: 2 },\n * \"ISA-13/IEA-02\",\n * \"000000001\",\n * \"000000002\",\n * );\n * ```\n */\nexport function controlNumberMismatch(\n position: X12Position,\n pair: string,\n header: string,\n trailer: string,\n): X12ParseWarning {\n return {\n code: WARNING_CODES.X12_CONTROL_NUMBER_MISMATCH,\n message: `Control number mismatch (${pair}): header=\"${header}\", trailer=\"${trailer}\".`,\n position,\n };\n}\n\n/**\n * Build an `X12_PRE_005010` warning. Emitted when ISA-12 declares a version\n * earlier than `00501` — the HIPAA-mandated baseline. The parser still\n * accepts the input (Postel's Law: lenient on parse) but flags the\n * mismatch so consumers know the input may diverge from 005010 semantics.\n *\n * @example\n * ```ts\n * import { pre005010 } from \"@cosyte/x12\";\n * const w = pre005010({ segmentIndex: 0, interchangeIndex: 0, elementIndex: 12 }, \"00401\");\n * ```\n */\nexport function pre005010(position: X12Position, declared: string): X12ParseWarning {\n return {\n code: WARNING_CODES.X12_PRE_005010,\n message: `ISA-12 declares version \"${declared}\", not the HIPAA baseline \"00501\".`,\n position,\n };\n}\n\n/**\n * Build an `X12_GROUP_COUNT_MISMATCH` warning. Emitted when IEA-01 does not\n * equal the actual number of GS..GE groups present in the interchange.\n * Trading partners use this to detect transmission truncation; the parser\n * surfaces both values verbatim and never silently corrects them.\n *\n * @example\n * ```ts\n * import { groupCountMismatch } from \"@cosyte/x12\";\n * const w = groupCountMismatch(\n * { segmentIndex: 5, interchangeIndex: 0, elementIndex: 1 },\n * \"2\",\n * 1,\n * );\n * ```\n */\nexport function groupCountMismatch(\n position: X12Position,\n declared: string,\n actual: number,\n): X12ParseWarning {\n return {\n code: WARNING_CODES.X12_GROUP_COUNT_MISMATCH,\n message: `IEA-01 declares ${declared} group(s); ${String(actual)} were present.`,\n position,\n };\n}\n\n/**\n * Build an `X12_TRANSACTION_COUNT_MISMATCH` warning. Emitted when GE-01\n * does not equal the actual number of ST..SE transaction sets present in\n * the group. As with group counts, the parser surfaces both values\n * verbatim and never silently corrects them.\n *\n * @example\n * ```ts\n * import { transactionCountMismatch } from \"@cosyte/x12\";\n * const w = transactionCountMismatch(\n * { segmentIndex: 4, interchangeIndex: 0, groupIndex: 0, elementIndex: 1 },\n * \"3\",\n * 2,\n * );\n * ```\n */\nexport function transactionCountMismatch(\n position: X12Position,\n declared: string,\n actual: number,\n): X12ParseWarning {\n return {\n code: WARNING_CODES.X12_TRANSACTION_COUNT_MISMATCH,\n message: `GE-01 declares ${declared} transaction(s); ${String(actual)} were present.`,\n position,\n };\n}\n\n/**\n * Build an `X12_SEGMENT_COUNT_MISMATCH` warning. Emitted by the spec-clean\n * serializer when an SE-01 value does not equal the actual number of\n * segments in the transaction set it closes (ST through SE inclusive). Like\n * the group/transaction count factories, the serializer surfaces both values\n * verbatim and NEVER silently corrects them — corrected counts are emitted\n * only on `serializeX12(ix, { recomputeCounts: true })`. The parser does not\n * emit this code (it leaves SE-01 reconciliation to the emit half); it is a\n * Phase-8 serializer diagnostic.\n *\n * @example\n * ```ts\n * import { segmentCountMismatch } from \"@cosyte/x12\";\n * const w = segmentCountMismatch(\n * { segmentIndex: 2, interchangeIndex: 0, groupIndex: 0, transactionIndex: 0, elementIndex: 1 },\n * \"6\",\n * 7,\n * );\n * ```\n */\nexport function segmentCountMismatch(\n position: X12Position,\n declared: string,\n actual: number,\n): X12ParseWarning {\n return {\n code: WARNING_CODES.X12_SEGMENT_COUNT_MISMATCH,\n message: `SE-01 declares ${declared} segment(s); ${String(actual)} were present.`,\n position,\n };\n}\n\n/**\n * Build an `X12_TRAILING_GARBAGE` warning. Emitted when non-empty bytes\n * appear after the IEA segment terminator and any optional CRLF. The bytes\n * are preserved verbatim on {@link\n * \"./types.js\".X12Interchange}.`trailingBytes` so consumers can inspect or\n * re-emit them. Common cause: a second interchange concatenated into the\n * same file (multi-ISA — out of v1 scope; only the first interchange is\n * decoded).\n *\n * @example\n * ```ts\n * import { trailingGarbage } from \"@cosyte/x12\";\n * const w = trailingGarbage(\n * { segmentIndex: 6, interchangeIndex: 0 },\n * 42,\n * );\n * ```\n */\nexport function trailingGarbage(position: X12Position, byteCount: number): X12ParseWarning {\n return {\n code: WARNING_CODES.X12_TRAILING_GARBAGE,\n message: `${String(byteCount)} byte(s) followed the IEA terminator — preserved verbatim on \\`trailingBytes\\`.`,\n position,\n };\n}\n\n/**\n * Build an `X12_MISSING_IEA` warning. Emitted when the input opened a\n * valid ISA but EOF arrived before any IEA segment. The parser returns the\n * groups it managed to decode with `iea: undefined`; the warning surfaces\n * the structural break so consumers know the interchange is truncated.\n *\n * @example\n * ```ts\n * import { missingIea } from \"@cosyte/x12\";\n * const w = missingIea({ segmentIndex: 4, interchangeIndex: 0 });\n * ```\n */\nexport function missingIea(position: X12Position): X12ParseWarning {\n return {\n code: WARNING_CODES.X12_MISSING_IEA,\n message: \"Interchange has no IEA trailer — input is truncated.\",\n position,\n };\n}\n\n/**\n * Build an `X12_MISSING_GE` warning. Emitted when a GS opened a functional\n * group but no matching GE appeared before the next GS or IEA. The parser\n * returns the group with `ge: undefined` and the transactions it managed\n * to collect.\n *\n * @example\n * ```ts\n * import { missingGe } from \"@cosyte/x12\";\n * const w = missingGe({ segmentIndex: 3, interchangeIndex: 0, groupIndex: 0 });\n * ```\n */\nexport function missingGe(position: X12Position): X12ParseWarning {\n return {\n code: WARNING_CODES.X12_MISSING_GE,\n message: \"Functional group has no GE trailer — group is truncated.\",\n position,\n };\n}\n\n/**\n * Build an `X12_MISSING_SE` warning. Emitted when an ST opened a\n * transaction set but no matching SE appeared before the next ST, GE, or\n * IEA. The parser returns the transaction with `se: undefined` and the\n * segments it managed to collect.\n *\n * @example\n * ```ts\n * import { missingSe } from \"@cosyte/x12\";\n * const w = missingSe({\n * segmentIndex: 2,\n * interchangeIndex: 0,\n * groupIndex: 0,\n * transactionIndex: 0,\n * });\n * ```\n */\nexport function missingSe(position: X12Position): X12ParseWarning {\n return {\n code: WARNING_CODES.X12_MISSING_SE,\n message: \"Transaction set has no SE trailer — transaction is truncated.\",\n position,\n };\n}\n\n/**\n * Build an `X12_DANGLING_RELEASE_CHAR` warning. Emitted when a release\n * character (`?` per ASC X12 convention; see\n * {@link \"./release.js\".RELEASE_CHAR}) appears at the end of a segment or\n * element with no following byte to escape — the bytes are preserved\n * verbatim so round-trip stays byte-exact, but the structural truncation\n * is flagged so consumers can decide how to react.\n *\n * @example\n * ```ts\n * import { danglingReleaseChar } from \"@cosyte/x12\";\n * const w = danglingReleaseChar({ segmentIndex: 7, interchangeIndex: 0 });\n * ```\n */\nexport function danglingReleaseChar(position: X12Position): X12ParseWarning {\n return {\n code: WARNING_CODES.X12_DANGLING_RELEASE_CHAR,\n message:\n \"Release character (`?`) appears at end of element/segment with no following byte to escape — preserved verbatim.\",\n position,\n };\n}\n\n/**\n * X12 segment-id shape per ASC X12 .5: 2-3 chars, leading uppercase\n * letter, remaining uppercase letter / digit. Used to decide whether a\n * caller-supplied \"segment id\" is the spec name (safe to echo in a\n * warning message) or arbitrary bytes from a hostile input (must not be\n * echoed — H-PHI invariant). @internal\n */\nconst SEGMENT_ID_SHAPE_RE = /^[A-Z][A-Z0-9]{1,2}$/u;\n\n/**\n * Build an `X12_UNEXPECTED_SEGMENT` warning. Emitted when a structurally\n * meaningful envelope segment (`GE`, `SE`, body segments) appears outside\n * its expected parent — e.g. a `GE` with no open `GS`, an `SE` with no open\n * `ST`, or any body segment before the first `ST`. The parser preserves\n * lenient-never-throw and continues; the warning carries the segment id (if\n * it matches the X12 segment-id grammar — otherwise the literal\n * `(non-spec)` is substituted to avoid echoing arbitrary bytes / PHI) and\n * its global segment index so a consumer can locate the deviation.\n *\n * Message NEVER echoes element values — only a SHAPE-VALIDATED 2-or-3-\n * letter segment id (the spec name, not user data) and the structural\n * context, mirroring the H-PHI invariant locked for `@cosyte/hl7`. A\n * hostile input that puts PHI in the first slot of a malformed \"segment\"\n * still has its bytes preserved on the parent container — they are simply\n * not echoed in the diagnostic message.\n *\n * @example\n * ```ts\n * import { unexpectedSegment } from \"@cosyte/x12\";\n * const w = unexpectedSegment(\n * { segmentIndex: 12, interchangeIndex: 0 },\n * \"GE\",\n * \"no open functional group\",\n * );\n * ```\n */\nexport function unexpectedSegment(\n position: X12Position,\n segmentId: string,\n context: string,\n): X12ParseWarning {\n const safeId = SEGMENT_ID_SHAPE_RE.test(segmentId) ? segmentId : \"(non-spec)\";\n return {\n code: WARNING_CODES.X12_UNEXPECTED_SEGMENT,\n message: `Unexpected \"${safeId}\" segment — ${context}; segment is preserved on the prior open container if any.`,\n position,\n };\n}\n\n/**\n * X12 CARC / RARC code shape: 1-5 leading-alphanumeric chars. Used to\n * guard `X12_UNKNOWN_CARC` / `X12_UNKNOWN_RARC` so we never echo\n * arbitrary bytes from a hostile inbound element value — the H-PHI\n * invariant. CARC codes are short integer strings (`\"1\"`..`\"999\"`); RARC\n * codes are short letter + digit codes (`\"M1\"`, `\"N4\"`, `\"MA130\"`). A\n * value that does not match collapses to `(non-spec)` in the message.\n * @internal\n */\nconst CODE_LIST_VALUE_SHAPE_RE = /^[A-Z0-9]{1,5}$/u;\n\n/**\n * Build an `X12_835_REMIT_BALANCE_MISMATCH` warning. Emitted by the 835\n * helper when a balance invariant fails — typically `CLP-04 + CLP-05 +\n * Σ(claim-level CAS amounts) !== CLP-03`, or `Σ(SVC paid) + Σ(line CAS)\n * !== CLP-04`, or `Σ(claim CLP-04) + Σ(PLB adjustments) !== BPR-02`.\n *\n * The message carries the invariant label, the spec'd value, the\n * computed value, and the side-by-side diff — all numeric strings (the\n * outputs of {@link \"../decimal.js\".X12Decimal} `toString()`). It NEVER\n * echoes patient identifiers, member ids, names, account numbers, or any\n * other PHI-shaped value — mirrors the H-PHI invariant from `@cosyte/hl7`.\n * The parser ALWAYS surfaces this and NEVER silently rebalances.\n *\n * @example\n * ```ts\n * import { remitBalanceMismatch } from \"@cosyte/x12\";\n * const w = remitBalanceMismatch(\n * { segmentIndex: 12, interchangeIndex: 0, groupIndex: 0, transactionIndex: 0 },\n * \"CLP-04 + CLP-05 + ΣCAS == CLP-03\",\n * \"500.00\",\n * \"499.99\",\n * \"0.01\",\n * );\n * ```\n */\nexport function remitBalanceMismatch(\n position: X12Position,\n invariant: string,\n spec: string,\n computed: string,\n delta: string,\n): X12ParseWarning {\n return {\n code: WARNING_CODES.X12_835_REMIT_BALANCE_MISMATCH,\n message: `835 balance invariant violated [${invariant}]: spec=\"${spec}\", computed=\"${computed}\", delta=\"${delta}\".`,\n position,\n };\n}\n\n/**\n * Build an `X12_UNKNOWN_CARC` warning. Emitted when a CAS adjustment\n * carries a CARC code outside the bundled snapshot (see\n * {@link \"../code-lists/carc.js\".CARC}). The verbatim code is still\n * preserved on the parsed adjustment — only the description is missing.\n * The code value is shape-validated against `[A-Z0-9]{1,5}` before\n * echoing in the message; a hostile non-conformant value collapses to\n * the literal `(non-spec)` so the parser never echoes arbitrary bytes\n * (H-PHI invariant).\n *\n * @example\n * ```ts\n * import { unknownCarc } from \"@cosyte/x12\";\n * const w = unknownCarc(\n * { segmentIndex: 14, interchangeIndex: 0, groupIndex: 0, transactionIndex: 0 },\n * \"9999\",\n * );\n * ```\n */\nexport function unknownCarc(position: X12Position, code: string): X12ParseWarning {\n const safe = CODE_LIST_VALUE_SHAPE_RE.test(code) ? code : \"(non-spec)\";\n return {\n code: WARNING_CODES.X12_UNKNOWN_CARC,\n message: `Unknown CARC \"${safe}\" — code is outside the bundled snapshot; verbatim value preserved, description unavailable.`,\n position,\n };\n}\n\n/**\n * Build an `X12_UNKNOWN_RARC` warning. Companion to {@link unknownCarc}\n * for RARC codes on `MIA` / `MOA` / `LQ` / `NTE`. Same shape-validation\n * + verbatim-preserve posture.\n *\n * @example\n * ```ts\n * import { unknownRarc } from \"@cosyte/x12\";\n * const w = unknownRarc(\n * { segmentIndex: 16, interchangeIndex: 0, groupIndex: 0, transactionIndex: 0 },\n * \"ZZZZZ\",\n * );\n * ```\n */\nexport function unknownRarc(position: X12Position, code: string): X12ParseWarning {\n const safe = CODE_LIST_VALUE_SHAPE_RE.test(code) ? code : \"(non-spec)\";\n return {\n code: WARNING_CODES.X12_UNKNOWN_RARC,\n message: `Unknown RARC \"${safe}\" — code is outside the bundled snapshot; verbatim value preserved, description unavailable.`,\n position,\n };\n}\n\n/**\n * HL identifier shape per the 837 TR3s — a sequential integer string,\n * typically 1-4 digits. Used to guard `X12_HL_PARENT_MISMATCH` / `X12_HL_\n * PARENT_LEVEL_INVALID` so the parser never echoes arbitrary bytes from\n * hostile input — only a numeric token (compact + spec-shaped) or the\n * literal `(non-spec)`. @internal\n */\nconst HL_ID_SHAPE_RE = /^[0-9]{1,4}$/u;\n\n/**\n * HL level code shape per X12 0736 — a 2-digit numeric code (`20`, `22`,\n * `23`, etc.). Same H-PHI guard. @internal\n */\nconst HL_LEVEL_CODE_SHAPE_RE = /^[0-9]{2}$/u;\n\n/**\n * HI qualifier shape per X12 1270 — uppercase letter + 1-2 alphanumerics\n * (`ABK`, `BBR`, `DR`). Same H-PHI guard. @internal\n */\nconst HI_QUALIFIER_SHAPE_RE = /^[A-Z][A-Z0-9]{1,2}$/u;\n\n/**\n * Build an `X12_HL_PARENT_MISMATCH` warning. Emitted by the 837 helper\n * when an HL segment's HL-02 (parent id) does not match any earlier-\n * emitted HL-01 in the same transaction. The walker NEVER silently\n * re-numbers the hierarchy — the safety primitive of the 837 is HL\n * parent-pointer integrity. The reported ids are shape-validated against\n * the HL-id grammar before echoing.\n *\n * @example\n * ```ts\n * import { hlParentMismatch } from \"@cosyte/x12\";\n * const w = hlParentMismatch(\n * { segmentIndex: 14, interchangeIndex: 0, groupIndex: 0, transactionIndex: 0 },\n * \"3\",\n * \"9\",\n * );\n * ```\n */\nexport function hlParentMismatch(\n position: X12Position,\n hlId: string,\n declaredParentId: string,\n): X12ParseWarning {\n const safeHl = HL_ID_SHAPE_RE.test(hlId) ? hlId : \"(non-spec)\";\n const safeParent = HL_ID_SHAPE_RE.test(declaredParentId) ? declaredParentId : \"(non-spec)\";\n return {\n code: WARNING_CODES.X12_HL_PARENT_MISMATCH,\n message: `HL \"${safeHl}\" declares parent \"${safeParent}\" but no earlier HL with that id was emitted — parser preserves the declared pointer verbatim and NEVER silently re-numbers.`,\n position,\n };\n}\n\n/**\n * Build an `X12_HL_PARENT_LEVEL_INVALID` warning. Emitted when an HL's\n * level code (HL-03) is inconsistent with its declared parent's level\n * code per the 837 TR3 (e.g. a `22` Subscriber claiming a `22`\n * Subscriber as its parent — the parent must be `20` Information\n * Source). The verbatim level codes are shape-validated before echoing.\n *\n * @example\n * ```ts\n * import { hlParentLevelInvalid } from \"@cosyte/x12\";\n * const w = hlParentLevelInvalid(\n * { segmentIndex: 14, interchangeIndex: 0, groupIndex: 0, transactionIndex: 0 },\n * \"3\",\n * \"23\",\n * \"2\",\n * \"22\",\n * \"20\",\n * );\n * ```\n */\nexport function hlParentLevelInvalid(\n position: X12Position,\n hlId: string,\n hlLevel: string,\n parentHlId: string,\n parentLevel: string,\n expectedParentLevel: string,\n): X12ParseWarning {\n const safeHl = HL_ID_SHAPE_RE.test(hlId) ? hlId : \"(non-spec)\";\n const safeLevel = HL_LEVEL_CODE_SHAPE_RE.test(hlLevel) ? hlLevel : \"(non-spec)\";\n const safeParent = HL_ID_SHAPE_RE.test(parentHlId) ? parentHlId : \"(non-spec)\";\n const safeParentLevel = HL_LEVEL_CODE_SHAPE_RE.test(parentLevel) ? parentLevel : \"(non-spec)\";\n const safeExpected = HL_LEVEL_CODE_SHAPE_RE.test(expectedParentLevel)\n ? expectedParentLevel\n : \"(non-spec)\";\n return {\n code: WARNING_CODES.X12_HL_PARENT_LEVEL_INVALID,\n message: `HL \"${safeHl}\" (level \"${safeLevel}\") declares parent \"${safeParent}\" with level \"${safeParentLevel}\" but TR3 requires parent level \"${safeExpected}\".`,\n position,\n };\n}\n\n/**\n * Build an `X12_UNKNOWN_HI_QUALIFIER` warning. Emitted by the 837 helper\n * when an HI composite's qualifier (first component) is outside the\n * bundled snapshot at {@link \"../code-lists/hi-qualifiers.js\".\n * HI_QUALIFIERS}. The verbatim code is preserved on the parsed\n * diagnosis/procedure with `codeSystem: \"unknown\"` so consumers can\n * still react. Qualifier is shape-validated before echoing — the H-PHI\n * invariant.\n *\n * @example\n * ```ts\n * import { unknownHiQualifier } from \"@cosyte/x12\";\n * const w = unknownHiQualifier(\n * { segmentIndex: 25, interchangeIndex: 0, groupIndex: 0, transactionIndex: 0 },\n * \"ZZZ\",\n * );\n * ```\n */\nexport function unknownHiQualifier(position: X12Position, qualifier: string): X12ParseWarning {\n const safe = HI_QUALIFIER_SHAPE_RE.test(qualifier) ? qualifier : \"(non-spec)\";\n return {\n code: WARNING_CODES.X12_UNKNOWN_HI_QUALIFIER,\n message: `Unknown HI qualifier \"${safe}\" — qualifier is outside the bundled HI_QUALIFIERS snapshot; verbatim qualifier + code preserved, codeSystem resolves to \"unknown\".`,\n position,\n };\n}\n\n/**\n * Loop id shape — alphanumeric, 3-6 chars (`\"2000A\"`, `\"2300\"`, `\"2010BB\"`).\n * @internal\n */\nconst LOOP_ID_SHAPE_RE = /^[0-9A-Z]{3,6}$/u;\n\n/**\n * Build an `X12_MISSING_REQUIRED_LOOP` warning. Emitted when a TR3-required\n * loop is structurally absent (e.g. no Loop 2010BB Payer Name inside a\n * Subscriber HL). The parser does not enforce situational rules — only\n * loops marked `usage: \"required\"` in the loop spec fire this warning.\n * The loop id is shape-validated before echoing.\n *\n * @example\n * ```ts\n * import { missingRequiredLoop } from \"@cosyte/x12\";\n * const w = missingRequiredLoop(\n * { segmentIndex: 12, interchangeIndex: 0, groupIndex: 0, transactionIndex: 0 },\n * \"2010BB\",\n * \"Loop 2010BB Payer Name required when Loop 2000B (Subscriber HL) is present\",\n * );\n * ```\n */\nexport function missingRequiredLoop(\n position: X12Position,\n loopId: string,\n rationale: string,\n): X12ParseWarning {\n const safe = LOOP_ID_SHAPE_RE.test(loopId) ? loopId : \"(non-spec)\";\n return {\n code: WARNING_CODES.X12_MISSING_REQUIRED_LOOP,\n message: `Missing required loop \"${safe}\": ${rationale}`,\n position,\n };\n}\n\n/**\n * Implementation-convention reference shape per the 837 TR3s —\n * `005010X` + 3 alphanumerics (`005010X222A2`). @internal\n */\nconst ICR_SHAPE_RE = /^[0-9A-Z]{3,16}$/u;\n\n/**\n * Build an `X12_837_UNKNOWN_VARIANT` warning. Emitted when the 837 helper\n * cannot resolve the variant from ST-03's implementation-convention\n * reference AND no SVx service-line segment is present to fall back on.\n * The parsed submission still ships with `variant: \"unknown\"`; the walker\n * does its best on shared structure (envelope, HL, claim header) and\n * skips variant-specific service-line decoding. The implementation-\n * convention reference is shape-validated before echoing.\n *\n * @example\n * ```ts\n * import { unknown837Variant } from \"@cosyte/x12\";\n * const w = unknown837Variant(\n * { segmentIndex: 1, interchangeIndex: 0, groupIndex: 0, transactionIndex: 0 },\n * \"005010X999\",\n * );\n * ```\n */\nexport function unknown837Variant(\n position: X12Position,\n implementationConventionReference: string | undefined,\n): X12ParseWarning {\n const safe =\n implementationConventionReference !== undefined &&\n ICR_SHAPE_RE.test(implementationConventionReference)\n ? implementationConventionReference\n : \"(non-spec)\";\n return {\n code: WARNING_CODES.X12_837_UNKNOWN_VARIANT,\n message: `837 variant could not be resolved — ST-03 implementation convention reference \"${safe}\" is not one of \"005010X222A2\" / \"X223A3\" / \"X224A2\"; no SVx service-line segment was seen to fall back on.`,\n position,\n };\n}\n\n/**\n * Claim Status Category Code (CSCC) shape per X12 code source 507 — a\n * leading uppercase letter + 1-2 alphanumerics (`A2`, `F3`, `F3F`, `P1`,\n * `D0`). Used to guard `X12_UNKNOWN_CLAIM_STATUS_CATEGORY` so the parser\n * never echoes arbitrary bytes from a hostile STC composite — the H-PHI\n * invariant. @internal\n */\nconst CLAIM_STATUS_CATEGORY_SHAPE_RE = /^[A-Z][0-9A-Z]{1,2}$/u;\n\n/**\n * Build an `X12_UNKNOWN_CLAIM_STATUS_CATEGORY` warning. Emitted by the 277\n * / 277CA helpers when an STC composite's Claim Status Category Code\n * (CSCC, first component) is outside the bundled snapshot (see\n * {@link \"../code-lists/claim-status-category.js\".\n * CLAIM_STATUS_CATEGORY_CODES}). The verbatim CSCC is still preserved on\n * the parsed status — only the description is missing. The code value is\n * shape-validated against the CSCC grammar before echoing; a hostile\n * non-conformant value collapses to the literal `(non-spec)` so the\n * parser never echoes arbitrary bytes (H-PHI invariant).\n *\n * @example\n * ```ts\n * import { unknownClaimStatusCategory } from \"@cosyte/x12\";\n * const w = unknownClaimStatusCategory(\n * { segmentIndex: 18, interchangeIndex: 0, groupIndex: 0, transactionIndex: 0 },\n * \"Z9\",\n * );\n * ```\n */\nexport function unknownClaimStatusCategory(position: X12Position, code: string): X12ParseWarning {\n const safe = CLAIM_STATUS_CATEGORY_SHAPE_RE.test(code) ? code : \"(non-spec)\";\n return {\n code: WARNING_CODES.X12_UNKNOWN_CLAIM_STATUS_CATEGORY,\n message: `Unknown claim status category (CSCC) \"${safe}\" — code is outside the bundled snapshot; verbatim value preserved, description unavailable.`,\n position,\n };\n}\n\n/**\n * Build an `X12_UNKNOWN_CLAIM_STATUS` warning. Companion to\n * {@link unknownClaimStatusCategory} for the Claim Status Code (CSC, the\n * second component of an STC composite; X12 code source 508). Same\n * shape-validation + verbatim-preserve posture; reuses the CARC/RARC\n * `[A-Z0-9]{1,5}` value grammar (CSCs are short numeric tokens).\n *\n * @example\n * ```ts\n * import { unknownClaimStatus } from \"@cosyte/x12\";\n * const w = unknownClaimStatus(\n * { segmentIndex: 18, interchangeIndex: 0, groupIndex: 0, transactionIndex: 0 },\n * \"99999\",\n * );\n * ```\n */\nexport function unknownClaimStatus(position: X12Position, code: string): X12ParseWarning {\n const safe = CODE_LIST_VALUE_SHAPE_RE.test(code) ? code : \"(non-spec)\";\n return {\n code: WARNING_CODES.X12_UNKNOWN_CLAIM_STATUS,\n message: `Unknown claim status code (CSC) \"${safe}\" — code is outside the bundled snapshot; verbatim value preserved, description unavailable.`,\n position,\n };\n}\n\n/**\n * INS-03 / HD-01 Maintenance Type Code shape per X12 0875 — a 3-digit\n * numeric code (`\"001\"`, `\"021\"`, `\"024\"`). Used to guard\n * `X12_834_UNKNOWN_MAINTENANCE_TYPE` so the parser never echoes arbitrary\n * bytes from a hostile inbound element value — the H-PHI invariant.\n * @internal\n */\nconst MAINTENANCE_TYPE_SHAPE_RE = /^[0-9]{3}$/u;\n\n/**\n * Build an `X12_834_UNKNOWN_MAINTENANCE_TYPE` warning. Emitted by the 834\n * helper when a member-level `INS-03` (or a health-coverage `HD-01`)\n * maintenance type code falls outside the bundled snapshot (see\n * {@link \"../code-lists/maintenance-type.js\".MAINTENANCE_TYPE_CODES}).\n * Maintenance type is the 834's safety-critical field — an unknown action\n * code must NEVER be silently coerced to add / change / terminate, so the\n * verbatim code is preserved on the parsed enrollment and this warning\n * flags the gap. The code value is shape-validated against `[0-9]{3}`\n * before echoing; a hostile non-conformant value collapses to the literal\n * `(non-spec)` (H-PHI invariant).\n *\n * @example\n * ```ts\n * import { unknownMaintenanceType } from \"@cosyte/x12\";\n * const w = unknownMaintenanceType(\n * { segmentIndex: 9, interchangeIndex: 0, groupIndex: 0, transactionIndex: 0 },\n * \"999\",\n * );\n * ```\n */\nexport function unknownMaintenanceType(position: X12Position, code: string): X12ParseWarning {\n const safe = MAINTENANCE_TYPE_SHAPE_RE.test(code) ? code : \"(non-spec)\";\n return {\n code: WARNING_CODES.X12_834_UNKNOWN_MAINTENANCE_TYPE,\n message: `Unknown 834 maintenance type \"${safe}\" — INS-03/HD-01 code is outside the bundled snapshot; verbatim value preserved, action NOT inferred.`,\n position,\n };\n}\n","/**\n * X12 release-character (`?`) escape handling for the `@cosyte/x12` parser\n * pipeline. ASC X12 §\"Release Character\" reserves a single character to\n * suppress the special meaning of the next delimiter. In HIPAA 005010 it is\n * conventionally `?`: `?~` is a literal `~`, `?*` a literal `*`, and `??` a\n * literal `?`. The release character itself is NOT transmitted as a fifth\n * ISA-level delimiter — its slot in the standard is informational and most\n * 005010 traffic omits release sequences entirely, so the parser keeps `?`\n * hardcoded as the conventional release character and only consumes it when\n * the next byte is one of the four detected delimiters or another `?`.\n *\n * Postel's Law applies: an isolated `?` followed by a non-delimiter (e.g.\n * `?A`) is preserved verbatim — the spec leaves this case ambiguous and the\n * most defensible behavior is to keep the bytes the sender sent. A trailing\n * `?` with nothing after (a dangling release character at end-of-input or\n * end-of-element) is preserved verbatim AND warned (Tier-2\n * `X12_DANGLING_RELEASE_CHAR`) so consumers can flag truncated input.\n *\n * The pair `{ unescapeRelease, escapeRelease }` is bijective on inputs that\n * either contain no release-relevant characters OR are already a clean\n * round-trip — this gives the Phase 2 lossless round-trip property: for any\n * value `v` and delimiter set `d`, `unescapeRelease(escapeRelease(v, d), d)`\n * deep-equals `v`.\n */\n\nimport type { Delimiters } from \"./types.js\";\nimport type { X12Position } from \"./types.js\";\nimport { danglingReleaseChar, type X12ParseWarning } from \"./warnings.js\";\n\n/**\n * The release character is conventionally `?` per ASC X12; HIPAA 005010\n * does not transmit it as a fifth ISA delimiter. The library accepts `?` as\n * the universal release character — a non-`?` release sequence has never\n * been observed in real-world US healthcare X12 traffic. If a future\n * consumer needs a different release character, the constant is `as const`\n * so a parameterized variant can be added without breaking the public API.\n *\n * @example\n * ```ts\n * import { RELEASE_CHAR } from \"@cosyte/x12\";\n * // `?~` is an escaped segment terminator inside a value, not a real one:\n * \"PER*IC*ACME?~BILLING\".includes(RELEASE_CHAR); // true\n * ```\n *\n * @internal\n */\nexport const RELEASE_CHAR = \"?\" as const;\n\n/**\n * Reverse a single X12 release-character escape sequence. Consumes `?` plus\n * its target byte when the target is one of the four detected delimiters or\n * another `?`; preserves the `?` verbatim when the target is anything else\n * (Postel's-Law tolerance — the spec leaves the `?A` case ambiguous and\n * preserving the bytes is the most defensible behavior).\n *\n * Emits a single Tier-2 `X12_DANGLING_RELEASE_CHAR` warning when the input\n * ends with a bare `?` (no target byte to escape) — the bytes are preserved\n * verbatim so round-trip is still byte-exact.\n *\n * @example\n * ```ts\n * import { unescapeRelease } from \"@cosyte/x12\";\n * const d = { element: \"*\", repetition: \"^\", component: \":\", segment: \"~\" };\n * unescapeRelease(\"a?~b\", d, () => {}, { segmentIndex: 0 }); // \"a~b\"\n * unescapeRelease(\"a??b\", d, () => {}, { segmentIndex: 0 }); // \"a?b\"\n * unescapeRelease(\"a?Xb\", d, () => {}, { segmentIndex: 0 }); // \"a?Xb\" (preserved)\n * ```\n */\nexport function unescapeRelease(\n input: string,\n delimiters: Delimiters,\n emit: (w: X12ParseWarning) => void,\n position: X12Position,\n): string {\n if (!input.includes(RELEASE_CHAR)) return input;\n let out = \"\";\n let i = 0;\n while (i < input.length) {\n const ch = input.charAt(i);\n if (ch !== RELEASE_CHAR) {\n out += ch;\n i += 1;\n continue;\n }\n if (i + 1 === input.length) {\n emit(danglingReleaseChar(position));\n out += RELEASE_CHAR;\n break;\n }\n const next = input.charAt(i + 1);\n if (\n next === delimiters.element ||\n next === delimiters.repetition ||\n next === delimiters.component ||\n next === delimiters.segment ||\n next === RELEASE_CHAR\n ) {\n out += next;\n i += 2;\n } else {\n out += RELEASE_CHAR;\n i += 1;\n }\n }\n return out;\n}\n\n/**\n * Apply X12 release-character escapes to a value so it can be emitted\n * inside a segment without ambiguity. Every occurrence of the four\n * delimiters (or the release character itself) is preceded by `?`; other\n * bytes pass through verbatim. The companion to {@link unescapeRelease}.\n *\n * @example\n * ```ts\n * import { escapeRelease } from \"@cosyte/x12\";\n * const d = { element: \"*\", repetition: \"^\", component: \":\", segment: \"~\" };\n * escapeRelease(\"ab~cd*ef:gh\", d); // \"ab?~cd?*ef?:gh\"\n * escapeRelease(\"a?b\", d); // \"a??b\"\n * ```\n */\nexport function escapeRelease(value: string, delimiters: Delimiters): string {\n if (value.length === 0) return value;\n let out = \"\";\n for (let i = 0; i < value.length; i++) {\n const ch = value.charAt(i);\n if (\n ch === delimiters.element ||\n ch === delimiters.repetition ||\n ch === delimiters.component ||\n ch === delimiters.segment ||\n ch === RELEASE_CHAR\n ) {\n out += RELEASE_CHAR + ch;\n } else {\n out += ch;\n }\n }\n return out;\n}\n\n/**\n * Split a string by `sep`, honouring the `?`-release-character escape so\n * an escaped separator (`?sep`) is treated as part of the surrounding token.\n * Dangling-release warnings are NOT emitted here — the caller (which knows\n * the right positional context) re-runs {@link unescapeRelease} on each\n * resulting token to surface them.\n *\n * @internal\n */\nexport function splitWithRelease(input: string, sep: string): string[] {\n if (input.length === 0) return [\"\"];\n if (sep.length !== 1) return input.split(sep);\n if (!input.includes(sep)) return [input];\n const out: string[] = [];\n let buf = \"\";\n let i = 0;\n while (i < input.length) {\n const ch = input.charAt(i);\n if (ch === RELEASE_CHAR && i + 1 < input.length) {\n buf += ch + input.charAt(i + 1);\n i += 2;\n continue;\n }\n if (ch === sep) {\n out.push(buf);\n buf = \"\";\n i += 1;\n continue;\n }\n buf += ch;\n i += 1;\n }\n out.push(buf);\n return out;\n}\n","/**\n * `X12Decimal` — the string-backed decimal type for every X12 monetary,\n * quantity, or percentage field. **NEVER `parseFloat`** — float\n * representation silently destroys cents at scale (`0.1 + 0.2 !== 0.3`); on\n * an 835 claim, a dropped decimal is the wrong dollar amount in someone's\n * cash post. `X12Decimal` preserves the inbound lexical form verbatim for\n * byte-exact round-trip and exposes exact `BigInt`-backed arithmetic for\n * balance invariants (Phase 4 acceptance: CLP-04 + CLP-05 + ΣCAS = CLP-03;\n * ΣSVC paid + ΣCAS = CLP-04; Σclaim CLP-04 + PLB = BPR-02).\n *\n * Internal representation:\n *\n * - `raw` — the verbatim inbound text (e.g. `\"1234.56\"`, `\"-50\"`, `\"0.00\"`).\n * `toString()` returns this so a parse → serialize round-trip is byte-\n * exact.\n * - `scaled` — unsigned `BigInt` of the digits with the decimal point\n * removed (e.g. `123456n` for `\"1234.56\"`). Combined with `scale` and\n * `signum` this fully captures the numeric value.\n * - `scale` — count of fractional digits (the position of the decimal\n * point, from the right). `\"1234.56\"` → 2; `\"-50\"` → 0; `\"0.00\"` → 2.\n * - `signum` — `-1` / `0` / `1`; `0` for any zero value regardless of sign\n * in the inbound text (so `\"0.00\"`, `\"-0.00\"`, and `\"0\"` all expose\n * `signum() === 0`).\n *\n * Arithmetic aligns scales by padding the lower-scale operand with zeros,\n * then performs `BigInt` add/subtract; the result's `scale` is `max(scaleA,\n * scaleB)` and its `raw` is reconstructed from the resulting scaled magnitude\n * (arithmetic results lose the inbound lexical form by design — only direct\n * `fromString` preserves it).\n *\n * X12 R-type (real) elements use an EXPLICIT decimal point (per ASC X12\n * dictionary). Empty string → `undefined` (not zero) — \"not supplied\" and\n * \"zero dollars\" are spec-distinct.\n */\n\n/**\n * Validated lexical shape for an X12 R-type decimal. Permits optional\n * leading sign (`-` or `+`); the integer part is optional (the X12\n * standard allows the leading zero to be omitted, so `\".50\"` is valid);\n * the fractional part is optional. After matching we require **at least\n * one digit** across the integer + fractional groups so a bare `\".\"` or\n * `\"-\"` does not parse. Rejects multiple decimal points, embedded\n * whitespace, thousands separators (X12 forbids `,` thousand-separators),\n * and exponent notation.\n * @internal\n */\nconst X12_DECIMAL_RE = /^([+-])?(\\d*)(?:\\.(\\d*))?$/u;\n\n/**\n * Internal frozen state for an `X12Decimal`. Held in a `WeakMap` keyed off\n * the instance so the public surface exposes only methods (no readable\n * `#raw` field that downstream tooling might over-trust without going\n * through `toString()`). Mirrors hl7's `Hl7Message` private-state pattern.\n * @internal\n */\ninterface DecimalState {\n readonly raw: string;\n readonly scaled: bigint;\n readonly scale: number;\n readonly signum: -1 | 0 | 1;\n}\n\n/** @internal */\nconst STATE = new WeakMap<X12Decimal, DecimalState>();\n\n/**\n * String-backed decimal for X12 R-type elements. Immutable; arithmetic\n * returns a new {@link X12Decimal}. Equality is mathematical (`\"0.00\"`\n * equals `\"0\"`), not lexical — use `toString()` for byte-exact comparison.\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * const charge = X12Decimal.fromString(\"500.00\");\n * const paid = X12Decimal.fromString(\"450.00\");\n * const due = charge?.subtract(paid!);\n * due?.toString(); // \"50.00\"\n * due?.isZero(); // false\n * ```\n */\nexport class X12Decimal {\n /**\n * Construct a new `X12Decimal` directly from state. Internal — call\n * `fromString` / `fromBigInt` / `ZERO` instead from outside the module.\n * @internal\n */\n private constructor(state: DecimalState) {\n STATE.set(this, state);\n Object.freeze(this);\n }\n\n /**\n * Decode an X12 R-type decimal element into an `X12Decimal`, or\n * `undefined` when the input is empty or does not match the shape\n * `[+-]?digits(.digits?)?`. **Empty string returns `undefined`, never\n * zero** — \"not supplied\" and \"zero\" are spec-distinct.\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * X12Decimal.fromString(\"1234.56\")?.toString(); // \"1234.56\"\n * X12Decimal.fromString(\"-50\")?.signum(); // -1\n * X12Decimal.fromString(\"\"); // undefined\n * X12Decimal.fromString(\"1,234.56\"); // undefined (X12 forbids thousands sep)\n * ```\n */\n public static fromString(raw: string): X12Decimal | undefined {\n if (raw.length === 0) return undefined;\n const m = X12_DECIMAL_RE.exec(raw);\n if (m === null) return undefined;\n const signChar = m[1];\n const intPart = m[2] ?? \"\";\n const fracPart = m[3] ?? \"\";\n // Require at least one digit across the integer + fractional groups\n // — `\".\"`, `\"-\"`, `\"+\"`, `\"+.\"` are not valid decimals.\n if (intPart.length === 0 && fracPart.length === 0) return undefined;\n const scale = fracPart.length;\n const digits = intPart + fracPart;\n const magnitude = digits.length === 0 ? 0n : BigInt(digits);\n const signum: -1 | 0 | 1 = magnitude === 0n ? 0 : signChar === \"-\" ? -1 : 1;\n return new X12Decimal({ raw, scaled: magnitude, scale, signum });\n }\n\n /**\n * Construct an `X12Decimal` from a `BigInt` magnitude + scale (decimal\n * places). Useful when arithmetic produces a result whose lexical form\n * the caller wants to control. `raw` is rendered canonically (sign +\n * integer + optional `.fraction`).\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * X12Decimal.fromBigInt(123456n, 2).toString(); // \"1234.56\"\n * X12Decimal.fromBigInt(-50n, 0).toString(); // \"-50\"\n * X12Decimal.fromBigInt(0n, 2).toString(); // \"0.00\"\n * ```\n */\n public static fromBigInt(value: bigint, scale: number): X12Decimal {\n if (!Number.isInteger(scale) || scale < 0) {\n throw new RangeError(\n `X12Decimal scale must be a non-negative integer; got ${String(scale)}.`,\n );\n }\n const signum: -1 | 0 | 1 = value === 0n ? 0 : value < 0n ? -1 : 1;\n const magnitude = value < 0n ? -value : value;\n const raw = renderCanonical(signum, magnitude, scale);\n return new X12Decimal({ raw, scaled: magnitude, scale, signum });\n }\n\n /**\n * Canonical zero with `scale: 0` — `\"0\"`. Used as the additive identity\n * for balance reductions. Use `X12Decimal.fromBigInt(0n, n)` for a zero\n * at a specific scale.\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * X12Decimal.ZERO.toString(); // \"0\"\n * X12Decimal.ZERO.isZero(); // true\n * ```\n */\n public static readonly ZERO: X12Decimal = new X12Decimal({\n raw: \"0\",\n scaled: 0n,\n scale: 0,\n signum: 0,\n });\n\n /**\n * Return the verbatim lexical form (for {@link X12Decimal.fromString})\n * or the canonical rendering (for arithmetic results / `fromBigInt`).\n * Round-trip is byte-exact when the value was produced by `fromString`.\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * X12Decimal.fromString(\"0050.00\")?.toString(); // \"0050.00\" (verbatim)\n * X12Decimal.fromBigInt(5000n, 2).toString(); // \"50.00\" (canonical)\n * ```\n */\n public toString(): string {\n return state(this).raw;\n }\n\n /**\n * Lossy conversion to JS `number`. **JSDoc warns:** `number` cannot\n * represent every X12 monetary value exactly (`0.1 + 0.2 !== 0.3`).\n * Helpers return `X12Decimal`, not `number`; use this only for display\n * or when the loss is acceptable. Magnitudes large enough to lose\n * precision (> `Number.MAX_SAFE_INTEGER` after scaling) still convert\n * without throwing — silently lossy.\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * X12Decimal.fromString(\"1234.56\")?.toNumber(); // 1234.56 (typically exact)\n * X12Decimal.fromString(\"0.1\")?.toNumber(); // 0.1 (lossy at higher precision)\n * ```\n */\n public toNumber(): number {\n return parseFloat(state(this).raw);\n }\n\n /**\n * `-1` / `0` / `1` indicating the sign of the value. Zero values\n * (including `\"0.00\"` and `\"-0.00\"`) always return `0`.\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * X12Decimal.fromString(\"-50\")?.signum(); // -1\n * X12Decimal.fromString(\"0.00\")?.signum(); // 0\n * X12Decimal.fromString(\"0.01\")?.signum(); // 1\n * ```\n */\n public signum(): -1 | 0 | 1 {\n return state(this).signum;\n }\n\n /**\n * True when this value is exactly zero (any scale).\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * X12Decimal.fromString(\"0.00\")?.isZero(); // true\n * X12Decimal.fromString(\"-50\")?.isZero(); // false\n * ```\n */\n public isZero(): boolean {\n return state(this).signum === 0;\n }\n\n /**\n * Absolute value. Scale and lexical form may change (canonical rendering\n * drops the leading `-`).\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * X12Decimal.fromString(\"-50.00\")?.abs().toString(); // \"50.00\"\n * ```\n */\n public abs(): X12Decimal {\n const s = state(this);\n if (s.signum >= 0) return this;\n return X12Decimal.fromBigInt(s.scaled, s.scale);\n }\n\n /**\n * Arithmetic negation. `abs() === negate()` for negative values; for\n * positive values flips sign; zero is its own negation.\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * X12Decimal.fromString(\"50.00\")?.negate().toString(); // \"-50.00\"\n * X12Decimal.fromString(\"-50.00\")?.negate().toString(); // \"50.00\"\n * ```\n */\n public negate(): X12Decimal {\n const s = state(this);\n if (s.signum === 0) return this;\n return X12Decimal.fromBigInt(s.signum === 1 ? -s.scaled : s.scaled, s.scale);\n }\n\n /**\n * Add two `X12Decimal` values exactly. Result scale is\n * `max(this.scale, other.scale)`; result lexical form is canonical.\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * const a = X12Decimal.fromString(\"0.1\")!;\n * const b = X12Decimal.fromString(\"0.2\")!;\n * a.add(b).toString(); // \"0.3\" — exact, never 0.30000000000000004\n * ```\n */\n public add(other: X12Decimal): X12Decimal {\n const a = state(this);\n const b = state(other);\n const [aligned, scale] = alignScales(a, b);\n const sum = aligned.aSigned + aligned.bSigned;\n return X12Decimal.fromBigInt(sum, scale);\n }\n\n /**\n * Subtract `other` from `this` exactly. Result scale is\n * `max(this.scale, other.scale)`.\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * X12Decimal.fromString(\"500.00\")!.subtract(X12Decimal.fromString(\"50\")!).toString();\n * // \"450.00\"\n * ```\n */\n public subtract(other: X12Decimal): X12Decimal {\n const a = state(this);\n const b = state(other);\n const [aligned, scale] = alignScales(a, b);\n const diff = aligned.aSigned - aligned.bSigned;\n return X12Decimal.fromBigInt(diff, scale);\n }\n\n /**\n * Mathematical equality across scales (`\"0.00\"` equals `\"0\"`). For\n * byte-exact comparison use `a.toString() === b.toString()`.\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * const a = X12Decimal.fromString(\"0.00\")!;\n * const b = X12Decimal.fromString(\"0\")!;\n * a.equals(b); // true\n * a.toString() === b.toString();// false (\"0.00\" vs \"0\")\n * ```\n */\n public equals(other: X12Decimal): boolean {\n return this.compareTo(other) === 0;\n }\n\n /**\n * Three-way compare: `-1` if `this < other`, `0` if equal, `1` if\n * `this > other`. Mathematical compare across scales.\n *\n * @example\n * ```ts\n * import { X12Decimal } from \"@cosyte/x12\";\n * X12Decimal.fromString(\"10\")!.compareTo(X12Decimal.fromString(\"9.99\")!); // 1\n * ```\n */\n public compareTo(other: X12Decimal): -1 | 0 | 1 {\n const a = state(this);\n const b = state(other);\n if (a.signum !== b.signum) return a.signum < b.signum ? -1 : 1;\n if (a.signum === 0) return 0;\n const [aligned] = alignScales(a, b);\n if (aligned.aSigned === aligned.bSigned) return 0;\n return aligned.aSigned < aligned.bSigned ? -1 : 1;\n }\n}\n\n/** Pull frozen state from the `WeakMap`. Throws on a tampered instance. @internal */\nfunction state(d: X12Decimal): DecimalState {\n const s = STATE.get(d);\n if (s === undefined) {\n throw new TypeError(\"X12Decimal instance has no internal state — was it tampered with?\");\n }\n return s;\n}\n\n/**\n * Align two scales for arithmetic: pad the lower-scale operand with zeros\n * (multiply by `10^delta`) so both become integers at the higher scale,\n * then signed by `signum`. Returns the signed `BigInt` operands + the\n * shared scale. @internal\n */\nfunction alignScales(\n a: DecimalState,\n b: DecimalState,\n): [{ aSigned: bigint; bSigned: bigint }, number] {\n const scale = Math.max(a.scale, b.scale);\n const aPad = scale - a.scale;\n const bPad = scale - b.scale;\n const aScaled = a.scaled * powTen(aPad);\n const bScaled = b.scaled * powTen(bPad);\n const aSigned = a.signum === -1 ? -aScaled : aScaled;\n const bSigned = b.signum === -1 ? -bScaled : bScaled;\n return [{ aSigned, bSigned }, scale];\n}\n\n/** `10n ** BigInt(n)` for non-negative `n`. @internal */\nfunction powTen(n: number): bigint {\n let p = 1n;\n for (let i = 0; i < n; i += 1) p *= 10n;\n return p;\n}\n\n/**\n * Render a `(signum, unsigned scaled, scale)` triple into the canonical\n * decimal text — sign + integer part + optional `.` + zero-padded fraction.\n * Always renders the full fractional width so `(0n, 2)` → `\"0.00\"` (the\n * canonical X12 R-type \"zero dollars at cent precision\" shape).\n * @internal\n */\nfunction renderCanonical(signum: -1 | 0 | 1, magnitude: bigint, scale: number): string {\n const digits = magnitude.toString();\n let body: string;\n if (scale === 0) {\n body = digits;\n } else if (digits.length <= scale) {\n body = \"0.\" + digits.padStart(scale, \"0\");\n } else {\n const cut = digits.length - scale;\n body = digits.slice(0, cut) + \".\" + digits.slice(cut);\n }\n return signum === -1 ? \"-\" + body : body;\n}\n","/**\n * Segment-level decode for the `@cosyte/x12` parser pipeline. Phase 2's\n * syntactic core: take a raw segment string (terminator already stripped by\n * the envelope walker) and decode it into an immutable {@link X12Segment}\n * carrying its segment id, raw text, and an element array. Element values\n * are stored RAW (pre-`?`-unescape) so a byte-exact round-trip survives\n * regardless of which subset is read; the {@link getSegmentValue} dot-path\n * resolver applies {@link unescapeRelease} on read.\n *\n * Dot-path conventions (locked here, mirror the X12 TR3 convention):\n *\n * - `\"03\"` → element 3 of the segment (1-indexed; matches `NM1-03`,\n * `CLP-04`, etc. in every TR3). Returns the FIRST repetition's verbatim\n * element text post-`?`-unescape.\n * - `\"03-1\"` → component 1 of element 3 (1-indexed). Returns the\n * sub-element text post-`?`-unescape.\n * - `\"03[2]\"` → 3rd repetition (0-indexed) of element 3. Repetitions are\n * 0-indexed to match `@cosyte/hl7`'s bracket convention and array-index\n * ergonomics.\n * - `\"03[2]-1\"` → component 1 of repetition 2 of element 3.\n *\n * The parser deliberately does NOT support cross-segment paths at this\n * phase — `Segment.get` operates inside a single segment. Cross-loop\n * traversal arrives with `defineLoopSpec` in Phase 3+ (which authors the\n * built-in transaction loops through the same public API as consumers —\n * the dogfooding gate).\n */\n\nimport { RELEASE_CHAR, splitWithRelease, unescapeRelease } from \"./release.js\";\nimport type { Delimiters, X12Position } from \"./types.js\";\nimport { danglingReleaseChar, type X12ParseWarning } from \"./warnings.js\";\n\n/**\n * Immutable decoded X12 segment. `elements` is 1-indexed: `elements[0]` is\n * the segment id placeholder (matching {@link \"./types.js\".IsaSegment},\n * `GsSegment`, etc. — every typed segment in the envelope follows the same\n * 1-indexed shape so consumers learn one rule and never have to recall\n * whether a particular accessor offsets by one). `raw` preserves the exact\n * segment text from input (terminator stripped) so a byte-exact round-trip\n * survives even when downstream stages mutate the model.\n *\n * Element values are stored RAW (pre-`?`-unescape). Reads via {@link\n * getSegmentValue} apply {@link unescapeRelease} on demand — this keeps\n * round-trip byte-exact while still letting helpers receive\n * spec-compliant logical values.\n *\n * @example\n * ```ts\n * import type { X12Segment } from \"@cosyte/x12\";\n * declare const seg: X12Segment;\n * seg.id; // \"NM1\"\n * seg.elements[3]; // raw text of NM1-03 (post-element-split, pre-?-unescape)\n * ```\n */\nexport interface X12Segment {\n readonly id: string;\n readonly raw: string;\n readonly elements: readonly string[];\n}\n\n/**\n * Decode a raw segment string into an {@link X12Segment}. Splits on the\n * detected element separator (honouring the `?`-release-character escape),\n * preserves the verbatim raw text, and surfaces dangling-release warnings\n * via the supplied emitter with positional context tied to the segment.\n *\n * Never throws — malformed input produces a best-effort segment and any\n * issues surface as Tier-2 warnings via `emit`. An empty input string\n * decodes to an empty segment (`id: \"\"`, `elements: [\"\"]`); callers that\n * care can guard.\n *\n * @example\n * ```ts\n * import { decodeSegment } from \"@cosyte/x12\";\n * const d = { element: \"*\", repetition: \"^\", component: \":\", segment: \"~\" };\n * const seg = decodeSegment(\"NM1*IL*1*DOE*JANE\", d, () => {}, { segmentIndex: 5 });\n * seg.id; // \"NM1\"\n * seg.elements[3]; // \"DOE\"\n * ```\n */\nexport function decodeSegment(\n raw: string,\n delimiters: Delimiters,\n emit: (w: X12ParseWarning) => void,\n position: X12Position,\n): X12Segment {\n const elements = Object.freeze(splitWithRelease(raw, delimiters.element));\n // Dangling-release detection — a bare `?` at the very end of the\n // segment cannot escape anything. Detection counts consecutive `?` at\n // the segment's tail: an odd run means the trailing `?` is unpaired\n // (dangling); an even run means it is the second half of a `??` escape\n // (well-formed). Single segment-level check is cheaper than per-element\n // re-scan and pin-points the warning to the final element index.\n if (raw.length > 0 && raw.endsWith(RELEASE_CHAR)) {\n let trailingRun = 0;\n for (let j = raw.length - 1; j >= 0 && raw.charAt(j) === RELEASE_CHAR; j -= 1) trailingRun += 1;\n if (trailingRun % 2 === 1) {\n emit(danglingReleaseChar({ ...position, elementIndex: elements.length - 1 }));\n }\n }\n const id = elements[0] ?? \"\";\n return Object.freeze({ id, raw, elements });\n}\n\n/**\n * Parsed dot-path descriptor for an in-segment X12 path. Numeric indices\n * follow the X12 TR3 convention (element 1-indexed, component 1-indexed);\n * the optional `repetitionIndex` is 0-indexed (mirrors hl7 + array\n * ergonomics).\n *\n * @internal\n */\ninterface SegmentPath {\n readonly elementIndex: number;\n readonly repetitionIndex?: number;\n readonly componentIndex?: number;\n}\n\n/**\n * Parse an in-segment dot-path string (e.g. `\"03\"`, `\"03-1\"`, `\"03[2]\"`,\n * `\"03[2]-1\"`) into a {@link SegmentPath}. Throws `TypeError` on malformed\n * paths so a bug in the caller's path string surfaces loudly at the call\n * site, while a missing field at a well-formed path returns `undefined`\n * from the resolver below.\n *\n * @internal\n */\nfunction parseSegmentPath(path: string): SegmentPath {\n if (path.length === 0) {\n throw new TypeError(`Invalid X12 segment path: \"\" (empty).`);\n }\n let i = 0;\n // Element index (1+ digits).\n const elemStart = i;\n while (i < path.length) {\n const ch = path.charCodeAt(i);\n if (ch < 0x30 || ch > 0x39) break;\n i += 1;\n }\n if (i === elemStart) {\n throw new TypeError(\n `Invalid X12 segment path: \"${path}\" (expected leading element index digit).`,\n );\n }\n const elementIndex = parseInt(path.slice(elemStart, i), 10);\n let repetitionIndex: number | undefined;\n let componentIndex: number | undefined;\n // Optional [N] repetition.\n if (i < path.length && path.charAt(i) === \"[\") {\n const close = path.indexOf(\"]\", i + 1);\n if (close === -1) {\n throw new TypeError(\n `Invalid X12 segment path: \"${path}\" (unclosed '[' at position ${String(i)}).`,\n );\n }\n const inner = path.slice(i + 1, close);\n if (inner.length === 0 || !/^\\d+$/u.test(inner)) {\n throw new TypeError(\n `Invalid X12 segment path: \"${path}\" (bracket content \"${inner}\" is not a non-negative integer).`,\n );\n }\n repetitionIndex = parseInt(inner, 10);\n i = close + 1;\n }\n // Optional -N component.\n if (i < path.length) {\n if (path.charAt(i) !== \"-\") {\n throw new TypeError(\n `Invalid X12 segment path: \"${path}\" (expected '-' or end at position ${String(i)}).`,\n );\n }\n i += 1;\n const compStart = i;\n while (i < path.length) {\n const ch = path.charCodeAt(i);\n if (ch < 0x30 || ch > 0x39) break;\n i += 1;\n }\n if (i === compStart) {\n throw new TypeError(\n `Invalid X12 segment path: \"${path}\" (expected component index digit after '-').`,\n );\n }\n componentIndex = parseInt(path.slice(compStart, i), 10);\n }\n if (i !== path.length) {\n throw new TypeError(\n `Invalid X12 segment path: \"${path}\" (trailing content at position ${String(i)}).`,\n );\n }\n const out: { elementIndex: number; repetitionIndex?: number; componentIndex?: number } = {\n elementIndex,\n };\n if (repetitionIndex !== undefined) out.repetitionIndex = repetitionIndex;\n if (componentIndex !== undefined) out.componentIndex = componentIndex;\n return out;\n}\n\n/**\n * Resolve a dot-path against a decoded {@link X12Segment} and return the\n * decoded leaf value (post-`?`-unescape) or `undefined` if the path does\n * not resolve (missing element, out-of-range repetition, out-of-range\n * component). Throws `TypeError` only when `path` itself is malformed.\n *\n * Optional `emit` collects any dangling-release warnings discovered on the\n * read path; pass a no-op to silently decode.\n *\n * @example\n * ```ts\n * import { decodeSegment, getSegmentValue } from \"@cosyte/x12\";\n * const d = { element: \"*\", repetition: \"^\", component: \":\", segment: \"~\" };\n * const seg = decodeSegment(\n * \"HI*ABK:J45.50*ABF:I10\",\n * d,\n * () => {},\n * { segmentIndex: 0 },\n * );\n * getSegmentValue(seg, \"01-1\", d); // \"ABK\"\n * getSegmentValue(seg, \"01-2\", d); // \"J45.50\"\n * getSegmentValue(seg, \"02-1\", d); // \"ABF\"\n * ```\n */\nexport function getSegmentValue(\n segment: X12Segment,\n path: string,\n delimiters: Delimiters,\n emit: (w: X12ParseWarning) => void = noop,\n): string | undefined {\n const parsed = parseSegmentPath(path);\n const rawElement = segment.elements[parsed.elementIndex];\n if (rawElement === undefined) return undefined;\n const repetitions =\n delimiters.repetition.length === 1\n ? splitWithRelease(rawElement, delimiters.repetition)\n : [rawElement];\n const repIndex = parsed.repetitionIndex ?? 0;\n const repetition = repetitions[repIndex];\n if (repetition === undefined) return undefined;\n if (parsed.componentIndex === undefined) {\n return unescapeRelease(\n repetition,\n delimiters,\n emit,\n segment.elements[0] === \"ISA\"\n ? { segmentIndex: 0 }\n : { segmentIndex: 0, elementIndex: parsed.elementIndex },\n );\n }\n const components = splitWithRelease(repetition, delimiters.component);\n const comp = components[parsed.componentIndex - 1];\n if (comp === undefined) return undefined;\n return unescapeRelease(comp, delimiters, emit, {\n segmentIndex: 0,\n elementIndex: parsed.elementIndex,\n componentIndex: parsed.componentIndex,\n });\n}\n\n/**\n * Return every repetition / component matching the dot-path. For a path\n * with no `[N]` and no `-N` (e.g. `\"03\"`), returns every repetition's\n * decoded element text. For a path with `-N` and no `[N]`, returns each\n * repetition's Nth component. With both `[N]` and `-N` specified, returns\n * a single-element array (or empty if the path doesn't resolve). Every\n * returned string is post-`?`-unescape.\n *\n * @example\n * ```ts\n * import { decodeSegment, getAllSegmentValues } from \"@cosyte/x12\";\n * const d = { element: \"*\", repetition: \"^\", component: \":\", segment: \"~\" };\n * const seg = decodeSegment(\n * \"HI*ABK:J45.50^ABF:I10\",\n * d,\n * () => {},\n * { segmentIndex: 0 },\n * );\n * getAllSegmentValues(seg, \"01\", d); // [\"ABK:J45.50\", \"ABF:I10\"]\n * getAllSegmentValues(seg, \"01-1\", d); // [\"ABK\", \"ABF\"]\n * ```\n */\nexport function getAllSegmentValues(\n segment: X12Segment,\n path: string,\n delimiters: Delimiters,\n emit: (w: X12ParseWarning) => void = noop,\n): readonly string[] {\n const parsed = parseSegmentPath(path);\n const rawElement = segment.elements[parsed.elementIndex];\n if (rawElement === undefined) return Object.freeze([]);\n const repetitions =\n delimiters.repetition.length === 1\n ? splitWithRelease(rawElement, delimiters.repetition)\n : [rawElement];\n const reps =\n parsed.repetitionIndex !== undefined\n ? repetitions[parsed.repetitionIndex] === undefined\n ? []\n : [repetitions[parsed.repetitionIndex] ?? \"\"]\n : repetitions;\n const out: string[] = [];\n for (const rep of reps) {\n if (parsed.componentIndex === undefined) {\n out.push(\n unescapeRelease(rep, delimiters, emit, {\n segmentIndex: 0,\n elementIndex: parsed.elementIndex,\n }),\n );\n continue;\n }\n const components = splitWithRelease(rep, delimiters.component);\n const comp = components[parsed.componentIndex - 1];\n if (comp !== undefined) {\n out.push(\n unescapeRelease(comp, delimiters, emit, {\n segmentIndex: 0,\n elementIndex: parsed.elementIndex,\n componentIndex: parsed.componentIndex,\n }),\n );\n }\n }\n return Object.freeze(out);\n}\n\n/** @internal */\nconst noop = (_w: X12ParseWarning): void => {\n /* intentionally empty */\n};\n\n// ---------------------------------------------------------------------------\n// Element-read ergonomic helpers — shared by every transaction walker.\n// Wrap getSegmentValue() with the conventional 1-indexed numeric APIs that\n// match how TR3s read (NM1-03, CLM-02, HI-01-2, etc.). Hoisted here so a\n// new walker doesn't have to re-derive them. `X12Decimal` flavors live with\n// the decimal type — see `X12Decimal.elDec` / `elDecZero` below.\n// ---------------------------------------------------------------------------\n\nimport { X12Decimal } from \"../decimal.js\";\n\n/**\n * Read element N (1-indexed) from a decoded segment as a string. Returns\n * `\"\"` when the element is absent or empty — convenient when downstream\n * code wants to fold \"absent\" and \"empty\" into one branch. For\n * \"absent / empty → `undefined`\" use {@link elementOptional}.\n *\n * @example\n * ```ts\n * import { decodeSegment, elementValue } from \"@cosyte/x12\";\n * declare const seg: ReturnType<typeof decodeSegment>;\n * declare const delim: import(\"./types.js\").Delimiters;\n * elementValue(seg, 3, delim); // verbatim text of element 3, or \"\".\n * ```\n */\nexport function elementValue(seg: X12Segment, n: number, delimiters: Delimiters): string {\n return getSegmentValue(seg, String(n).padStart(2, \"0\"), delimiters) ?? \"\";\n}\n\n/**\n * Read element N (1-indexed) as `string | undefined`. Empty strings\n * collapse to `undefined` — the conventional \"absent\" sentinel for\n * optional element slots.\n *\n * @example\n * ```ts\n * import { elementOptional } from \"@cosyte/x12\";\n * // returns undefined when NM1-04 is \"\" or missing\n * ```\n */\nexport function elementOptional(\n seg: X12Segment,\n n: number,\n delimiters: Delimiters,\n): string | undefined {\n const v = getSegmentValue(seg, String(n).padStart(2, \"0\"), delimiters);\n return v === undefined || v === \"\" ? undefined : v;\n}\n\n/**\n * Read component P (1-indexed) of element N (1-indexed) as a string, or\n * `undefined` when absent / empty. The common shape for X12 composite\n * elements (`HI-01-2`, `CLM-05-1`, `SVC-01-2`, etc.).\n *\n * @example\n * ```ts\n * import { componentOptional } from \"@cosyte/x12\";\n * componentOptional(seg, 1, 2, delim); // HI-01-2 (the actual code)\n * ```\n */\nexport function componentOptional(\n seg: X12Segment,\n n: number,\n p: number,\n delimiters: Delimiters,\n): string | undefined {\n const v = getSegmentValue(seg, `${String(n).padStart(2, \"0\")}-${String(p)}`, delimiters);\n return v === undefined || v === \"\" ? undefined : v;\n}\n\n/**\n * Read element N (1-indexed) as an {@link X12Decimal}, or `undefined`\n * when absent / empty / malformed. The walker discipline for every\n * monetary or quantity field — NEVER `parseFloat`.\n *\n * @example\n * ```ts\n * import { elementDecimal } from \"@cosyte/x12\";\n * elementDecimal(seg, 2, delim)?.toString(); // BPR-02 verbatim decimal\n * ```\n */\nexport function elementDecimal(\n seg: X12Segment,\n n: number,\n delimiters: Delimiters,\n): X12Decimal | undefined {\n const raw = elementOptional(seg, n, delimiters);\n if (raw === undefined) return undefined;\n return X12Decimal.fromString(raw);\n}\n\n/**\n * Read element N (1-indexed) as an {@link X12Decimal}, defaulting to\n * `X12Decimal.ZERO` when absent. Convenient for fields the walker treats\n * as \"missing means zero\" (charge totals, etc.).\n *\n * @example\n * ```ts\n * import { elementDecimalOrZero } from \"@cosyte/x12\";\n * elementDecimalOrZero(seg, 2, delim).toString();\n * ```\n */\nexport function elementDecimalOrZero(\n seg: X12Segment,\n n: number,\n delimiters: Delimiters,\n): X12Decimal {\n return elementDecimal(seg, n, delimiters) ?? X12Decimal.ZERO;\n}\n\n/**\n * Collect non-empty element values across the 1-indexed inclusive range\n * `[start, end]`. Returns a new array preserving order, omitting empty /\n * missing slots. Common for sweeping N3 address-line composites, MIA /\n * MOA remark code slots, etc.\n *\n * @example\n * ```ts\n * import { collectElementValues } from \"@cosyte/x12\";\n * collectElementValues(n3Segment, 1, 2, delim); // [\"123 Main St\", \"Apt 4\"]\n * ```\n */\nexport function collectElementValues(\n seg: X12Segment,\n start: number,\n end: number,\n delimiters: Delimiters,\n): string[] {\n const out: string[] = [];\n for (let i = start; i <= end; i += 1) {\n const v = elementOptional(seg, i, delimiters);\n if (v !== undefined) out.push(v);\n }\n return out;\n}\n","/**\n * Envelope decoder for the `@cosyte/x12` parser pipeline. Consumes a raw\n * input string + the {@link Delimiters} detected by `./delimiters.ts` and\n * walks ISA → GS..GE+ → IEA, producing an {@link X12Interchange}. Phase 1\n * keeps ST..SE transaction bodies **opaque** — `transactions[].segments`\n * carries raw segment strings (terminator stripped); Phase 2 adds segment\n * decode on top.\n *\n * Postel's Law: every deviation past the ISA itself is a Tier-2 warning,\n * never a throw. Truncated input (missing IEA / GE / SE) is recovered as\n * best-effort with `iea`/`ge`/`se` set to `undefined` on the affected\n * parent. Trailing bytes after IEA are preserved on\n * `X12Interchange.trailingBytes`.\n */\n\nimport { ISA_MIN_LENGTH } from \"./delimiters.js\";\nimport { RELEASE_CHAR } from \"./release.js\";\nimport { decodeSegment, type X12Segment } from \"./segment.js\";\nimport type {\n Delimiters,\n GeSegment,\n GsSegment,\n IeaSegment,\n IsaSegment,\n Ta1Segment,\n X12FunctionalGroup,\n X12TransactionSet,\n} from \"./types.js\";\nimport {\n controlNumberMismatch,\n groupCountMismatch,\n missingGe,\n missingIea,\n missingSe,\n pre005010,\n trailingGarbage,\n transactionCountMismatch,\n unexpectedSegment,\n} from \"./warnings.js\";\nimport type { X12ParseWarning } from \"./warnings.js\";\n\n/**\n * Slice the ISA from the input and decode its 16 elements. `raw` is the\n * exact first-106 bytes (including the trailing segment terminator); this\n * is what gets preserved verbatim on {@link IsaSegment}.`raw` so a\n * round-trip can reproduce the input byte-exact regardless of any lenient\n * normalization downstream. `elements[0]` is `\"ISA\"`; `elements[1..16]`\n * are the 16 fixed-width values, with leading/trailing element-separator-\n * adjacent padding preserved verbatim (X12 element widths are spec-fixed,\n * so consumers can trim if they wish — we never do, to keep round-trip\n * byte-exact).\n *\n * @internal\n */\nfunction decodeIsa(raw: string, delimiters: Delimiters): IsaSegment {\n const isaRaw = raw.slice(0, ISA_MIN_LENGTH);\n // The terminator is at byte 105; the 105-byte head is the elements area.\n const isaHead = isaRaw.slice(0, ISA_MIN_LENGTH - 1);\n // Split into [\"ISA\", e1, e2, …, e16] — exactly 17 entries by construction\n // because the element-separator-position guard in delimiters.ts already\n // verified the layout.\n const parts = isaHead.split(delimiters.element);\n return { raw: isaRaw, elements: Object.freeze(parts.slice()) };\n}\n\n/**\n * Strip a single optional CRLF / CR / LF sequence at the head of the\n * remaining input. Many real-world senders append CRLF after every segment\n * terminator for human readability; Phase 1 silently tolerates it (no\n * warning — matches the hl7 Tier-1 silent-normalize stance for line\n * endings).\n *\n * @internal\n */\nfunction stripLeadingNewlines(text: string, start: number): number {\n let i = start;\n if (text.charCodeAt(i) === 0x0d) i++;\n if (text.charCodeAt(i) === 0x0a) i++;\n return i;\n}\n\n/**\n * Find the next UNescaped segment terminator at or after `from`, honouring\n * the `?`-release-character escape exactly as the element splitter\n * ({@link \"./release.js\".splitWithRelease}) does: a `?` consumes the byte\n * that follows it (so `?~` is a literal `~`, never a terminator; `??~` is a\n * literal `?` then a real terminator). Returns the index of the first\n * unescaped terminator, or `-1` if none remains. A naive `indexOf` would\n * split on an escaped terminator and corrupt any value carrying a literal\n * segment-terminator byte — the asymmetry the serializer's `escapeRelease`\n * is meant to prevent.\n *\n * @internal\n */\nfunction findUnescapedTerminator(text: string, from: number, term: string): number {\n // When the terminator IS the release character (a degenerate delimiter\n // set), `?` cannot also escape — fall back to a literal scan so a `?`\n // terminator still splits, matching the historical behaviour.\n if (term.length !== 1 || term === RELEASE_CHAR) return text.indexOf(term, from);\n let i = from;\n while (i < text.length) {\n const ch = text.charAt(i);\n if (ch === RELEASE_CHAR && i + 1 < text.length) {\n i += 2;\n continue;\n }\n if (ch === term) return i;\n i += 1;\n }\n return -1;\n}\n\n/**\n * Yield successive segment strings (terminator-stripped) from the input,\n * starting at byte `start`. Returns the array of segment strings and the\n * byte index immediately after the last consumed segment terminator\n * (used by the caller to detect trailing garbage after IEA).\n *\n * @internal\n */\nfunction splitSegments(\n text: string,\n start: number,\n delimiters: Delimiters,\n): { segments: string[]; endIndex: number } {\n const segments: string[] = [];\n const term = delimiters.segment;\n let cursor = stripLeadingNewlines(text, start);\n let lastEnd = cursor;\n while (cursor < text.length) {\n const termIdx = findUnescapedTerminator(text, cursor, term);\n if (termIdx === -1) {\n // No further terminator — the trailing bytes are an unterminated\n // segment. Preserve them as a final segment so they're visible to\n // the caller (the envelope walker will surface them as a missing\n // trailer warning if they were structural). If they're not a real\n // segment (e.g. just whitespace from a misbehaving sender) they\n // simply become an unknown trailing segment that downstream\n // walking ignores.\n const tail = text.slice(cursor);\n if (tail.length > 0) {\n segments.push(tail);\n lastEnd = text.length;\n }\n break;\n }\n segments.push(text.slice(cursor, termIdx));\n cursor = termIdx + term.length;\n lastEnd = cursor;\n cursor = stripLeadingNewlines(text, cursor);\n }\n return { segments, endIndex: lastEnd };\n}\n\n/**\n * Split a single segment string into its name + element array using the\n * element separator. `elements[0]` is the segment name; subsequent entries\n * are the elements 1-indexed against the X12 spec convention.\n *\n * @internal\n */\nfunction splitElements(segment: string, delimiters: Delimiters): readonly string[] {\n return Object.freeze(segment.split(delimiters.element));\n}\n\n/**\n * Read an element from a readonly array, defaulting to `\"\"` for missing\n * positions. Used as the lenient narrowing for malformed-but-not-fatal\n * segment shapes (e.g. a truncated `IEA~` with no IEA-01 / IEA-02). The\n * \"missing\" branch is exercised by `parser-envelope.test.ts`' truncated-\n * segment sweep; this single helper consolidates the `noUncheckedIndexedAccess`\n * narrowing into one branch rather than dozens of inline `?? \"\"`.\n *\n * @internal\n */\nfunction el(elements: readonly string[], index: number): string {\n return elements[index] ?? \"\";\n}\n\n/**\n * Decode an interchange body — everything past the ISA — into the typed\n * `groups`/`iea`/`trailingBytes` shape and the warnings collected along\n * the way. Pure function with the caller-supplied delimiters; never\n * throws (lenient mode is the only mode at this layer — Tier-3 fatals\n * arose earlier in `detectDelimiters`).\n *\n * @internal\n */\nexport function decodeEnvelope(\n raw: string,\n delimiters: Delimiters,\n): {\n isa: IsaSegment;\n groups: readonly X12FunctionalGroup[];\n iea: IeaSegment | undefined;\n ta1Segments: readonly Ta1Segment[];\n trailingBytes: string | undefined;\n warnings: readonly X12ParseWarning[];\n} {\n const warnings: X12ParseWarning[] = [];\n /**\n * Single chokepoint that collects every warning emitted from any sub-\n * pass (envelope walker + per-segment decode). Defined once here so the\n * three `decodeSegment` call sites (ST / SE / body) share one function\n * identity — the alternative (inline arrows per call site) inflates\n * function count for the coverage gate without changing behavior.\n */\n const collectWarning = (w: X12ParseWarning): void => {\n warnings.push(w);\n };\n const isa = decodeIsa(raw, delimiters);\n\n // Pre-005010 detection — ISA-12 != \"00501\" (Tier-2 warning, never refused).\n const isa12 = el(isa.elements, 12);\n if (isa12 !== \"00501\") {\n warnings.push(pre005010({ segmentIndex: 0, interchangeIndex: 0, elementIndex: 12 }, isa12));\n }\n\n const { segments } = splitSegments(raw, ISA_MIN_LENGTH, delimiters);\n\n // Walk the segment stream. State machine: optional currentGroup,\n // optional currentTransaction. Segment index (`segIdx`) is global to\n // the post-ISA stream + 1 (segIdx=0 is ISA itself); used for warning\n // positional context.\n const groups: X12FunctionalGroup[] = [];\n const ta1Segments: Ta1Segment[] = [];\n let iea: IeaSegment | undefined;\n let trailingBytes: string | undefined;\n\n type OpenTx = {\n st: { raw: string; elements: readonly string[] };\n segments: X12Segment[];\n rawSegments: string[];\n startSegIdx: number;\n };\n type OpenGroup = {\n gs: GsSegment;\n transactions: X12TransactionSet[];\n startSegIdx: number;\n };\n\n let currentGroup: OpenGroup | undefined;\n let currentTx: OpenTx | undefined;\n\n /**\n * Finalize an open transaction and push it onto its parent group.\n * Passes both the tx and its parent group as parameters so TypeScript\n * carries the non-null narrowing through and no defensive `?? return`\n * guard is needed.\n */\n const finalizeTx = (\n tx: OpenTx,\n group: OpenGroup,\n se: { raw: string; elements: readonly string[] } | undefined,\n ): void => {\n if (se === undefined) {\n warnings.push(\n missingSe({\n segmentIndex: tx.startSegIdx,\n interchangeIndex: 0,\n groupIndex: groups.length,\n transactionIndex: group.transactions.length,\n }),\n );\n }\n group.transactions.push({\n st: tx.st,\n se,\n segments: Object.freeze(tx.segments.slice()),\n rawSegments: Object.freeze(tx.rawSegments.slice()),\n });\n };\n\n /**\n * Finalize an open group and push it onto the interchange. If a\n * transaction is still open inside it, close that first (with\n * MISSING_SE). If GE is absent, warn MISSING_GE. Otherwise emit\n * count/control-number reconciliation warnings.\n */\n const finalizeGroup = (group: OpenGroup, ge: GeSegment | undefined): void => {\n if (ge === undefined) {\n warnings.push(\n missingGe({\n segmentIndex: group.startSegIdx,\n interchangeIndex: 0,\n groupIndex: groups.length,\n }),\n );\n } else {\n // GE-01 transaction count vs actual ST count.\n const declared = el(ge.elements, 1);\n const actual = group.transactions.length;\n if (declared !== String(actual)) {\n warnings.push(\n transactionCountMismatch(\n {\n segmentIndex: group.startSegIdx,\n interchangeIndex: 0,\n groupIndex: groups.length,\n elementIndex: 1,\n },\n declared,\n actual,\n ),\n );\n }\n // GS-06 ↔ GE-02 control number reconciliation.\n const gsControl = el(group.gs.elements, 6);\n const geControl = el(ge.elements, 2);\n if (gsControl !== geControl) {\n warnings.push(\n controlNumberMismatch(\n {\n segmentIndex: group.startSegIdx,\n interchangeIndex: 0,\n groupIndex: groups.length,\n elementIndex: 2,\n },\n \"GS-06/GE-02\",\n gsControl,\n geControl,\n ),\n );\n }\n }\n groups.push({\n gs: group.gs,\n ge,\n transactions: Object.freeze(group.transactions.slice()),\n });\n };\n\n // ISA itself occupies segIdx 0; the body starts at segIdx 1.\n for (let i = 0; i < segments.length; i++) {\n const segmentText = el(segments, i);\n const segIdx = i + 1;\n const elements = splitElements(segmentText, delimiters);\n const name = el(elements, 0);\n\n switch (name) {\n case \"TA1\": {\n // TA1 is an envelope-level Interchange Acknowledgment. Per the ASC\n // X12 standard it appears between ISA and the first GS, or between\n // groups, or alone in an ISA..IEA with no GS at all (TA1-only\n // interchange). At envelope level it is structurally expected — no\n // unexpected-segment warning. Inside an open transaction the\n // default branch surfaces it as a body segment (see below). The\n // raw + elements pair mirrors ISA / GS / GE / IEA so consumers can\n // narrow uniformly across every typed envelope segment.\n if (currentGroup === undefined) {\n ta1Segments.push({ raw: segmentText, elements });\n break;\n }\n // TA1 inside an open group is non-spec — fall through to the\n // unexpected-segment path so the structural break is flagged.\n warnings.push(\n unexpectedSegment(\n {\n segmentIndex: segIdx,\n interchangeIndex: 0,\n groupIndex: groups.length,\n },\n \"TA1\",\n \"TA1 segment is envelope-level — appeared inside an open functional group\",\n ),\n );\n break;\n }\n case \"GS\": {\n // Opening a new group while one is still open → close the old\n // (will warn MISSING_GE; the still-open tx, if any, closes with\n // MISSING_SE).\n if (currentGroup !== undefined) {\n if (currentTx !== undefined) {\n finalizeTx(currentTx, currentGroup, undefined);\n currentTx = undefined;\n }\n finalizeGroup(currentGroup, undefined);\n }\n currentGroup = {\n gs: { raw: segmentText, elements },\n transactions: [],\n startSegIdx: segIdx,\n };\n break;\n }\n case \"GE\": {\n if (currentGroup === undefined) {\n // Stray GE outside any open group — preserve lenient-never-\n // throw, but surface as `X12_UNEXPECTED_SEGMENT` so consumers\n // can flag the structural break.\n warnings.push(\n unexpectedSegment(\n { segmentIndex: segIdx, interchangeIndex: 0 },\n \"GE\",\n \"no open functional group\",\n ),\n );\n break;\n }\n if (currentTx !== undefined) {\n finalizeTx(currentTx, currentGroup, undefined);\n currentTx = undefined;\n }\n finalizeGroup(currentGroup, { raw: segmentText, elements });\n currentGroup = undefined;\n break;\n }\n case \"ST\": {\n if (currentGroup === undefined) {\n // ST outside any group is structurally wrong; preserve\n // lenient and surface as `X12_UNEXPECTED_SEGMENT`.\n warnings.push(\n unexpectedSegment(\n { segmentIndex: segIdx, interchangeIndex: 0 },\n \"ST\",\n \"no open functional group (missing GS)\",\n ),\n );\n break;\n }\n // Opening a new ST while one is still open → close the old\n // (will warn MISSING_SE).\n if (currentTx !== undefined) {\n finalizeTx(currentTx, currentGroup, undefined);\n }\n const stDecoded = decodeSegment(segmentText, delimiters, collectWarning, {\n segmentIndex: segIdx,\n interchangeIndex: 0,\n groupIndex: groups.length,\n transactionIndex: currentGroup.transactions.length,\n });\n currentTx = {\n st: { raw: segmentText, elements },\n segments: [stDecoded],\n rawSegments: [segmentText],\n startSegIdx: segIdx,\n };\n break;\n }\n case \"SE\": {\n // SE outside any open tx is structurally wrong; preserve lenient\n // and surface as `X12_UNEXPECTED_SEGMENT`.\n if (currentTx === undefined || currentGroup === undefined) {\n warnings.push(\n unexpectedSegment(\n { segmentIndex: segIdx, interchangeIndex: 0 },\n \"SE\",\n \"no open transaction set\",\n ),\n );\n break;\n }\n const seDecoded = decodeSegment(segmentText, delimiters, collectWarning, {\n segmentIndex: segIdx,\n interchangeIndex: 0,\n groupIndex: groups.length,\n transactionIndex: currentGroup.transactions.length,\n });\n currentTx.segments.push(seDecoded);\n currentTx.rawSegments.push(segmentText);\n const se = { raw: segmentText, elements };\n // ST-02 ↔ SE-02 control-number reconciliation.\n const stControl = el(currentTx.st.elements, 2);\n const seControl = el(se.elements, 2);\n if (stControl !== seControl) {\n warnings.push(\n controlNumberMismatch(\n {\n segmentIndex: currentTx.startSegIdx,\n interchangeIndex: 0,\n groupIndex: groups.length,\n transactionIndex: currentGroup.transactions.length,\n elementIndex: 2,\n },\n \"ST-02/SE-02\",\n stControl,\n seControl,\n ),\n );\n }\n finalizeTx(currentTx, currentGroup, se);\n currentTx = undefined;\n break;\n }\n case \"IEA\": {\n // Close any still-open group/transaction (warnings emitted).\n if (currentGroup !== undefined) {\n if (currentTx !== undefined) {\n finalizeTx(currentTx, currentGroup, undefined);\n }\n finalizeGroup(currentGroup, undefined);\n }\n // Currents are not reset here because the IEA branch returns\n // immediately after the trailing-bytes block below — no further\n // iteration will read them.\n iea = { raw: segmentText, elements };\n // IEA-01 group count vs actual.\n const declared = el(elements, 1);\n if (declared !== String(groups.length)) {\n warnings.push(\n groupCountMismatch(\n { segmentIndex: segIdx, interchangeIndex: 0, elementIndex: 1 },\n declared,\n groups.length,\n ),\n );\n }\n // ISA-13 ↔ IEA-02 control number reconciliation.\n const isaControl = el(isa.elements, 13);\n const ieaControl = el(elements, 2);\n if (isaControl !== ieaControl) {\n warnings.push(\n controlNumberMismatch(\n { segmentIndex: segIdx, interchangeIndex: 0, elementIndex: 2 },\n \"ISA-13/IEA-02\",\n isaControl,\n ieaControl,\n ),\n );\n }\n // Trailing-bytes detection — anything past IEA is multi-ISA or\n // garbage (multi-ISA support is out of v1 scope per roadmap §2).\n // Best-effort preservation: join the leftover segment slices\n // with the segment terminator and append a final terminator.\n // Not byte-exact for trailing content; consumers needing the\n // raw second-interchange bytes should re-tokenize.\n const tail = segments.slice(i + 1).join(delimiters.segment);\n if (tail.length > 0) {\n const joined = tail + delimiters.segment;\n trailingBytes = joined;\n warnings.push(\n trailingGarbage({ segmentIndex: segIdx + 1, interchangeIndex: 0 }, joined.length),\n );\n }\n // Stop walking once IEA is consumed (multi-ISA support is out\n // of v1 scope per roadmap §2 non-goals).\n return {\n isa,\n groups: Object.freeze(groups.slice()),\n iea,\n ta1Segments: Object.freeze(ta1Segments.slice()),\n trailingBytes,\n warnings: Object.freeze(warnings.slice()),\n };\n }\n default: {\n // Body segment of an open transaction → decode and append.\n if (currentTx !== undefined && currentGroup !== undefined) {\n const decoded = decodeSegment(segmentText, delimiters, collectWarning, {\n segmentIndex: segIdx,\n interchangeIndex: 0,\n groupIndex: groups.length,\n transactionIndex: currentGroup.transactions.length,\n });\n currentTx.segments.push(decoded);\n currentTx.rawSegments.push(segmentText);\n } else if (name.length > 0) {\n // Outside any transaction, a body segment is structurally\n // unexpected. The empty-name guard skips the synthetic empty\n // \"segment\" the splitter produces after a trailing terminator\n // (e.g. an interchange that ends `...IEA*1*1~\\r\\n` — the\n // post-terminator newline-only chunk is not a real segment).\n warnings.push(\n unexpectedSegment(\n { segmentIndex: segIdx, interchangeIndex: 0 },\n name,\n \"body segment outside any open transaction set\",\n ),\n );\n }\n break;\n }\n }\n }\n\n // EOF without IEA → close anything open and warn. The function returns\n // immediately after, so resetting `currentTx`/`currentGroup` is moot.\n if (currentGroup !== undefined) {\n if (currentTx !== undefined) {\n finalizeTx(currentTx, currentGroup, undefined);\n }\n finalizeGroup(currentGroup, undefined);\n }\n warnings.push(missingIea({ segmentIndex: segments.length + 1, interchangeIndex: 0 }));\n\n return {\n isa,\n groups: Object.freeze(groups.slice()),\n iea,\n ta1Segments: Object.freeze(ta1Segments.slice()),\n trailingBytes,\n warnings: Object.freeze(warnings.slice()),\n };\n}\n","/**\n * Public entry point for the `@cosyte/x12` parser — composes the Phase 1\n * delimiter-detection + envelope-decode stages and routes every Tier-2\n * warning through a single emission chokepoint. The four Tier-3 fatal codes\n * (`X12_EMPTY_INPUT`, `X12_NO_ISA_HEADER`, `X12_ISA_TOO_SHORT`,\n * `X12_INVALID_DELIMITERS`) are thrown even in lenient mode; every other\n * recoverable deviation is a warning unless `{ strict: true }` is passed.\n *\n * Pipeline order: Buffer decode (latin1, byte-1:1) → EMPTY_INPUT check →\n * detectDelimiters (Tier-3 only) → decodeEnvelope (lenient) → emit\n * warnings (with optional strict-mode escalation) → return X12Interchange.\n */\n\nimport type { Buffer } from \"node:buffer\";\n\nimport { getDefaultProfile } from \"../profiles/default.js\";\n\nimport { detectDelimiters } from \"./delimiters.js\";\nimport { FATAL_CODES, X12ParseError, snippet } from \"./errors.js\";\nimport { decodeEnvelope } from \"./envelope.js\";\nimport type { X12Interchange, X12ParseOptions } from \"./types.js\";\n\n/**\n * Parse a raw X12 healthcare interchange (string or `Buffer`) into an\n * {@link X12Interchange}. The parser is lenient by default: recoverable\n * deviations from 005010 are reported via `ix.warnings` and (optionally)\n * `options.onWarning`, never thrown. Four unrecoverable structural errors\n * throw {@link X12ParseError}: `X12_EMPTY_INPUT`, `X12_NO_ISA_HEADER`,\n * `X12_ISA_TOO_SHORT`, `X12_INVALID_DELIMITERS`. Opt into strict mode with\n * `{ strict: true }` to escalate every Tier-2 warning into an\n * `X12ParseError` carrying the warning's code.\n *\n * Phase 1 decodes the envelope (ISA / GS / ST / SE / GE / IEA) and\n * detects the four delimiters from fixed ISA byte positions. Transaction-\n * set bodies inside each ST..SE are kept **opaque** at this phase —\n * `tx.segments` carries the raw segment strings (terminator stripped).\n * Phase 2 adds segment/element/composite/repetition decode on top.\n *\n * @example\n * ```ts\n * import { parseX12, WARNING_CODES } from \"@cosyte/x12\";\n *\n * const raw = \"ISA*00* *00* *ZZ*SENDER *ZZ*RECEIVER *250101*1200*^*00501*000000001*0*P*:~GS*HC*S*R*20250101*1200*1*X*005010X222A2~ST*837*0001~SE*2*0001~GE*1*1~IEA*1*000000001~\";\n * const ix = parseX12(raw);\n * ix.delimiters.element; // \"*\"\n * ix.delimiters.component; // \":\"\n * ix.delimiters.segment; // \"~\"\n * ix.groups[0]?.gs.elements[1]; // \"HC\"\n * for (const w of ix.warnings) {\n * if (w.code === WARNING_CODES.X12_PRE_005010) {\n * // sender on pre-005010 version family\n * }\n * }\n * ```\n */\nexport function parseX12(raw: string | Buffer): X12Interchange;\nexport function parseX12(raw: string | Buffer, options: X12ParseOptions): X12Interchange;\n/** @internal — implementation signature; overload signatures above carry the public JSDoc + @example. */\nexport function parseX12(raw: string | Buffer, options: X12ParseOptions = {}): X12Interchange {\n // Step 1: Buffer → string (latin1 preserves bytes 1:1; ISA envelope is\n // ASCII-only by spec, so this is byte-faithful through the parser).\n const text = typeof raw === \"string\" ? raw : raw.toString(\"latin1\");\n\n // Step 2: EMPTY_INPUT fatal check at the top of the pipeline.\n if (text.length === 0) {\n throw new X12ParseError(\n FATAL_CODES.X12_EMPTY_INPUT,\n \"Input is empty.\",\n { segmentIndex: 0, interchangeIndex: 0 },\n \"\",\n );\n }\n\n // Step 3: detect delimiters from fixed ISA positions (throws Tier-3\n // X12_NO_ISA_HEADER / X12_ISA_TOO_SHORT / X12_INVALID_DELIMITERS).\n const delimiters = detectDelimiters(text);\n\n // Step 4: decode the envelope (lenient; collects warnings, never\n // throws).\n const decoded = decodeEnvelope(text, delimiters);\n\n // Step 5: in strict mode, escalate the first warning into a thrown\n // X12ParseError carrying the warning code. Lenient mode forwards every\n // warning to the optional callback inline and returns the result.\n if (options.strict === true) {\n const first = decoded.warnings[0];\n if (first !== undefined) {\n // Justification for `as unknown as X12FatalCode`: strict mode\n // escalates Tier-2 warnings into thrown errors. The thrown error\n // reuses the existing X12ParseError shape so consumers have one\n // catch surface. `code` is typed as `X12FatalCode` (the 4 Tier-3\n // codes) at compile time; at runtime under strict mode it also\n // carries any `X12WarningCode`. Lenient-mode callers still get\n // exhaustive-switch checks on `X12FatalCode`; strict-mode\n // consumers narrow on the runtime string. Mirrors the hl7\n // strict-escalation pattern (Plan 06 decision (b)).\n throw new X12ParseError(\n first.code as unknown as (typeof FATAL_CODES)[keyof typeof FATAL_CODES],\n first.message,\n first.position,\n snippet(text),\n );\n }\n }\n\n if (options.onWarning !== undefined) {\n const cb = options.onWarning;\n for (const w of decoded.warnings) {\n try {\n cb(w);\n } catch {\n /* noisy handlers must not break the parser — silent swallow,\n mirroring hl7's onWarning contract. */\n }\n }\n }\n\n // Resolve the profile in effect: an explicit profile wins; `null` opts out\n // of the default for this call; otherwise fall back to the process-scoped\n // default. v1 profiles are descriptive — the profile is attached for\n // attribution (and `partitionWarnings`) but does not alter the parse above.\n const profile = options.profile === null ? undefined : (options.profile ?? getDefaultProfile());\n\n // exactOptionalPropertyTypes: conditionally include optional fields.\n const result: X12Interchange = {\n isa: decoded.isa,\n iea: decoded.iea,\n delimiters,\n groups: decoded.groups,\n ta1Segments: decoded.ta1Segments,\n warnings: decoded.warnings,\n ...(decoded.trailingBytes !== undefined ? { trailingBytes: decoded.trailingBytes } : {}),\n ...(profile !== undefined ? { profile } : {}),\n };\n return Object.freeze(result);\n}\n","/**\n * Public `defineLoopSpec()` factory for the `@cosyte/x12` loop surface.\n * Returns a frozen {@link LoopSpec} after structural validation — no\n * runtime walker (Phase 3+ owns walking). The DOGFOODING gate: every\n * built-in transaction loop spec shipped in Phases 3+ is authored through\n * this same public API consumers use for payer-specific loops, so a\n * regression in the public surface is impossible to hide.\n *\n * Validation is strictly structural at this phase:\n *\n * - `id` and `trigger` are non-empty strings.\n * - `trigger` segment id passes the same `[A-Z][A-Z0-9]{1,2}` shape used\n * by every X12 segment name (a TR3-valid id is 2-3 uppercase letters /\n * digits, leading letter). This catches typos like `\"clm\"` (lowercase)\n * or `\"CL\"` (too short for the 3-letter HL group identifier).\n * - `segments` contains at least one entry and its first entry's id MUST\n * equal `trigger` (the trigger segment opens its own loop body).\n * - Every segment id passes the same shape check.\n * - `children` defaults to `[]`. Each child is itself a `LoopSpec`\n * (`defineLoopSpec` may be called recursively to build a tree before\n * passing children into the parent's call).\n *\n * Invalid input throws {@link LoopSpecDefinitionError} (a typed Error\n * subclass) so consumer bugs surface at definition time, not at walk\n * time. The parser is **lenient on parse** but **strict on consumer-\n * authored specs** — bad spec data is a programming error, not a\n * transmission deviation.\n */\n\nimport type { LoopSegmentSpec, LoopSpec } from \"./types.js\";\n\n/**\n * Permissible shape for an X12 segment id. Most segments are 2-3 chars,\n * starting with a letter, remaining chars uppercase letter or digit (the\n * TR3 grammar). Accepts 2 chars (NM, HL, HI, etc.) AND 3 chars (NM1, CLM,\n * BHT, etc.) — the X12 spec permits both lengths.\n *\n * @internal\n */\nconst SEGMENT_ID_RE = /^[A-Z][A-Z0-9]{1,2}$/u;\n\n/**\n * Thrown by {@link defineLoopSpec} when the supplied spec is structurally\n * invalid. Carries the offending path so a consumer fixing a typo doesn't\n * have to hunt: e.g. `\"segments[3].id\"` or `\"children[0].trigger\"`.\n *\n * @example\n * ```ts\n * import { defineLoopSpec, LoopSpecDefinitionError } from \"@cosyte/x12\";\n * try {\n * defineLoopSpec({\n * id: \"2300\",\n * trigger: \"clm\",\n * segments: [{ id: \"clm\", usage: \"required\", max: 1 }],\n * });\n * } catch (err) {\n * if (err instanceof LoopSpecDefinitionError) {\n * // err.path === \"trigger\"\n * }\n * }\n * ```\n */\nexport class LoopSpecDefinitionError extends Error {\n public readonly path: string;\n /**\n * Construct a new `LoopSpecDefinitionError` with the offending path.\n *\n * @internal\n */\n public constructor(path: string, message: string) {\n super(`${path}: ${message}`);\n this.name = \"LoopSpecDefinitionError\";\n this.path = path;\n }\n}\n\n/**\n * Input shape accepted by `defineLoopSpec`. `children` is optional;\n * `LoopSpec.children` always materializes as a frozen `[]` when omitted\n * so consumer code can iterate without an `?? []` guard.\n *\n * @example\n * ```ts\n * import type { DefineLoopSpecInput } from \"@cosyte/x12\";\n * const input: DefineLoopSpecInput = {\n * id: \"2110\",\n * trigger: \"SVC\",\n * segments: [{ id: \"SVC\", usage: \"required\", max: 1 }],\n * };\n * ```\n */\nexport interface DefineLoopSpecInput {\n readonly id: string;\n readonly trigger: string;\n readonly description?: string;\n readonly segments: readonly LoopSegmentSpec[];\n readonly children?: readonly LoopSpec[];\n}\n\n/**\n * Define a TR3 loop specification. Validates structurally, freezes the\n * resulting {@link LoopSpec} (along with its `segments` and `children`\n * arrays), and returns it. Pure — no I/O, no global state.\n *\n * @example\n * ```ts\n * import { defineLoopSpec } from \"@cosyte/x12\";\n * const Loop2110 = defineLoopSpec({\n * id: \"2110\",\n * description: \"835 Service Payment Information\",\n * trigger: \"SVC\",\n * segments: [\n * { id: \"SVC\", usage: \"required\", max: 1 },\n * { id: \"DTM\", usage: \"situational\", max: \">1\" },\n * { id: \"CAS\", usage: \"situational\", max: \">1\" },\n * { id: \"REF\", usage: \"situational\", max: \">1\" },\n * { id: \"AMT\", usage: \"situational\", max: \">1\" },\n * { id: \"LQ\", usage: \"situational\", max: \">1\" },\n * ],\n * });\n * Loop2110.trigger; // \"SVC\"\n * ```\n */\nexport function defineLoopSpec(input: DefineLoopSpecInput): LoopSpec {\n if (typeof input.id !== \"string\" || input.id.length === 0) {\n throw new LoopSpecDefinitionError(\"id\", \"loop id must be a non-empty string\");\n }\n if (typeof input.trigger !== \"string\" || !SEGMENT_ID_RE.test(input.trigger)) {\n throw new LoopSpecDefinitionError(\n \"trigger\",\n `trigger \"${input.trigger}\" must match /^[A-Z][A-Z0-9]{1,2}$/`,\n );\n }\n if (input.segments.length === 0) {\n throw new LoopSpecDefinitionError(\n \"segments\",\n \"loop must declare at least one segment (the trigger)\",\n );\n }\n const firstId = input.segments[0]?.id;\n if (firstId !== input.trigger) {\n throw new LoopSpecDefinitionError(\n \"segments[0].id\",\n `first segment \"${String(firstId)}\" must equal trigger \"${input.trigger}\"`,\n );\n }\n const frozenSegments: LoopSegmentSpec[] = [];\n for (let i = 0; i < input.segments.length; i += 1) {\n const s = input.segments[i];\n if (s === undefined) continue;\n if (!SEGMENT_ID_RE.test(s.id)) {\n throw new LoopSpecDefinitionError(\n `segments[${String(i)}].id`,\n `segment id \"${s.id}\" must match /^[A-Z][A-Z0-9]{1,2}$/`,\n );\n }\n if (s.usage !== \"required\" && s.usage !== \"situational\" && s.usage !== \"optional\") {\n throw new LoopSpecDefinitionError(\n `segments[${String(i)}].usage`,\n `usage \"${String(s.usage)}\" must be one of \"required\"|\"situational\"|\"optional\"`,\n );\n }\n if (s.max !== \">1\" && (typeof s.max !== \"number\" || s.max < 1 || !Number.isInteger(s.max))) {\n throw new LoopSpecDefinitionError(\n `segments[${String(i)}].max`,\n `max \"${String(s.max)}\" must be a positive integer or \">1\"`,\n );\n }\n const seg: LoopSegmentSpec = Object.freeze({\n id: s.id,\n usage: s.usage,\n max: s.max,\n ...(s.position !== undefined ? { position: s.position } : {}),\n ...(s.description !== undefined ? { description: s.description } : {}),\n });\n frozenSegments.push(seg);\n }\n const children = Object.freeze((input.children ?? []).slice());\n const out: LoopSpec = Object.freeze({\n id: input.id,\n trigger: input.trigger,\n segments: Object.freeze(frozenSegments),\n children,\n ...(input.description !== undefined ? { description: input.description } : {}),\n });\n return out;\n}\n","/**\n * Shared types for bundled X12 code-list snapshots. Every snapshot is a\n * **versioned data artifact** (not a runtime fetch) — `meta.snapshotDate`\n * is the date this package captured the list; `meta.publishedDate` is the\n * WPC / X12 / CMS publication date the snapshot reflects.\n *\n * Snapshots are deliberately tiny in v0.0.x — pre-launch initial subsets\n * covering only the codes already exercised by the parser's Tier-1 + Tier-2\n * fixtures. The Phase 10 `pnpm refresh:code-lists` script will regenerate\n * the full WPC-published lists from canonical sources for the first real\n * release; until then `lookup(code)` returns `undefined` for codes outside\n * the subset and consumers receive the **verbatim** inbound code (the\n * value is never lost — only the human-readable description is absent).\n *\n * Update / freshness policy: WPC updates CARC + RARC monthly; CSCC + CSC\n * monthly; X12 internal code lists (Claim Adjustment Group, etc.) follow\n * the standard release cadence (rare). Snapshots are refreshed on a\n * release cadence, not at runtime — a stale description never produces a\n * wrong code, only a missing description.\n */\n\n/**\n * Metadata header attached to every bundled code-list snapshot. Surfaces\n * the snapshot's identity + provenance + freshness so consumers can\n * decide whether a stale description matters for their use case.\n *\n * @example\n * ```ts\n * import { CARC } from \"@cosyte/x12\";\n * CARC.meta.id; // \"CARC\"\n * CARC.meta.snapshotDate; // ISO date string this snapshot was captured\n * CARC.meta.publishedDate; // ISO date string of the underlying WPC publication\n * ```\n */\nexport interface CodeListMeta {\n readonly id: string;\n readonly description: string;\n readonly source: string;\n readonly publishedDate: string;\n readonly snapshotDate: string;\n readonly note?: string;\n}\n\n/**\n * One entry returned from a code-list `lookup(code)`. The inbound code\n * value is echoed verbatim (so a caller that branches on `entry.code` is\n * comparing exactly the bytes that came in, never a normalized form);\n * `description` is the bundled human-readable text from the snapshot.\n * Future fields (`isObsolete`, `replacedBy`) are tracked by the roadmap;\n * v0.0.x snapshots ship code + description only.\n *\n * @example\n * ```ts\n * import { lookupCarc } from \"@cosyte/x12\";\n * const entry = lookupCarc(\"45\");\n * entry?.code; // \"45\"\n * entry?.description; // \"Charge exceeds fee schedule/maximum allowable...\"\n * ```\n */\nexport interface CodeListEntry {\n readonly code: string;\n readonly description: string;\n}\n\n/**\n * A complete bundled code-list snapshot. `meta` carries provenance;\n * `codes` is a frozen plain object so consumers can iterate or build their\n * own lookups without going through the helper. Internal use prefers the\n * per-snapshot `lookup*` helpers — they return a frozen {@link\n * CodeListEntry} ergonomic for the helper APIs.\n *\n * @example\n * ```ts\n * import { CARC } from \"@cosyte/x12\";\n * Object.keys(CARC.codes).length; // count of bundled CARC codes\n * CARC.codes[\"45\"]; // raw description string (or undefined)\n * ```\n */\nexport interface CodeListSnapshot {\n readonly meta: CodeListMeta;\n readonly codes: Readonly<Record<string, string>>;\n}\n\n/**\n * Construct a `lookup` helper for a {@link CodeListSnapshot}. Returns\n * `undefined` for codes outside the bundled subset (which is the\n * fail-safe — the verbatim inbound code is preserved by the helper that\n * called us; only the description is unavailable).\n *\n * @internal — exported only for the per-snapshot modules.\n */\nexport function makeLookup(\n snapshot: CodeListSnapshot,\n): (code: string) => CodeListEntry | undefined {\n return (code: string): CodeListEntry | undefined => {\n const description = snapshot.codes[code];\n if (description === undefined) return undefined;\n return Object.freeze({ code, description });\n };\n}\n","/**\n * **CARC — Claim Adjustment Reason Codes.** Lives on every CAS adjustment\n * in an 835 (and on 837 COB CAS adjustments). The numeric code identifies\n * *why* the adjustment was made (e.g. \"deductible\", \"non-covered\",\n * \"exceeds fee schedule\"); paired with the Claim Adjustment Group Code on\n * `CAS-01` it tells a cash-poster who owes the unpaid balance and what\n * the next action is (appeal, write-off, patient bill).\n *\n * Source: **WPC (Washington Publishing Company)** — `x12.org/codes/claim-\n * adjustment-reason-codes`. WPC updates the list **monthly**. Misreading a\n * code drives wrong patient billing or a wrong appeal — the parser surfaces\n * the verbatim code AND the bundled-snapshot description; unknown codes\n * carry the verbatim value with `description: undefined` AND emit a\n * `X12_UNKNOWN_CARC` warning.\n *\n * **Pre-launch initial subset.** This snapshot covers the ~30 most\n * commonly observed CARC codes — every value exercised by the Tier-1 /\n * Tier-2 fixtures plus the long-tail codes most cash-posting workflows\n * branch on. The Phase 10 `pnpm refresh:code-lists` script regenerates\n * the full WPC-published list from the canonical source for the first\n * real publish; until then a CARC absent from the snapshot still parses\n * fine (verbatim) — only its description is unavailable.\n */\n\nimport { makeLookup, type CodeListEntry, type CodeListSnapshot } from \"./meta.js\";\n\n/**\n * Bundled CARC snapshot. `meta.publishedDate` is the WPC publication\n * date this subset reflects; `meta.snapshotDate` is when cosyte captured\n * it. The `codes` map is frozen — use the {@link lookupCarc} helper for\n * the ergonomic `{ code, description }` shape consumed by the 835\n * helper.\n *\n * @example\n * ```ts\n * import { CARC } from \"@cosyte/x12\";\n * CARC.meta.snapshotDate; // \"2026-06-27\"\n * CARC.codes[\"45\"]; // \"Charge exceeds fee schedule...\"\n * Object.keys(CARC.codes).length; // count of bundled codes\n * ```\n */\nexport const CARC: CodeListSnapshot = Object.freeze({\n meta: Object.freeze({\n id: \"CARC\",\n description: \"Claim Adjustment Reason Codes\",\n source: \"WPC (Washington Publishing Company) — x12.org/codes/claim-adjustment-reason-codes\",\n publishedDate: \"2026-03-01\",\n snapshotDate: \"2026-06-27\",\n note: \"Pre-launch initial subset (~30 most commonly observed codes). Phase 10 ships a full-regen script.\",\n }),\n codes: Object.freeze({\n \"1\": \"Deductible Amount\",\n \"2\": \"Coinsurance Amount\",\n \"3\": \"Co-payment Amount\",\n \"4\": \"The procedure code is inconsistent with the modifier used.\",\n \"5\": \"The procedure code/type of bill is inconsistent with the place of service.\",\n \"6\": \"The procedure/revenue code is inconsistent with the patient's age.\",\n \"7\": \"The procedure/revenue code is inconsistent with the patient's gender.\",\n \"8\": \"The procedure code is inconsistent with the provider type/specialty (taxonomy).\",\n \"9\": \"The diagnosis is inconsistent with the patient's age.\",\n \"10\": \"The diagnosis is inconsistent with the patient's gender.\",\n \"11\": \"The diagnosis is inconsistent with the procedure.\",\n \"15\": \"The authorization number is missing, invalid, or does not apply to the billed services or provider.\",\n \"16\": \"Claim/service lacks information or has submission/billing error(s).\",\n \"18\": \"Exact duplicate claim/service.\",\n \"22\": \"This care may be covered by another payer per coordination of benefits.\",\n \"23\": \"The impact of prior payer(s) adjudication including payments and/or adjustments.\",\n \"24\": \"Charges are covered under a capitation agreement/managed care plan.\",\n \"26\": \"Expenses incurred prior to coverage.\",\n \"27\": \"Expenses incurred after coverage terminated.\",\n \"29\": \"The time limit for filing has expired.\",\n \"31\": \"Patient cannot be identified as our insured.\",\n \"45\": \"Charge exceeds fee schedule/maximum allowable or contracted/legislated fee arrangement.\",\n \"50\": \"These are non-covered services because this is not deemed a 'medical necessity' by the payer.\",\n \"96\": \"Non-covered charge(s).\",\n \"97\": \"The benefit for this service is included in the payment/allowance for another service/procedure that has already been adjudicated.\",\n \"109\": \"Claim/service not covered by this payer/contractor.\",\n \"119\": \"Benefit maximum for this time period or occurrence has been reached.\",\n \"197\": \"Precertification/authorization/notification/pre-treatment absent.\",\n \"204\": \"This service/equipment/drug is not covered under the patient's current benefit plan.\",\n }),\n});\n\n/**\n * Look up a CARC code's bundled description. Returns `undefined` when\n * the code is not in the initial subset — the verbatim code is still\n * preserved on the parsed model and the 835 walker emits\n * `X12_UNKNOWN_CARC` so consumers know the description gap exists.\n *\n * @example\n * ```ts\n * import { lookupCarc } from \"@cosyte/x12\";\n * lookupCarc(\"45\")?.description; // \"Charge exceeds fee schedule...\"\n * lookupCarc(\"9999\"); // undefined (outside the bundled subset)\n * ```\n */\nexport const lookupCarc: (code: string) => CodeListEntry | undefined = makeLookup(CARC);\n","/**\n * **Claim Status Category Code (CSCC)** — X12 external code source 507.\n * The first component of an `STC-01` (and `STC-10` / `STC-11`) composite\n * in a 277 Claim Status Response (`005010X212`) or 277CA Claim\n * Acknowledgment (`005010X214`). The CSCC is the *category* of a claim's\n * status — acknowledged, pending, finalized, returned, error. Paired with\n * a {@link \"./claim-status.js\".CLAIM_STATUS_CODES} (CSC) that carries the\n * specific status detail.\n *\n * **Safety:** the CSCC `A`-family (`A1`..`A8`) distinguishes *accepted into\n * adjudication* (`A2`) from *rejected / returned unprocessable* (`A3`,\n * `A6`, `A7`, `A8`). Misreading a category flips a rejected claim to an\n * accepted one in a provider's follow-up workflow — a real\n * cash-flow / timely-filing hazard. The parser surfaces the verbatim CSCC\n * and never derives an accept/reject boolean (that interpretation belongs\n * to the consumer's business rules).\n *\n * Spec source: ASC X12 / Washington Publishing Company \"Claim Status\n * Category Codes\" (Code Source 507), as referenced by TR3s 005010X212 and\n * 005010X214. WPC updates this list periodically (roughly thrice yearly).\n */\n\nimport { makeLookup, type CodeListEntry, type CodeListSnapshot } from \"./meta.js\";\n\n/**\n * Bundled Claim Status Category Code (CSCC) snapshot. Used by the 277 and\n * 277CA helpers to surface a human-readable category alongside each\n * verbatim CSCC parsed from an STC composite.\n *\n * @example\n * ```ts\n * import { CLAIM_STATUS_CATEGORY_CODES } from \"@cosyte/x12\";\n * CLAIM_STATUS_CATEGORY_CODES.codes[\"A2\"]; // \"Acknowledgement/Acceptance into adjudication system\"\n * CLAIM_STATUS_CATEGORY_CODES.codes[\"F2\"]; // \"Finalized/Denial\"\n * ```\n */\nexport const CLAIM_STATUS_CATEGORY_CODES: CodeListSnapshot = Object.freeze({\n meta: Object.freeze({\n id: \"CLAIM-STATUS-CATEGORY\",\n description: \"277/277CA STC Claim Status Category Code (X12 external code source 507)\",\n source:\n \"ASC X12 / WPC Claim Status Category Codes (Code Source 507); referenced by TR3 005010X212 + 005010X214\",\n publishedDate: \"2023-11-01\",\n snapshotDate: \"2026-06-27\",\n note: \"Common A/P/F/D/E-family subset; WPC-maintained list refreshed on the Phase 10 release cadence, never at runtime.\",\n }),\n codes: Object.freeze({\n A0: \"Acknowledgement/Forwarded - The claim/encounter has been forwarded to another entity.\",\n A1: \"Acknowledgement/Receipt - The claim/encounter has been received.\",\n A2: \"Acknowledgement/Acceptance into adjudication system - The claim/encounter has been accepted.\",\n A3: \"Acknowledgement/Returned as unprocessable claim - The claim/encounter has been rejected and has not been entered into the adjudication system.\",\n A4: \"Acknowledgement/Not Found - The claim/encounter cannot be found in the adjudication system.\",\n A5: \"Acknowledgement/Split Claim - The claim/encounter has been split upon acceptance into the adjudication system.\",\n A6: \"Acknowledgement/Rejected for Missing Information.\",\n A7: \"Acknowledgement/Rejected for Invalid Information.\",\n A8: \"Acknowledgement/Rejected for relational field in error.\",\n D0: \"Data Search Unsuccessful - The payer is unable to return status on the requested claim(s).\",\n E0: \"Response not possible - error on submitted request data.\",\n E1: \"Response not possible - System Status.\",\n E2: \"Information Holder is not responding; resubmit at a later time.\",\n E3: \"Correction required - relational fields in error.\",\n E4: \"Trading partner agreement specific requirement not met.\",\n F0: \"Finalized - The claim/encounter has completed the adjudication cycle and no more action will be taken.\",\n F1: \"Finalized/Payment - The claim/line has been paid.\",\n F2: \"Finalized/Denial - The claim/line has been denied.\",\n F3: \"Finalized/Revised - Adjudication information has been changed.\",\n F3F: \"Finalized/Forwarded - The claim/encounter processing has been completed. Any payment information is forwarded with this transaction.\",\n F4: \"Finalized/Adjudication Complete - No payment forthcoming.\",\n P0: \"Pending - The claim/encounter is in the adjudication system but no decision has been made.\",\n P1: \"Pending/In Process - The claim or encounter is in the adjudication system.\",\n P2: \"Pending/Payer Review - The claim/encounter is suspended and is pending review.\",\n P3: \"Pending/Provider Requested Information - The claim or encounter is waiting for information that has already been requested from the provider.\",\n P4: \"Pending/Patient Requested Information - The claim or encounter is waiting for information that has already been requested from the patient/subscriber.\",\n P5: \"Pending/Payer Administrative/System hold.\",\n R0: \"Requests for additional Information - General requests.\",\n R1: \"Requests for additional Information - Entity Information.\",\n }),\n});\n\n/**\n * Look up a Claim Status Category Code (CSCC) description from the bundled\n * snapshot. Returns `undefined` for codes outside the subset; the verbatim\n * code is always preserved on the parsed status model.\n *\n * @example\n * ```ts\n * import { lookupClaimStatusCategory } from \"@cosyte/x12\";\n * lookupClaimStatusCategory(\"A2\")?.description; // \"Acknowledgement/Acceptance...\"\n * lookupClaimStatusCategory(\"ZZ\"); // undefined (outside subset)\n * ```\n */\nexport const lookupClaimStatusCategory: (code: string) => CodeListEntry | undefined = makeLookup(\n CLAIM_STATUS_CATEGORY_CODES,\n);\n","/**\n * **Claim Status Code (CSC)** — X12 external code source 508. The second\n * component of an `STC-01` (and `STC-10` / `STC-11`) composite in a 277\n * Claim Status Response (`005010X212`) or 277CA Claim Acknowledgment\n * (`005010X214`). The CSC carries the *specific* status detail that\n * refines its paired {@link \"./claim-status-category.js\".\n * CLAIM_STATUS_CATEGORY_CODES} (CSCC) — e.g. category `A7`\n * (rejected/invalid) + status `21` (\"Missing or invalid information\").\n *\n * **Safety:** a wrong CSC silently misattributes *why* a claim was\n * rejected or pended, sending a provider's correction workflow down the\n * wrong path. The parser surfaces the verbatim CSC and the bundled\n * description (when known); a code outside the subset keeps its verbatim\n * value and emits `X12_UNKNOWN_CLAIM_STATUS`.\n *\n * Spec source: ASC X12 / Washington Publishing Company \"Claim Status\n * Codes\" (Code Source 508). The full list is large (~800 values) and\n * WPC-maintained; this snapshot bundles a common subset.\n */\n\nimport { makeLookup, type CodeListEntry, type CodeListSnapshot } from \"./meta.js\";\n\n/**\n * Bundled Claim Status Code (CSC) snapshot. Used by the 277 and 277CA\n * helpers to surface a human-readable status alongside each verbatim CSC\n * parsed from an STC composite.\n *\n * @example\n * ```ts\n * import { CLAIM_STATUS_CODES } from \"@cosyte/x12\";\n * CLAIM_STATUS_CODES.codes[\"20\"]; // \"Accepted for processing.\"\n * CLAIM_STATUS_CODES.codes[\"21\"]; // \"Missing or invalid information.\"\n * ```\n */\nexport const CLAIM_STATUS_CODES: CodeListSnapshot = Object.freeze({\n meta: Object.freeze({\n id: \"CLAIM-STATUS\",\n description: \"277/277CA STC Claim Status Code (X12 external code source 508)\",\n source:\n \"ASC X12 / WPC Claim Status Codes (Code Source 508); referenced by TR3 005010X212 + 005010X214\",\n publishedDate: \"2023-11-01\",\n snapshotDate: \"2026-06-27\",\n note: \"Common subset; WPC-maintained list (~800 codes) refreshed on the Phase 10 release cadence, never at runtime.\",\n }),\n codes: Object.freeze({\n \"1\": \"For more detailed information, see remittance advice.\",\n \"2\": \"More detailed information in letter.\",\n \"3\": \"Claim has been adjudicated and is awaiting payment cycle.\",\n \"6\": \"Balance due from the subscriber.\",\n \"15\": \"One or more originally submitted procedure codes have been combined.\",\n \"16\": \"Claim/encounter has been forwarded to entity.\",\n \"19\": \"Entity acknowledges receipt of claim/encounter.\",\n \"20\": \"Accepted for processing.\",\n \"21\": \"Missing or invalid information.\",\n \"23\": \"Returned to Entity.\",\n \"24\": \"Entity not approved as an electronic submitter.\",\n \"25\": \"Entity not approved.\",\n \"33\": \"Claim/service spans multiple months.\",\n \"35\": \"Claim/encounter not found.\",\n \"37\": \"Predetermination is on file, awaiting completion of services.\",\n \"45\": \"Charges exceed your contracted/legislated fee arrangement.\",\n \"65\": \"Claim/line has been paid.\",\n \"85\": \"Claim/encounter has been forwarded by third party entity to entity.\",\n \"88\": \"Entity not eligible for benefits for submitted dates of service.\",\n \"97\": \"Patient eligibility not found with entity.\",\n \"101\": \"Claim was processed as adjustment to previous claim.\",\n \"107\":\n \"Processed according to contract provisions (Contract refers to provisions that exist between the Health Plan and a Provider of Health Care Services).\",\n \"187\": \"Date(s) of service.\",\n \"454\": \"Procedure code for services rendered.\",\n \"509\": \"Claim being researched for Insured ID/Group Policy Number error.\",\n }),\n});\n\n/**\n * Look up a Claim Status Code (CSC) description from the bundled snapshot.\n * Returns `undefined` for codes outside the subset; the verbatim code is\n * always preserved on the parsed status model.\n *\n * @example\n * ```ts\n * import { lookupClaimStatus } from \"@cosyte/x12\";\n * lookupClaimStatus(\"20\")?.description; // \"Accepted for processing.\"\n * lookupClaimStatus(\"99999\"); // undefined (outside subset)\n * ```\n */\nexport const lookupClaimStatus: (code: string) => CodeListEntry | undefined =\n makeLookup(CLAIM_STATUS_CODES);\n","/**\n * **CLP-02 — Claim Status Code** (X12 Code Source 65). Lives on `CLP-02`\n * of every 835 claim payment loop; identifies the **adjudication\n * disposition** of a single claim (paid as primary / secondary, denied,\n * reversed, predetermination). Misreading flips an accepted claim to a\n * denied one in a cash-poster's downstream system.\n *\n * Spec source: X12 005010X221A1 TR3 §\"CLP Claim Payment Information\",\n * Element `CLP-02` (Code Source 65). The full code list is bounded\n * (~25 values) and X12-internal (not WPC) — it grows rarely.\n *\n * **Initial bundled subset** covers the ~10 most common dispositions.\n * Codes outside the subset still parse (verbatim code preserved on the\n * model); a `X12_UNKNOWN_CLP_STATUS` warning would be a Phase 5+ addition\n * (not bundled at Phase 4 to keep the additions-only warning registry\n * surgical — Phase 4 only adds the codes it actually uses).\n */\n\nimport { makeLookup, type CodeListEntry, type CodeListSnapshot } from \"./meta.js\";\n\n/**\n * Bundled CLP-02 (Claim Status) snapshot. Used by the 835 helper to\n * surface a human-readable description alongside the verbatim\n * disposition code.\n *\n * @example\n * ```ts\n * import { CLP_STATUS } from \"@cosyte/x12\";\n * CLP_STATUS.codes[\"1\"]; // \"Processed as Primary\"\n * CLP_STATUS.codes[\"4\"]; // \"Denied\"\n * ```\n */\nexport const CLP_STATUS: CodeListSnapshot = Object.freeze({\n meta: Object.freeze({\n id: \"CLP-STATUS\",\n description: \"835 CLP-02 Claim Status Code (X12 Code Source 65)\",\n source: \"X12 005010X221A1 TR3 §CLP Claim Payment Information, Element CLP-02 (Code Source 65)\",\n publishedDate: \"2010-04-01\",\n snapshotDate: \"2026-06-27\",\n note: \"Initial subset; X12-internal list (not WPC) — codes are stable.\",\n }),\n codes: Object.freeze({\n \"1\": \"Processed as Primary\",\n \"2\": \"Processed as Secondary\",\n \"3\": \"Processed as Tertiary\",\n \"4\": \"Denied\",\n \"19\": \"Processed as Primary, Forwarded to Additional Payer(s)\",\n \"20\": \"Processed as Secondary, Forwarded to Additional Payer(s)\",\n \"21\": \"Processed as Tertiary, Forwarded to Additional Payer(s)\",\n \"22\": \"Reversal of Previous Payment\",\n \"23\": \"Not Our Claim, Forwarded to Additional Payer(s)\",\n \"25\": \"Predetermination Pricing Only - No Payment\",\n }),\n});\n\n/**\n * Look up a CLP-02 claim status code's bundled description. Returns\n * `undefined` for codes outside the initial subset; the verbatim code is\n * still preserved on the parsed claim model.\n *\n * @example\n * ```ts\n * import { lookupClpStatus } from \"@cosyte/x12\";\n * lookupClpStatus(\"1\")?.description; // \"Processed as Primary\"\n * lookupClpStatus(\"99\"); // undefined (outside subset)\n * ```\n */\nexport const lookupClpStatus: (code: string) => CodeListEntry | undefined = makeLookup(CLP_STATUS);\n","/**\n * **INS-03 — Maintenance Type Code** (X12 Code Source 875). Lives on\n * `INS-03` of every 834 member-level detail loop (and is echoed on\n * `HD-01` for each health-coverage loop); identifies what the enrollment\n * transaction *does to the member* — add, change, terminate, reinstate,\n * audit. This is the safety-critical field of the 834: misreading a\n * termination (`024`) as a change (`001`) leaves a member enrolled who the\n * sponsor dropped, or drops a member the sponsor kept. The verbatim code\n * is ALWAYS preserved; the bundled description is a convenience only.\n *\n * Spec source: WPC TR3 `005010X220A1` — Benefit Enrollment and Maintenance\n * (834), Element `INS-03` (Code Source 875). The HIPAA-relevant subset is\n * small and stable.\n */\n\nimport { makeLookup, type CodeListEntry, type CodeListSnapshot } from \"./meta.js\";\n\n/**\n * Bundled INS-03 (Maintenance Type) snapshot. Used by the 834 helper to\n * surface a human-readable description alongside the verbatim maintenance\n * code, and to drive the `X12_834_UNKNOWN_MAINTENANCE_TYPE` warning when a\n * code falls outside this set.\n *\n * @example\n * ```ts\n * import { MAINTENANCE_TYPE_CODES } from \"@cosyte/x12\";\n * MAINTENANCE_TYPE_CODES.codes[\"021\"]; // \"Addition\"\n * MAINTENANCE_TYPE_CODES.codes[\"024\"]; // \"Cancellation or Termination\"\n * ```\n */\nexport const MAINTENANCE_TYPE_CODES: CodeListSnapshot = Object.freeze({\n meta: Object.freeze({\n id: \"MAINTENANCE-TYPE\",\n description: \"834 INS-03 Maintenance Type Code (X12 Code Source 875)\",\n source: \"WPC TR3 005010X220A1 §INS Member Level Detail, Element INS-03 (Code Source 875)\",\n publishedDate: \"2010-04-01\",\n snapshotDate: \"2026-06-28\",\n note: \"HIPAA-relevant subset; X12-internal list — codes are stable.\",\n }),\n codes: Object.freeze({\n \"001\": \"Change\",\n \"002\": \"Delete\",\n \"003\": \"Reinstatement\",\n \"004\": \"Add (Loop 2000)\",\n \"021\": \"Addition\",\n \"024\": \"Cancellation or Termination\",\n \"025\": \"Reinstatement\",\n \"026\": \"Recertification\",\n \"030\": \"Audit or Compare\",\n }),\n});\n\n/**\n * Look up an INS-03 maintenance type code's bundled description. Returns\n * `undefined` for codes outside the subset; the verbatim code is still\n * preserved on the parsed enrollment, and the 834 helper raises an\n * `X12_834_UNKNOWN_MAINTENANCE_TYPE` warning so a consumer never silently\n * mis-applies an unknown action.\n *\n * @example\n * ```ts\n * import { lookupMaintenanceType } from \"@cosyte/x12\";\n * lookupMaintenanceType(\"024\")?.description; // \"Cancellation or Termination\"\n * lookupMaintenanceType(\"999\"); // undefined (outside subset)\n * ```\n */\nexport const lookupMaintenanceType: (code: string) => CodeListEntry | undefined =\n makeLookup(MAINTENANCE_TYPE_CODES);\n","/**\n * **Service Type Code** (X12 element 1365, EB-03 / EQ-01). Identifies the\n * category of service or benefit a 270 inquires about and a 271 reports\n * eligibility for (`EB-03` in Loop 2110C/D). A repeating, `^`-separated\n * element — a single EB may list several service types under one benefit\n * statement. Misreading the service type silently re-scopes a coverage\n * answer (e.g. \"active coverage for Dental\" read as \"Medical\").\n *\n * Spec source: ASC X12 005010X279A1 TR3 §\"EB Eligibility or Benefit\n * Information\", Element `EB-03` (Code Source: X12 external 1365 — Service\n * Type Code). The full list is large (~600 values) and X12-maintained.\n *\n * **Initial bundled subset** covers the most common service types seen in\n * real 270/271 traffic (plan-level, professional, hospital, pharmacy,\n * dental, vision, behavioral health). Codes outside the subset still parse\n * (the verbatim code is preserved on the model); only the human-readable\n * description is absent.\n */\n\nimport { makeLookup, type CodeListEntry, type CodeListSnapshot } from \"./meta.js\";\n\n/**\n * Bundled Service Type Code (EB-03) snapshot. Used by the 271 helper to\n * surface a human-readable description alongside each verbatim service\n * type code under an eligibility/benefit statement.\n *\n * @example\n * ```ts\n * import { SERVICE_TYPE_CODES } from \"@cosyte/x12\";\n * SERVICE_TYPE_CODES.codes[\"30\"]; // \"Health Benefit Plan Coverage\"\n * SERVICE_TYPE_CODES.codes[\"88\"]; // \"Pharmacy\"\n * ```\n */\nexport const SERVICE_TYPE_CODES: CodeListSnapshot = Object.freeze({\n meta: Object.freeze({\n id: \"SERVICE-TYPE\",\n description: \"270/271 EB-03 Service Type Code (X12 external code source 1365)\",\n source:\n \"ASC X12 005010X279A1 TR3 §EB Eligibility or Benefit Information, Element EB-03 (Code Source 1365)\",\n publishedDate: \"2008-08-01\",\n snapshotDate: \"2026-06-27\",\n note: \"Initial common subset; X12-maintained list (~600 codes) — refreshed on the Phase 10 release cadence, never at runtime.\",\n }),\n codes: Object.freeze({\n \"1\": \"Medical Care\",\n \"30\": \"Health Benefit Plan Coverage\",\n \"33\": \"Chiropractic\",\n \"35\": \"Dental Care\",\n \"40\": \"Oral Surgery\",\n \"42\": \"Home Health Care\",\n \"45\": \"Hospice\",\n \"47\": \"Hospital\",\n \"48\": \"Hospital - Inpatient\",\n \"50\": \"Hospital - Outpatient\",\n \"51\": \"Hospital - Emergency Accident\",\n \"52\": \"Hospital - Emergency Medical\",\n \"53\": \"Hospital - Ambulatory Surgical\",\n \"60\": \"General Benefits\",\n \"62\": \"MRI/CAT Scan\",\n \"65\": \"Newborn Care\",\n \"68\": \"Well Baby Care\",\n \"73\": \"Diagnostic Medical\",\n \"76\": \"Dialysis\",\n \"78\": \"Chemotherapy\",\n \"80\": \"Immunizations\",\n \"81\": \"Routine Physical\",\n \"82\": \"Family Planning\",\n \"86\": \"Emergency Services\",\n \"88\": \"Pharmacy\",\n \"93\": \"Podiatry\",\n \"98\": \"Professional (Physician) Visit - Office\",\n A4: \"Psychiatric\",\n A6: \"Psychotherapy\",\n A7: \"Psychiatric - Inpatient\",\n A8: \"Psychiatric - Outpatient\",\n AD: \"Occupational Therapy\",\n AE: \"Physical Medicine\",\n AF: \"Speech Therapy\",\n AG: \"Skilled Nursing Care\",\n AL: \"Vision (Optometry)\",\n BG: \"Cardiac Rehabilitation\",\n BH: \"Pediatric\",\n MH: \"Mental Health\",\n UC: \"Urgent Care\",\n }),\n});\n\n/**\n * Look up a Service Type Code (EB-03) description from the bundled\n * snapshot. Returns `undefined` for codes outside the initial subset; the\n * verbatim code is still preserved on the parsed benefit model.\n *\n * @example\n * ```ts\n * import { lookupServiceType } from \"@cosyte/x12\";\n * lookupServiceType(\"30\")?.description; // \"Health Benefit Plan Coverage\"\n * lookupServiceType(\"ZZ\"); // undefined (outside subset)\n * ```\n */\nexport const lookupServiceType: (code: string) => CodeListEntry | undefined =\n makeLookup(SERVICE_TYPE_CODES);\n","/**\n * Claim Adjustment Group Code (CAGC) — the spec-fixed 4-value code list\n * that lives on **`CAS-01`** (group code) for every CAS adjustment in an\n * 835 or in an 837 COB segment. **`CAGC` is the safety primitive that\n * tells a cash-poster who owes the unpaid balance** — patient vs. payer\n * vs. third party. Misreading the group code flips the bill to the wrong\n * party. Spec-fixed: this list never grows or churns (unlike WPC CARC /\n * RARC), so it ships as a frozen literal union, not as a snapshot.\n *\n * Spec source: X12 005010X221A1 TR3 §\"CAS Claim Adjustment\", Element\n * `CAS-01` (Code Source: X12 internal); ASC X12 Data Element 1033.\n */\n\n/**\n * The 4 spec-fixed Claim Adjustment Group Codes. Frozen literal union via\n * `as const` so consumers compare `code === CLAIM_ADJUSTMENT_GROUP_CODES.PR`\n * and TypeScript narrows exhaustively.\n *\n * - `CO` — **Contractual Obligation.** The provider's contracted write-off\n * (e.g. payer fee schedule below billed charges). **The PROVIDER eats\n * this.** Posting `CO` to patient responsibility is the wrong-party bug.\n * - `PR` — **Patient Responsibility.** Patient deductible / coinsurance /\n * copay / non-covered. **The PATIENT owes this.** This is the\n * patient-statement total.\n * - `OA` — **Other Adjustment.** Used when neither CO nor PR fits —\n * typically prior-payer payments, COB adjustments, withholding for\n * refund. Use is fact-pattern-specific.\n * - `PI` — **Payer Initiated Reductions.** Payer-side reduction the\n * provider may not dispute under the contract — e.g. bundling edits,\n * prepayment review reductions.\n *\n * @example\n * ```ts\n * import { CLAIM_ADJUSTMENT_GROUP_CODES } from \"@cosyte/x12\";\n * function bucketFor(group: string): \"provider\" | \"patient\" | \"other\" | \"payer-edit\" | \"unknown\" {\n * switch (group) {\n * case CLAIM_ADJUSTMENT_GROUP_CODES.CO: return \"provider\";\n * case CLAIM_ADJUSTMENT_GROUP_CODES.PR: return \"patient\";\n * case CLAIM_ADJUSTMENT_GROUP_CODES.OA: return \"other\";\n * case CLAIM_ADJUSTMENT_GROUP_CODES.PI: return \"payer-edit\";\n * default: return \"unknown\";\n * }\n * }\n * ```\n */\nexport const CLAIM_ADJUSTMENT_GROUP_CODES = {\n CO: \"CO\",\n PR: \"PR\",\n OA: \"OA\",\n PI: \"PI\",\n} as const;\n\n/**\n * Discriminant type for a known Claim Adjustment Group Code. Used to\n * narrow the `group` field on a parsed claim adjustment; unknown\n * inbound values keep the verbatim string (NEVER coerced) and consumers\n * can distinguish via `isClaimAdjustmentGroupCode`.\n *\n * @example\n * ```ts\n * import type { ClaimAdjustmentGroupCode } from \"@cosyte/x12\";\n * const code: ClaimAdjustmentGroupCode = \"PR\";\n * ```\n */\nexport type ClaimAdjustmentGroupCode =\n (typeof CLAIM_ADJUSTMENT_GROUP_CODES)[keyof typeof CLAIM_ADJUSTMENT_GROUP_CODES];\n\n/**\n * Narrow an inbound CAS-01 string to a {@link ClaimAdjustmentGroupCode}.\n * `false` means the inbound code is not one of the 4 spec-defined values\n * (e.g. a typo `\"CR\"` from a quirky payer); the verbatim value is still\n * preserved on the parsed model, and the consumer can branch on the\n * narrow result.\n *\n * @example\n * ```ts\n * import { isClaimAdjustmentGroupCode } from \"@cosyte/x12\";\n * isClaimAdjustmentGroupCode(\"PR\"); // true\n * isClaimAdjustmentGroupCode(\"CR\"); // false (unknown)\n * ```\n */\nexport function isClaimAdjustmentGroupCode(value: string): value is ClaimAdjustmentGroupCode {\n return value in CLAIM_ADJUSTMENT_GROUP_CODES;\n}\n","/**\n * **RARC — Remittance Advice Remark Codes.** Lives on 835 `MIA-05/MIA-20`,\n * `MOA-03..MOA-09`, `LQ-02` (when `LQ-01 = \"HE\"`), and `NTE` remittance\n * notes. Where CARC says *why* an adjustment was made, RARC adds *which\n * specific rule fired* — diagnostic granularity for appeals + cash-posting\n * triage. Misreading a code drives the wrong remediation path (appeal vs\n * write-off vs patient call).\n *\n * Source: **WPC (Washington Publishing Company)** — `x12.org/codes/\n * remittance-advice-remark-codes`. WPC updates monthly. Two prefix\n * conventions: `M`-prefix (legacy / fee-schedule-related, e.g. `M1`) and\n * `N`-prefix (introduced 2003+, e.g. `N4`). Both shapes co-exist in real\n * traffic; the parser treats them as one alphabetic-prefixed code space.\n *\n * **Pre-launch initial subset.** This snapshot covers ~15 of the most\n * commonly observed RARC codes. Unknown codes still parse fine\n * (verbatim); only the description is unavailable, and the 835 walker\n * emits `X12_UNKNOWN_RARC`.\n */\n\nimport { makeLookup, type CodeListEntry, type CodeListSnapshot } from \"./meta.js\";\n\n/**\n * Bundled RARC snapshot. Companion to {@link \"./carc.js\".CARC}; same\n * freshness + safety posture. Use {@link lookupRarc} for the ergonomic\n * lookup.\n *\n * @example\n * ```ts\n * import { RARC } from \"@cosyte/x12\";\n * RARC.codes[\"N4\"]; // \"Missing/incomplete/invalid prior insurance carrier(s) EOB.\"\n * RARC.codes[\"MA01\"]; // (or undefined if outside this subset)\n * ```\n */\nexport const RARC: CodeListSnapshot = Object.freeze({\n meta: Object.freeze({\n id: \"RARC\",\n description: \"Remittance Advice Remark Codes\",\n source: \"WPC (Washington Publishing Company) — x12.org/codes/remittance-advice-remark-codes\",\n publishedDate: \"2026-03-01\",\n snapshotDate: \"2026-06-27\",\n note: \"Pre-launch initial subset (~15 most commonly observed codes). Phase 10 ships a full-regen script.\",\n }),\n codes: Object.freeze({\n M1: \"X-ray not taken within the past 12 months or near enough to the start of treatment.\",\n M86: \"Service denied because payment already made for same/similar procedure within set time frame.\",\n M127: \"Missing patient medical record for this service.\",\n MA01: \"Alert: If you do not agree with what we approved for these services, you may appeal our decision.\",\n MA15: \"Alert: Your claim has been separated to expedite handling. You will receive a separate notice for the other services reported.\",\n N4: \"Missing/incomplete/invalid prior insurance carrier(s) EOB.\",\n N30: \"Patient ineligible for this service.\",\n N122: \"Add-on code cannot be billed by itself.\",\n N130: \"Consult plan benefit documents/guidelines for information about restrictions for this service.\",\n N179: \"Additional information has been requested from the member. The charges will be reconsidered upon receipt of that information.\",\n N522: \"Duplicate of a previously processed claim/line.\",\n N657: \"This should be billed with the appropriate code for these services.\",\n }),\n});\n\n/**\n * Look up a RARC code's bundled description. Same fail-safe semantics as\n * {@link \"./carc.js\".lookupCarc}: unknown codes return `undefined`, the\n * verbatim code is preserved on the parsed model, and the 835 walker\n * emits `X12_UNKNOWN_RARC`.\n *\n * @example\n * ```ts\n * import { lookupRarc } from \"@cosyte/x12\";\n * lookupRarc(\"N4\")?.description; // \"Missing/incomplete/invalid prior insurance carrier(s) EOB.\"\n * ```\n */\nexport const lookupRarc: (code: string) => CodeListEntry | undefined = makeLookup(RARC);\n","/**\n * HI (Health Care Code Information) segment qualifier → code-system\n * provenance table. The 837 family uses HI to carry diagnoses, principal\n * procedures, external cause of injury, condition codes, occurrence codes,\n * value codes, and DRG / patient-related groupings — all under one segment\n * id, with the first component of each composite (HI-NN-1) acting as a\n * code-list qualifier that governs how HI-NN-2 should be interpreted.\n *\n * **Why this lives in its own module.** Misreading a qualifier picks the\n * wrong code system. A `J45.50` interpreted as ICD-9-CM (where it does not\n * exist) instead of ICD-10-CM (asthma, moderate persistent, uncomplicated)\n * silently corrupts the clinical context downstream. The parser surfaces\n * the verbatim qualifier AND the resolved {@link X12HiCodeSystem} so\n * consumers never have to re-derive the mapping themselves and an unknown\n * qualifier still passes through with an `X12_UNKNOWN_HI_QUALIFIER`\n * warning rather than a silent miscategorization.\n *\n * Source: CMS NUBC / WPC TR3 references for 005010X222A2 (837P),\n * 005010X223A3 (837I), and 005010X224A2 (837D); the qualifier list is\n * cross-referenced with X12 External Code List 1270 (Code List Qualifier\n * Code) — the values that appear specifically on HI in HIPAA healthcare\n * claims. Listed verbatim from the TR3 cross-references — no inference;\n * unknown qualifiers map to `\"unknown\"` and the verbatim code is still\n * preserved on the parsed diagnosis / procedure.\n *\n * Snapshot date 2026-06-27. This is a curated read-only table — Phase 9\n * (vendor profiles) may LAYER additional qualifiers per payer, but the\n * BASE mapping ships as a frozen artifact so a single CMS change isn't a\n * silent semantic drift.\n */\n\n/**\n * Discriminant for the code system referenced by a single HI composite. The\n * `\"unknown\"` member is the catch-all for qualifiers outside the TR3-cited\n * set — verbatim code is preserved on the parsed structure and an\n * `X12_UNKNOWN_HI_QUALIFIER` warning is emitted.\n *\n * @example\n * ```ts\n * import type { X12HiCodeSystem } from \"@cosyte/x12\";\n * const sys: X12HiCodeSystem = \"ICD-10-CM\";\n * ```\n */\nexport type X12HiCodeSystem =\n | \"ICD-10-CM\"\n | \"ICD-10-PCS\"\n | \"ICD-9-CM\"\n | \"ICD-9-PCS\"\n | \"DRG\"\n | \"NDC\"\n | \"NUBC-CONDITION\"\n | \"NUBC-OCCURRENCE\"\n | \"NUBC-OCCURRENCE-SPAN\"\n | \"NUBC-VALUE\"\n | \"NUBC-PATIENT-REASON\"\n | \"unknown\";\n\n/**\n * Category of an HI qualifier — separates diagnoses from procedures from\n * the institutional NUBC code families. Consumers branching on the\n * category get exhaustiveness; the variant-specific helpers\n * (`getDiagnoses` / `getProcedures`) filter on it.\n *\n * @example\n * ```ts\n * import type { X12HiCategory } from \"@cosyte/x12\";\n * const c: X12HiCategory = \"diagnosis\";\n * ```\n */\nexport type X12HiCategory =\n | \"diagnosis\"\n | \"procedure\"\n | \"external-cause\"\n | \"principal-diagnosis\"\n | \"admitting-diagnosis\"\n | \"patient-reason-for-visit\"\n | \"drg\"\n | \"condition\"\n | \"occurrence\"\n | \"occurrence-span\"\n | \"value\"\n | \"treatment\"\n | \"unknown\";\n\n/**\n * One row of the HI-qualifier table. `system` answers \"what code list is\n * HI-NN-2 from?\"; `category` answers \"what role does this qualifier play\n * in the claim?\". Frozen by construction — the registry below is `as\n * const`, so this interface is the read shape and is not exported as a\n * widened type.\n *\n * @internal\n */\ninterface HiQualifierEntry {\n readonly system: X12HiCodeSystem;\n readonly category: X12HiCategory;\n readonly description: string;\n}\n\n/**\n * The HI qualifier → ({@link X12HiCodeSystem} + {@link X12HiCategory})\n * registry. Frozen with `as const` so the keyset is type-narrowed for\n * downstream consumers. Each entry cites its TR3 use site in the\n * description so a reviewer can confirm against the source.\n *\n * Snapshot covers the qualifiers cited across 837P/I/D TR3s plus the most\n * common NUBC code-set qualifiers. Additions are non-breaking; renames or\n * removals are breaking and require a public-surface bump.\n *\n * @example\n * ```ts\n * import { HI_QUALIFIERS, resolveHiQualifier } from \"@cosyte/x12\";\n * HI_QUALIFIERS.ABK.system; // \"ICD-10-CM\"\n * resolveHiQualifier(\"ABK\"); // { system: \"ICD-10-CM\", category: \"principal-diagnosis\", ... }\n * resolveHiQualifier(\"ZZZ\"); // undefined\n * ```\n */\nexport const HI_QUALIFIERS = {\n // ---------------- ICD-10-CM diagnoses (current) ----------------\n ABK: {\n system: \"ICD-10-CM\",\n category: \"principal-diagnosis\",\n description: \"Principal diagnosis, ICD-10-CM (837I; 837P uses ABK in HI-01 for the principal).\",\n },\n ABF: {\n system: \"ICD-10-CM\",\n category: \"diagnosis\",\n description: \"Other (secondary) diagnosis, ICD-10-CM.\",\n },\n ABJ: {\n system: \"ICD-10-CM\",\n category: \"admitting-diagnosis\",\n description: \"Admitting diagnosis, ICD-10-CM (837I inpatient).\",\n },\n ABN: {\n system: \"ICD-10-CM\",\n category: \"patient-reason-for-visit\",\n description: \"Patient's reason for visit, ICD-10-CM (837I outpatient).\",\n },\n APR: {\n system: \"ICD-10-CM\",\n category: \"external-cause\",\n description: \"External cause of injury, ICD-10-CM (V-Y codes).\",\n },\n\n // ---------------- ICD-9-CM diagnoses (legacy / pre-2015) ----------------\n BK: {\n system: \"ICD-9-CM\",\n category: \"principal-diagnosis\",\n description: \"Principal diagnosis, ICD-9-CM (legacy; replaced by ABK 2015-10-01 onward).\",\n },\n BF: {\n system: \"ICD-9-CM\",\n category: \"diagnosis\",\n description: \"Other diagnosis, ICD-9-CM (legacy; replaced by ABF).\",\n },\n BJ: {\n system: \"ICD-9-CM\",\n category: \"admitting-diagnosis\",\n description: \"Admitting diagnosis, ICD-9-CM (legacy; replaced by ABJ).\",\n },\n BN: {\n system: \"ICD-9-CM\",\n category: \"patient-reason-for-visit\",\n description: \"Reason for visit, ICD-9-CM (legacy; replaced by ABN).\",\n },\n BR: {\n system: \"ICD-9-CM\",\n category: \"external-cause\",\n description: \"External cause of injury, ICD-9-CM (legacy; replaced by APR).\",\n },\n\n // ---------------- ICD-10-PCS procedures (current) ----------------\n BBR: {\n system: \"ICD-10-PCS\",\n category: \"procedure\",\n description: \"Other (secondary) procedure, ICD-10-PCS (837I).\",\n },\n BBQ: {\n system: \"ICD-10-PCS\",\n category: \"treatment\",\n description: \"Principal procedure, ICD-10-PCS (837I).\",\n },\n\n // ---------------- ICD-9-PCS procedures (legacy / pre-2015) ----------------\n BQ: {\n system: \"ICD-9-PCS\",\n category: \"treatment\",\n description: \"Principal procedure, ICD-9-PCS (legacy; replaced by BBQ).\",\n },\n BBA: {\n system: \"ICD-9-PCS\",\n category: \"procedure\",\n description: \"Other procedure, ICD-9-PCS (legacy; replaced by BBR).\",\n },\n\n // ---------------- DRG / patient-related groupings ----------------\n DR: {\n system: \"DRG\",\n category: \"drg\",\n description: \"Diagnosis Related Group (DRG) — payment-grouping code.\",\n },\n\n // ---------------- NUBC institutional code sets (837I) ----------------\n BG: {\n system: \"NUBC-CONDITION\",\n category: \"condition\",\n description: \"Condition code (NUBC FL 18-28).\",\n },\n BH: {\n system: \"NUBC-OCCURRENCE\",\n category: \"occurrence\",\n description: \"Occurrence code (NUBC FL 31-34) — date paired in HI-NN-4.\",\n },\n BI: {\n system: \"NUBC-OCCURRENCE-SPAN\",\n category: \"occurrence-span\",\n description: \"Occurrence span code (NUBC FL 35-36) — date range in HI-NN-5/6.\",\n },\n BE: {\n system: \"NUBC-VALUE\",\n category: \"value\",\n description: \"Value code (NUBC FL 39-41) — paired amount in HI-NN-5 as decimal.\",\n },\n PR: {\n system: \"NUBC-PATIENT-REASON\",\n category: \"patient-reason-for-visit\",\n description: \"Patient reason for visit (837I outpatient secondary code; ICD-10-CM coded).\",\n },\n} as const satisfies Record<string, HiQualifierEntry>;\n\n/**\n * Stable string-literal union of every known HI qualifier the parser\n * recognizes. Inferred from {@link HI_QUALIFIERS} keys.\n *\n * @example\n * ```ts\n * import type { X12HiQualifier } from \"@cosyte/x12\";\n * const q: X12HiQualifier = \"ABK\";\n * ```\n */\nexport type X12HiQualifier = keyof typeof HI_QUALIFIERS;\n\n/**\n * Resolve an HI qualifier string into a {@link HiQualifierEntry}, or\n * `undefined` if the qualifier is outside the bundled snapshot. Unknown\n * qualifiers still parse — the parser preserves the verbatim qualifier on\n * the diagnosis/procedure and emits `X12_UNKNOWN_HI_QUALIFIER`. The lookup\n * is case-sensitive (TR3 qualifiers are uppercase).\n *\n * @example\n * ```ts\n * import { resolveHiQualifier } from \"@cosyte/x12\";\n * resolveHiQualifier(\"ABK\")?.system; // \"ICD-10-CM\"\n * resolveHiQualifier(\"ABK\")?.category; // \"principal-diagnosis\"\n * resolveHiQualifier(\"XYZ\"); // undefined\n * ```\n */\nexport function resolveHiQualifier(qualifier: string): HiQualifierEntry | undefined {\n return (HI_QUALIFIERS as Record<string, HiQualifierEntry>)[qualifier];\n}\n\n/**\n * Decide whether an HI qualifier represents a diagnosis (principal,\n * secondary, admitting, reason-for-visit, external-cause). Used by\n * variant-specific extractors that split the HI segment family into\n * diagnoses vs procedures.\n *\n * @example\n * ```ts\n * import { isDiagnosisQualifier } from \"@cosyte/x12\";\n * isDiagnosisQualifier(\"ABK\"); // true (principal diagnosis)\n * isDiagnosisQualifier(\"BBR\"); // false (procedure)\n * isDiagnosisQualifier(\"XYZ\"); // false\n * ```\n */\nexport function isDiagnosisQualifier(qualifier: string): boolean {\n const entry = resolveHiQualifier(qualifier);\n if (entry === undefined) return false;\n switch (entry.category) {\n case \"diagnosis\":\n case \"principal-diagnosis\":\n case \"admitting-diagnosis\":\n case \"patient-reason-for-visit\":\n case \"external-cause\":\n return true;\n case \"procedure\":\n case \"treatment\":\n case \"drg\":\n case \"condition\":\n case \"occurrence\":\n case \"occurrence-span\":\n case \"value\":\n case \"unknown\":\n return false;\n }\n}\n\n/**\n * Decide whether an HI qualifier represents a procedure (principal or\n * other) — current ICD-10-PCS or legacy ICD-9-PCS.\n *\n * @example\n * ```ts\n * import { isProcedureQualifier } from \"@cosyte/x12\";\n * isProcedureQualifier(\"BBR\"); // true (other procedure, ICD-10-PCS)\n * isProcedureQualifier(\"ABK\"); // false (diagnosis)\n * ```\n */\nexport function isProcedureQualifier(qualifier: string): boolean {\n const entry = resolveHiQualifier(qualifier);\n if (entry === undefined) return false;\n return entry.category === \"procedure\" || entry.category === \"treatment\";\n}\n","/**\n * 835 balance-invariant validators. Money is the largest blast radius in\n * a remit parser — a dropped decimal or a wrong-sign adjustment posts\n * cash to the wrong dollar. These checks NEVER silently rebalance: a\n * failed invariant emits an {@link\n * \"../../parser/warnings.js\".WARNING_CODES.X12_835_REMIT_BALANCE_MISMATCH}\n * carrying the side-by-side spec'd vs computed values + delta, and the\n * model still resolves with the verbatim inbound amounts.\n *\n * Three invariants per TR3 005010X221A1 §1.10.2 (\"Balancing\"):\n *\n * 1. **Service-line:** `SVC-02 === SVC-03 + Σ(line CAS amounts)` per\n * Loop 2110 service line. \"Submitted charge = paid + adjustments.\"\n *\n * 2. **Claim-level:** `CLP-03 === CLP-04 + Σ(all CAS in claim, claim AND\n * line level)` per Loop 2100. The X12 spec balance — every adjustment\n * inside the claim, regardless of whether it sits on the CLP loop\n * directly or under a nested SVC. (CLP-05 / Patient Responsibility\n * Amount is informational, NOT part of the balance — it equals\n * `Σ(PR-group CAS)` separately; spec note in JSDoc on the per-claim\n * check.)\n *\n * 3. **Top-of-remit:** `BPR-02 === Σ(CLP-04) - Σ(PLB amounts)` across\n * every claim + every provider-level adjustment. PLB amounts carry\n * the **raw EDI sign**: positive PLB = take-back from provider\n * (reduces BPR-02), negative PLB = credit to provider (increases\n * BPR-02). So subtraction is what makes the equation balance.\n *\n * > Phase 4 implementation note: the cosyte roadmap (`operations/roadmaps/x12.md`\n * > §4) sketched these invariants slightly differently — that sketch was a\n * > simplification. The implementation here matches the **X12 005010X221A1\n * > TR3 §1.10.2 spec text** directly; the roadmap is updated in the same\n * > slice with a forward-pointer to this module so the contract stays\n * > consistent.\n *\n * **PHI discipline:** mismatch messages echo only the invariant label +\n * the X12Decimal text values (numeric — no PHI by shape). Patient\n * control numbers / member ids are NOT in the message — consumers\n * locate the offending claim via the warning's `position` + the claim's\n * sequence in `remit.claims`.\n */\n\nimport { X12Decimal } from \"../../decimal.js\";\nimport { remitBalanceMismatch, type X12ParseWarning } from \"../../parser/warnings.js\";\nimport type { X12Position } from \"../../parser/types.js\";\nimport type {\n X12RemitAdjustment,\n X12RemitClaim,\n X12RemitProviderAdjustment,\n X12RemitServiceLine,\n} from \"./types.js\";\n\n/**\n * Check the claim-level invariant `CLP-03 === CLP-04 + Σ(all CAS in\n * claim, both claim and line level)`. Returns the warning when out of\n * balance, or `undefined` otherwise. Pure — no side effects.\n *\n * @example\n * ```ts\n * import { checkClaimBalance } from \"@cosyte/x12\";\n * declare const claim: X12RemitClaim;\n * const w = checkClaimBalance(claim, { segmentIndex: 12 });\n * if (w !== undefined) {\n * // not balanced — w.message names invariant + spec + computed + delta\n * }\n * ```\n */\nexport function checkClaimBalance(\n claim: X12RemitClaim,\n position: X12Position,\n): X12ParseWarning | undefined {\n const claimCasSum = sumAmounts(claim.adjustments);\n const lineCasSum = claim.serviceLines.reduce<X12Decimal>(\n (acc: X12Decimal, sl: X12RemitServiceLine) => acc.add(sumAmounts(sl.adjustments)),\n X12Decimal.ZERO,\n );\n const computed = claim.totalPaymentAmount.add(claimCasSum).add(lineCasSum);\n if (computed.equals(claim.totalChargeAmount)) return undefined;\n const delta = computed.subtract(claim.totalChargeAmount);\n return remitBalanceMismatch(\n position,\n \"CLP-04 + Σ(claim CAS + line CAS) == CLP-03\",\n claim.totalChargeAmount.toString(),\n computed.toString(),\n delta.toString(),\n );\n}\n\n/**\n * Check the per-service-line invariant `SVC-02 === SVC-03 + Σ(line CAS)`.\n * Returns one warning per out-of-balance service line. Header-only\n * adjudications (claims with zero service lines) produce no per-line\n * warning. Pure — no side effects.\n *\n * @example\n * ```ts\n * import { checkServiceLineBalance } from \"@cosyte/x12\";\n * declare const claim: X12RemitClaim;\n * const warnings = checkServiceLineBalance(claim, { segmentIndex: 14 });\n * ```\n */\nexport function checkServiceLineBalance(\n claim: X12RemitClaim,\n position: X12Position,\n): readonly X12ParseWarning[] {\n const out: X12ParseWarning[] = [];\n for (let i = 0; i < claim.serviceLines.length; i += 1) {\n const line = claim.serviceLines[i];\n if (line === undefined) continue;\n const lineCasSum = sumAmounts(line.adjustments);\n const computed = line.paymentAmount.add(lineCasSum);\n if (computed.equals(line.chargeAmount)) continue;\n const delta = computed.subtract(line.chargeAmount);\n out.push(\n remitBalanceMismatch(\n { ...position, segmentIndex: position.segmentIndex + i + 1 },\n \"SVC-03 + Σ(line CAS) == SVC-02\",\n line.chargeAmount.toString(),\n computed.toString(),\n delta.toString(),\n ),\n );\n }\n return out;\n}\n\n/**\n * Check the top-of-remit invariant `BPR-02 === Σ(CLP-04) - Σ(PLB\n * amounts)`. PLB amounts are preserved with their **raw EDI sign**\n * (positive = take-back from provider; negative = credit to provider —\n * see {@link \"./types.js\".X12RemitProviderAdjustment}), so the\n * *subtraction* is what makes the equation balance. Returns the warning\n * when out of balance, or `undefined` when balanced.\n *\n * @example\n * ```ts\n * import { checkRemitTotalBalance } from \"@cosyte/x12\";\n * declare const remit: import(\"./types.js\").X12Remittance;\n * const w = checkRemitTotalBalance(\n * remit.payment.totalActualPayment,\n * remit.claims,\n * remit.providerAdjustments,\n * { segmentIndex: 2, transactionIndex: 0 },\n * );\n * ```\n */\nexport function checkRemitTotalBalance(\n bpr02: X12Decimal,\n claims: readonly X12RemitClaim[],\n providerAdjustments: readonly X12RemitProviderAdjustment[],\n position: X12Position,\n): X12ParseWarning | undefined {\n const claimSum = claims.reduce<X12Decimal>(\n (acc: X12Decimal, c: X12RemitClaim) => acc.add(c.totalPaymentAmount),\n X12Decimal.ZERO,\n );\n const plbSum = providerAdjustments.reduce<X12Decimal>(\n (acc: X12Decimal, p: X12RemitProviderAdjustment) => acc.add(p.amount),\n X12Decimal.ZERO,\n );\n const computed = claimSum.subtract(plbSum);\n if (computed.equals(bpr02)) return undefined;\n const delta = computed.subtract(bpr02);\n return remitBalanceMismatch(\n position,\n \"Σ(CLP-04) - Σ(PLB amounts) == BPR-02\",\n bpr02.toString(),\n computed.toString(),\n delta.toString(),\n );\n}\n\n/**\n * Sum a list of CAS adjustments. Helper for both claim-level + service-\n * line CAS aggregation. @internal\n */\nfunction sumAmounts(adjustments: readonly X12RemitAdjustment[]): X12Decimal {\n return adjustments.reduce<X12Decimal>(\n (acc: X12Decimal, a: X12RemitAdjustment) => acc.add(a.amount),\n X12Decimal.ZERO,\n );\n}\n","/**\n * `get835` — extract a typed {@link X12Remittance} from a parsed X12\n * 005010X221A1 transaction set. Walk the body segments via a small\n * state machine guided by the dogfooded loop spec (see\n * {@link \"./loop-spec.js\".REMIT_835_LOOP_2000}). Lenient on parse: every\n * recoverable deviation surfaces as a warning, never a throw. Money is\n * decoded as {@link \"../../decimal.js\".X12Decimal} (never `parseFloat`).\n * Balance invariants run after the walk and emit\n * `X12_835_REMIT_BALANCE_MISMATCH` on mismatch — the model is NEVER\n * silently rebalanced.\n *\n * Spec source: WPC TR3 `005010X221A1` — Health Care Claim Payment/Advice.\n */\n\nimport { X12Decimal } from \"../../decimal.js\";\nimport { lookupCarc } from \"../../code-lists/carc.js\";\nimport { lookupClpStatus } from \"../../code-lists/clp-status.js\";\nimport { lookupRarc } from \"../../code-lists/rarc.js\";\nimport {\n collectElementValues,\n componentOptional,\n elementDecimal,\n elementDecimalOrZero,\n elementOptional,\n elementValue,\n type X12Segment,\n} from \"../../parser/segment.js\";\nimport type { Delimiters, X12Position, X12TransactionSet } from \"../../parser/types.js\";\nimport { unknownCarc, unknownRarc, type X12ParseWarning } from \"../../parser/warnings.js\";\nimport { checkClaimBalance, checkRemitTotalBalance, checkServiceLineBalance } from \"./balance.js\";\nimport type {\n X12RemitAdjustment,\n X12RemitAddress,\n X12RemitAmount,\n X12RemitClaim,\n X12RemitContact,\n X12RemitParty,\n X12RemitPaymentHeader,\n X12RemitPerson,\n X12RemitProvider,\n X12RemitProviderAdjustment,\n X12RemitReference,\n X12RemitRemark,\n X12RemitServiceLine,\n X12RemitTrace,\n X12Remittance,\n} from \"./types.js\";\n\n/**\n * Extract a typed {@link X12Remittance} from an 835 transaction set.\n * Pure function — no I/O, no global state. Returns `undefined` only if\n * the input transaction's ST-01 is not `\"835\"` (mis-routed call); every\n * other deviation is recoverable and surfaces on `result.warnings`.\n *\n * @example\n * ```ts\n * import { parseX12, get835 } from \"@cosyte/x12\";\n * const ix = parseX12(raw);\n * for (const group of ix.groups) {\n * for (const tx of group.transactions) {\n * if (tx.st.elements[1] !== \"835\") continue;\n * const remit = get835(ix.delimiters, tx);\n * remit?.payment.totalActualPayment.toString();\n * for (const claim of remit?.claims ?? []) {\n * claim.totalPaymentAmount.toString();\n * }\n * }\n * }\n * ```\n */\nexport function get835(delimiters: Delimiters, tx: X12TransactionSet): X12Remittance | undefined {\n if (tx.st.elements[1] !== \"835\") return undefined;\n\n const warnings: X12ParseWarning[] = [];\n const body = tx.se === undefined ? tx.segments.slice(1) : tx.segments.slice(1, -1);\n\n // Mutable accumulators — frozen into the returned model at the end.\n let payment: X12RemitPaymentHeader = EMPTY_HEADER;\n const traces: X12RemitTrace[] = [];\n let payer: X12RemitParty | undefined;\n let payee: X12RemitParty | undefined;\n let lastParty: \"payer\" | \"payee\" | undefined;\n const claims: ClaimAccumulator[] = [];\n const providerAdjustments: X12RemitProviderAdjustment[] = [];\n let currentClaim: ClaimAccumulator | undefined;\n let currentServiceLine: ServiceLineAccumulator | undefined;\n let currentNm1Provider: NM1ProviderAccumulator | undefined;\n let currentNm1Person: NM1PersonAccumulator | undefined;\n\n /** Close the in-flight Loop 2110. */\n const flushServiceLine = (): void => {\n if (currentServiceLine !== undefined && currentClaim !== undefined) {\n currentClaim.serviceLines.push(freezeServiceLine(currentServiceLine));\n }\n currentServiceLine = undefined;\n };\n\n /** Close the in-flight Loop 2100. */\n const flushClaim = (): void => {\n flushServiceLine();\n if (currentClaim !== undefined) {\n claims.push(currentClaim);\n }\n currentClaim = undefined;\n };\n\n for (let i = 0; i < body.length; i += 1) {\n const seg = body[i];\n if (seg === undefined) continue;\n // 1-based segment position inside the body for warning positional context.\n const position: X12Position = { segmentIndex: i + 1, transactionIndex: 0 };\n switch (seg.id) {\n case \"BPR\": {\n payment = decodeBpr(seg, delimiters);\n break;\n }\n case \"TRN\": {\n traces.push(decodeTrn(seg, delimiters));\n break;\n }\n case \"CUR\":\n case \"DTM\": {\n if (seg.id === \"DTM\" && currentServiceLine !== undefined) {\n attachServiceLineDtm(currentServiceLine, seg, delimiters);\n } else if (seg.id === \"DTM\" && currentClaim !== undefined) {\n attachClaimDtm(currentClaim, seg, delimiters);\n }\n // CUR / header DTM not surfaced on the v1 model — verbatim segment\n // remains on tx.segments for callers who need it.\n break;\n }\n case \"N1\": {\n // Closing any in-flight claim / NM1 / service-line so a new party\n // opens a clean Loop 1000A/B.\n flushClaim();\n currentNm1Provider = undefined;\n currentNm1Person = undefined;\n const qualifier = elementValue(seg, 1, delimiters);\n const partyAcc: X12RemitParty = decodeN1(seg, delimiters);\n if (qualifier === \"PR\") {\n payer = partyAcc;\n lastParty = \"payer\";\n } else if (qualifier === \"PE\") {\n payee = partyAcc;\n lastParty = \"payee\";\n } else {\n lastParty = undefined;\n }\n break;\n }\n case \"N3\": {\n if (currentClaim !== undefined || currentServiceLine !== undefined) break;\n const lines = collectElementValues(seg, 1, 2, delimiters);\n if (lastParty === \"payer\" && payer !== undefined) {\n payer = withAddress(payer, withLines(payer.address ?? EMPTY_ADDRESS, lines));\n } else if (lastParty === \"payee\" && payee !== undefined) {\n payee = withAddress(payee, withLines(payee.address ?? EMPTY_ADDRESS, lines));\n }\n break;\n }\n case \"N4\": {\n if (currentClaim !== undefined || currentServiceLine !== undefined) break;\n const address = decodeN4(seg, delimiters);\n if (lastParty === \"payer\" && payer !== undefined) {\n payer = withAddress(payer, mergeAddress(payer.address ?? EMPTY_ADDRESS, address));\n } else if (lastParty === \"payee\" && payee !== undefined) {\n payee = withAddress(payee, mergeAddress(payee.address ?? EMPTY_ADDRESS, address));\n }\n break;\n }\n case \"REF\": {\n const ref = decodeRef(seg, delimiters);\n if (currentServiceLine !== undefined) currentServiceLine.references.push(ref);\n else if (currentClaim !== undefined) currentClaim.references.push(ref);\n else if (lastParty === \"payer\" && payer !== undefined) payer = withReference(payer, ref);\n else if (lastParty === \"payee\" && payee !== undefined) payee = withReference(payee, ref);\n break;\n }\n case \"PER\": {\n const contact = decodePer(seg, delimiters);\n if (currentClaim !== undefined || currentServiceLine !== undefined) break;\n if (lastParty === \"payer\" && payer !== undefined) payer = withContact(payer, contact);\n else if (lastParty === \"payee\" && payee !== undefined) payee = withContact(payee, contact);\n break;\n }\n case \"LX\": {\n // Header number — opens Loop 2000. We don't surface LX itself\n // (header-grouping artifact). Flush any straggler.\n flushClaim();\n lastParty = undefined;\n break;\n }\n case \"CLP\": {\n flushClaim();\n lastParty = undefined;\n currentClaim = openClaim(seg, delimiters);\n currentNm1Provider = undefined;\n currentNm1Person = undefined;\n break;\n }\n case \"CAS\": {\n const adjustments = decodeCasAdjustments(seg, delimiters, warnings, position);\n if (currentServiceLine !== undefined) {\n for (const a of adjustments) currentServiceLine.adjustments.push(a);\n } else if (currentClaim !== undefined) {\n for (const a of adjustments) currentClaim.adjustments.push(a);\n }\n break;\n }\n case \"NM1\": {\n if (currentClaim === undefined) break;\n const qualifier = elementValue(seg, 1, delimiters);\n const decoded = decodeNm1(seg, delimiters);\n switch (qualifier) {\n case \"QC\": {\n currentClaim.patient = decoded.person;\n currentNm1Person = { kind: \"patient\" };\n break;\n }\n case \"IL\": {\n currentClaim.subscriber = decoded.person;\n currentNm1Person = { kind: \"subscriber\" };\n break;\n }\n case \"74\": {\n currentClaim.correctedPatient = decoded.person;\n currentNm1Person = { kind: \"correctedPatient\" };\n break;\n }\n case \"82\": {\n // Per X221A1: NM1*82 in Loop 2100 is the Service Provider\n // (rendering / billing). The Phase 4 model exposes\n // `serviceProvider` directly; if a payer sends a second NM1*82\n // (rare) it is treated as `renderingProvider` so neither value\n // is silently dropped.\n if (currentClaim.serviceProvider === undefined) {\n currentClaim.serviceProvider = decoded.provider;\n } else {\n currentClaim.renderingProvider = decoded.provider;\n }\n currentNm1Provider = { kind: \"serviceProvider\" };\n break;\n }\n default: {\n // Other NM1 qualifiers (TT crossover carrier, PR other payer,\n // GB / GR / 77 — service location): verbatim segment stays on\n // tx.segments; the typed v1 surface does not enumerate them\n // (additive in later phases).\n currentNm1Person = undefined;\n currentNm1Provider = undefined;\n break;\n }\n }\n break;\n }\n case \"MIA\":\n case \"MOA\": {\n // Inpatient / outpatient adjudication info. Decode their RARC\n // codes onto the claim's `remarks` list (`system: \"HE\"`); the\n // verbatim MIA / MOA payment-amount fields are not surfaced on\n // the v1 model (additive later).\n if (currentClaim === undefined) break;\n const remarks =\n seg.id === \"MIA\"\n ? collectMiaRemarks(seg, delimiters)\n : collectMoaRemarks(seg, delimiters);\n for (const code of remarks) {\n const entry = lookupRarc(code);\n if (entry === undefined) warnings.push(unknownRarc(position, code));\n currentClaim.remarks.push({ system: \"HE\", code, description: entry?.description });\n }\n break;\n }\n case \"AMT\": {\n const amount = decodeAmt(seg, delimiters);\n if (amount === undefined) break;\n if (currentServiceLine !== undefined) currentServiceLine.amounts.push(amount);\n else if (currentClaim !== undefined) currentClaim.amounts.push(amount);\n break;\n }\n case \"QTY\": {\n // Surfaced verbatim on tx.segments; v1 helper does not destructure\n // QTY-2 quantities (additive later).\n break;\n }\n case \"LQ\": {\n if (currentClaim === undefined && currentServiceLine === undefined) break;\n const remark = decodeLq(seg, delimiters, warnings, position);\n if (remark === undefined) break;\n if (currentServiceLine !== undefined) currentServiceLine.remarks.push(remark);\n else if (currentClaim !== undefined) currentClaim.remarks.push(remark);\n break;\n }\n case \"SVC\": {\n flushServiceLine();\n currentServiceLine = openServiceLine(seg, delimiters);\n break;\n }\n case \"PLB\": {\n flushClaim();\n for (const p of decodePlb(seg, delimiters)) providerAdjustments.push(p);\n break;\n }\n default: {\n // Anything else (NTE header notes, RDM, TS3/TS2) is preserved on\n // tx.segments verbatim; the v1 helper does not enumerate every\n // optional segment.\n break;\n }\n }\n void currentNm1Provider;\n void currentNm1Person;\n }\n\n flushClaim();\n\n // Freeze the claim accumulators into the public read-only shape, then\n // run the three balance invariants.\n const finalClaims = claims.map((c, idx) => {\n const frozen = freezeClaim(c);\n const claimPos: X12Position = { segmentIndex: c.clpSegmentIndex, transactionIndex: 0 };\n const claimWarn = checkClaimBalance(frozen, claimPos);\n if (claimWarn !== undefined) warnings.push(claimWarn);\n for (const lineWarn of checkServiceLineBalance(frozen, claimPos)) warnings.push(lineWarn);\n void idx;\n return frozen;\n });\n const remitTotalWarn = checkRemitTotalBalance(\n payment.totalActualPayment,\n finalClaims,\n providerAdjustments,\n { segmentIndex: 0, transactionIndex: 0 },\n );\n if (remitTotalWarn !== undefined) warnings.push(remitTotalWarn);\n\n return Object.freeze({\n payment,\n traces: Object.freeze(traces.slice()),\n payer,\n payee,\n claims: Object.freeze(finalClaims),\n providerAdjustments: Object.freeze(providerAdjustments.slice()),\n warnings: Object.freeze(warnings.slice()),\n });\n}\n\n// ---------------------------------------------------------------------------\n// Internal accumulator types (mutable during the walk, frozen at the end).\n// ---------------------------------------------------------------------------\n\n/** Mutable in-flight Loop 2100 state. @internal */\ninterface ClaimAccumulator {\n readonly clpSegmentIndex: number;\n readonly patientControlNumber: string;\n readonly claimStatusCode: string;\n readonly claimStatusDescription: string | undefined;\n readonly totalChargeAmount: X12Decimal;\n readonly totalPaymentAmount: X12Decimal;\n readonly patientResponsibilityAmount: X12Decimal;\n readonly claimFilingIndicatorCode: string | undefined;\n readonly payerClaimControlNumber: string | undefined;\n readonly facilityTypeCode: string | undefined;\n readonly claimFrequencyCode: string | undefined;\n patient: X12RemitPerson | undefined;\n subscriber: X12RemitPerson | undefined;\n correctedPatient: X12RemitPerson | undefined;\n serviceProvider: X12RemitProvider | undefined;\n renderingProvider: X12RemitProvider | undefined;\n servicePeriodStart: string | undefined;\n servicePeriodEnd: string | undefined;\n readonly adjustments: X12RemitAdjustment[];\n readonly references: X12RemitReference[];\n readonly amounts: X12RemitAmount[];\n readonly remarks: X12RemitRemark[];\n readonly serviceLines: X12RemitServiceLine[];\n}\n\n/** Mutable in-flight Loop 2110 state. @internal */\ninterface ServiceLineAccumulator {\n readonly productServiceIdQualifier: string;\n readonly productServiceId: string;\n readonly modifiers: string[];\n readonly chargeAmount: X12Decimal;\n readonly paymentAmount: X12Decimal;\n readonly revenueCode: string | undefined;\n readonly paidUnitsOfService: X12Decimal | undefined;\n readonly originalServiceId: string | undefined;\n readonly originalServiceIdQualifier: string | undefined;\n serviceDateStart: string | undefined;\n serviceDateEnd: string | undefined;\n readonly adjustments: X12RemitAdjustment[];\n readonly references: X12RemitReference[];\n readonly amounts: X12RemitAmount[];\n readonly remarks: X12RemitRemark[];\n}\n\n/** Marker for the active NM1 person role (used only by the state machine, not surfaced). @internal */\ninterface NM1PersonAccumulator {\n readonly kind: \"patient\" | \"subscriber\" | \"correctedPatient\";\n}\n/** Marker for the active NM1 provider role. @internal */\ninterface NM1ProviderAccumulator {\n readonly kind: \"serviceProvider\" | \"renderingProvider\";\n}\n\n// ---------------------------------------------------------------------------\n// Segment decoders. Element reads use the shared `elementValue` /\n// `elementOptional` / `componentOptional` / `elementDecimal[OrZero]` /\n// `collectElementValues` helpers from `parser/segment.ts`.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction decodeBpr(seg: X12Segment, delimiters: Delimiters): X12RemitPaymentHeader {\n return Object.freeze({\n transactionHandlingCode: elementValue(seg, 1, delimiters),\n totalActualPayment: elementDecimalOrZero(seg, 2, delimiters),\n creditDebitFlag: elementValue(seg, 3, delimiters),\n method: elementValue(seg, 4, delimiters),\n paymentFormatCode: elementOptional(seg, 5, delimiters),\n paymentDate: elementValue(seg, 16, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeTrn(seg: X12Segment, delimiters: Delimiters): X12RemitTrace {\n return Object.freeze({\n traceTypeCode: elementValue(seg, 1, delimiters),\n referenceId: elementValue(seg, 2, delimiters),\n originatingCompanyId: elementOptional(seg, 3, delimiters),\n originatingCompanySupplementalCode: elementOptional(seg, 4, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeN1(seg: X12Segment, delimiters: Delimiters): X12RemitParty {\n return Object.freeze({\n entityIdentifierCode: elementValue(seg, 1, delimiters),\n name: elementValue(seg, 2, delimiters),\n idQualifier: elementOptional(seg, 3, delimiters),\n idCode: elementOptional(seg, 4, delimiters),\n address: undefined,\n additionalIdentifiers: Object.freeze([]),\n contacts: Object.freeze([]),\n });\n}\n\n/** @internal */\nfunction decodeN4(seg: X12Segment, delimiters: Delimiters): X12RemitAddress {\n return Object.freeze({\n lines: Object.freeze([]),\n city: elementOptional(seg, 1, delimiters),\n state: elementOptional(seg, 2, delimiters),\n postalCode: elementOptional(seg, 3, delimiters),\n countryCode: elementOptional(seg, 4, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeRef(seg: X12Segment, delimiters: Delimiters): X12RemitReference {\n return Object.freeze({\n qualifier: elementValue(seg, 1, delimiters),\n value: elementValue(seg, 2, delimiters),\n description: elementOptional(seg, 3, delimiters),\n });\n}\n\n/** @internal */\nfunction decodePer(seg: X12Segment, delimiters: Delimiters): X12RemitContact {\n const comms: { qualifier: string; value: string }[] = [];\n for (const [qIdx, vIdx] of [\n [3, 4],\n [5, 6],\n [7, 8],\n ] as const) {\n const q = elementOptional(seg, qIdx, delimiters);\n const v = elementOptional(seg, vIdx, delimiters);\n if (q !== undefined && v !== undefined) comms.push(Object.freeze({ qualifier: q, value: v }));\n }\n return Object.freeze({\n contactFunctionCode: elementValue(seg, 1, delimiters),\n name: elementOptional(seg, 2, delimiters),\n communications: Object.freeze(comms),\n });\n}\n\n/** @internal */\nfunction decodeAmt(seg: X12Segment, delimiters: Delimiters): X12RemitAmount | undefined {\n const amount = elementDecimal(seg, 2, delimiters);\n if (amount === undefined) return undefined;\n return Object.freeze({\n qualifier: elementValue(seg, 1, delimiters),\n amount,\n });\n}\n\n/** @internal */\nfunction decodeLq(\n seg: X12Segment,\n delimiters: Delimiters,\n warnings: X12ParseWarning[],\n position: X12Position,\n): X12RemitRemark | undefined {\n const system = elementValue(seg, 1, delimiters);\n const code = elementValue(seg, 2, delimiters);\n if (code === \"\") return undefined;\n let description: string | undefined;\n if (system === \"HE\") {\n const entry = lookupRarc(code);\n if (entry === undefined) warnings.push(unknownRarc(position, code));\n description = entry?.description;\n }\n return Object.freeze({ system, code, description });\n}\n\n/** @internal */\nfunction collectMiaRemarks(seg: X12Segment, delimiters: Delimiters): readonly string[] {\n // MIA-05, MIA-20: remark codes (per TR3 X221A1).\n const out: string[] = [];\n for (const idx of [5, 20]) {\n const v = elementOptional(seg, idx, delimiters);\n if (v !== undefined) out.push(v);\n }\n return out;\n}\n\n/** @internal */\nfunction collectMoaRemarks(seg: X12Segment, delimiters: Delimiters): readonly string[] {\n // MOA-03 through MOA-07: remark codes.\n const out: string[] = [];\n for (let idx = 3; idx <= 7; idx += 1) {\n const v = elementOptional(seg, idx, delimiters);\n if (v !== undefined) out.push(v);\n }\n return out;\n}\n\n/**\n * Decode a CAS segment into 1-6 flat adjustments. CAS carries\n * `CAS-01` group code + up to 6 (reason / amount / quantity) triples at\n * positions (2,3,4), (5,6,7), (8,9,10), (11,12,13), (14,15,16),\n * (17,18,19). Any triple whose reason+amount are BOTH absent is skipped.\n * @internal\n */\nfunction decodeCasAdjustments(\n seg: X12Segment,\n delimiters: Delimiters,\n warnings: X12ParseWarning[],\n position: X12Position,\n): readonly X12RemitAdjustment[] {\n const groupCode = elementValue(seg, 1, delimiters);\n const out: X12RemitAdjustment[] = [];\n for (let triple = 0; triple < 6; triple += 1) {\n const base = 2 + triple * 3;\n const reasonCode = elementOptional(seg, base, delimiters);\n const amount = elementDecimal(seg, base + 1, delimiters);\n const quantity = elementDecimal(seg, base + 2, delimiters);\n if (reasonCode === undefined && amount === undefined) continue;\n const code = reasonCode ?? \"\";\n const entry = code === \"\" ? undefined : lookupCarc(code);\n if (entry === undefined && code !== \"\") warnings.push(unknownCarc(position, code));\n out.push(\n Object.freeze({\n groupCode,\n reasonCode: code,\n reasonDescription: entry?.description,\n amount: amount ?? X12Decimal.ZERO,\n quantity,\n }),\n );\n }\n return out;\n}\n\n/** Decoded NM1 split into person + provider shapes; caller picks. @internal */\nfunction decodeNm1(\n seg: X12Segment,\n delimiters: Delimiters,\n): { person: X12RemitPerson; provider: X12RemitProvider } {\n const entityIdentifierCode = elementValue(seg, 1, delimiters);\n const entityTypeQualifier = elementValue(seg, 2, delimiters);\n const lastOrOrg = elementOptional(seg, 3, delimiters);\n const firstName = elementOptional(seg, 4, delimiters);\n const middleName = elementOptional(seg, 5, delimiters);\n const suffix = elementOptional(seg, 7, delimiters);\n const idQualifier = elementOptional(seg, 8, delimiters);\n const idCode = elementOptional(seg, 9, delimiters);\n void entityTypeQualifier;\n return {\n person: Object.freeze({\n entityIdentifierCode,\n lastName: lastOrOrg,\n firstName,\n middleName,\n suffix,\n idQualifier,\n idCode,\n }),\n provider: Object.freeze({\n entityIdentifierCode,\n name: lastOrOrg,\n idQualifier,\n idCode,\n }),\n };\n}\n\n/**\n * Open a fresh Loop 2100 accumulator from a CLP segment. CLP-02 status\n * code description comes from the bundled snapshot (or `undefined`); the\n * verbatim status code is always preserved. @internal\n */\nfunction openClaim(seg: X12Segment, delimiters: Delimiters): ClaimAccumulator {\n const claimStatusCode = elementValue(seg, 2, delimiters);\n const claimStatusDescription = lookupClpStatus(claimStatusCode)?.description;\n const facilityTypeCode =\n componentOptional(seg, 8, 1, delimiters) ?? elementOptional(seg, 8, delimiters);\n const claimFrequencyCode = componentOptional(seg, 8, 3, delimiters);\n return {\n clpSegmentIndex: 0, // populated in the future when we surface positions\n patientControlNumber: elementValue(seg, 1, delimiters),\n claimStatusCode,\n claimStatusDescription,\n totalChargeAmount: elementDecimalOrZero(seg, 3, delimiters),\n totalPaymentAmount: elementDecimalOrZero(seg, 4, delimiters),\n patientResponsibilityAmount: elementDecimalOrZero(seg, 5, delimiters),\n claimFilingIndicatorCode: elementOptional(seg, 6, delimiters),\n payerClaimControlNumber: elementOptional(seg, 7, delimiters),\n facilityTypeCode,\n claimFrequencyCode,\n patient: undefined,\n subscriber: undefined,\n correctedPatient: undefined,\n serviceProvider: undefined,\n renderingProvider: undefined,\n servicePeriodStart: undefined,\n servicePeriodEnd: undefined,\n adjustments: [],\n references: [],\n amounts: [],\n remarks: [],\n serviceLines: [],\n };\n}\n\n/** Open a fresh Loop 2110 accumulator from an SVC segment. @internal */\nfunction openServiceLine(seg: X12Segment, delimiters: Delimiters): ServiceLineAccumulator {\n const productServiceIdQualifier = componentOptional(seg, 1, 1, delimiters) ?? \"\";\n const productServiceId = componentOptional(seg, 1, 2, delimiters) ?? \"\";\n const modifiers: string[] = [];\n for (let comp = 3; comp <= 6; comp += 1) {\n const m = componentOptional(seg, 1, comp, delimiters);\n if (m !== undefined) modifiers.push(m);\n }\n const revenueCode = elementOptional(seg, 5, delimiters);\n const paidUnitsOfService = elementDecimal(seg, 7, delimiters);\n const originalServiceIdQualifier = componentOptional(seg, 6, 1, delimiters);\n const originalServiceId = componentOptional(seg, 6, 2, delimiters);\n return {\n productServiceIdQualifier,\n productServiceId,\n modifiers,\n chargeAmount: elementDecimalOrZero(seg, 2, delimiters),\n paymentAmount: elementDecimalOrZero(seg, 3, delimiters),\n revenueCode,\n paidUnitsOfService,\n originalServiceId,\n originalServiceIdQualifier,\n serviceDateStart: undefined,\n serviceDateEnd: undefined,\n adjustments: [],\n references: [],\n amounts: [],\n remarks: [],\n };\n}\n\n/**\n * Attach a DTM to the in-flight claim. DTM-01 qualifier `232` =\n * Statement From, `233` = Statement To. @internal\n */\nfunction attachClaimDtm(claim: ClaimAccumulator, seg: X12Segment, delimiters: Delimiters): void {\n const qualifier = elementValue(seg, 1, delimiters);\n const date = elementOptional(seg, 2, delimiters);\n if (date === undefined) return;\n if (qualifier === \"232\") claim.servicePeriodStart = date;\n else if (qualifier === \"233\") claim.servicePeriodEnd = date;\n}\n\n/**\n * Attach a DTM to the in-flight service line. DTM-01 qualifier `472` =\n * Service date (single), `150`/`151` = Service Period Start/End. @internal\n */\nfunction attachServiceLineDtm(\n line: ServiceLineAccumulator,\n seg: X12Segment,\n delimiters: Delimiters,\n): void {\n const qualifier = elementValue(seg, 1, delimiters);\n const formatQualifier = elementValue(seg, 3, delimiters);\n const date = elementOptional(seg, 2, delimiters) ?? elementOptional(seg, 4, delimiters);\n if (date === undefined) return;\n void formatQualifier;\n if (qualifier === \"472\" || qualifier === \"150\") line.serviceDateStart = date;\n if (qualifier === \"472\" || qualifier === \"151\") line.serviceDateEnd = date;\n}\n\n/**\n * Decode a PLB segment into a list of flat provider-level adjustments.\n * PLB-01 = provider ID, PLB-02 = fiscal period date (CCYYMMDD). PLB-03\n * through PLB-14 carry up to 6 (composite reason + amount) pairs, with\n * each composite carrying reason-code + optional reference identifier\n * across two components. @internal\n */\nfunction decodePlb(seg: X12Segment, delimiters: Delimiters): readonly X12RemitProviderAdjustment[] {\n const providerId = elementValue(seg, 1, delimiters);\n const fiscalPeriodDate = elementValue(seg, 2, delimiters);\n const out: X12RemitProviderAdjustment[] = [];\n for (let pair = 0; pair < 6; pair += 1) {\n const composite = 3 + pair * 2;\n const amount = elementDecimal(seg, composite + 1, delimiters);\n const reasonCode = componentOptional(seg, composite, 1, delimiters);\n const subCode = componentOptional(seg, composite, 2, delimiters);\n if (amount === undefined && reasonCode === undefined) continue;\n out.push(\n Object.freeze({\n providerId,\n fiscalPeriodDate,\n reasonCode: reasonCode ?? \"\",\n subCode,\n amount: amount ?? X12Decimal.ZERO,\n }),\n );\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Address / party mutators (immutable — return a new party with the change).\n// ---------------------------------------------------------------------------\n\nconst EMPTY_ADDRESS: X12RemitAddress = Object.freeze({\n lines: Object.freeze([]),\n city: undefined,\n state: undefined,\n postalCode: undefined,\n countryCode: undefined,\n});\n\nconst EMPTY_HEADER: X12RemitPaymentHeader = Object.freeze({\n transactionHandlingCode: \"\",\n totalActualPayment: X12Decimal.ZERO,\n creditDebitFlag: \"\",\n method: \"\",\n paymentFormatCode: undefined,\n paymentDate: \"\",\n});\n\n/** @internal */\nfunction withAddress(party: X12RemitParty, address: X12RemitAddress): X12RemitParty {\n return Object.freeze({ ...party, address });\n}\n\n/** @internal */\nfunction withReference(party: X12RemitParty, ref: X12RemitReference): X12RemitParty {\n return Object.freeze({\n ...party,\n additionalIdentifiers: Object.freeze([...party.additionalIdentifiers, ref]),\n });\n}\n\n/** @internal */\nfunction withContact(party: X12RemitParty, contact: X12RemitContact): X12RemitParty {\n return Object.freeze({ ...party, contacts: Object.freeze([...party.contacts, contact]) });\n}\n\n/** @internal */\nfunction withLines(address: X12RemitAddress, lines: readonly string[]): X12RemitAddress {\n return Object.freeze({ ...address, lines: Object.freeze([...address.lines, ...lines]) });\n}\n\n/** @internal */\nfunction mergeAddress(base: X12RemitAddress, fromN4: X12RemitAddress): X12RemitAddress {\n return Object.freeze({\n lines: base.lines,\n city: fromN4.city ?? base.city,\n state: fromN4.state ?? base.state,\n postalCode: fromN4.postalCode ?? base.postalCode,\n countryCode: fromN4.countryCode ?? base.countryCode,\n });\n}\n\n// ---------------------------------------------------------------------------\n// Freezing accumulators into the readonly public shape.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction freezeServiceLine(acc: ServiceLineAccumulator): X12RemitServiceLine {\n return Object.freeze({\n productServiceIdQualifier: acc.productServiceIdQualifier,\n productServiceId: acc.productServiceId,\n modifiers: Object.freeze(acc.modifiers.slice()),\n chargeAmount: acc.chargeAmount,\n paymentAmount: acc.paymentAmount,\n revenueCode: acc.revenueCode,\n paidUnitsOfService: acc.paidUnitsOfService,\n originalServiceId: acc.originalServiceId,\n originalServiceIdQualifier: acc.originalServiceIdQualifier,\n serviceDateStart: acc.serviceDateStart,\n serviceDateEnd: acc.serviceDateEnd,\n adjustments: Object.freeze(acc.adjustments.slice()),\n references: Object.freeze(acc.references.slice()),\n amounts: Object.freeze(acc.amounts.slice()),\n remarks: Object.freeze(acc.remarks.slice()),\n });\n}\n\n/** @internal */\nfunction freezeClaim(acc: ClaimAccumulator): X12RemitClaim {\n // Voiding the props on ClaimAccumulator we don't use yet — Phase 8 will\n // expose CLP segment position so balance-warning positions can point at\n // the exact claim.\n void acc.clpSegmentIndex;\n return Object.freeze({\n patientControlNumber: acc.patientControlNumber,\n claimStatusCode: acc.claimStatusCode,\n claimStatusDescription: acc.claimStatusDescription,\n totalChargeAmount: acc.totalChargeAmount,\n totalPaymentAmount: acc.totalPaymentAmount,\n patientResponsibilityAmount: acc.patientResponsibilityAmount,\n claimFilingIndicatorCode: acc.claimFilingIndicatorCode,\n payerClaimControlNumber: acc.payerClaimControlNumber,\n facilityTypeCode: acc.facilityTypeCode,\n claimFrequencyCode: acc.claimFrequencyCode,\n adjustments: Object.freeze(acc.adjustments.slice()),\n patient: acc.patient,\n subscriber: acc.subscriber,\n correctedPatient: acc.correctedPatient,\n serviceProvider: acc.serviceProvider,\n renderingProvider: acc.renderingProvider,\n servicePeriodStart: acc.servicePeriodStart,\n servicePeriodEnd: acc.servicePeriodEnd,\n references: Object.freeze(acc.references.slice()),\n amounts: Object.freeze(acc.amounts.slice()),\n remarks: Object.freeze(acc.remarks.slice()),\n serviceLines: Object.freeze(acc.serviceLines.slice()),\n });\n}\n","/**\n * Thrown errors raised by the 835 domain builder ({@link\n * \"./build-835.js\".build835}). Distinct from the general\n * `X12BuildError` (a structurally impossible envelope) and from\n * `AckBuildError` (the 999/TA1 disposition guard): `Remit835BuildError`\n * is raised when a remittance spec is *clinically* impossible — most\n * importantly, when the supplied amounts do not satisfy the TR3\n * 005010X221A1 §1.10.2 balance equations.\n *\n * Money is the largest blast radius in a remit. The read side (`get835`)\n * is lenient — a real, payer-issued, out-of-balance 835 is WARNED, never\n * rejected, because the parser must surface what actually arrived. The\n * builder takes the opposite stance, exactly as `build999` refuses to\n * fabricate an `Accept` against an error list: a library that EMITS an\n * out-of-balance remit would be telling a downstream provider that money\n * math holds when it does not — a cash-posting hazard. So `build835`\n * REFUSES an imbalanced spec rather than emit it. A caller that must\n * reproduce a knowingly-imbalanced payer artifact (e.g. for a regression\n * fixture) drops to the general `buildInterchange`, which applies no\n * domain guard.\n */\n\n/**\n * Stable string codes for every {@link Remit835BuildError}. Locked here so\n * consumers can narrow exhaustively on `err.code`; additions-only\n * thereafter (renaming any code is a breaking change).\n *\n * - `X12_835_BUILD_BALANCE_MISMATCH` — a spec violated one of the three\n * §1.10.2 balance invariants (service-line `SVC-02 == SVC-03 + Σ(line\n * CAS)`, claim `CLP-03 == CLP-04 + Σ(claim+line CAS)`, or top-of-remit\n * `BPR-02 == Σ(CLP-04) − Σ(PLB)`). The message names the invariant,\n * the spec'd vs computed totals, and the delta — numeric values only,\n * never PHI.\n * - `X12_835_BUILD_INVALID_SPEC` — a structural precondition failed (no\n * trace supplied, a claim with no patient-control number, etc.).\n *\n * @example\n * ```ts\n * import { REMIT_835_BUILD_ERROR_CODES, Remit835BuildError, build835 } from \"@cosyte/x12\";\n * try {\n * build835(spec);\n * } catch (err) {\n * if (\n * err instanceof Remit835BuildError &&\n * err.code === REMIT_835_BUILD_ERROR_CODES.X12_835_BUILD_BALANCE_MISMATCH\n * ) {\n * // the remit does not balance — fix the amounts, do not emit\n * }\n * }\n * ```\n */\nexport const REMIT_835_BUILD_ERROR_CODES = {\n X12_835_BUILD_BALANCE_MISMATCH: \"X12_835_BUILD_BALANCE_MISMATCH\",\n X12_835_BUILD_INVALID_SPEC: \"X12_835_BUILD_INVALID_SPEC\",\n} as const;\n\n/**\n * String-literal union over {@link REMIT_835_BUILD_ERROR_CODES}. Used as\n * {@link Remit835BuildError}.`code`.\n */\nexport type Remit835BuildErrorCode =\n (typeof REMIT_835_BUILD_ERROR_CODES)[keyof typeof REMIT_835_BUILD_ERROR_CODES];\n\n/**\n * Thrown by {@link \"./build-835.js\".build835} when the supplied remittance\n * spec cannot be emitted as a conformant, self-consistent 835 — most\n * importantly when it fails a §1.10.2 balance invariant. Carries a stable\n * `code` for programmatic narrowing. Deliberately does NOT extend\n * `X12ParseError` or `X12BuildError` — the domain-refusal distinction\n * matters at the type level.\n *\n * @example\n * ```ts\n * import { Remit835BuildError } from \"@cosyte/x12\";\n * try {\n * build835(spec);\n * } catch (err) {\n * if (err instanceof Remit835BuildError) {\n * // err.code is one of REMIT_835_BUILD_ERROR_CODES\n * }\n * }\n * ```\n */\nexport class Remit835BuildError extends Error {\n public readonly code: Remit835BuildErrorCode;\n\n /** @internal */\n public constructor(code: Remit835BuildErrorCode, message: string) {\n super(message);\n this.name = \"Remit835BuildError\";\n this.code = code;\n }\n}\n","/**\n * `build835` — pure-function builder for a 005010X221A1 Health Care Claim\n * Payment/Advice (ERA). NEVER auto-sends, NEVER opens a socket, NEVER\n * touches the filesystem. The library mechanically emits the remittance it\n * is told; a spec that violates a TR3 §1.10.2 balance invariant is REFUSED\n * via {@link \"./build-errors.js\".Remit835BuildError} — emitting an\n * out-of-balance 835 would tell a downstream cash-poster that money math\n * holds when it does not (mirrors `build999`'s accept-with-errors refusal).\n *\n * The read side ({@link \"./get-835.js\".get835}) is lenient — a real,\n * payer-issued, out-of-balance 835 is WARNED, never rejected. The builder\n * takes the opposite stance: it REFUSES rather than emit. A caller that\n * must reproduce a knowingly-imbalanced payer artifact drops to {@link\n * \"../../builder/build-interchange.js\".buildInterchange}, which applies no\n * domain guard.\n *\n * Output shape: a complete {@link X12Interchange} wrapping a single GS..GE\n * functional group (GS-01 `\"HP\"`) containing a single ST..SE 835\n * transaction set (ST-03 `005010X221A1`), spec-clean and round-trippable\n * through {@link parseX12}. The builder emits segments in TR3 loop order so\n * a balanced spec round-trips through `get835` field-for-field.\n */\n\nimport { REMIT_835_BUILD_ERROR_CODES, Remit835BuildError } from \"./build-errors.js\";\nimport { checkClaimBalance, checkRemitTotalBalance, checkServiceLineBalance } from \"./balance.js\";\nimport type {\n Build835AdjustmentSpec,\n Build835ClaimSpec,\n Build835ContactSpec,\n Build835PartySpec,\n Build835PersonSpec,\n Build835ProviderAdjustmentSpec,\n Build835ProviderSpec,\n Build835ReferenceSpec,\n Build835ServiceLineSpec,\n Build835Spec,\n} from \"./build-835-types.js\";\nimport type {\n X12RemitAdjustment,\n X12RemitClaim,\n X12RemitProviderAdjustment,\n X12RemitServiceLine,\n} from \"./types.js\";\nimport { parseX12 } from \"../../parser/index.js\";\nimport type { X12Interchange, X12Position } from \"../../parser/types.js\";\nimport { escapeRelease } from \"../../parser/release.js\";\n\n/**\n * GS-08 / ST-03 version + release emitted for every 835 the library builds\n * — the WPC TR3 `005010X221A1` implementation guide.\n * @internal\n */\nconst X221A1_VERSION_RELEASE = \"005010X221A1\";\n\n/**\n * GS-01 functional identifier code for the 835. `HP` = Health Care Claim\n * Payment/Advice.\n * @internal\n */\nconst X12_835_FUNCTIONAL_ID = \"HP\";\n\n/**\n * The single ASC X12 standards agency code emitted at GS-07 — `X` for ASC\n * X12 itself.\n * @internal\n */\nconst X12_AGENCY_CODE = \"X\";\n\n/**\n * `build835` — assemble a 005010X221A1 835 around the supplied spec.\n *\n * Refused via {@link \"./build-errors.js\".Remit835BuildError}:\n * - No trace supplied, or a claim with no patient-control number, etc. →\n * `X12_835_BUILD_INVALID_SPEC`.\n * - Any §1.10.2 balance invariant violated (service-line `SVC-02 ==\n * SVC-03 + Σ(line CAS)`, claim `CLP-03 == CLP-04 + Σ(claim+line CAS)`,\n * or top-of-remit `BPR-02 == Σ(CLP-04) − Σ(PLB)`) →\n * `X12_835_BUILD_BALANCE_MISMATCH`.\n *\n * @example\n * ```ts\n * import { build835, X12Decimal } from \"@cosyte/x12\";\n * const ix = build835({\n * envelope: {\n * senderId: \"MEDICARE\", receiverId: \"SUBMITTER\",\n * interchangeDate: \"260601\", interchangeTime: \"1200\",\n * interchangeControlNumber: \"000000001\",\n * groupControlNumber: \"1\", transactionSetControlNumber: \"0001\",\n * },\n * payment: {\n * transactionHandlingCode: \"I\",\n * totalActualPayment: X12Decimal.fromString(\"450.00\")!,\n * creditDebitFlag: \"C\", method: \"ACH\", paymentDate: \"20260601\",\n * },\n * traces: [{ traceTypeCode: \"1\", referenceId: \"0012345\", originatingCompanyId: \"1512345678\" }],\n * claims: [\n * {\n * patientControlNumber: \"PT-ACCT-001\", claimStatusCode: \"1\",\n * totalChargeAmount: X12Decimal.fromString(\"500.00\")!,\n * totalPaymentAmount: X12Decimal.fromString(\"450.00\")!,\n * patientResponsibilityAmount: X12Decimal.fromString(\"50.00\")!,\n * adjustments: [{ groupCode: \"PR\", reasonCode: \"1\", amount: X12Decimal.fromString(\"50.00\")! }],\n * },\n * ],\n * });\n * ```\n */\nexport function build835(spec: Build835Spec): X12Interchange {\n const { envelope } = spec;\n\n // ---- Structural preconditions -----------------------------------------\n\n enforceStructuralSpec(spec);\n\n // ---- Balance guards (refuse an out-of-balance remit) ------------------\n\n enforceBalance(spec);\n\n // ---- Delimiter resolution + escape helper -----------------------------\n\n const elementSeparator = envelope.elementSeparator ?? \"*\";\n const repetitionSeparator = envelope.repetitionSeparator ?? \"^\";\n const componentSeparator = envelope.componentSeparator ?? \":\";\n const segmentTerminator = envelope.segmentTerminator ?? \"~\";\n const delimiters = {\n element: elementSeparator,\n repetition: repetitionSeparator,\n component: componentSeparator,\n segment: segmentTerminator,\n };\n const esc = (value: string): string => escapeRelease(value, delimiters);\n\n /**\n * Join already-escaped/composed element strings into a segment, dropping\n * trailing empty elements (interior empties are positionally meaningful\n * and kept). Never re-escapes — composites arrive pre-escaped.\n */\n const seg = (parts: readonly string[]): string => {\n let end = parts.length;\n while (end > 1 && parts[end - 1] === \"\") end -= 1;\n return parts.slice(0, end).join(elementSeparator) + segmentTerminator;\n };\n\n /**\n * Build a composite element: escape each component, drop trailing empty\n * components, join with the component separator. Returns `\"\"` when all\n * components are empty.\n */\n const comp = (components: readonly string[]): string => {\n const escaped = components.map(esc);\n let end = escaped.length;\n while (end > 0 && escaped[end - 1] === \"\") end -= 1;\n return escaped.slice(0, end).join(componentSeparator);\n };\n\n // ---- ISA envelope -----------------------------------------------------\n\n const senderQualifier = envelope.senderQualifier ?? \"ZZ\";\n const receiverQualifier = envelope.receiverQualifier ?? \"ZZ\";\n const usageIndicator = envelope.usageIndicator ?? \"P\";\n const interchangeControlNumber = padControl(envelope.interchangeControlNumber, 9);\n const isa =\n [\n \"ISA\",\n \"00\", // ISA-01\n pad(\" \", 10), // ISA-02\n \"00\", // ISA-03\n pad(\" \", 10), // ISA-04\n pad(senderQualifier, 2), // ISA-05\n pad(envelope.senderId, 15), // ISA-06\n pad(receiverQualifier, 2), // ISA-07\n pad(envelope.receiverId, 15), // ISA-08\n pad(envelope.interchangeDate, 6), // ISA-09 — YYMMDD\n pad(envelope.interchangeTime, 4), // ISA-10 — HHMM\n repetitionSeparator, // ISA-11\n \"00501\", // ISA-12\n interchangeControlNumber, // ISA-13\n \"0\", // ISA-14\n usageIndicator, // ISA-15\n componentSeparator, // ISA-16\n ].join(elementSeparator) + segmentTerminator;\n\n // ---- GS / ST ----------------------------------------------------------\n\n const groupDate = envelope.groupDate ?? expandYY(envelope.interchangeDate);\n const groupTime = envelope.groupTime ?? envelope.interchangeTime;\n const applicationSenderCode = envelope.applicationSenderCode ?? envelope.senderId;\n const applicationReceiverCode = envelope.applicationReceiverCode ?? envelope.receiverId;\n\n const gs = seg([\n \"GS\",\n X12_835_FUNCTIONAL_ID, // GS-01 — \"HP\"\n esc(applicationSenderCode), // GS-02\n esc(applicationReceiverCode), // GS-03\n groupDate, // GS-04 — CCYYMMDD\n groupTime, // GS-05 — HHMM\n esc(envelope.groupControlNumber), // GS-06\n X12_AGENCY_CODE, // GS-07\n X221A1_VERSION_RELEASE, // GS-08\n ]);\n\n const stControlNumber = envelope.transactionSetControlNumber;\n const st = seg([\"ST\", \"835\", esc(stControlNumber), X221A1_VERSION_RELEASE]);\n\n // ---- Body segments ----------------------------------------------------\n\n const body: string[] = [];\n\n // BPR — payment header. BPR-16 (payment date) is positionally pinned at\n // element 16, so the interior elements 6..15 are emitted empty and NOT\n // trimmed (the date keeps them in place).\n body.push(\n seg([\n \"BPR\",\n esc(spec.payment.transactionHandlingCode),\n esc(spec.payment.totalActualPayment.toString()),\n esc(spec.payment.creditDebitFlag),\n esc(spec.payment.method),\n esc(spec.payment.paymentFormatCode ?? \"\"),\n \"\", // BPR-06\n \"\", // BPR-07\n \"\", // BPR-08\n \"\", // BPR-09\n \"\", // BPR-10\n \"\", // BPR-11\n \"\", // BPR-12\n \"\", // BPR-13\n \"\", // BPR-14\n \"\", // BPR-15\n esc(spec.payment.paymentDate), // BPR-16\n ]),\n );\n\n for (const trace of spec.traces) {\n body.push(\n seg([\n \"TRN\",\n esc(trace.traceTypeCode),\n esc(trace.referenceId),\n esc(trace.originatingCompanyId ?? \"\"),\n esc(trace.originatingCompanySupplementalCode ?? \"\"),\n ]),\n );\n }\n\n if (spec.payer !== undefined) {\n emitParty(spec.payer, body, seg, esc);\n }\n if (spec.payee !== undefined) {\n emitParty(spec.payee, body, seg, esc);\n }\n\n if (spec.claims.length > 0) {\n body.push(seg([\"LX\", \"1\"]));\n for (const claim of spec.claims) {\n emitClaim(claim, body, seg, esc, comp);\n }\n }\n\n emitProviderAdjustments(spec.providerAdjustments ?? [], body, seg, esc, comp);\n\n // ---- SE / GE / IEA ----------------------------------------------------\n\n // SE-01 counts every segment in the set, ST and SE inclusive.\n const seCount = body.length + 2;\n const se = seg([\"SE\", String(seCount), esc(stControlNumber)]);\n const ge = seg([\"GE\", \"1\", esc(envelope.groupControlNumber)]);\n const iea = seg([\"IEA\", \"1\", interchangeControlNumber]);\n\n const raw = isa + gs + st + body.join(\"\") + se + ge + iea;\n\n // Final round-trip through `parseX12` so the returned interchange is\n // bit-identical with the parsed form every other helper consumes — and\n // so the build path inherits delimiter detection + envelope walking, and\n // any internal builder bug surfaces as Tier-2 warnings on the result.\n return parseX12(raw);\n}\n\n// ---------------------------------------------------------------------------\n// Structural + balance guards.\n// ---------------------------------------------------------------------------\n\n/**\n * Refuse a structurally impossible spec before any emit. Mirrors\n * `build999`'s precondition guards: the cheap, unambiguous failures that\n * would otherwise emit a malformed 835. @internal\n */\nfunction enforceStructuralSpec(spec: Build835Spec): void {\n if (spec.traces.length === 0) {\n throw new Remit835BuildError(\n REMIT_835_BUILD_ERROR_CODES.X12_835_BUILD_INVALID_SPEC,\n \"build835: at least one TRN trace is required (TR3 005010X221A1 Loop header).\",\n );\n }\n for (let i = 0; i < spec.claims.length; i += 1) {\n const claim = spec.claims[i];\n if (claim === undefined) continue;\n if (claim.patientControlNumber === \"\") {\n throw new Remit835BuildError(\n REMIT_835_BUILD_ERROR_CODES.X12_835_BUILD_INVALID_SPEC,\n `build835: claim at index ${String(i)} has an empty patient-control number (CLP-01 is required).`,\n );\n }\n }\n}\n\n/**\n * Run the three §1.10.2 balance invariants over the spec and REFUSE on the\n * first violation. Reuses the authoritative read-side validators\n * ({@link checkClaimBalance} / {@link checkServiceLineBalance} /\n * {@link checkRemitTotalBalance}) against a materialized read model so the\n * emit guard and the parse warning share one source of truth. The\n * validators' messages are numeric-only (no PHI). @internal\n */\nfunction enforceBalance(spec: Build835Spec): void {\n const position: X12Position = { segmentIndex: 0, transactionIndex: 0 };\n const claims = spec.claims.map(materializeClaim);\n for (const claim of claims) {\n const claimWarn = checkClaimBalance(claim, position);\n if (claimWarn !== undefined) {\n throw new Remit835BuildError(\n REMIT_835_BUILD_ERROR_CODES.X12_835_BUILD_BALANCE_MISMATCH,\n `build835 refuses an out-of-balance claim: ${claimWarn.message}`,\n );\n }\n for (const lineWarn of checkServiceLineBalance(claim, position)) {\n throw new Remit835BuildError(\n REMIT_835_BUILD_ERROR_CODES.X12_835_BUILD_BALANCE_MISMATCH,\n `build835 refuses an out-of-balance service line: ${lineWarn.message}`,\n );\n }\n }\n const totalWarn = checkRemitTotalBalance(\n spec.payment.totalActualPayment,\n claims,\n (spec.providerAdjustments ?? []).map(materializeProviderAdjustment),\n position,\n );\n if (totalWarn !== undefined) {\n throw new Remit835BuildError(\n REMIT_835_BUILD_ERROR_CODES.X12_835_BUILD_BALANCE_MISMATCH,\n `build835 refuses an out-of-balance remit: ${totalWarn.message}`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Read-model materializers — only the fields the balance validators read are\n// load-bearing; lookup-derived descriptions are left `undefined`.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction materializeAdjustment(spec: Build835AdjustmentSpec): X12RemitAdjustment {\n return {\n groupCode: spec.groupCode,\n reasonCode: spec.reasonCode,\n reasonDescription: undefined,\n amount: spec.amount,\n quantity: spec.quantity,\n };\n}\n\n/** @internal */\nfunction materializeServiceLine(spec: Build835ServiceLineSpec): X12RemitServiceLine {\n return {\n productServiceIdQualifier: spec.productServiceIdQualifier,\n productServiceId: spec.productServiceId,\n modifiers: spec.modifiers ?? [],\n chargeAmount: spec.chargeAmount,\n paymentAmount: spec.paymentAmount,\n revenueCode: spec.revenueCode,\n paidUnitsOfService: spec.paidUnitsOfService,\n originalServiceId: spec.originalServiceId,\n originalServiceIdQualifier: spec.originalServiceIdQualifier,\n serviceDateStart: spec.serviceDateStart,\n serviceDateEnd: spec.serviceDateEnd,\n adjustments: (spec.adjustments ?? []).map(materializeAdjustment),\n references: [],\n amounts: [],\n remarks: [],\n };\n}\n\n/** @internal */\nfunction materializeClaim(spec: Build835ClaimSpec): X12RemitClaim {\n return {\n patientControlNumber: spec.patientControlNumber,\n claimStatusCode: spec.claimStatusCode,\n claimStatusDescription: undefined,\n totalChargeAmount: spec.totalChargeAmount,\n totalPaymentAmount: spec.totalPaymentAmount,\n patientResponsibilityAmount: spec.patientResponsibilityAmount,\n claimFilingIndicatorCode: spec.claimFilingIndicatorCode,\n payerClaimControlNumber: spec.payerClaimControlNumber,\n facilityTypeCode: spec.facilityTypeCode,\n claimFrequencyCode: spec.claimFrequencyCode,\n adjustments: (spec.adjustments ?? []).map(materializeAdjustment),\n patient: undefined,\n subscriber: undefined,\n correctedPatient: undefined,\n serviceProvider: undefined,\n renderingProvider: undefined,\n servicePeriodStart: spec.servicePeriodStart,\n servicePeriodEnd: spec.servicePeriodEnd,\n references: [],\n amounts: [],\n remarks: [],\n serviceLines: (spec.serviceLines ?? []).map(materializeServiceLine),\n };\n}\n\n/** @internal */\nfunction materializeProviderAdjustment(\n spec: Build835ProviderAdjustmentSpec,\n): X12RemitProviderAdjustment {\n return {\n providerId: spec.providerId,\n fiscalPeriodDate: spec.fiscalPeriodDate,\n reasonCode: spec.reasonCode,\n subCode: spec.subCode,\n amount: spec.amount,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Segment emitters. Each pushes spec-clean segment strings onto `body` in\n// TR3 005010X221A1 loop order so the result round-trips through `get835`.\n// ---------------------------------------------------------------------------\n\n/** Emit a Loop 1000A/1000B party (N1 + N3 + N4 + REF* + PER*). @internal */\nfunction emitParty(\n party: Build835PartySpec,\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): void {\n body.push(\n seg([\n \"N1\",\n esc(party.entityIdentifierCode),\n esc(party.name),\n esc(party.idQualifier ?? \"\"),\n esc(party.idCode ?? \"\"),\n ]),\n );\n const address = party.address;\n if (address !== undefined) {\n if (address.lines.length > 0) {\n body.push(seg([\"N3\", ...address.lines.map(esc)]));\n }\n if (\n address.city !== undefined ||\n address.state !== undefined ||\n address.postalCode !== undefined ||\n address.countryCode !== undefined\n ) {\n body.push(\n seg([\n \"N4\",\n esc(address.city ?? \"\"),\n esc(address.state ?? \"\"),\n esc(address.postalCode ?? \"\"),\n esc(address.countryCode ?? \"\"),\n ]),\n );\n }\n }\n for (const ref of party.additionalIdentifiers ?? []) {\n body.push(emitRef(ref, seg, esc));\n }\n for (const contact of party.contacts ?? []) {\n body.push(emitContact(contact, seg, esc));\n }\n}\n\n/** @internal */\nfunction emitRef(\n ref: Build835ReferenceSpec,\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): string {\n return seg([\"REF\", esc(ref.qualifier), esc(ref.value), esc(ref.description ?? \"\")]);\n}\n\n/** @internal */\nfunction emitContact(\n contact: Build835ContactSpec,\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): string {\n const parts: string[] = [\"PER\", esc(contact.contactFunctionCode), esc(contact.name ?? \"\")];\n for (const comm of contact.communications ?? []) {\n parts.push(esc(comm.qualifier), esc(comm.value));\n }\n return seg(parts);\n}\n\n/** Emit a Loop 2100 claim (CLP + CAS* + NM1* + DTM* + REF* + AMT* + LQ* + Loop 2110). @internal */\nfunction emitClaim(\n claim: Build835ClaimSpec,\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n comp: (components: readonly string[]) => string,\n): void {\n body.push(\n seg([\n \"CLP\",\n esc(claim.patientControlNumber),\n esc(claim.claimStatusCode),\n esc(claim.totalChargeAmount.toString()),\n esc(claim.totalPaymentAmount.toString()),\n esc(claim.patientResponsibilityAmount.toString()),\n esc(claim.claimFilingIndicatorCode ?? \"\"),\n esc(claim.payerClaimControlNumber ?? \"\"),\n comp([claim.facilityTypeCode ?? \"\", \"\", claim.claimFrequencyCode ?? \"\"]),\n ]),\n );\n\n emitCasGroup(claim.adjustments ?? [], body, seg, esc);\n\n if (claim.patient !== undefined) body.push(emitPerson(claim.patient, seg, esc));\n if (claim.subscriber !== undefined) body.push(emitPerson(claim.subscriber, seg, esc));\n if (claim.correctedPatient !== undefined) body.push(emitPerson(claim.correctedPatient, seg, esc));\n if (claim.serviceProvider !== undefined) body.push(emitProvider(claim.serviceProvider, seg, esc));\n if (claim.renderingProvider !== undefined) {\n body.push(emitProvider(claim.renderingProvider, seg, esc));\n }\n\n if (claim.servicePeriodStart !== undefined) {\n body.push(seg([\"DTM\", \"232\", esc(claim.servicePeriodStart)]));\n }\n if (claim.servicePeriodEnd !== undefined) {\n body.push(seg([\"DTM\", \"233\", esc(claim.servicePeriodEnd)]));\n }\n\n for (const ref of claim.references ?? []) body.push(emitRef(ref, seg, esc));\n for (const amt of claim.amounts ?? []) {\n body.push(seg([\"AMT\", esc(amt.qualifier), esc(amt.amount.toString())]));\n }\n for (const remark of claim.remarks ?? []) {\n body.push(seg([\"LQ\", esc(remark.system), esc(remark.code)]));\n }\n\n for (const line of claim.serviceLines ?? []) {\n emitServiceLine(line, body, seg, esc, comp);\n }\n}\n\n/** Emit a Loop 2110 service line (SVC + DTM* + CAS* + REF* + AMT* + LQ*). @internal */\nfunction emitServiceLine(\n line: Build835ServiceLineSpec,\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n comp: (components: readonly string[]) => string,\n): void {\n const svc01 = comp([\n line.productServiceIdQualifier,\n line.productServiceId,\n ...(line.modifiers ?? []),\n ]);\n const svc06 = comp([line.originalServiceIdQualifier ?? \"\", line.originalServiceId ?? \"\"]);\n body.push(\n seg([\n \"SVC\",\n svc01,\n esc(line.chargeAmount.toString()),\n esc(line.paymentAmount.toString()),\n \"\", // SVC-04 — revenue code is SVC-05 in X221A1; SVC-04 unused\n esc(line.revenueCode ?? \"\"),\n svc06,\n line.paidUnitsOfService === undefined ? \"\" : esc(line.paidUnitsOfService.toString()),\n ]),\n );\n\n emitServiceLineDtm(line, body, seg, esc);\n emitCasGroup(line.adjustments ?? [], body, seg, esc);\n for (const ref of line.references ?? []) body.push(emitRef(ref, seg, esc));\n for (const amt of line.amounts ?? []) {\n body.push(seg([\"AMT\", esc(amt.qualifier), esc(amt.amount.toString())]));\n }\n for (const remark of line.remarks ?? []) {\n body.push(seg([\"LQ\", esc(remark.system), esc(remark.code)]));\n }\n}\n\n/**\n * Emit service-line service dates. When start == end a single DTM*472\n * round-trips both; otherwise DTM*150 (start) and DTM*151 (end) carry them\n * independently. @internal\n */\nfunction emitServiceLineDtm(\n line: Build835ServiceLineSpec,\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): void {\n const { serviceDateStart: start, serviceDateEnd: end } = line;\n if (start !== undefined && end !== undefined && start === end) {\n body.push(seg([\"DTM\", \"472\", esc(start)]));\n return;\n }\n if (start !== undefined) body.push(seg([\"DTM\", \"150\", esc(start)]));\n if (end !== undefined) body.push(seg([\"DTM\", \"151\", esc(end)]));\n}\n\n/**\n * Emit CAS segments for a flat adjustment list. Consecutive adjustments\n * sharing a `groupCode` pack into one CAS (≤ 6 triples each), mirroring the\n * read side's flatten. @internal\n */\nfunction emitCasGroup(\n adjustments: readonly Build835AdjustmentSpec[],\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): void {\n let i = 0;\n while (i < adjustments.length) {\n const first = adjustments[i];\n if (first === undefined) {\n i += 1;\n continue;\n }\n const groupCode = first.groupCode;\n const parts: string[] = [\"CAS\", esc(groupCode)];\n let triples = 0;\n while (i < adjustments.length && triples < 6) {\n const adj = adjustments[i];\n if (adj === undefined || adj.groupCode !== groupCode) break;\n parts.push(\n esc(adj.reasonCode),\n esc(adj.amount.toString()),\n adj.quantity === undefined ? \"\" : esc(adj.quantity.toString()),\n );\n triples += 1;\n i += 1;\n }\n body.push(seg(parts));\n }\n}\n\n/** Emit an NM1 person (entity type qualifier `\"1\"`). @internal */\nfunction emitPerson(\n person: Build835PersonSpec,\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): string {\n return seg([\n \"NM1\",\n esc(person.entityIdentifierCode),\n \"1\",\n esc(person.lastName ?? \"\"),\n esc(person.firstName ?? \"\"),\n esc(person.middleName ?? \"\"),\n \"\", // NM1-06 name prefix\n esc(person.suffix ?? \"\"),\n esc(person.idQualifier ?? \"\"),\n esc(person.idCode ?? \"\"),\n ]);\n}\n\n/** Emit an NM1 provider/organization (entity type qualifier `\"2\"`). @internal */\nfunction emitProvider(\n provider: Build835ProviderSpec,\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): string {\n return seg([\n \"NM1\",\n esc(provider.entityIdentifierCode),\n \"2\",\n esc(provider.name ?? \"\"),\n \"\", // NM1-04\n \"\", // NM1-05\n \"\", // NM1-06\n \"\", // NM1-07\n esc(provider.idQualifier ?? \"\"),\n esc(provider.idCode ?? \"\"),\n ]);\n}\n\n/**\n * Emit PLB segments. Consecutive provider adjustments sharing both\n * `providerId` and `fiscalPeriodDate` pack into one PLB (≤ 6 pairs each),\n * mirroring the read side's flatten. @internal\n */\nfunction emitProviderAdjustments(\n adjustments: readonly Build835ProviderAdjustmentSpec[],\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n comp: (components: readonly string[]) => string,\n): void {\n let i = 0;\n while (i < adjustments.length) {\n const first = adjustments[i];\n if (first === undefined) {\n i += 1;\n continue;\n }\n const { providerId, fiscalPeriodDate } = first;\n const parts: string[] = [\"PLB\", esc(providerId), esc(fiscalPeriodDate)];\n let pairs = 0;\n while (i < adjustments.length && pairs < 6) {\n const adj = adjustments[i];\n if (\n adj === undefined ||\n adj.providerId !== providerId ||\n adj.fiscalPeriodDate !== fiscalPeriodDate\n ) {\n break;\n }\n parts.push(comp([adj.reasonCode, adj.subCode ?? \"\"]), esc(adj.amount.toString()));\n pairs += 1;\n i += 1;\n }\n body.push(seg(parts));\n }\n}\n\n// ---------------------------------------------------------------------------\n// String helpers — mirror the `build999` / `buildInterchange` emit primitives.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction pad(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return value + \" \".repeat(width - value.length);\n return value.slice(0, width);\n}\n\n/**\n * Zero-pad a control number to `width` chars (ISA-13 / IEA-02 are always\n * 9). Throws {@link Remit835BuildError} if the value already exceeds the\n * width — a silently-truncated control number would break ISA-13↔IEA-02\n * reconciliation. @internal\n */\nfunction padControl(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return \"0\".repeat(width - value.length) + value;\n throw new Remit835BuildError(\n REMIT_835_BUILD_ERROR_CODES.X12_835_BUILD_INVALID_SPEC,\n `build835: control number \"${value}\" exceeds the ${String(width)}-char spec limit.`,\n );\n}\n\n/**\n * Expand a 6-digit YYMMDD into CCYYMMDD for GS-04. Years `00`–`49` are 21st\n * century, `50`–`99` are 20th. A value already in CCYYMMDD form passes\n * through unchanged. @internal\n */\nfunction expandYY(yymmdd: string): string {\n if (yymmdd.length !== 6) return yymmdd;\n const yy = parseInt(yymmdd.slice(0, 2), 10);\n if (Number.isNaN(yy)) return yymmdd;\n const century = yy < 50 ? \"20\" : \"19\";\n return century + yymmdd;\n}\n","/**\n * 835 TR3 `005010X221A1` loop specification — authored through the\n * **public** {@link \"../../loops/define.js\".defineLoopSpec} API. This is\n * the Phase 4 dogfooding gate: the built-in 835 loop hierarchy goes\n * through the SAME factory consumers use for payer-specific companion-\n * guide loops. A regression in `defineLoopSpec` cannot hide from the\n * built-in extractors.\n *\n * Hierarchy (per WPC TR3 §3, §4):\n *\n * ```text\n * Header (transaction set, ST..SE)\n * BPR (Financial Information) — required, max 1\n * NTE (Note) — situational, max >1\n * TRN (Reassociation Trace Number) — required, max 1\n * CUR (Foreign Currency) — situational, max 1\n * REF (Receiver Identifier / Version) — situational, max >1\n * DTM (Production Date) — situational, max 1\n * Loop 1000A — Payer Identification — required, max 1\n * N1 (PR) N3 N4 REF PER\n * Loop 1000B — Payee Identification — required, max 1\n * N1 (PE) N3 N4 REF RDM\n * Loop 2000 — Header Number — situational, max >1\n * LX TS3 TS2\n * Loop 2100 — Claim Payment Info — situational, max >1\n * CLP CAS NM1(QC,IL,74,82,77,TT,PR,GB,…) MIA MOA REF DTM PER AMT QTY LQ\n * Loop 2110 — Service Payment Info — situational, max >1\n * SVC DTM CAS REF AMT QTY LQ\n * Trailer\n * PLB (Provider-Level Adjustments) — situational, max >1\n * SE (Transaction Set Trailer) — required, max 1\n * ```\n *\n * @remarks\n * Phase 4 surfaces the loop spec as a frozen artifact (consumers can read\n * it and assert it matches their companion-guide expectations); the\n * walker in `./get-835.ts` consults the spec to guide its state machine.\n * Phase 9's profile system overlays vendor-specific quirks on top of\n * this baseline.\n */\n\nimport { defineLoopSpec } from \"../../loops/define.js\";\nimport type { LoopSpec } from \"../../loops/types.js\";\n\n/**\n * 835 Loop 2110 — Service Payment Information. Triggered by `SVC`.\n *\n * Cited as Loop 2110 in TR3 X221A1.\n *\n * @example\n * ```ts\n * import { REMIT_835_LOOP_2110 } from \"@cosyte/x12\";\n * REMIT_835_LOOP_2110.id; // \"2110\"\n * REMIT_835_LOOP_2110.trigger; // \"SVC\"\n * ```\n */\nexport const REMIT_835_LOOP_2110: LoopSpec = defineLoopSpec({\n id: \"2110\",\n description: \"835 Loop 2110 — Service Payment Information\",\n trigger: \"SVC\",\n segments: [\n { id: \"SVC\", usage: \"required\", max: 1 },\n { id: \"DTM\", usage: \"situational\", max: \">1\" },\n { id: \"CAS\", usage: \"situational\", max: \">1\" },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"AMT\", usage: \"situational\", max: \">1\" },\n { id: \"QTY\", usage: \"situational\", max: \">1\" },\n { id: \"LQ\", usage: \"situational\", max: \">1\" },\n ],\n});\n\n/**\n * 835 Loop 2100 — Claim Payment Information. Triggered by `CLP`. Nests\n * Loop 2110.\n *\n * Cited as Loop 2100 in TR3 X221A1.\n *\n * @example\n * ```ts\n * import { REMIT_835_LOOP_2100 } from \"@cosyte/x12\";\n * REMIT_835_LOOP_2100.trigger; // \"CLP\"\n * REMIT_835_LOOP_2100.children.length; // 1 (Loop 2110)\n * ```\n */\nexport const REMIT_835_LOOP_2100: LoopSpec = defineLoopSpec({\n id: \"2100\",\n description: \"835 Loop 2100 — Claim Payment Information\",\n trigger: \"CLP\",\n segments: [\n { id: \"CLP\", usage: \"required\", max: 1 },\n { id: \"CAS\", usage: \"situational\", max: \">1\" },\n { id: \"NM1\", usage: \"situational\", max: \">1\" },\n { id: \"MIA\", usage: \"situational\", max: 1 },\n { id: \"MOA\", usage: \"situational\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"DTM\", usage: \"situational\", max: \">1\" },\n { id: \"PER\", usage: \"situational\", max: \">1\" },\n { id: \"AMT\", usage: \"situational\", max: \">1\" },\n { id: \"QTY\", usage: \"situational\", max: \">1\" },\n { id: \"LQ\", usage: \"situational\", max: \">1\" },\n ],\n children: [REMIT_835_LOOP_2110],\n});\n\n/**\n * 835 Loop 2000 — Header Number. Triggered by `LX`. Nests Loop 2100.\n *\n * Cited as Loop 2000 in TR3 X221A1; situational because some payers\n * (notably Medicare FFS) omit the LX header entirely and ship CLP loops\n * directly under the transaction set header. The Phase 4 walker handles\n * both shapes — claims appear inside Loop 2000 if `LX` is present, at\n * top level otherwise.\n *\n * @example\n * ```ts\n * import { REMIT_835_LOOP_2000 } from \"@cosyte/x12\";\n * REMIT_835_LOOP_2000.trigger; // \"LX\"\n * REMIT_835_LOOP_2000.children[0]?.trigger; // \"CLP\" (Loop 2100)\n * ```\n */\nexport const REMIT_835_LOOP_2000: LoopSpec = defineLoopSpec({\n id: \"2000\",\n description: \"835 Loop 2000 — Header Number\",\n trigger: \"LX\",\n segments: [\n { id: \"LX\", usage: \"required\", max: 1 },\n { id: \"TS3\", usage: \"situational\", max: 1 },\n { id: \"TS2\", usage: \"situational\", max: 1 },\n ],\n children: [REMIT_835_LOOP_2100],\n});\n\n/**\n * 835 Loop 1000A — Payer Identification. Triggered by `N1` with\n * `N1-01 = \"PR\"`. The trigger validation against the qualifier value\n * (PR vs PE) happens in the walker, not the loop spec — `defineLoopSpec`\n * keys off the segment id, not the element-level qualifier.\n *\n * @example\n * ```ts\n * import { REMIT_835_LOOP_1000A } from \"@cosyte/x12\";\n * REMIT_835_LOOP_1000A.id; // \"1000A\"\n * REMIT_835_LOOP_1000A.trigger; // \"N1\"\n * ```\n */\nexport const REMIT_835_LOOP_1000A: LoopSpec = defineLoopSpec({\n id: \"1000A\",\n description: \"835 Loop 1000A — Payer Identification\",\n trigger: \"N1\",\n segments: [\n { id: \"N1\", usage: \"required\", max: 1 },\n { id: \"N3\", usage: \"situational\", max: \">1\" },\n { id: \"N4\", usage: \"situational\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"PER\", usage: \"situational\", max: \">1\" },\n ],\n});\n\n/**\n * 835 Loop 1000B — Payee Identification. Triggered by `N1` with\n * `N1-01 = \"PE\"`. Shape is the same as Loop 1000A (plus optional `RDM`)\n * but the role is the payment recipient.\n *\n * @example\n * ```ts\n * import { REMIT_835_LOOP_1000B } from \"@cosyte/x12\";\n * REMIT_835_LOOP_1000B.id; // \"1000B\"\n * ```\n */\nexport const REMIT_835_LOOP_1000B: LoopSpec = defineLoopSpec({\n id: \"1000B\",\n description: \"835 Loop 1000B — Payee Identification\",\n trigger: \"N1\",\n segments: [\n { id: \"N1\", usage: \"required\", max: 1 },\n { id: \"N3\", usage: \"situational\", max: \">1\" },\n { id: \"N4\", usage: \"situational\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"RDM\", usage: \"situational\", max: 1 },\n ],\n});\n","/**\n * `get837Claims` — extract a typed {@link X12_837Submission} from a parsed\n * X12 005010 837 transaction set (Professional `X222A2`, Institutional\n * `X223A3`, or Dental `X224A2`). Walks the body via a state machine\n * guided by the dogfooded loop spec (see\n * `./loop-spec.ts`). Lenient on parse: every recoverable deviation\n * surfaces as a warning, never a throw. Money is decoded as\n * {@link \"../../decimal.js\".X12Decimal} (never `parseFloat`). HL\n * parent-pointer integrity is enforced — mismatches emit\n * `X12_HL_PARENT_MISMATCH` and `X12_HL_PARENT_LEVEL_INVALID`; the\n * walker NEVER silently re-numbers the hierarchy.\n *\n * Spec source: WPC TR3s `005010X222A2` (Professional), `005010X223A3`\n * (Institutional), `005010X224A2` (Dental); X12 005010 base spec for\n * envelope + cross-cutting segments (NM1, N3, N4, REF, PER, DTP, AMT).\n *\n * Phase 5 known limitations (documented in CHANGELOG):\n * - **Loop 2320/2330 (Other Subscriber / Other Payer)** captured at the\n * surface level only: SBR-01 payer responsibility code and the\n * adjacent NM1*IL / NM1*PR entities. Detailed CAS / OI / MOA\n * breakdown inside Loop 2320 is deferred to Phase 9 (companion-guide\n * tolerance).\n * - **Loop 2410 (Drug Identification, 837P)** captures LIN qualifier +\n * code and the optional CTP quantity + UCUM unit. REF inside 2410 is\n * preserved on tx.segments verbatim but not typed onto the model.\n * - **Loop 2420 (Service-Line Provider Names)** captures the NM1\n * entities verbatim on `serviceLine.providers`; per-provider PRV +\n * address are not yet typed at the line level.\n * - **CN1 contract information** preserved on tx.segments verbatim, not\n * typed onto the model.\n * - **Companion-guide enforcement** (e.g. Availity's required REF*EA at\n * the billing provider) deferred to Phase 9 (profile system).\n * - **Builder** (`build837P`/`I`/`D`) deferred to Phase 8.\n *\n * None of these are silent — verbatim segments remain on\n * `tx.segments` so a consumer can drop down to raw element access for\n * anything the typed surface does not yet expose.\n */\n\nimport { X12Decimal } from \"../../decimal.js\";\nimport { lookupCarc } from \"../../code-lists/carc.js\";\nimport {\n collectElementValues,\n componentOptional,\n elementDecimal,\n elementDecimalOrZero,\n elementOptional,\n elementValue,\n type X12Segment,\n} from \"../../parser/segment.js\";\nimport type { Delimiters, X12Position, X12TransactionSet } from \"../../parser/types.js\";\nimport {\n hlParentLevelInvalid,\n hlParentMismatch,\n missingRequiredLoop,\n unknown837Variant,\n unknownCarc,\n unknownHiQualifier,\n type X12ParseWarning,\n} from \"../../parser/warnings.js\";\nimport type { X12RemitAdjustment } from \"../remit/types.js\";\nimport {\n isDiagnosisQualifier,\n isProcedureQualifier,\n resolveHiQualifier,\n type X12HiCategory,\n type X12HiCodeSystem,\n} from \"../../code-lists/hi-qualifiers.js\";\nimport type {\n X12Claim,\n X12Claim837Variant,\n X12ClaimAddress,\n X12ClaimAmount,\n X12ClaimContact,\n X12ClaimDate,\n X12ClaimEntity,\n X12ClaimHiCode,\n X12ClaimMember,\n X12ClaimNote,\n X12ClaimReference,\n X12HierarchicalLevel,\n X12LineAdjudication,\n X12LineDrug,\n X12OtherSubscriber,\n X12SubscriberInfo,\n X12ToothInformation,\n X12_837ServiceLine,\n X12_837Submission,\n} from \"./types.js\";\n\n/** Map ST-03 implementation-convention reference → 837 variant. @internal */\nconst VARIANT_BY_ICR: Readonly<Record<string, X12Claim837Variant>> = Object.freeze({\n \"005010X222A2\": \"P\",\n \"005010X223A3\": \"I\",\n \"005010X224A2\": \"D\",\n});\n\n/** Map SVx segment id → 837 variant for fall-back detection. @internal */\nconst VARIANT_BY_SV_SEGMENT: Readonly<Record<string, X12Claim837Variant>> = Object.freeze({\n SV1: \"P\",\n SV2: \"I\",\n SV3: \"D\",\n});\n\n/**\n * HL level codes per X12 0736 + 837 TR3 conventions. `INFORMATION_SOURCE`\n * is the billing provider (top of the tree); `SUBSCRIBER` is the\n * insurance subscriber; `DEPENDENT` is a non-subscriber patient.\n *\n * @example\n * ```ts\n * import { HL_LEVEL_CODES } from \"@cosyte/x12\";\n * HL_LEVEL_CODES.INFORMATION_SOURCE; // \"20\"\n * HL_LEVEL_CODES.SUBSCRIBER; // \"22\"\n * HL_LEVEL_CODES.DEPENDENT; // \"23\"\n * ```\n */\nexport const HL_LEVEL_CODES = Object.freeze({\n INFORMATION_SOURCE: \"20\",\n INFORMATION_RECEIVER: \"21\",\n SUBSCRIBER: \"22\",\n DEPENDENT: \"23\",\n} as const);\n\n/**\n * NM1-01 entity-identifier codes used by the 837 walker to route an NM1\n * onto the right entity slot. Curated to the qualifiers the v1 walker\n * recognizes; an NM1 with a qualifier outside this set falls into the\n * Loop 2310x / 2420x line-provider verbatim bucket. Frozen for type\n * safety + IntelliSense — consumers should rarely need these (they're a\n * walker-internal vocabulary), but they're exported for tests + the\n * Phase 8 builder API. @example NM1_QUALIFIERS.BILLING_PROVIDER → \"85\".\n */\nexport const NM1_QUALIFIERS = Object.freeze({\n SUBMITTER: \"41\",\n RECEIVER: \"40\",\n BILLING_PROVIDER: \"85\",\n PAY_TO_ADDRESS: \"87\",\n PAY_TO_PLAN: \"PE\",\n SUBSCRIBER: \"IL\",\n PAYER: \"PR\",\n PATIENT: \"QC\",\n} as const);\n\n/**\n * Per-level expected parent level. Billing provider (level 20) has no\n * parent. Subscriber (level 22) MUST be parented by billing provider.\n * Dependent / patient (level 23) MUST be parented by subscriber.\n * Violations fire `X12_HL_PARENT_LEVEL_INVALID`. @internal\n */\nconst EXPECTED_PARENT_LEVEL: Readonly<Record<string, string | undefined>> = Object.freeze({\n [HL_LEVEL_CODES.INFORMATION_SOURCE]: undefined,\n [HL_LEVEL_CODES.SUBSCRIBER]: HL_LEVEL_CODES.INFORMATION_SOURCE,\n [HL_LEVEL_CODES.DEPENDENT]: HL_LEVEL_CODES.SUBSCRIBER,\n});\n\n/**\n * Extract a typed {@link X12_837Submission} from an 837 transaction set.\n * Pure function — no I/O, no global state. Returns `undefined` when the\n * input transaction's ST-01 is not `\"837\"` (mis-routed call); every other\n * deviation is recoverable and surfaces on `submission.warnings`.\n *\n * @example\n * ```ts\n * import { parseX12, get837Claims } from \"@cosyte/x12\";\n * const ix = parseX12(raw);\n * for (const group of ix.groups) {\n * for (const tx of group.transactions) {\n * if (tx.st.elements[1] !== \"837\") continue;\n * const sub = get837Claims(ix.delimiters, tx);\n * sub?.variant; // \"P\" / \"I\" / \"D\" / \"unknown\"\n * for (const claim of sub?.claims ?? []) {\n * claim.totalCharge.toString();\n * claim.diagnoses[0]?.codeSystem; // \"ICD-10-CM\"\n * }\n * }\n * }\n * ```\n */\nexport function get837Claims(\n delimiters: Delimiters,\n tx: X12TransactionSet,\n opts?: { readonly type?: \"P\" | \"I\" | \"D\" },\n): X12_837Submission | undefined {\n if (tx.st.elements[1] !== \"837\") return undefined;\n\n const warnings: X12ParseWarning[] = [];\n const body = tx.se === undefined ? tx.segments.slice(1) : tx.segments.slice(1, -1);\n\n // Variant detection — ST-03 first, then SVx fallback, then unknown.\n const implementationConventionReference = tx.st.elements[3];\n const explicitType: X12Claim837Variant | undefined = opts?.type;\n const variantFromIcr =\n implementationConventionReference !== undefined && implementationConventionReference !== \"\"\n ? VARIANT_BY_ICR[implementationConventionReference]\n : undefined;\n let variantFromSegment: X12Claim837Variant | undefined;\n for (const seg of body) {\n const fromSv = VARIANT_BY_SV_SEGMENT[seg.id];\n if (fromSv !== undefined) {\n variantFromSegment = fromSv;\n break;\n }\n }\n const variant: X12Claim837Variant =\n explicitType ?? variantFromIcr ?? variantFromSegment ?? \"unknown\";\n\n if (variant === \"unknown\") {\n warnings.push(\n unknown837Variant(\n { segmentIndex: 1, transactionIndex: 0 },\n implementationConventionReference,\n ),\n );\n }\n\n // Hierarchy + entity accumulators.\n const hierarchies: X12HierarchicalLevel[] = [];\n const hlIndex: Map<string, X12HierarchicalLevel> = new Map();\n let currentBillingHl: X12HierarchicalLevel | undefined;\n let currentSubscriberHl: X12HierarchicalLevel | undefined;\n let currentPatientHl: X12HierarchicalLevel | undefined;\n\n let submitter: X12ClaimEntity | undefined;\n let receiver: X12ClaimEntity | undefined;\n let billingProvider: X12ClaimEntity | undefined;\n let payToAddress: X12ClaimAddress | undefined;\n let payToPlan: X12ClaimEntity | undefined;\n let currentSubscriberMember: X12ClaimMember | undefined;\n let currentPayer: X12ClaimEntity | undefined;\n let currentPatientMember: X12ClaimMember | undefined;\n let pendingSubscriberInfo: X12SubscriberInfo = EMPTY_SUBSCRIBER_INFO;\n let pendingPatientInfo: X12SubscriberInfo = EMPTY_SUBSCRIBER_INFO;\n\n const claims: X12Claim[] = [];\n let currentClaim: ClaimAccumulator | undefined;\n let currentServiceLine: ServiceLineAccumulator | undefined;\n let currentOtherSubscriber: OtherSubscriberAccumulator | undefined;\n let currentAdjudication: AdjudicationAccumulator | undefined;\n let context: WalkerContext = { kind: \"header\" };\n\n /** Active entity for trailing N3/N4/REF/PER attachment. @internal */\n let activeEntity: ActiveEntity | undefined;\n\n const flushAdjudication = (): void => {\n if (currentAdjudication !== undefined && currentServiceLine !== undefined) {\n currentServiceLine.adjudications.push(freezeAdjudication(currentAdjudication));\n }\n currentAdjudication = undefined;\n };\n\n const flushServiceLine = (): void => {\n flushAdjudication();\n if (currentServiceLine !== undefined && currentClaim !== undefined) {\n currentClaim.serviceLines.push(freezeServiceLine(currentServiceLine));\n }\n currentServiceLine = undefined;\n };\n\n const flushOtherSubscriber = (): void => {\n if (currentOtherSubscriber !== undefined && currentClaim !== undefined) {\n currentClaim.otherSubscribers.push(freezeOtherSubscriber(currentOtherSubscriber));\n }\n currentOtherSubscriber = undefined;\n };\n\n const flushClaim = (): void => {\n flushServiceLine();\n flushOtherSubscriber();\n if (currentClaim !== undefined) {\n claims.push(freezeClaim(currentClaim));\n }\n currentClaim = undefined;\n };\n\n // Hoisted once — every N3/N4/PER/REF call shares the same mutator bag,\n // closing over the outer `let` bindings. Keeping the bag out of the loop\n // avoids re-allocating a dozen arrow functions per body segment and\n // collapses the long tail of branch-coverage \"dead arrows\" that would\n // otherwise appear (each per-iteration bag had ~12 setters, only one\n // of which fired per segment).\n const entityMutators: EntityMutators = {\n setBillingProvider: (next) => {\n billingProvider = next;\n },\n setSubmitter: (next) => {\n submitter = next;\n },\n setReceiver: (next) => {\n receiver = next;\n },\n setPayToPlan: (next) => {\n payToPlan = next;\n },\n // Setters for `subscriber` / `patient` route through `withCurrent`,\n // which short-circuits when the current value is undefined — so the\n // cast inside the spread is sound. Setters for `otherSubscriber` /\n // `otherPayer` are only reached after an SBR in Loop 2320 opened\n // `currentOtherSubscriber`, and the `activeEntity.kind` discriminator\n // can only flip to those values from that same code path.\n setSubscriber: (next) => {\n currentSubscriberMember = {\n ...(currentSubscriberMember as X12ClaimMember),\n entity: next,\n };\n },\n setPayer: (next) => {\n currentPayer = next;\n },\n setPatient: (next) => {\n currentPatientMember = { ...(currentPatientMember as X12ClaimMember), entity: next };\n },\n setPayToAddress: (next) => {\n payToAddress = next;\n },\n setOtherSubscriber: (next) => {\n (currentOtherSubscriber as OtherSubscriberAccumulator).otherSubscriber = next;\n },\n setOtherPayer: (next) => {\n (currentOtherSubscriber as OtherSubscriberAccumulator).otherPayer = next;\n },\n getCurrentBillingProvider: () => billingProvider,\n getCurrentSubmitter: () => submitter,\n getCurrentReceiver: () => receiver,\n getCurrentPayToPlan: () => payToPlan,\n getCurrentSubscriber: () => currentSubscriberMember?.entity,\n getCurrentPayer: () => currentPayer,\n getCurrentPatient: () => currentPatientMember?.entity,\n getCurrentPayToAddress: () => payToAddress,\n getCurrentOtherSubscriber: () => currentOtherSubscriber?.otherSubscriber,\n getCurrentOtherPayer: () => currentOtherSubscriber?.otherPayer,\n };\n\n for (let i = 0; i < body.length; i += 1) {\n const seg = body[i];\n if (seg === undefined) continue;\n const position: X12Position = { segmentIndex: i + 1, transactionIndex: 0 };\n switch (seg.id) {\n case \"HL\": {\n // Hierarchy boundary — flush any in-flight claim/line.\n flushClaim();\n const hl = decodeHl(seg, delimiters);\n hierarchies.push(hl);\n validateHl(hl, hlIndex, position, warnings);\n hlIndex.set(hl.hlId, hl);\n if (hl.levelCode === HL_LEVEL_CODES.INFORMATION_SOURCE) {\n currentBillingHl = hl;\n currentSubscriberHl = undefined;\n currentPatientHl = undefined;\n // Entering a new billing provider — reset billing-only state but\n // hold submitter/receiver (header scope) across HLs.\n billingProvider = undefined;\n payToAddress = undefined;\n payToPlan = undefined;\n context = { kind: \"loop2000A\" };\n } else if (hl.levelCode === HL_LEVEL_CODES.SUBSCRIBER) {\n currentSubscriberHl = hl;\n currentPatientHl = undefined;\n currentSubscriberMember = undefined;\n currentPayer = undefined;\n currentPatientMember = undefined;\n pendingSubscriberInfo = EMPTY_SUBSCRIBER_INFO;\n context = { kind: \"loop2000B\" };\n } else if (hl.levelCode === HL_LEVEL_CODES.DEPENDENT) {\n currentPatientHl = hl;\n currentPatientMember = undefined;\n pendingPatientInfo = EMPTY_SUBSCRIBER_INFO;\n context = { kind: \"loop2000C\" };\n } else {\n context = { kind: \"header\" };\n }\n activeEntity = undefined;\n break;\n }\n case \"SBR\": {\n const info = decodeSbr(seg, delimiters);\n if (context.kind === \"loop2000B\") {\n pendingSubscriberInfo = info;\n } else if (currentClaim !== undefined) {\n // Loop 2320 — other subscriber. Open accumulator; payer follows\n // via NM1*IL / NM1*PR.\n flushOtherSubscriber();\n currentOtherSubscriber = {\n payerResponsibilityCode: info.payerResponsibilityCode ?? \"\",\n individualRelationshipCode: info.individualRelationshipCode,\n claimFilingIndicator: info.claimFilingIndicator,\n otherSubscriber: undefined,\n otherPayer: undefined,\n };\n activeEntity = { kind: \"otherSubscriber\" };\n }\n break;\n }\n case \"PAT\": {\n const info = decodePat(seg, delimiters);\n if (context.kind === \"loop2000C\") {\n pendingPatientInfo = info;\n } else if (context.kind === \"loop2000B\") {\n // PAT may also appear in subscriber HL when patient = subscriber\n // (relationship code carries the assertion).\n pendingSubscriberInfo = mergeSubscriberInfo(pendingSubscriberInfo, info);\n }\n break;\n }\n case \"NM1\": {\n const qualifier = elementValue(seg, 1, delimiters);\n const entity = decodeNm1(seg, delimiters);\n // Route the NM1 by qualifier + context.\n if (qualifier === NM1_QUALIFIERS.SUBMITTER) {\n submitter = entity;\n activeEntity = { kind: \"submitter\" };\n } else if (qualifier === NM1_QUALIFIERS.RECEIVER) {\n receiver = entity;\n activeEntity = { kind: \"receiver\" };\n } else if (qualifier === NM1_QUALIFIERS.BILLING_PROVIDER && context.kind === \"loop2000A\") {\n billingProvider = entity;\n activeEntity = { kind: \"billingProvider\" };\n } else if (qualifier === NM1_QUALIFIERS.PAY_TO_ADDRESS && context.kind === \"loop2000A\") {\n // The 005010 X222A2/X223A3/X224A2 specs use NM1*87 only for the\n // pay-to ADDRESS; the name is preserved on tx.segments but not\n // re-surfaced as a separate entity until a real consumer asks.\n activeEntity = { kind: \"payToAddress\" };\n } else if (\n qualifier === NM1_QUALIFIERS.PAY_TO_PLAN &&\n context.kind === \"loop2000A\" &&\n variant === \"I\"\n ) {\n payToPlan = entity;\n activeEntity = { kind: \"payToPlan\" };\n } else if (qualifier === NM1_QUALIFIERS.SUBSCRIBER && context.kind === \"loop2000B\") {\n currentSubscriberMember = { entity, info: pendingSubscriberInfo };\n activeEntity = { kind: \"subscriber\" };\n } else if (qualifier === NM1_QUALIFIERS.PAYER && context.kind === \"loop2000B\") {\n currentPayer = entity;\n activeEntity = { kind: \"payer\" };\n } else if (qualifier === NM1_QUALIFIERS.PATIENT && context.kind === \"loop2000C\") {\n currentPatientMember = { entity, info: pendingPatientInfo };\n activeEntity = { kind: \"patient\" };\n } else if (\n currentOtherSubscriber !== undefined &&\n (qualifier === NM1_QUALIFIERS.SUBSCRIBER || qualifier === NM1_QUALIFIERS.PATIENT)\n ) {\n currentOtherSubscriber.otherSubscriber = entity;\n activeEntity = { kind: \"otherSubscriber\" };\n } else if (currentOtherSubscriber !== undefined && qualifier === NM1_QUALIFIERS.PAYER) {\n currentOtherSubscriber.otherPayer = entity;\n activeEntity = { kind: \"otherPayer\" };\n } else if (currentClaim !== undefined) {\n // Loop 2310x — provider role at claim level (rendering /\n // referring / supervising / service facility / attending /\n // operating / other operating, etc.). Surface on\n // claim.providers verbatim; the qualifier discriminates the\n // role for the consumer.\n if (currentServiceLine !== undefined) {\n currentServiceLine.providers.push(entity);\n } else {\n currentClaim.providers.push(entity);\n }\n activeEntity = { kind: \"lineProvider\" };\n } else {\n activeEntity = undefined;\n }\n break;\n }\n case \"N3\": {\n const lines = collectElementValues(seg, 1, 2, delimiters);\n attachAddressLines(lines, activeEntity, entityMutators);\n break;\n }\n case \"N4\": {\n const partial = decodeN4(seg, delimiters);\n attachAddressFields(partial, activeEntity, entityMutators);\n break;\n }\n case \"PER\": {\n const contact = decodePer(seg, delimiters);\n attachContact(contact, activeEntity, entityMutators);\n break;\n }\n case \"REF\": {\n const ref = decodeRef(seg, delimiters);\n if (currentAdjudication !== undefined) break;\n if (currentServiceLine !== undefined) {\n currentServiceLine.references.push(ref);\n } else if (currentClaim !== undefined) {\n currentClaim.references.push(ref);\n } else {\n attachReference(ref, activeEntity, entityMutators);\n }\n break;\n }\n case \"CLM\": {\n flushClaim();\n if (\n currentBillingHl === undefined ||\n currentSubscriberHl === undefined ||\n currentSubscriberMember === undefined ||\n currentPayer === undefined\n ) {\n // A claim with no enclosing hierarchy is structurally\n // illegal — flag with X12_MISSING_REQUIRED_LOOP. The walker\n // still attempts to extract the claim header.\n if (currentBillingHl === undefined) {\n warnings.push(\n missingRequiredLoop(position, \"2000A\", \"no Billing Provider HL precedes the CLM\"),\n );\n }\n if (currentSubscriberHl === undefined) {\n warnings.push(\n missingRequiredLoop(position, \"2000B\", \"no Subscriber HL precedes the CLM\"),\n );\n }\n if (currentSubscriberMember === undefined && currentSubscriberHl !== undefined) {\n warnings.push(\n missingRequiredLoop(\n position,\n \"2010BA\",\n \"no Subscriber Name follows the Subscriber HL\",\n ),\n );\n }\n if (currentPayer === undefined && currentSubscriberHl !== undefined) {\n warnings.push(\n missingRequiredLoop(position, \"2010BB\", \"no Payer Name follows the Subscriber HL\"),\n );\n }\n }\n currentClaim = openClaim(seg, delimiters, {\n variant,\n hierarchy: currentPatientHl ?? currentSubscriberHl,\n billingProvider,\n payToAddress,\n payToPlan,\n subscriber: currentSubscriberMember,\n payer: currentPayer,\n patient: currentPatientMember,\n });\n activeEntity = undefined;\n context = { kind: \"loop2300\" };\n break;\n }\n case \"DTP\": {\n const date = decodeDtp(seg, delimiters);\n if (date === undefined) break;\n if (currentAdjudication !== undefined) {\n if (date.qualifier === \"573\") currentAdjudication.dateAdjudicated = date.value;\n } else if (currentServiceLine !== undefined) {\n currentServiceLine.dates.push(date);\n } else if (currentClaim !== undefined) {\n currentClaim.dates.push(date);\n }\n break;\n }\n case \"HI\": {\n if (currentClaim === undefined) break;\n const codes = decodeHi(seg, delimiters, warnings, position);\n for (const code of codes) {\n if (isDiagnosisQualifier(code.qualifier)) {\n currentClaim.diagnoses.push(code);\n } else if (isProcedureQualifier(code.qualifier)) {\n currentClaim.procedures.push(code);\n } else {\n currentClaim.otherHi.push(code);\n }\n }\n break;\n }\n case \"NTE\": {\n const note = decodeNte(seg, delimiters);\n if (note === undefined) break;\n if (currentServiceLine !== undefined) currentServiceLine.notes.push(note);\n else if (currentClaim !== undefined) currentClaim.notes.push(note);\n break;\n }\n case \"AMT\": {\n const amount = decodeAmt(seg, delimiters);\n if (amount === undefined) break;\n if (currentAdjudication !== undefined) break;\n if (currentServiceLine !== undefined) currentServiceLine.amounts.push(amount);\n else if (currentClaim !== undefined) currentClaim.amounts.push(amount);\n break;\n }\n case \"LX\": {\n flushServiceLine();\n if (currentClaim === undefined) break;\n currentServiceLine = openServiceLine(seg, delimiters, currentClaim.variant);\n activeEntity = undefined;\n context = { kind: \"loop2400\" };\n break;\n }\n case \"SV1\": {\n if (currentServiceLine !== undefined) decodeSv1(currentServiceLine, seg, delimiters);\n break;\n }\n case \"SV2\": {\n if (currentServiceLine !== undefined) decodeSv2(currentServiceLine, seg, delimiters);\n break;\n }\n case \"SV3\": {\n if (currentServiceLine !== undefined) decodeSv3(currentServiceLine, seg, delimiters);\n break;\n }\n case \"TOO\": {\n if (currentServiceLine !== undefined && currentServiceLine.variant === \"D\") {\n const tooth = decodeTooth(seg, delimiters);\n if (tooth !== undefined) currentServiceLine.toothInformation.push(tooth);\n }\n break;\n }\n case \"LIN\": {\n if (currentServiceLine === undefined || currentServiceLine.variant !== \"P\") break;\n currentServiceLine.drug = {\n qualifier: elementValue(seg, 2, delimiters),\n code: elementValue(seg, 3, delimiters),\n quantity: undefined,\n unitOfMeasure: undefined,\n };\n break;\n }\n case \"CTP\": {\n if (\n currentServiceLine === undefined ||\n currentServiceLine.variant !== \"P\" ||\n currentServiceLine.drug === undefined\n ) {\n break;\n }\n currentServiceLine.drug = {\n ...currentServiceLine.drug,\n quantity: elementDecimal(seg, 4, delimiters),\n unitOfMeasure: componentOptional(seg, 5, 1, delimiters),\n };\n break;\n }\n case \"SVD\": {\n flushAdjudication();\n if (currentServiceLine === undefined) break;\n currentAdjudication = openAdjudication(seg, delimiters);\n break;\n }\n case \"CAS\": {\n if (currentAdjudication !== undefined) {\n for (const a of decodeCas(seg, delimiters, warnings, position)) {\n currentAdjudication.adjustments.push(a);\n }\n }\n break;\n }\n case \"SE\": {\n break;\n }\n default: {\n // Anything else (PWK, CN1, K3, CR1/CR2, HCP, FRM, MEA, PRV, DMG,\n // OI, MOA, …) is preserved on tx.segments verbatim; the typed v1\n // surface does not enumerate every optional segment.\n break;\n }\n }\n }\n\n flushClaim();\n\n return Object.freeze({\n variant,\n implementationConventionReference,\n submitter,\n receiver,\n hierarchies: Object.freeze(hierarchies.slice()),\n claims: Object.freeze(claims.slice()),\n warnings: Object.freeze(warnings.slice()),\n });\n}\n\n// ---------------------------------------------------------------------------\n// Walker context + active-entity routing types.\n// ---------------------------------------------------------------------------\n\ntype WalkerContext =\n | { readonly kind: \"header\" }\n | { readonly kind: \"loop2000A\" }\n | { readonly kind: \"loop2000B\" }\n | { readonly kind: \"loop2000C\" }\n | { readonly kind: \"loop2300\" }\n | { readonly kind: \"loop2400\" };\n\ntype ActiveEntity =\n | { readonly kind: \"submitter\" }\n | { readonly kind: \"receiver\" }\n | { readonly kind: \"billingProvider\" }\n | { readonly kind: \"payToAddress\" }\n | { readonly kind: \"payToPlan\" }\n | { readonly kind: \"subscriber\" }\n | { readonly kind: \"payer\" }\n | { readonly kind: \"patient\" }\n | { readonly kind: \"otherSubscriber\" }\n | { readonly kind: \"otherPayer\" }\n | { readonly kind: \"lineProvider\" };\n\n// ---------------------------------------------------------------------------\n// Segment decoders. Element reads use the shared `elementValue` /\n// `elementOptional` / `componentOptional` / `elementDecimal[OrZero]` /\n// `collectElementValues` helpers from `parser/segment.ts`.\n// ---------------------------------------------------------------------------\n\nfunction decodeHl(seg: X12Segment, delimiters: Delimiters): X12HierarchicalLevel {\n return Object.freeze({\n hlId: elementValue(seg, 1, delimiters),\n parentHlId: elementOptional(seg, 2, delimiters),\n levelCode: elementValue(seg, 3, delimiters),\n hasChild: elementValue(seg, 4, delimiters),\n });\n}\n\nfunction validateHl(\n hl: X12HierarchicalLevel,\n index: Map<string, X12HierarchicalLevel>,\n position: X12Position,\n warnings: X12ParseWarning[],\n): void {\n const expectedParent: string | undefined = EXPECTED_PARENT_LEVEL[hl.levelCode];\n if (expectedParent === undefined) {\n // Top-level (info-source) or unknown level — only parent-mismatch\n // check applies (parent must be absent for \"20\"; an unknown level is\n // surfaced verbatim, no synthesized expectation).\n if (hl.levelCode === HL_LEVEL_CODES.INFORMATION_SOURCE && hl.parentHlId !== undefined) {\n warnings.push(hlParentMismatch(position, hl.hlId, hl.parentHlId));\n }\n return;\n }\n if (hl.parentHlId === undefined) {\n warnings.push(hlParentMismatch(position, hl.hlId, \"\"));\n return;\n }\n const parent = index.get(hl.parentHlId);\n if (parent === undefined) {\n warnings.push(hlParentMismatch(position, hl.hlId, hl.parentHlId));\n return;\n }\n if (parent.levelCode !== expectedParent) {\n warnings.push(\n hlParentLevelInvalid(\n position,\n hl.hlId,\n hl.levelCode,\n parent.hlId,\n parent.levelCode,\n expectedParent,\n ),\n );\n }\n}\n\nfunction decodeSbr(seg: X12Segment, delimiters: Delimiters): X12SubscriberInfo {\n return Object.freeze({\n payerResponsibilityCode: elementOptional(seg, 1, delimiters),\n individualRelationshipCode: elementOptional(seg, 2, delimiters),\n groupNumber: elementOptional(seg, 3, delimiters),\n groupName: elementOptional(seg, 4, delimiters),\n claimFilingIndicator: elementOptional(seg, 9, delimiters),\n });\n}\n\nfunction decodePat(seg: X12Segment, delimiters: Delimiters): X12SubscriberInfo {\n return Object.freeze({\n payerResponsibilityCode: undefined,\n individualRelationshipCode: elementOptional(seg, 1, delimiters),\n groupNumber: undefined,\n groupName: undefined,\n claimFilingIndicator: undefined,\n });\n}\n\nfunction mergeSubscriberInfo(base: X12SubscriberInfo, next: X12SubscriberInfo): X12SubscriberInfo {\n return Object.freeze({\n payerResponsibilityCode: next.payerResponsibilityCode ?? base.payerResponsibilityCode,\n individualRelationshipCode: next.individualRelationshipCode ?? base.individualRelationshipCode,\n groupNumber: next.groupNumber ?? base.groupNumber,\n groupName: next.groupName ?? base.groupName,\n claimFilingIndicator: next.claimFilingIndicator ?? base.claimFilingIndicator,\n });\n}\n\nfunction decodeNm1(seg: X12Segment, delimiters: Delimiters): X12ClaimEntity {\n return Object.freeze({\n entityIdentifierCode: elementValue(seg, 1, delimiters),\n entityTypeQualifier: elementValue(seg, 2, delimiters),\n name: elementValue(seg, 3, delimiters),\n firstName: elementOptional(seg, 4, delimiters),\n middleName: elementOptional(seg, 5, delimiters),\n suffix: elementOptional(seg, 7, delimiters),\n idQualifier: elementOptional(seg, 8, delimiters),\n idCode: elementOptional(seg, 9, delimiters),\n address: undefined,\n contacts: Object.freeze([]),\n references: Object.freeze([]),\n });\n}\n\nfunction decodeN4(seg: X12Segment, delimiters: Delimiters): X12ClaimAddress {\n return Object.freeze({\n lines: Object.freeze([]),\n city: elementOptional(seg, 1, delimiters),\n state: elementOptional(seg, 2, delimiters),\n postalCode: elementOptional(seg, 3, delimiters),\n countryCode: elementOptional(seg, 4, delimiters),\n });\n}\n\nfunction decodeRef(seg: X12Segment, delimiters: Delimiters): X12ClaimReference {\n return Object.freeze({\n qualifier: elementValue(seg, 1, delimiters),\n value: elementValue(seg, 2, delimiters),\n description: elementOptional(seg, 3, delimiters),\n });\n}\n\nfunction decodePer(seg: X12Segment, delimiters: Delimiters): X12ClaimContact {\n const comms: { qualifier: string; value: string }[] = [];\n for (const [qIdx, vIdx] of [\n [3, 4],\n [5, 6],\n [7, 8],\n ] as const) {\n const q = elementOptional(seg, qIdx, delimiters);\n const v = elementOptional(seg, vIdx, delimiters);\n if (q !== undefined && v !== undefined) comms.push(Object.freeze({ qualifier: q, value: v }));\n }\n return Object.freeze({\n contactFunctionCode: elementValue(seg, 1, delimiters),\n name: elementOptional(seg, 2, delimiters),\n communications: Object.freeze(comms),\n });\n}\n\nfunction decodeDtp(seg: X12Segment, delimiters: Delimiters): X12ClaimDate | undefined {\n const qualifier = elementOptional(seg, 1, delimiters);\n const formatQualifier = elementValue(seg, 2, delimiters);\n const value = elementOptional(seg, 3, delimiters);\n if (qualifier === undefined || value === undefined) return undefined;\n return Object.freeze({ qualifier, formatQualifier, value });\n}\n\nfunction decodeHi(\n seg: X12Segment,\n delimiters: Delimiters,\n warnings: X12ParseWarning[],\n position: X12Position,\n): X12ClaimHiCode[] {\n const out: X12ClaimHiCode[] = [];\n for (let comp = 1; comp <= 12; comp += 1) {\n const qualifier = componentOptional(seg, comp, 1, delimiters);\n const code = componentOptional(seg, comp, 2, delimiters);\n if (qualifier === undefined && code === undefined) continue;\n const dateQualifier = componentOptional(seg, comp, 3, delimiters);\n const date = componentOptional(seg, comp, 4, delimiters);\n const monetary = componentOptional(seg, comp, 5, delimiters);\n const quantity = componentOptional(seg, comp, 6, delimiters);\n const versionId = componentOptional(seg, comp, 7, delimiters);\n const poaIndicator = componentOptional(seg, comp, 9, delimiters);\n const resolved = qualifier === undefined ? undefined : resolveHiQualifier(qualifier);\n const codeSystem: X12HiCodeSystem = resolved?.system ?? \"unknown\";\n const category: X12HiCategory = resolved?.category ?? \"unknown\";\n if (qualifier !== undefined && resolved === undefined) {\n warnings.push(unknownHiQualifier(position, qualifier));\n }\n out.push(\n Object.freeze({\n qualifier: qualifier ?? \"\",\n codeSystem,\n category,\n code: code ?? \"\",\n dateQualifier,\n date,\n monetaryAmount: monetary === undefined ? undefined : X12Decimal.fromString(monetary),\n quantity: quantity === undefined ? undefined : X12Decimal.fromString(quantity),\n versionId,\n poaIndicator,\n }),\n );\n }\n return out;\n}\n\nfunction decodeNte(seg: X12Segment, delimiters: Delimiters): X12ClaimNote | undefined {\n const note = elementOptional(seg, 2, delimiters);\n if (note === undefined) return undefined;\n return Object.freeze({\n noteReferenceCode: elementValue(seg, 1, delimiters),\n description: note,\n });\n}\n\nfunction decodeAmt(seg: X12Segment, delimiters: Delimiters): X12ClaimAmount | undefined {\n const amount = elementDecimal(seg, 2, delimiters);\n if (amount === undefined) return undefined;\n return Object.freeze({ qualifier: elementValue(seg, 1, delimiters), amount });\n}\n\nfunction decodeCas(\n seg: X12Segment,\n delimiters: Delimiters,\n warnings: X12ParseWarning[],\n position: X12Position,\n): readonly X12RemitAdjustment[] {\n const groupCode = elementValue(seg, 1, delimiters);\n const out: X12RemitAdjustment[] = [];\n for (let triple = 0; triple < 6; triple += 1) {\n const base = 2 + triple * 3;\n const reasonCode = elementOptional(seg, base, delimiters);\n const amount = elementDecimal(seg, base + 1, delimiters);\n const quantity = elementDecimal(seg, base + 2, delimiters);\n if (reasonCode === undefined && amount === undefined) continue;\n const code = reasonCode ?? \"\";\n const entry = code === \"\" ? undefined : lookupCarc(code);\n if (entry === undefined && code !== \"\") warnings.push(unknownCarc(position, code));\n out.push(\n Object.freeze({\n groupCode,\n reasonCode: code,\n reasonDescription: entry?.description,\n amount: amount ?? X12Decimal.ZERO,\n quantity,\n }),\n );\n }\n return out;\n}\n\nfunction decodeTooth(seg: X12Segment, delimiters: Delimiters): X12ToothInformation | undefined {\n const qualifier = elementValue(seg, 1, delimiters);\n const toothCode = elementValue(seg, 2, delimiters);\n if (toothCode === \"\") return undefined;\n const surfaces: string[] = [];\n for (let p = 1; p <= 5; p += 1) {\n const s = componentOptional(seg, 3, p, delimiters);\n if (s !== undefined) surfaces.push(s);\n }\n return Object.freeze({ qualifier, toothCode, surfaces: Object.freeze(surfaces) });\n}\n\n// ---------------------------------------------------------------------------\n// Claim / service-line accumulators.\n// ---------------------------------------------------------------------------\n\ninterface ClaimAccumulator {\n readonly variant: X12Claim837Variant;\n readonly hierarchy: X12HierarchicalLevel | undefined;\n readonly billingProvider: X12ClaimEntity | undefined;\n readonly payToAddress: X12ClaimAddress | undefined;\n readonly payToPlan: X12ClaimEntity | undefined;\n readonly subscriber: X12ClaimMember | undefined;\n readonly payer: X12ClaimEntity | undefined;\n readonly patient: X12ClaimMember | undefined;\n readonly claimId: string;\n readonly totalCharge: X12Decimal;\n readonly placeOfServiceCode: string | undefined;\n readonly facilityCodeQualifier: string | undefined;\n readonly claimFrequencyCode: string | undefined;\n readonly providerSignatureOnFile: string | undefined;\n readonly providerAcceptAssignment: string | undefined;\n readonly benefitsAssignment: string | undefined;\n readonly releaseOfInformationCode: string | undefined;\n readonly dates: X12ClaimDate[];\n readonly diagnoses: X12ClaimHiCode[];\n readonly procedures: X12ClaimHiCode[];\n readonly otherHi: X12ClaimHiCode[];\n readonly notes: X12ClaimNote[];\n readonly amounts: X12ClaimAmount[];\n readonly references: X12ClaimReference[];\n readonly providers: X12ClaimEntity[];\n readonly otherSubscribers: X12OtherSubscriber[];\n readonly serviceLines: X12_837ServiceLine[];\n}\n\ntype ServiceLineAccumulator =\n | ServiceLinePAccumulator\n | ServiceLineIAccumulator\n | ServiceLineDAccumulator;\n\ninterface ServiceLineBaseAccumulator {\n readonly lineNumber: string;\n charge: X12Decimal;\n units: X12Decimal;\n unitOfMeasure: string | undefined;\n placeOfServiceCode: string | undefined;\n readonly dates: X12ClaimDate[];\n readonly references: X12ClaimReference[];\n readonly amounts: X12ClaimAmount[];\n readonly notes: X12ClaimNote[];\n readonly providers: X12ClaimEntity[];\n drug: X12LineDrug | undefined;\n readonly adjudications: X12LineAdjudication[];\n}\n\ninterface ServiceLinePAccumulator extends ServiceLineBaseAccumulator {\n readonly variant: \"P\";\n procedureQualifier: string;\n procedureCode: string;\n modifiers: string[];\n diagnosisPointers: string[];\n emergencyIndicator: string | undefined;\n epsdtIndicator: string | undefined;\n familyPlanningIndicator: string | undefined;\n}\n\ninterface ServiceLineIAccumulator extends ServiceLineBaseAccumulator {\n readonly variant: \"I\";\n revenueCode: string;\n procedureQualifier: string | undefined;\n procedureCode: string | undefined;\n modifiers: string[];\n serviceLineRate: X12Decimal | undefined;\n nonCoveredCharge: X12Decimal | undefined;\n}\n\ninterface ServiceLineDAccumulator extends ServiceLineBaseAccumulator {\n readonly variant: \"D\";\n procedureQualifier: string;\n procedureCode: string;\n modifiers: string[];\n oralCavityArea: string[];\n toothInformation: X12ToothInformation[];\n prosthesisCrownInlayCode: string | undefined;\n}\n\ninterface OtherSubscriberAccumulator {\n readonly payerResponsibilityCode: string;\n readonly individualRelationshipCode: string | undefined;\n readonly claimFilingIndicator: string | undefined;\n otherSubscriber: X12ClaimEntity | undefined;\n otherPayer: X12ClaimEntity | undefined;\n}\n\ninterface AdjudicationAccumulator {\n readonly otherPayerId: string;\n readonly amountPaid: X12Decimal;\n readonly procedureQualifier: string | undefined;\n readonly procedureCode: string | undefined;\n readonly paidUnits: X12Decimal | undefined;\n readonly adjustments: X12RemitAdjustment[];\n dateAdjudicated: string | undefined;\n}\n\nconst EMPTY_SUBSCRIBER_INFO: X12SubscriberInfo = Object.freeze({\n payerResponsibilityCode: undefined,\n individualRelationshipCode: undefined,\n groupNumber: undefined,\n groupName: undefined,\n claimFilingIndicator: undefined,\n});\n\n/**\n * The HL-resolved enclosing context the walker hands to {@link openClaim}\n * when a CLM segment opens a Loop 2300. Bundled so adding another piece\n * of context (e.g. Phase 9's profile reference) doesn't grow the\n * function signature. @internal\n */\ninterface ClaimContext {\n readonly variant: X12Claim837Variant;\n readonly hierarchy: X12HierarchicalLevel | undefined;\n readonly billingProvider: X12ClaimEntity | undefined;\n readonly payToAddress: X12ClaimAddress | undefined;\n readonly payToPlan: X12ClaimEntity | undefined;\n readonly subscriber: X12ClaimMember | undefined;\n readonly payer: X12ClaimEntity | undefined;\n readonly patient: X12ClaimMember | undefined;\n}\n\n/** Open a fresh CLM accumulator. @internal */\nfunction openClaim(seg: X12Segment, delimiters: Delimiters, ctx: ClaimContext): ClaimAccumulator {\n const {\n variant,\n hierarchy,\n billingProvider,\n payToAddress,\n payToPlan,\n subscriber,\n payer,\n patient,\n } = ctx;\n return {\n variant,\n hierarchy,\n billingProvider,\n payToAddress,\n payToPlan,\n subscriber,\n payer,\n patient,\n claimId: elementValue(seg, 1, delimiters),\n totalCharge: elementDecimalOrZero(seg, 2, delimiters),\n placeOfServiceCode: componentOptional(seg, 5, 1, delimiters),\n facilityCodeQualifier: componentOptional(seg, 5, 2, delimiters),\n claimFrequencyCode: componentOptional(seg, 5, 3, delimiters),\n providerSignatureOnFile: elementOptional(seg, 6, delimiters),\n providerAcceptAssignment: elementOptional(seg, 7, delimiters),\n benefitsAssignment: elementOptional(seg, 8, delimiters),\n releaseOfInformationCode: elementOptional(seg, 9, delimiters),\n dates: [],\n diagnoses: [],\n procedures: [],\n otherHi: [],\n notes: [],\n amounts: [],\n references: [],\n providers: [],\n otherSubscribers: [],\n serviceLines: [],\n };\n}\n\nfunction openServiceLine(\n seg: X12Segment,\n delimiters: Delimiters,\n variant: X12Claim837Variant,\n): ServiceLineAccumulator | undefined {\n const lineNumber = elementValue(seg, 1, delimiters);\n const base: ServiceLineBaseAccumulator = {\n lineNumber,\n charge: X12Decimal.ZERO,\n units: X12Decimal.ZERO,\n unitOfMeasure: undefined,\n placeOfServiceCode: undefined,\n dates: [],\n references: [],\n amounts: [],\n notes: [],\n providers: [],\n drug: undefined,\n adjudications: [],\n };\n if (variant === \"P\") {\n return {\n ...base,\n variant: \"P\",\n procedureQualifier: \"\",\n procedureCode: \"\",\n modifiers: [],\n diagnosisPointers: [],\n emergencyIndicator: undefined,\n epsdtIndicator: undefined,\n familyPlanningIndicator: undefined,\n };\n }\n if (variant === \"I\") {\n return {\n ...base,\n variant: \"I\",\n revenueCode: \"\",\n procedureQualifier: undefined,\n procedureCode: undefined,\n modifiers: [],\n serviceLineRate: undefined,\n nonCoveredCharge: undefined,\n };\n }\n if (variant === \"D\") {\n return {\n ...base,\n variant: \"D\",\n procedureQualifier: \"\",\n procedureCode: \"\",\n modifiers: [],\n oralCavityArea: [],\n toothInformation: [],\n prosthesisCrownInlayCode: undefined,\n };\n }\n return undefined;\n}\n\nfunction decodeSv1(acc: ServiceLineAccumulator, seg: X12Segment, delimiters: Delimiters): void {\n if (acc.variant !== \"P\") return;\n acc.procedureQualifier = componentOptional(seg, 1, 1, delimiters) ?? \"\";\n acc.procedureCode = componentOptional(seg, 1, 2, delimiters) ?? \"\";\n const mods: string[] = [];\n for (let p = 3; p <= 6; p += 1) {\n const m = componentOptional(seg, 1, p, delimiters);\n if (m !== undefined) mods.push(m);\n }\n acc.modifiers = mods;\n acc.charge = elementDecimalOrZero(seg, 2, delimiters);\n acc.unitOfMeasure = elementOptional(seg, 3, delimiters);\n acc.units = elementDecimalOrZero(seg, 4, delimiters);\n acc.placeOfServiceCode = elementOptional(seg, 5, delimiters);\n const pointers: string[] = [];\n for (let p = 1; p <= 4; p += 1) {\n const v = componentOptional(seg, 7, p, delimiters);\n if (v !== undefined) pointers.push(v);\n }\n acc.diagnosisPointers = pointers;\n acc.emergencyIndicator = elementOptional(seg, 9, delimiters);\n acc.epsdtIndicator = elementOptional(seg, 11, delimiters);\n acc.familyPlanningIndicator = elementOptional(seg, 12, delimiters);\n}\n\nfunction decodeSv2(acc: ServiceLineAccumulator, seg: X12Segment, delimiters: Delimiters): void {\n if (acc.variant !== \"I\") return;\n acc.revenueCode = elementValue(seg, 1, delimiters);\n acc.procedureQualifier = componentOptional(seg, 2, 1, delimiters);\n acc.procedureCode = componentOptional(seg, 2, 2, delimiters);\n const mods: string[] = [];\n for (let p = 3; p <= 6; p += 1) {\n const m = componentOptional(seg, 2, p, delimiters);\n if (m !== undefined) mods.push(m);\n }\n acc.modifiers = mods;\n acc.charge = elementDecimalOrZero(seg, 3, delimiters);\n acc.unitOfMeasure = elementOptional(seg, 4, delimiters);\n acc.units = elementDecimalOrZero(seg, 5, delimiters);\n acc.serviceLineRate = elementDecimal(seg, 6, delimiters);\n acc.nonCoveredCharge = elementDecimal(seg, 7, delimiters);\n}\n\nfunction decodeSv3(acc: ServiceLineAccumulator, seg: X12Segment, delimiters: Delimiters): void {\n if (acc.variant !== \"D\") return;\n acc.procedureQualifier = componentOptional(seg, 1, 1, delimiters) ?? \"\";\n acc.procedureCode = componentOptional(seg, 1, 2, delimiters) ?? \"\";\n const mods: string[] = [];\n for (let p = 3; p <= 6; p += 1) {\n const m = componentOptional(seg, 1, p, delimiters);\n if (m !== undefined) mods.push(m);\n }\n acc.modifiers = mods;\n acc.charge = elementDecimalOrZero(seg, 2, delimiters);\n acc.placeOfServiceCode = elementOptional(seg, 3, delimiters);\n const cavities: string[] = [];\n for (let p = 1; p <= 5; p += 1) {\n const v = componentOptional(seg, 4, p, delimiters);\n if (v !== undefined) cavities.push(v);\n }\n acc.oralCavityArea = cavities;\n acc.prosthesisCrownInlayCode = elementOptional(seg, 5, delimiters);\n acc.units = elementDecimalOrZero(seg, 6, delimiters);\n}\n\nfunction openAdjudication(seg: X12Segment, delimiters: Delimiters): AdjudicationAccumulator {\n return {\n otherPayerId: elementValue(seg, 1, delimiters),\n amountPaid: elementDecimalOrZero(seg, 2, delimiters),\n procedureQualifier: componentOptional(seg, 3, 1, delimiters),\n procedureCode: componentOptional(seg, 3, 2, delimiters),\n paidUnits: elementDecimal(seg, 5, delimiters),\n adjustments: [],\n dateAdjudicated: undefined,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Address / contact / reference attachment helpers.\n//\n// Each helper takes an `ActiveEntity` discriminator plus a small bag of\n// getter/setter callbacks (so the walker can hold the outer-scope `let`\n// bindings without needing a class). Returning early on `undefined`\n// entity keeps the walker code straight-line.\n// ---------------------------------------------------------------------------\n\n/**\n * Single shared mutator bag the walker hoists once at the top of the\n * function body and passes to every {@link attachAddressLines} /\n * {@link attachAddressFields} / {@link attachContact} /\n * {@link attachReference} call. Closes over the outer `let` bindings, so\n * the getters read live values. Reusing a single bag (vs. constructing\n * one per segment) is both cheaper at runtime and produces a smaller\n * branch-coverage surface — see the `entityMutators` declaration in\n * `get837Claims` for the closure rationale.\n *\n * @internal\n */\ninterface EntityMutators {\n setBillingProvider: (next: X12ClaimEntity) => void;\n setSubmitter: (next: X12ClaimEntity) => void;\n setReceiver: (next: X12ClaimEntity) => void;\n setPayToPlan: (next: X12ClaimEntity) => void;\n setSubscriber: (next: X12ClaimEntity) => void;\n setPayer: (next: X12ClaimEntity) => void;\n setPatient: (next: X12ClaimEntity) => void;\n setPayToAddress: (next: X12ClaimAddress) => void;\n setOtherSubscriber: (next: X12ClaimEntity) => void;\n setOtherPayer: (next: X12ClaimEntity) => void;\n getCurrentBillingProvider: () => X12ClaimEntity | undefined;\n getCurrentSubmitter: () => X12ClaimEntity | undefined;\n getCurrentReceiver: () => X12ClaimEntity | undefined;\n getCurrentPayToPlan: () => X12ClaimEntity | undefined;\n getCurrentSubscriber: () => X12ClaimEntity | undefined;\n getCurrentPayer: () => X12ClaimEntity | undefined;\n getCurrentPatient: () => X12ClaimEntity | undefined;\n getCurrentPayToAddress: () => X12ClaimAddress | undefined;\n getCurrentOtherSubscriber: () => X12ClaimEntity | undefined;\n getCurrentOtherPayer: () => X12ClaimEntity | undefined;\n}\n\nfunction attachAddressLines(\n lines: readonly string[],\n entity: ActiveEntity | undefined,\n mut: EntityMutators,\n): void {\n if (entity === undefined) return;\n const apply = (current: X12ClaimEntity): X12ClaimEntity =>\n withAddress(current, withLines(current.address ?? EMPTY_ADDRESS, lines));\n switch (entity.kind) {\n case \"submitter\":\n withCurrent(mut.getCurrentSubmitter(), apply, mut.setSubmitter);\n break;\n case \"receiver\":\n withCurrent(mut.getCurrentReceiver(), apply, mut.setReceiver);\n break;\n case \"billingProvider\":\n withCurrent(mut.getCurrentBillingProvider(), apply, mut.setBillingProvider);\n break;\n case \"payToPlan\":\n withCurrent(mut.getCurrentPayToPlan(), apply, mut.setPayToPlan);\n break;\n case \"subscriber\":\n withCurrent(mut.getCurrentSubscriber(), apply, mut.setSubscriber);\n break;\n case \"payer\":\n withCurrent(mut.getCurrentPayer(), apply, mut.setPayer);\n break;\n case \"patient\":\n withCurrent(mut.getCurrentPatient(), apply, mut.setPatient);\n break;\n case \"payToAddress\": {\n const addr = mut.getCurrentPayToAddress() ?? EMPTY_ADDRESS;\n mut.setPayToAddress(withLines(addr, lines));\n break;\n }\n case \"otherSubscriber\":\n withCurrent(mut.getCurrentOtherSubscriber(), apply, mut.setOtherSubscriber);\n break;\n case \"otherPayer\":\n withCurrent(mut.getCurrentOtherPayer(), apply, mut.setOtherPayer);\n break;\n case \"lineProvider\":\n break;\n }\n}\n\nfunction attachAddressFields(\n fromN4: X12ClaimAddress,\n entity: ActiveEntity | undefined,\n mut: EntityMutators,\n): void {\n if (entity === undefined) return;\n const apply = (current: X12ClaimEntity): X12ClaimEntity =>\n withAddress(current, mergeAddress(current.address ?? EMPTY_ADDRESS, fromN4));\n switch (entity.kind) {\n case \"submitter\":\n withCurrent(mut.getCurrentSubmitter(), apply, mut.setSubmitter);\n break;\n case \"receiver\":\n withCurrent(mut.getCurrentReceiver(), apply, mut.setReceiver);\n break;\n case \"billingProvider\":\n withCurrent(mut.getCurrentBillingProvider(), apply, mut.setBillingProvider);\n break;\n case \"payToPlan\":\n withCurrent(mut.getCurrentPayToPlan(), apply, mut.setPayToPlan);\n break;\n case \"subscriber\":\n withCurrent(mut.getCurrentSubscriber(), apply, mut.setSubscriber);\n break;\n case \"payer\":\n withCurrent(mut.getCurrentPayer(), apply, mut.setPayer);\n break;\n case \"patient\":\n withCurrent(mut.getCurrentPatient(), apply, mut.setPatient);\n break;\n case \"payToAddress\": {\n const addr = mut.getCurrentPayToAddress() ?? EMPTY_ADDRESS;\n mut.setPayToAddress(mergeAddress(addr, fromN4));\n break;\n }\n case \"otherSubscriber\":\n withCurrent(mut.getCurrentOtherSubscriber(), apply, mut.setOtherSubscriber);\n break;\n case \"otherPayer\":\n withCurrent(mut.getCurrentOtherPayer(), apply, mut.setOtherPayer);\n break;\n case \"lineProvider\":\n break;\n }\n}\n\nfunction attachContact(\n contact: X12ClaimContact,\n entity: ActiveEntity | undefined,\n mut: EntityMutators,\n): void {\n if (entity === undefined) return;\n const apply = (current: X12ClaimEntity): X12ClaimEntity => withContact(current, contact);\n switch (entity.kind) {\n case \"submitter\":\n withCurrent(mut.getCurrentSubmitter(), apply, mut.setSubmitter);\n break;\n case \"receiver\":\n withCurrent(mut.getCurrentReceiver(), apply, mut.setReceiver);\n break;\n case \"billingProvider\":\n withCurrent(mut.getCurrentBillingProvider(), apply, mut.setBillingProvider);\n break;\n case \"subscriber\":\n withCurrent(mut.getCurrentSubscriber(), apply, mut.setSubscriber);\n break;\n case \"payer\":\n withCurrent(mut.getCurrentPayer(), apply, mut.setPayer);\n break;\n /* v8 ignore start */\n case \"patient\":\n case \"payToAddress\":\n case \"payToPlan\":\n case \"otherSubscriber\":\n case \"otherPayer\":\n case \"lineProvider\":\n // PER is not surfaced on these entities in Phase 5 — verbatim\n // segment is preserved on tx.segments for callers who need it.\n // (v8-ignored: structurally unreachable in v1; exists for switch\n // exhaustiveness on ActiveEntity.)\n break;\n /* v8 ignore stop */\n }\n}\n\nfunction attachReference(\n ref: X12ClaimReference,\n entity: ActiveEntity | undefined,\n mut: EntityMutators,\n): void {\n if (entity === undefined) return;\n const apply = (current: X12ClaimEntity): X12ClaimEntity => withReference(current, ref);\n switch (entity.kind) {\n case \"submitter\":\n withCurrent(mut.getCurrentSubmitter(), apply, mut.setSubmitter);\n break;\n case \"receiver\":\n withCurrent(mut.getCurrentReceiver(), apply, mut.setReceiver);\n break;\n case \"billingProvider\":\n withCurrent(mut.getCurrentBillingProvider(), apply, mut.setBillingProvider);\n break;\n case \"subscriber\":\n withCurrent(mut.getCurrentSubscriber(), apply, mut.setSubscriber);\n break;\n case \"payer\":\n withCurrent(mut.getCurrentPayer(), apply, mut.setPayer);\n break;\n case \"patient\":\n withCurrent(mut.getCurrentPatient(), apply, mut.setPatient);\n break;\n /* v8 ignore start */\n case \"payToAddress\":\n case \"payToPlan\":\n case \"otherSubscriber\":\n case \"otherPayer\":\n case \"lineProvider\":\n // REF surfaces directly on the in-flight claim / service line\n // before this routing fires; these entity kinds never receive a\n // REF in v1. (v8-ignored: switch-exhaustive defensive cases.)\n break;\n /* v8 ignore stop */\n }\n}\n\nfunction withCurrent<T>(\n current: T | undefined,\n apply: (current: T) => T,\n setter: (next: T) => void,\n): void {\n if (current === undefined) return;\n setter(apply(current));\n}\n\nconst EMPTY_ADDRESS: X12ClaimAddress = Object.freeze({\n lines: Object.freeze([]),\n city: undefined,\n state: undefined,\n postalCode: undefined,\n countryCode: undefined,\n});\n\nfunction withAddress(entity: X12ClaimEntity, address: X12ClaimAddress): X12ClaimEntity {\n return Object.freeze({ ...entity, address });\n}\nfunction withLines(address: X12ClaimAddress, lines: readonly string[]): X12ClaimAddress {\n return Object.freeze({ ...address, lines: Object.freeze([...address.lines, ...lines]) });\n}\nfunction mergeAddress(base: X12ClaimAddress, fromN4: X12ClaimAddress): X12ClaimAddress {\n return Object.freeze({\n lines: base.lines,\n city: fromN4.city ?? base.city,\n state: fromN4.state ?? base.state,\n postalCode: fromN4.postalCode ?? base.postalCode,\n countryCode: fromN4.countryCode ?? base.countryCode,\n });\n}\nfunction withContact(entity: X12ClaimEntity, contact: X12ClaimContact): X12ClaimEntity {\n return Object.freeze({\n ...entity,\n contacts: Object.freeze([...entity.contacts, contact]),\n });\n}\nfunction withReference(entity: X12ClaimEntity, ref: X12ClaimReference): X12ClaimEntity {\n return Object.freeze({\n ...entity,\n references: Object.freeze([...entity.references, ref]),\n });\n}\n\n// ---------------------------------------------------------------------------\n// Freezing accumulators into the readonly public shape.\n// ---------------------------------------------------------------------------\n\nfunction freezeAdjudication(acc: AdjudicationAccumulator): X12LineAdjudication {\n return Object.freeze({\n otherPayerId: acc.otherPayerId,\n amountPaid: acc.amountPaid,\n procedureQualifier: acc.procedureQualifier,\n procedureCode: acc.procedureCode,\n paidUnits: acc.paidUnits,\n adjustments: Object.freeze(acc.adjustments.slice()),\n dateAdjudicated: acc.dateAdjudicated,\n });\n}\n\nfunction freezeServiceLine(acc: ServiceLineAccumulator): X12_837ServiceLine {\n const base = {\n lineNumber: acc.lineNumber,\n charge: acc.charge,\n units: acc.units,\n unitOfMeasure: acc.unitOfMeasure,\n placeOfServiceCode: acc.placeOfServiceCode,\n dates: Object.freeze(acc.dates.slice()),\n references: Object.freeze(acc.references.slice()),\n amounts: Object.freeze(acc.amounts.slice()),\n notes: Object.freeze(acc.notes.slice()),\n providers: Object.freeze(acc.providers.slice()),\n drug: acc.drug,\n adjudications: Object.freeze(acc.adjudications.slice()),\n };\n if (acc.variant === \"P\") {\n return Object.freeze({\n ...base,\n variant: \"P\" as const,\n procedureQualifier: acc.procedureQualifier,\n procedureCode: acc.procedureCode,\n modifiers: Object.freeze(acc.modifiers.slice()),\n diagnosisPointers: Object.freeze(acc.diagnosisPointers.slice()),\n emergencyIndicator: acc.emergencyIndicator,\n epsdtIndicator: acc.epsdtIndicator,\n familyPlanningIndicator: acc.familyPlanningIndicator,\n });\n }\n if (acc.variant === \"I\") {\n return Object.freeze({\n ...base,\n variant: \"I\" as const,\n revenueCode: acc.revenueCode,\n procedureQualifier: acc.procedureQualifier,\n procedureCode: acc.procedureCode,\n modifiers: Object.freeze(acc.modifiers.slice()),\n serviceLineRate: acc.serviceLineRate,\n nonCoveredCharge: acc.nonCoveredCharge,\n });\n }\n return Object.freeze({\n ...base,\n variant: \"D\" as const,\n procedureQualifier: acc.procedureQualifier,\n procedureCode: acc.procedureCode,\n modifiers: Object.freeze(acc.modifiers.slice()),\n oralCavityArea: Object.freeze(acc.oralCavityArea.slice()),\n toothInformation: Object.freeze(acc.toothInformation.slice()),\n prosthesisCrownInlayCode: acc.prosthesisCrownInlayCode,\n });\n}\n\nfunction freezeOtherSubscriber(acc: OtherSubscriberAccumulator): X12OtherSubscriber {\n return Object.freeze({\n payerResponsibilityCode: acc.payerResponsibilityCode,\n individualRelationshipCode: acc.individualRelationshipCode,\n claimFilingIndicator: acc.claimFilingIndicator,\n otherSubscriber: acc.otherSubscriber,\n otherPayer: acc.otherPayer,\n });\n}\n\nfunction freezeClaim(acc: ClaimAccumulator): X12Claim {\n return Object.freeze({\n variant: acc.variant,\n hierarchy: acc.hierarchy,\n billingProvider: acc.billingProvider,\n payToAddress: acc.payToAddress,\n payToPlan: acc.payToPlan,\n subscriber: acc.subscriber,\n payer: acc.payer,\n patient: acc.patient,\n claimId: acc.claimId,\n totalCharge: acc.totalCharge,\n placeOfServiceCode: acc.placeOfServiceCode,\n facilityCodeQualifier: acc.facilityCodeQualifier,\n claimFrequencyCode: acc.claimFrequencyCode,\n providerSignatureOnFile: acc.providerSignatureOnFile,\n providerAcceptAssignment: acc.providerAcceptAssignment,\n benefitsAssignment: acc.benefitsAssignment,\n releaseOfInformationCode: acc.releaseOfInformationCode,\n dates: Object.freeze(acc.dates.slice()),\n diagnoses: Object.freeze(acc.diagnoses.slice()),\n procedures: Object.freeze(acc.procedures.slice()),\n otherHi: Object.freeze(acc.otherHi.slice()),\n notes: Object.freeze(acc.notes.slice()),\n amounts: Object.freeze(acc.amounts.slice()),\n references: Object.freeze(acc.references.slice()),\n providers: Object.freeze(acc.providers.slice()),\n otherSubscribers: Object.freeze(acc.otherSubscribers.slice()),\n serviceLines: Object.freeze(acc.serviceLines.slice()),\n });\n}\n","/**\n * Thrown errors raised by the 837 domain builders ({@link\n * \"./build-837.js\".build837P} / {@link \"./build-837.js\".build837I} / {@link\n * \"./build-837.js\".build837D}). Distinct from the general `X12BuildError`\n * (a structurally impossible envelope): `Claim837BuildError` is raised when\n * a CLAIM spec is structurally impossible to emit as a conformant 837 —\n * most importantly when the nested billing-provider → subscriber →\n * (claims | patient) tree cannot form a valid HL hierarchy spine.\n *\n * The HL spine is the 837's safety primitive. The read side\n * (`get837Claims`) is lenient — a real, payer-issued 837 with a broken HL\n * parent pointer is WARNED (`X12_HL_PARENT_MISMATCH`), never rejected,\n * because the parser must surface what actually arrived. The builder takes\n * the opposite stance: rather than emit a hierarchy a downstream payer\n * would have to repair (or silently mis-route a claim to the wrong\n * subscriber), it REFUSES. Because the builder COMPUTES the spine from the\n * tree (it never accepts caller-supplied HL ids / parent pointers), the\n * only way to reach an impossible spine is an empty / childless node — and\n * those are refused here before any segment is emitted.\n */\n\n/**\n * Stable string codes for every {@link Claim837BuildError}. Locked here so\n * consumers can narrow exhaustively on `err.code`; additions-only\n * thereafter (renaming any code is a breaking change).\n *\n * - `X12_837_BUILD_INVALID_HIERARCHY` — the billing-provider → subscriber →\n * (claims | patient) tree cannot form a valid HL spine: no billing\n * providers, a billing provider with no subscribers, a subscriber with\n * neither direct claims nor dependent patients, or a dependent patient\n * with no claims.\n * - `X12_837_BUILD_INVALID_SPEC` — a non-hierarchy structural precondition\n * failed: an empty `claimId`, a claim with no service lines, a service\n * line whose `variant` does not match the builder, an empty procedure /\n * revenue code, or an over-length control number.\n *\n * @example\n * ```ts\n * import { CLAIM_837_BUILD_ERROR_CODES, Claim837BuildError, build837P } from \"@cosyte/x12\";\n * try {\n * build837P(spec);\n * } catch (err) {\n * if (\n * err instanceof Claim837BuildError &&\n * err.code === CLAIM_837_BUILD_ERROR_CODES.X12_837_BUILD_INVALID_HIERARCHY\n * ) {\n * // the HL spine is impossible — fix the tree, do not emit\n * }\n * }\n * ```\n */\nexport const CLAIM_837_BUILD_ERROR_CODES = {\n X12_837_BUILD_INVALID_HIERARCHY: \"X12_837_BUILD_INVALID_HIERARCHY\",\n X12_837_BUILD_INVALID_SPEC: \"X12_837_BUILD_INVALID_SPEC\",\n} as const;\n\n/**\n * String-literal union over {@link CLAIM_837_BUILD_ERROR_CODES}. Used as\n * {@link Claim837BuildError}.`code`.\n */\nexport type Claim837BuildErrorCode =\n (typeof CLAIM_837_BUILD_ERROR_CODES)[keyof typeof CLAIM_837_BUILD_ERROR_CODES];\n\n/**\n * Thrown by {@link \"./build-837.js\".build837P} / `build837I` / `build837D`\n * when the supplied claim spec cannot be emitted as a conformant,\n * self-consistent 837 — most importantly when the HL hierarchy spine is\n * structurally impossible. Carries a stable `code` for programmatic\n * narrowing. Messages are PHI-clean: they name structural positions\n * (indices, level codes) and counts, never patient names or member ids.\n *\n * @example\n * ```ts\n * import { Claim837BuildError } from \"@cosyte/x12\";\n * try {\n * build837P(spec);\n * } catch (err) {\n * if (err instanceof Claim837BuildError) {\n * // err.code is one of CLAIM_837_BUILD_ERROR_CODES\n * }\n * }\n * ```\n */\nexport class Claim837BuildError extends Error {\n public readonly code: Claim837BuildErrorCode;\n\n /** @internal */\n public constructor(code: Claim837BuildErrorCode, message: string) {\n super(message);\n this.name = \"Claim837BuildError\";\n this.code = code;\n }\n}\n","/**\n * `build837P` / `build837I` / `build837D` — pure-function builders for a\n * 005010 837 Healthcare Claim (Professional `X222A2`, Institutional\n * `X223A3`, Dental `X224A2`). NEVER auto-sends, NEVER opens a socket, NEVER\n * touches the filesystem. The library mechanically emits the claim it is\n * told; a spec whose billing-provider → subscriber → (claims | patient)\n * tree cannot form a valid HL hierarchy is REFUSED via {@link\n * \"./build-errors.js\".Claim837BuildError}.\n *\n * The HL spine is the 837's safety primitive, so the builder OWNS it: it\n * computes every HL-01 id (sequential within the transaction), HL-02 parent\n * pointer (20 → 22 → 23), and HL-04 has-child flag from the nested tree.\n * Callers never hand-code the spine — a structurally inconsistent hierarchy\n * is therefore unrepresentable, and the SE-01 segment count is correct by\n * construction (it counts the segments actually emitted, ST/SE inclusive).\n *\n * The read side ({@link \"./get-837.js\".get837Claims}) is lenient — a real\n * 837 with a broken HL parent pointer is WARNED, never rejected. The builder\n * takes the opposite stance: it REFUSES rather than emit a hierarchy a\n * downstream payer would have to repair. A caller that must reproduce a\n * knowingly-malformed payer artifact drops to {@link\n * \"../../builder/build-interchange.js\".buildInterchange}, which applies no\n * domain guard.\n *\n * Output shape: a complete {@link X12Interchange} wrapping a single GS..GE\n * functional group (GS-01 `\"HC\"`) containing a single ST..SE 837\n * transaction set, spec-clean and round-trippable through {@link parseX12}.\n * The builder emits segments in TR3 loop order so a well-formed spec\n * round-trips through `get837Claims` field-for-field.\n */\n\nimport { CLAIM_837_BUILD_ERROR_CODES, Claim837BuildError } from \"./build-errors.js\";\nimport type {\n Build837AddressSpec,\n Build837AdjudicationSpec,\n Build837AdjustmentSpec,\n Build837AmountSpec,\n Build837BillingProviderSpec,\n Build837ClaimSpec,\n Build837ContactSpec,\n Build837DateSpec,\n Build837EntitySpec,\n Build837HiCodeSpec,\n Build837NoteSpec,\n Build837OtherSubscriberSpec,\n Build837PatientSpec,\n Build837ReferenceSpec,\n Build837ServiceLineSpec,\n Build837Spec,\n Build837SubscriberSpec,\n} from \"./build-837-types.js\";\nimport { parseX12 } from \"../../parser/index.js\";\nimport type { X12Interchange } from \"../../parser/types.js\";\nimport { escapeRelease } from \"../../parser/release.js\";\n\n/**\n * GS-08 / ST-03 version + release emitted per variant — the WPC TR3\n * implementation guides. @internal\n */\nconst VERSION_BY_VARIANT: Readonly<Record<\"P\" | \"I\" | \"D\", string>> = {\n P: \"005010X222A2\",\n I: \"005010X223A3\",\n D: \"005010X224A2\",\n};\n\n/** GS-01 functional identifier code for the 837. `HC` = Health Care Claim. @internal */\nconst X12_837_FUNCTIONAL_ID = \"HC\";\n\n/** GS-07 standards agency code — `X` for ASC X12. @internal */\nconst X12_AGENCY_CODE = \"X\";\n\n/** HL-03 level codes for the spine the builder computes. @internal */\nconst HL_LEVEL = { BILLING: \"20\", SUBSCRIBER: \"22\", PATIENT: \"23\" } as const;\n\n/**\n * `build837P` — assemble a 005010X222A2 Professional 837 around the spec.\n *\n * @example\n * ```ts\n * import { build837P, X12Decimal } from \"@cosyte/x12\";\n * const ix = build837P({\n * envelope: {\n * senderId: \"SUBMITTER\", receiverId: \"RECEIVER\",\n * interchangeDate: \"260601\", interchangeTime: \"1200\",\n * interchangeControlNumber: \"000000001\",\n * groupControlNumber: \"1\", transactionSetControlNumber: \"0001\",\n * },\n * submitter: { entityIdentifierCode: \"41\", entityTypeQualifier: \"2\", name: \"SUBMITTER ONE\", idQualifier: \"46\", idCode: \"SUB001\" },\n * receiver: { entityIdentifierCode: \"40\", entityTypeQualifier: \"2\", name: \"RECEIVER ONE\", idQualifier: \"46\", idCode: \"REC001\" },\n * billingProviders: [{\n * provider: { entityIdentifierCode: \"85\", entityTypeQualifier: \"2\", name: \"BILLING CLINIC INC\", idQualifier: \"XX\", idCode: \"1234567890\" },\n * subscribers: [{\n * info: { payerResponsibilityCode: \"P\", individualRelationshipCode: \"18\", claimFilingIndicator: \"MB\" },\n * subscriber: { entityIdentifierCode: \"IL\", entityTypeQualifier: \"1\", name: \"PATIENT\", firstName: \"TEST\", idQualifier: \"MI\", idCode: \"MEMBER001\" },\n * payer: { entityIdentifierCode: \"PR\", entityTypeQualifier: \"2\", name: \"PAYER ONE\", idQualifier: \"PI\", idCode: \"PAYER01\" },\n * claims: [{\n * claimId: \"PT-ACCT-001\", totalCharge: X12Decimal.fromString(\"150.00\")!,\n * diagnoses: [{ qualifier: \"ABK\", code: \"J20.9\" }],\n * serviceLines: [{ variant: \"P\", procedureQualifier: \"HC\", procedureCode: \"99213\", charge: X12Decimal.fromString(\"150.00\")!, unitOfMeasure: \"UN\", units: X12Decimal.fromString(\"1\")!, diagnosisPointers: [\"1\"] }],\n * }],\n * }],\n * }],\n * });\n * ```\n */\nexport function build837P(spec: Build837Spec): X12Interchange {\n return buildClaim837(\"P\", spec);\n}\n\n/**\n * `build837I` — assemble a 005010X223A3 Institutional 837 around the spec.\n * Service lines must be `variant: \"I\"` (SV2).\n *\n * @example\n * ```ts\n * import { build837I, X12Decimal } from \"@cosyte/x12\";\n * declare const spec: import(\"@cosyte/x12\").Build837Spec;\n * const ix = build837I(spec); // each serviceLine: { variant: \"I\", revenueCode: \"0120\", ... }\n * ```\n */\nexport function build837I(spec: Build837Spec): X12Interchange {\n return buildClaim837(\"I\", spec);\n}\n\n/**\n * `build837D` — assemble a 005010X224A2 Dental 837 around the spec. Service\n * lines must be `variant: \"D\"` (SV3); per-line tooth detail rides on TOO.\n *\n * @example\n * ```ts\n * import { build837D, X12Decimal } from \"@cosyte/x12\";\n * declare const spec: import(\"@cosyte/x12\").Build837Spec;\n * const ix = build837D(spec); // each serviceLine: { variant: \"D\", procedureQualifier: \"AD\", ... }\n * ```\n */\nexport function build837D(spec: Build837Spec): X12Interchange {\n return buildClaim837(\"D\", spec);\n}\n\n/**\n * Shared emit path for all three variants. `variant` fixes the TR3 version,\n * the GS-08 / ST-03 reference, and the SVx segment id; everything else is\n * driven by the spec. @internal\n */\nfunction buildClaim837(variant: \"P\" | \"I\" | \"D\", spec: Build837Spec): X12Interchange {\n const { envelope } = spec;\n const versionRelease = VERSION_BY_VARIANT[variant];\n\n // ---- Structural preconditions (refuse an impossible spine) ------------\n\n enforceStructuralSpec(variant, spec);\n\n // ---- Delimiter resolution + escape helper -----------------------------\n\n const elementSeparator = envelope.elementSeparator ?? \"*\";\n const repetitionSeparator = envelope.repetitionSeparator ?? \"^\";\n const componentSeparator = envelope.componentSeparator ?? \":\";\n const segmentTerminator = envelope.segmentTerminator ?? \"~\";\n const delimiters = {\n element: elementSeparator,\n repetition: repetitionSeparator,\n component: componentSeparator,\n segment: segmentTerminator,\n };\n const esc = (value: string): string => escapeRelease(value, delimiters);\n\n const seg = (parts: readonly string[]): string => {\n let end = parts.length;\n while (end > 1 && parts[end - 1] === \"\") end -= 1;\n return parts.slice(0, end).join(elementSeparator) + segmentTerminator;\n };\n\n const comp = (components: readonly string[]): string => {\n const escaped = components.map(esc);\n let end = escaped.length;\n while (end > 0 && escaped[end - 1] === \"\") end -= 1;\n return escaped.slice(0, end).join(componentSeparator);\n };\n\n const ctx: EmitContext = { seg, esc, comp };\n\n // ---- ISA envelope -----------------------------------------------------\n\n const senderQualifier = envelope.senderQualifier ?? \"ZZ\";\n const receiverQualifier = envelope.receiverQualifier ?? \"ZZ\";\n const usageIndicator = envelope.usageIndicator ?? \"P\";\n const interchangeControlNumber = padControl(envelope.interchangeControlNumber, 9);\n const isa =\n [\n \"ISA\",\n \"00\",\n pad(\" \", 10),\n \"00\",\n pad(\" \", 10),\n pad(senderQualifier, 2),\n pad(envelope.senderId, 15),\n pad(receiverQualifier, 2),\n pad(envelope.receiverId, 15),\n pad(envelope.interchangeDate, 6),\n pad(envelope.interchangeTime, 4),\n repetitionSeparator,\n \"00501\",\n interchangeControlNumber,\n \"0\",\n usageIndicator,\n componentSeparator,\n ].join(elementSeparator) + segmentTerminator;\n\n // ---- GS / ST ----------------------------------------------------------\n\n const groupDate = envelope.groupDate ?? expandYY(envelope.interchangeDate);\n const groupTime = envelope.groupTime ?? envelope.interchangeTime;\n const applicationSenderCode = envelope.applicationSenderCode ?? envelope.senderId;\n const applicationReceiverCode = envelope.applicationReceiverCode ?? envelope.receiverId;\n\n const gs = seg([\n \"GS\",\n X12_837_FUNCTIONAL_ID,\n esc(applicationSenderCode),\n esc(applicationReceiverCode),\n groupDate,\n groupTime,\n esc(envelope.groupControlNumber),\n X12_AGENCY_CODE,\n versionRelease,\n ]);\n\n const stControlNumber = envelope.transactionSetControlNumber;\n const st = seg([\"ST\", \"837\", esc(stControlNumber), versionRelease]);\n\n // ---- Body segments ----------------------------------------------------\n\n const body: string[] = [];\n\n // BHT — required beginning-of-hierarchical-transaction header.\n body.push(\n seg([\n \"BHT\",\n \"0019\",\n \"00\",\n esc(envelope.transactionReferenceId ?? stControlNumber),\n esc(envelope.transactionDate ?? groupDate),\n esc(envelope.transactionTime ?? groupTime),\n esc(envelope.claimOrEncounterIndicator ?? \"CH\"),\n ]),\n );\n\n // Loop 1000A submitter (NM1*41 + PER) and Loop 1000B receiver (NM1*40).\n emitEntity(spec.submitter, body, ctx);\n emitEntity(spec.receiver, body, ctx);\n\n // Loops 2000A/B/C — emit the computed HL spine depth-first.\n const hlCounter: HlCounter = { next: 1 };\n for (const billing of spec.billingProviders) {\n emitBillingProvider(variant, billing, body, ctx, hlCounter);\n }\n\n // ---- SE / GE / IEA ----------------------------------------------------\n\n const seCount = body.length + 2;\n const se = seg([\"SE\", String(seCount), esc(stControlNumber)]);\n const ge = seg([\"GE\", \"1\", esc(envelope.groupControlNumber)]);\n const iea = seg([\"IEA\", \"1\", interchangeControlNumber]);\n\n const raw = isa + gs + st + body.join(\"\") + se + ge + iea;\n\n // Final round-trip through `parseX12` so the returned interchange is\n // bit-identical with the parsed form every other helper consumes.\n return parseX12(raw);\n}\n\n// ---------------------------------------------------------------------------\n// Structural guards.\n// ---------------------------------------------------------------------------\n\n/**\n * Refuse a structurally impossible spec before any emit. Covers both the HL\n * spine (no billing providers / childless nodes) and per-claim\n * preconditions (empty id, no lines, variant mismatch). PHI-clean: messages\n * carry indices + level codes + counts, never names. @internal\n */\nfunction enforceStructuralSpec(variant: \"P\" | \"I\" | \"D\", spec: Build837Spec): void {\n if (spec.billingProviders.length === 0) {\n throw new Claim837BuildError(\n CLAIM_837_BUILD_ERROR_CODES.X12_837_BUILD_INVALID_HIERARCHY,\n \"build837: at least one billing provider (HL level 20) is required.\",\n );\n }\n for (let b = 0; b < spec.billingProviders.length; b += 1) {\n const billing = spec.billingProviders[b];\n if (billing === undefined) continue;\n if (billing.subscribers.length === 0) {\n throw new Claim837BuildError(\n CLAIM_837_BUILD_ERROR_CODES.X12_837_BUILD_INVALID_HIERARCHY,\n `build837: billing provider at index ${String(b)} has no subscriber (HL level 22) child.`,\n );\n }\n for (let s = 0; s < billing.subscribers.length; s += 1) {\n const subscriber = billing.subscribers[s];\n if (subscriber === undefined) continue;\n const directClaims = subscriber.claims ?? [];\n const patients = subscriber.patients ?? [];\n if (directClaims.length === 0 && patients.length === 0) {\n throw new Claim837BuildError(\n CLAIM_837_BUILD_ERROR_CODES.X12_837_BUILD_INVALID_HIERARCHY,\n `build837: subscriber at billing[${String(b)}].subscriber[${String(s)}] has neither a claim nor a dependent patient.`,\n );\n }\n for (let c = 0; c < directClaims.length; c += 1) {\n const claim = directClaims[c];\n if (claim !== undefined) {\n enforceClaim(\n variant,\n claim,\n `billing[${String(b)}].subscriber[${String(s)}].claim[${String(c)}]`,\n );\n }\n }\n for (let p = 0; p < patients.length; p += 1) {\n const patient = patients[p];\n if (patient === undefined) continue;\n if (patient.claims.length === 0) {\n throw new Claim837BuildError(\n CLAIM_837_BUILD_ERROR_CODES.X12_837_BUILD_INVALID_HIERARCHY,\n `build837: dependent patient at billing[${String(b)}].subscriber[${String(s)}].patient[${String(p)}] has no claim.`,\n );\n }\n for (let c = 0; c < patient.claims.length; c += 1) {\n const claim = patient.claims[c];\n if (claim !== undefined) {\n enforceClaim(\n variant,\n claim,\n `billing[${String(b)}].subscriber[${String(s)}].patient[${String(p)}].claim[${String(c)}]`,\n );\n }\n }\n }\n }\n }\n}\n\n/**\n * Refuse an impossible claim (empty id, no lines, variant mismatch). The\n * `locator` is a PHI-clean structural path (`billing[0].subscriber[0].claim[2]`);\n * the message NEVER echoes the `claimId`, which is the provider's\n * patient-account number (PHI-adjacent). @internal\n */\nfunction enforceClaim(variant: \"P\" | \"I\" | \"D\", claim: Build837ClaimSpec, locator: string): void {\n if (claim.claimId === \"\") {\n throw new Claim837BuildError(\n CLAIM_837_BUILD_ERROR_CODES.X12_837_BUILD_INVALID_SPEC,\n `build837: claim at ${locator} has an empty claimId (CLM-01 is required).`,\n );\n }\n if (claim.serviceLines.length === 0) {\n throw new Claim837BuildError(\n CLAIM_837_BUILD_ERROR_CODES.X12_837_BUILD_INVALID_SPEC,\n `build837: claim at ${locator} has no service line (a CLM requires at least one LX/SVx loop).`,\n );\n }\n for (let l = 0; l < claim.serviceLines.length; l += 1) {\n const line = claim.serviceLines[l];\n if (line === undefined) continue;\n if (line.variant !== variant) {\n throw new Claim837BuildError(\n CLAIM_837_BUILD_ERROR_CODES.X12_837_BUILD_INVALID_SPEC,\n `build837${variant}: claim at ${locator} has a \"${line.variant}\" service line at index ${String(l)}; every line must be \"${variant}\".`,\n );\n }\n const code = line.variant === \"I\" ? line.revenueCode : line.procedureCode;\n if (code === \"\") {\n throw new Claim837BuildError(\n CLAIM_837_BUILD_ERROR_CODES.X12_837_BUILD_INVALID_SPEC,\n `build837${variant}: claim at ${locator} has a service line at index ${String(l)} with an empty ${line.variant === \"I\" ? \"revenue\" : \"procedure\"} code.`,\n );\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Loop emitters.\n// ---------------------------------------------------------------------------\n\ninterface EmitContext {\n readonly seg: (parts: readonly string[]) => string;\n readonly esc: (value: string) => string;\n readonly comp: (components: readonly string[]) => string;\n}\n\ninterface HlCounter {\n next: number;\n}\n\n/** Emit a Loop 2000A billing provider HL + its subscriber subtree. @internal */\nfunction emitBillingProvider(\n variant: \"P\" | \"I\" | \"D\",\n billing: Build837BillingProviderSpec,\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n body.push(ctx.seg([\"HL\", hlId, \"\", HL_LEVEL.BILLING, \"1\"]));\n emitEntity(billing.provider, body, ctx);\n if (billing.payToAddress !== undefined) {\n body.push(ctx.seg([\"NM1\", \"87\", \"2\"]));\n emitAddress(billing.payToAddress, body, ctx);\n }\n if (billing.payToPlan !== undefined && variant === \"I\") {\n emitEntity(billing.payToPlan, body, ctx);\n }\n for (const subscriber of billing.subscribers) {\n emitSubscriber(variant, subscriber, hlId, body, ctx, counter);\n }\n}\n\n/** Emit a Loop 2000B subscriber HL + claims / dependent patients. @internal */\nfunction emitSubscriber(\n variant: \"P\" | \"I\" | \"D\",\n subscriber: Build837SubscriberSpec,\n parentHlId: string,\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n const patients = subscriber.patients ?? [];\n const hasChild = patients.length > 0 ? \"1\" : \"0\";\n body.push(ctx.seg([\"HL\", hlId, parentHlId, HL_LEVEL.SUBSCRIBER, hasChild]));\n const info = subscriber.info;\n body.push(\n ctx.seg([\n \"SBR\",\n ctx.esc(info.payerResponsibilityCode),\n ctx.esc(info.individualRelationshipCode ?? \"\"),\n ctx.esc(info.groupNumber ?? \"\"),\n ctx.esc(info.groupName ?? \"\"),\n \"\",\n \"\",\n \"\",\n \"\",\n ctx.esc(info.claimFilingIndicator ?? \"\"),\n ]),\n );\n emitEntity(subscriber.subscriber, body, ctx);\n emitEntity(subscriber.payer, body, ctx);\n for (const claim of subscriber.claims ?? []) {\n emitClaim(variant, claim, body, ctx);\n }\n for (const patient of patients) {\n emitPatient(variant, patient, hlId, body, ctx, counter);\n }\n}\n\n/** Emit a Loop 2000C dependent patient HL + its claims. @internal */\nfunction emitPatient(\n variant: \"P\" | \"I\" | \"D\",\n patient: Build837PatientSpec,\n parentHlId: string,\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n body.push(ctx.seg([\"HL\", hlId, parentHlId, HL_LEVEL.PATIENT, \"0\"]));\n if (patient.individualRelationshipCode !== undefined) {\n body.push(ctx.seg([\"PAT\", ctx.esc(patient.individualRelationshipCode)]));\n }\n emitEntity(patient.patient, body, ctx);\n for (const claim of patient.claims) {\n emitClaim(variant, claim, body, ctx);\n }\n}\n\n/** Emit a Loop 2300 claim (CLM + DTP/HI/NTE/AMT/REF + 2310x + 2320 + 2400). @internal */\nfunction emitClaim(\n variant: \"P\" | \"I\" | \"D\",\n claim: Build837ClaimSpec,\n body: string[],\n ctx: EmitContext,\n): void {\n body.push(\n ctx.seg([\n \"CLM\",\n ctx.esc(claim.claimId),\n ctx.esc(claim.totalCharge.toString()),\n \"\",\n \"\",\n ctx.comp([\n claim.placeOfServiceCode ?? \"\",\n claim.facilityCodeQualifier ?? \"\",\n claim.claimFrequencyCode ?? \"\",\n ]),\n ctx.esc(claim.providerSignatureOnFile ?? \"\"),\n ctx.esc(claim.providerAcceptAssignment ?? \"\"),\n ctx.esc(claim.benefitsAssignment ?? \"\"),\n ctx.esc(claim.releaseOfInformationCode ?? \"\"),\n ]),\n );\n\n for (const date of claim.dates ?? []) emitDate(date, body, ctx);\n for (const hi of claim.diagnoses ?? []) emitHi(hi, body, ctx);\n for (const hi of claim.procedures ?? []) emitHi(hi, body, ctx);\n for (const hi of claim.otherHi ?? []) emitHi(hi, body, ctx);\n for (const note of claim.notes ?? []) emitNote(note, body, ctx);\n for (const amt of claim.amounts ?? []) emitAmount(amt, body, ctx);\n for (const ref of claim.references ?? []) body.push(emitRef(ref, ctx));\n for (const provider of claim.providers ?? []) emitEntity(provider, body, ctx);\n for (const other of claim.otherSubscribers ?? []) emitOtherSubscriber(other, body, ctx);\n\n let lineNumber = 0;\n for (const line of claim.serviceLines) {\n lineNumber += 1;\n emitServiceLine(variant, line, lineNumber, body, ctx);\n }\n}\n\n/** Emit a Loop 2320 other-subscriber surface (SBR + NM1*IL + NM1*PR). @internal */\nfunction emitOtherSubscriber(\n other: Build837OtherSubscriberSpec,\n body: string[],\n ctx: EmitContext,\n): void {\n body.push(\n ctx.seg([\n \"SBR\",\n ctx.esc(other.payerResponsibilityCode),\n ctx.esc(other.individualRelationshipCode ?? \"\"),\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n ctx.esc(other.claimFilingIndicator ?? \"\"),\n ]),\n );\n if (other.otherSubscriber !== undefined) emitEntity(other.otherSubscriber, body, ctx);\n if (other.otherPayer !== undefined) emitEntity(other.otherPayer, body, ctx);\n}\n\n/** Emit a Loop 2400 service line (LX + SVx + dates/drug/tooth/notes/amts/refs/providers/2430). @internal */\nfunction emitServiceLine(\n variant: \"P\" | \"I\" | \"D\",\n line: Build837ServiceLineSpec,\n lineNumber: number,\n body: string[],\n ctx: EmitContext,\n): void {\n body.push(ctx.seg([\"LX\", line.lineNumber ?? String(lineNumber)]));\n\n const units = line.units === undefined ? \"0\" : line.units.toString();\n if (line.variant === \"P\") {\n const proc = ctx.comp([line.procedureQualifier, line.procedureCode, ...(line.modifiers ?? [])]);\n const pointers = ctx.comp(line.diagnosisPointers ?? []);\n body.push(\n ctx.seg([\n \"SV1\",\n proc,\n ctx.esc(line.charge.toString()),\n ctx.esc(line.unitOfMeasure ?? \"\"),\n ctx.esc(units),\n ctx.esc(line.placeOfServiceCode ?? \"\"),\n \"\",\n pointers,\n \"\",\n ctx.esc(line.emergencyIndicator ?? \"\"),\n \"\",\n ctx.esc(line.epsdtIndicator ?? \"\"),\n ctx.esc(line.familyPlanningIndicator ?? \"\"),\n ]),\n );\n } else if (line.variant === \"I\") {\n const proc = ctx.comp([\n line.procedureQualifier ?? \"\",\n line.procedureCode ?? \"\",\n ...(line.modifiers ?? []),\n ]);\n body.push(\n ctx.seg([\n \"SV2\",\n ctx.esc(line.revenueCode),\n proc,\n ctx.esc(line.charge.toString()),\n ctx.esc(line.unitOfMeasure ?? \"\"),\n ctx.esc(units),\n line.serviceLineRate === undefined ? \"\" : ctx.esc(line.serviceLineRate.toString()),\n line.nonCoveredCharge === undefined ? \"\" : ctx.esc(line.nonCoveredCharge.toString()),\n ]),\n );\n } else {\n const proc = ctx.comp([line.procedureQualifier, line.procedureCode, ...(line.modifiers ?? [])]);\n const cavity = ctx.comp(line.oralCavityArea ?? []);\n body.push(\n ctx.seg([\n \"SV3\",\n proc,\n ctx.esc(line.charge.toString()),\n ctx.esc(line.placeOfServiceCode ?? \"\"),\n cavity,\n ctx.esc(line.prosthesisCrownInlayCode ?? \"\"),\n ctx.esc(units),\n ]),\n );\n }\n\n for (const date of line.dates ?? []) emitDate(date, body, ctx);\n\n if (line.variant === \"P\" && line.drug !== undefined) {\n const drug = line.drug;\n body.push(ctx.seg([\"LIN\", \"\", ctx.esc(drug.qualifier), ctx.esc(drug.code)]));\n if (drug.quantity !== undefined || drug.unitOfMeasure !== undefined) {\n body.push(\n ctx.seg([\n \"CTP\",\n \"\",\n \"\",\n \"\",\n drug.quantity === undefined ? \"\" : ctx.esc(drug.quantity.toString()),\n ctx.esc(drug.unitOfMeasure ?? \"\"),\n ]),\n );\n }\n }\n\n if (line.variant === \"D\") {\n for (const tooth of line.toothInformation ?? []) {\n body.push(\n ctx.seg([\n \"TOO\",\n ctx.esc(tooth.qualifier),\n ctx.esc(tooth.toothCode),\n ctx.comp(tooth.surfaces ?? []),\n ]),\n );\n }\n }\n\n for (const note of line.notes ?? []) emitNote(note, body, ctx);\n for (const amt of line.amounts ?? []) emitAmount(amt, body, ctx);\n for (const ref of line.references ?? []) body.push(emitRef(ref, ctx));\n for (const provider of line.providers ?? []) emitEntity(provider, body, ctx);\n for (const adj of line.adjudications ?? []) emitAdjudication(adj, body, ctx);\n}\n\n/** Emit a Loop 2430 line adjudication (SVD + CAS* + DTP*573). @internal */\nfunction emitAdjudication(adj: Build837AdjudicationSpec, body: string[], ctx: EmitContext): void {\n const proc = ctx.comp([adj.procedureQualifier ?? \"\", adj.procedureCode ?? \"\"]);\n body.push(\n ctx.seg([\n \"SVD\",\n ctx.esc(adj.otherPayerId),\n ctx.esc(adj.amountPaid.toString()),\n proc,\n \"\",\n adj.paidUnits === undefined ? \"\" : ctx.esc(adj.paidUnits.toString()),\n ]),\n );\n emitCasGroup(adj.adjustments ?? [], body, ctx);\n if (adj.dateAdjudicated !== undefined) {\n body.push(ctx.seg([\"DTP\", \"573\", \"D8\", ctx.esc(adj.dateAdjudicated)]));\n }\n}\n\n/**\n * Emit CAS segments for a flat adjustment list. Consecutive adjustments\n * sharing a `groupCode` pack into one CAS (≤ 6 triples each). @internal\n */\nfunction emitCasGroup(\n adjustments: readonly Build837AdjustmentSpec[],\n body: string[],\n ctx: EmitContext,\n): void {\n let i = 0;\n while (i < adjustments.length) {\n const first = adjustments[i];\n if (first === undefined) {\n i += 1;\n continue;\n }\n const groupCode = first.groupCode;\n const parts: string[] = [\"CAS\", ctx.esc(groupCode)];\n let triples = 0;\n while (i < adjustments.length && triples < 6) {\n const adj = adjustments[i];\n if (adj === undefined || adj.groupCode !== groupCode) break;\n parts.push(\n ctx.esc(adj.reasonCode),\n ctx.esc(adj.amount.toString()),\n adj.quantity === undefined ? \"\" : ctx.esc(adj.quantity.toString()),\n );\n triples += 1;\n i += 1;\n }\n body.push(ctx.seg(parts));\n }\n}\n\n// ---------------------------------------------------------------------------\n// Entity + cross-cutting segment emitters.\n// ---------------------------------------------------------------------------\n\n/** Emit an NM1 entity (+ N3/N4 address, PER contacts, REF identifiers). @internal */\nfunction emitEntity(entity: Build837EntitySpec, body: string[], ctx: EmitContext): void {\n body.push(\n ctx.seg([\n \"NM1\",\n ctx.esc(entity.entityIdentifierCode),\n ctx.esc(entity.entityTypeQualifier),\n ctx.esc(entity.name),\n ctx.esc(entity.firstName ?? \"\"),\n ctx.esc(entity.middleName ?? \"\"),\n \"\",\n ctx.esc(entity.suffix ?? \"\"),\n ctx.esc(entity.idQualifier ?? \"\"),\n ctx.esc(entity.idCode ?? \"\"),\n ]),\n );\n if (entity.address !== undefined) emitAddress(entity.address, body, ctx);\n for (const contact of entity.contacts ?? []) body.push(emitContact(contact, ctx));\n for (const ref of entity.references ?? []) body.push(emitRef(ref, ctx));\n}\n\n/** Emit N3 + N4 for an address block. @internal */\nfunction emitAddress(address: Build837AddressSpec, body: string[], ctx: EmitContext): void {\n if (address.lines.length > 0) {\n body.push(ctx.seg([\"N3\", ...address.lines.map(ctx.esc)]));\n }\n if (\n address.city !== undefined ||\n address.state !== undefined ||\n address.postalCode !== undefined ||\n address.countryCode !== undefined\n ) {\n body.push(\n ctx.seg([\n \"N4\",\n ctx.esc(address.city ?? \"\"),\n ctx.esc(address.state ?? \"\"),\n ctx.esc(address.postalCode ?? \"\"),\n ctx.esc(address.countryCode ?? \"\"),\n ]),\n );\n }\n}\n\n/** @internal */\nfunction emitContact(contact: Build837ContactSpec, ctx: EmitContext): string {\n const parts: string[] = [\n \"PER\",\n ctx.esc(contact.contactFunctionCode),\n ctx.esc(contact.name ?? \"\"),\n ];\n for (const comm of contact.communications ?? []) {\n parts.push(ctx.esc(comm.qualifier), ctx.esc(comm.value));\n }\n return ctx.seg(parts);\n}\n\n/** @internal */\nfunction emitRef(ref: Build837ReferenceSpec, ctx: EmitContext): string {\n return ctx.seg([\n \"REF\",\n ctx.esc(ref.qualifier),\n ctx.esc(ref.value),\n ctx.esc(ref.description ?? \"\"),\n ]);\n}\n\n/** @internal */\nfunction emitDate(date: Build837DateSpec, body: string[], ctx: EmitContext): void {\n body.push(\n ctx.seg([\"DTP\", ctx.esc(date.qualifier), ctx.esc(date.formatQualifier), ctx.esc(date.value)]),\n );\n}\n\n/** @internal */\nfunction emitNote(note: Build837NoteSpec, body: string[], ctx: EmitContext): void {\n body.push(ctx.seg([\"NTE\", ctx.esc(note.noteReferenceCode), ctx.esc(note.description)]));\n}\n\n/** @internal */\nfunction emitAmount(amt: Build837AmountSpec, body: string[], ctx: EmitContext): void {\n body.push(ctx.seg([\"AMT\", ctx.esc(amt.qualifier), ctx.esc(amt.amount.toString())]));\n}\n\n/**\n * Emit one HI composite as a standalone HI segment. The read side\n * concatenates across HI segments, so emitting one composite per segment\n * round-trips the per-bucket order. @internal\n */\nfunction emitHi(hi: Build837HiCodeSpec, body: string[], ctx: EmitContext): void {\n const composite = ctx.comp([\n hi.qualifier,\n hi.code,\n hi.dateQualifier ?? \"\",\n hi.date ?? \"\",\n hi.monetaryAmount === undefined ? \"\" : hi.monetaryAmount.toString(),\n hi.quantity === undefined ? \"\" : hi.quantity.toString(),\n hi.versionId ?? \"\",\n \"\",\n hi.poaIndicator ?? \"\",\n ]);\n body.push(ctx.seg([\"HI\", composite]));\n}\n\n// ---------------------------------------------------------------------------\n// String helpers — mirror the `build835` emit primitives.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction pad(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return value + \" \".repeat(width - value.length);\n return value.slice(0, width);\n}\n\n/**\n * Zero-pad a control number to `width` chars (ISA-13 / IEA-02 are always\n * 9). Throws {@link Claim837BuildError} if the value already exceeds the\n * width. @internal\n */\nfunction padControl(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return \"0\".repeat(width - value.length) + value;\n throw new Claim837BuildError(\n CLAIM_837_BUILD_ERROR_CODES.X12_837_BUILD_INVALID_SPEC,\n `build837: control number \"${value}\" exceeds the ${String(width)}-char spec limit.`,\n );\n}\n\n/**\n * Expand a 6-digit YYMMDD into CCYYMMDD for GS-04. Years `00`–`49` are 21st\n * century, `50`–`99` are 20th. A value already in CCYYMMDD form passes\n * through unchanged. @internal\n */\nfunction expandYY(yymmdd: string): string {\n if (yymmdd.length !== 6) return yymmdd;\n const yy = parseInt(yymmdd.slice(0, 2), 10);\n if (Number.isNaN(yy)) return yymmdd;\n const century = yy < 50 ? \"20\" : \"19\";\n return century + yymmdd;\n}\n","/**\n * 837 TR3 loop specifications — authored through the **public**\n * {@link \"../../loops/define.js\".defineLoopSpec} API (the Phase 2\n * dogfooding gate: the built-in 837 loop hierarchy goes through the SAME\n * factory consumers use for payer-specific companion-guide loops).\n *\n * Three variants share most of the structure; differences are concentrated\n * in the service-line loop (Loop 2400 → SV1/SV2/SV3) and the\n * 837I-specific 2010AC Pay-To Plan / 2410 / 2420 sub-loops. The 837P spec\n * is the canonical shape; 837I / 837D are written as separate exports\n * because their service-line trigger differs.\n *\n * Hierarchy (per WPC TR3s X222A2 / X223A3 / X224A2):\n *\n * ```text\n * Header\n * BHT Beginning of Hierarchical Transaction\n * Loop 1000A — Submitter Name (NM1*41) required, max 1\n * Loop 1000B — Receiver Name (NM1*40) required, max 1\n * Loop 2000A — Billing Provider HL (HL*..*20) required, max >1\n * Loop 2010AA — Billing Provider Name (NM1*85)\n * Loop 2010AB — Pay-To Address (NM1*87) situational\n * Loop 2010AC — Pay-To Plan (837I) (NM1*PE) situational\n * Loop 2000B — Subscriber HL (HL*..*22) required, max >1\n * Loop 2010BA — Subscriber Name (NM1*IL)\n * Loop 2010BB — Payer Name (NM1*PR)\n * Loop 2000C — Patient HL (HL*..*23) situational\n * Loop 2010CA — Patient Name (NM1*QC)\n * Loop 2300 — Claim Information (CLM)\n * Loop 2310x — multiple provider roles (NM1)\n * Loop 2320 — Other Subscriber Information (SBR)\n * Loop 2330x — Other Subscriber / Other Payer (NM1)\n * Loop 2400 — Service Line (LX → SV1/SV2/SV3)\n * Loop 2410 — Drug Identification (LIN) 837P\n * Loop 2420x — Service-Line Provider Names (NM1)\n * Loop 2430 — Line Adjudication (SVD)\n * Trailer\n * SE\n * ```\n *\n * Phase 5 surfaces the three loop specs as frozen artifacts (consumers can\n * read them and assert they match their companion-guide expectations); the\n * walker in `./get-837.ts` consults them to guide its state machine.\n * Phase 9's profile system overlays vendor-specific quirks on top.\n */\n\nimport { defineLoopSpec } from \"../../loops/define.js\";\nimport type { LoopSpec } from \"../../loops/types.js\";\n\n// ---------------------------------------------------------------------------\n// Shared sub-loops (identical across variants except where called out).\n// ---------------------------------------------------------------------------\n\n/**\n * 837 Loop 2010AA — Billing Provider Name. Triggered by `NM1` with\n * `NM1-01 = \"85\"`. The trigger qualifier value is enforced in the walker\n * (the loop spec keys off the segment id, not the element value).\n *\n * @example\n * ```ts\n * import { CLAIM_837_LOOP_2010AA } from \"@cosyte/x12\";\n * CLAIM_837_LOOP_2010AA.trigger; // \"NM1\"\n * ```\n */\nexport const CLAIM_837_LOOP_2010AA: LoopSpec = defineLoopSpec({\n id: \"2010AA\",\n description: \"837 Loop 2010AA — Billing Provider Name\",\n trigger: \"NM1\",\n segments: [\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"N3\", usage: \"required\", max: 1 },\n { id: \"N4\", usage: \"required\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"PER\", usage: \"situational\", max: 2 },\n ],\n});\n\n/**\n * 837 Loop 2010BA — Subscriber Name (NM1*IL). The subscriber identity\n * + member id; address is situational.\n *\n * @example\n * ```ts\n * import { CLAIM_837_LOOP_2010BA } from \"@cosyte/x12\";\n * CLAIM_837_LOOP_2010BA.id; // \"2010BA\"\n * ```\n */\nexport const CLAIM_837_LOOP_2010BA: LoopSpec = defineLoopSpec({\n id: \"2010BA\",\n description: \"837 Loop 2010BA — Subscriber Name\",\n trigger: \"NM1\",\n segments: [\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"N3\", usage: \"situational\", max: 1 },\n { id: \"N4\", usage: \"situational\", max: 1 },\n { id: \"DMG\", usage: \"situational\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"PER\", usage: \"situational\", max: 1 },\n ],\n});\n\n/**\n * 837 Loop 2010BB — Payer Name (NM1*PR). Identifies the payer the\n * provider is billing for this hierarchy.\n *\n * @example\n * ```ts\n * import { CLAIM_837_LOOP_2010BB } from \"@cosyte/x12\";\n * CLAIM_837_LOOP_2010BB.id; // \"2010BB\"\n * ```\n */\nexport const CLAIM_837_LOOP_2010BB: LoopSpec = defineLoopSpec({\n id: \"2010BB\",\n description: \"837 Loop 2010BB — Payer Name\",\n trigger: \"NM1\",\n segments: [\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"N3\", usage: \"situational\", max: 1 },\n { id: \"N4\", usage: \"situational\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"PER\", usage: \"situational\", max: \">1\" },\n ],\n});\n\n/**\n * 837 Loop 2010CA — Patient Name (NM1*QC). Triggered only when Loop 2000C\n * (patient HL) is present (patient ≠ subscriber).\n *\n * @example\n * ```ts\n * import { CLAIM_837_LOOP_2010CA } from \"@cosyte/x12\";\n * CLAIM_837_LOOP_2010CA.id; // \"2010CA\"\n * ```\n */\nexport const CLAIM_837_LOOP_2010CA: LoopSpec = defineLoopSpec({\n id: \"2010CA\",\n description: \"837 Loop 2010CA — Patient Name\",\n trigger: \"NM1\",\n segments: [\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"N3\", usage: \"required\", max: 1 },\n { id: \"N4\", usage: \"required\", max: 1 },\n { id: \"DMG\", usage: \"required\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n ],\n});\n\n/**\n * 837P Loop 2410 — Drug Identification. Triggered by `LIN` inside the\n * 2400 service-line loop. Carries the NDC + dispensed quantity for a\n * professional pharmacy / injectable claim line.\n *\n * @example\n * ```ts\n * import { CLAIM_837P_LOOP_2410 } from \"@cosyte/x12\";\n * CLAIM_837P_LOOP_2410.trigger; // \"LIN\"\n * ```\n */\nexport const CLAIM_837P_LOOP_2410: LoopSpec = defineLoopSpec({\n id: \"2410\",\n description: \"837P Loop 2410 — Drug Identification\",\n trigger: \"LIN\",\n segments: [\n { id: \"LIN\", usage: \"required\", max: 1 },\n { id: \"CTP\", usage: \"situational\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: 1 },\n ],\n});\n\n/**\n * 837 Loop 2430 — Line Adjudication Information. Triggered by `SVD`.\n * Captures a prior payer's adjudication of this line for COB.\n *\n * @example\n * ```ts\n * import { CLAIM_837_LOOP_2430 } from \"@cosyte/x12\";\n * CLAIM_837_LOOP_2430.trigger; // \"SVD\"\n * ```\n */\nexport const CLAIM_837_LOOP_2430: LoopSpec = defineLoopSpec({\n id: \"2430\",\n description: \"837 Loop 2430 — Line Adjudication Information\",\n trigger: \"SVD\",\n segments: [\n { id: \"SVD\", usage: \"required\", max: 1 },\n { id: \"CAS\", usage: \"situational\", max: \">1\" },\n { id: \"DTP\", usage: \"required\", max: 1 },\n { id: \"AMT\", usage: \"situational\", max: 1 },\n ],\n});\n\n// ---------------------------------------------------------------------------\n// Variant-specific service-line loops (Loop 2400).\n// ---------------------------------------------------------------------------\n\n/**\n * 837P Loop 2400 — Service Line (professional). Triggered by `LX`, body\n * led by `SV1`. Nests Loop 2410 (drug) and Loop 2430 (line adjudication).\n *\n * @example\n * ```ts\n * import { CLAIM_837P_LOOP_2400 } from \"@cosyte/x12\";\n * CLAIM_837P_LOOP_2400.trigger; // \"LX\"\n * ```\n */\nexport const CLAIM_837P_LOOP_2400: LoopSpec = defineLoopSpec({\n id: \"2400\",\n description: \"837P Loop 2400 — Service Line (professional)\",\n trigger: \"LX\",\n segments: [\n { id: \"LX\", usage: \"required\", max: 1 },\n { id: \"SV1\", usage: \"required\", max: 1 },\n { id: \"DTP\", usage: \"situational\", max: \">1\" },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"AMT\", usage: \"situational\", max: \">1\" },\n { id: \"NTE\", usage: \"situational\", max: \">1\" },\n { id: \"NM1\", usage: \"situational\", max: \">1\" },\n ],\n children: [CLAIM_837P_LOOP_2410, CLAIM_837_LOOP_2430],\n});\n\n/**\n * 837I Loop 2400 — Service Line (institutional). Body led by `SV2`\n * (revenue code + HCPCS).\n *\n * @example\n * ```ts\n * import { CLAIM_837I_LOOP_2400 } from \"@cosyte/x12\";\n * CLAIM_837I_LOOP_2400.trigger; // \"LX\"\n * ```\n */\nexport const CLAIM_837I_LOOP_2400: LoopSpec = defineLoopSpec({\n id: \"2400\",\n description: \"837I Loop 2400 — Service Line (institutional)\",\n trigger: \"LX\",\n segments: [\n { id: \"LX\", usage: \"required\", max: 1 },\n { id: \"SV2\", usage: \"required\", max: 1 },\n { id: \"DTP\", usage: \"situational\", max: \">1\" },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"AMT\", usage: \"situational\", max: \">1\" },\n { id: \"NTE\", usage: \"situational\", max: \">1\" },\n ],\n children: [CLAIM_837_LOOP_2430],\n});\n\n/**\n * 837D Loop 2400 — Service Line (dental). Body led by `SV3`; per-line\n * `TOO` segments capture tooth + surface detail.\n *\n * @example\n * ```ts\n * import { CLAIM_837D_LOOP_2400 } from \"@cosyte/x12\";\n * CLAIM_837D_LOOP_2400.trigger; // \"LX\"\n * ```\n */\nexport const CLAIM_837D_LOOP_2400: LoopSpec = defineLoopSpec({\n id: \"2400\",\n description: \"837D Loop 2400 — Service Line (dental)\",\n trigger: \"LX\",\n segments: [\n { id: \"LX\", usage: \"required\", max: 1 },\n { id: \"SV3\", usage: \"required\", max: 1 },\n { id: \"TOO\", usage: \"situational\", max: 32 },\n { id: \"DTP\", usage: \"situational\", max: \">1\" },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"AMT\", usage: \"situational\", max: \">1\" },\n { id: \"NTE\", usage: \"situational\", max: \">1\" },\n ],\n children: [CLAIM_837_LOOP_2430],\n});\n\n// ---------------------------------------------------------------------------\n// Shared Loop 2300 (claim information) — children differ by variant.\n// ---------------------------------------------------------------------------\n\n/**\n * Build a Loop 2300 spec with a variant-specific Loop 2400 child. The\n * body of 2300 is identical across P/I/D for the segments Phase 5\n * surfaces; service-line nesting differs.\n *\n * @internal\n */\nfunction makeLoop2300(loop2400: LoopSpec, variantLabel: string): LoopSpec {\n return defineLoopSpec({\n id: \"2300\",\n description: `837${variantLabel} Loop 2300 — Claim Information`,\n trigger: \"CLM\",\n segments: [\n { id: \"CLM\", usage: \"required\", max: 1 },\n { id: \"DTP\", usage: \"situational\", max: \">1\" },\n { id: \"PWK\", usage: \"situational\", max: \">1\" },\n { id: \"CN1\", usage: \"situational\", max: 1 },\n { id: \"AMT\", usage: \"situational\", max: \">1\" },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"NTE\", usage: \"situational\", max: \">1\" },\n { id: \"HI\", usage: \"situational\", max: \">1\" },\n { id: \"K3\", usage: \"situational\", max: \">1\" },\n ],\n children: [loop2400],\n });\n}\n\n/**\n * 837P Loop 2300 — Claim Information (professional). Triggered by `CLM`.\n * Nests {@link CLAIM_837P_LOOP_2400} (SV1-led service lines).\n *\n * @example\n * ```ts\n * import { CLAIM_837P_LOOP_2300 } from \"@cosyte/x12\";\n * CLAIM_837P_LOOP_2300.trigger; // \"CLM\"\n * ```\n */\nexport const CLAIM_837P_LOOP_2300: LoopSpec = makeLoop2300(CLAIM_837P_LOOP_2400, \"P\");\n\n/**\n * 837I Loop 2300 — Claim Information (institutional). Triggered by `CLM`.\n * Nests {@link CLAIM_837I_LOOP_2400} (SV2-led service lines).\n *\n * @example\n * ```ts\n * import { CLAIM_837I_LOOP_2300 } from \"@cosyte/x12\";\n * CLAIM_837I_LOOP_2300.trigger; // \"CLM\"\n * ```\n */\nexport const CLAIM_837I_LOOP_2300: LoopSpec = makeLoop2300(CLAIM_837I_LOOP_2400, \"I\");\n\n/**\n * 837D Loop 2300 — Claim Information (dental). Triggered by `CLM`.\n * Nests {@link CLAIM_837D_LOOP_2400} (SV3-led service lines).\n *\n * @example\n * ```ts\n * import { CLAIM_837D_LOOP_2300 } from \"@cosyte/x12\";\n * CLAIM_837D_LOOP_2300.trigger; // \"CLM\"\n * ```\n */\nexport const CLAIM_837D_LOOP_2300: LoopSpec = makeLoop2300(CLAIM_837D_LOOP_2400, \"D\");\n\n// ---------------------------------------------------------------------------\n// HL group loops 2000A / 2000B / 2000C.\n// ---------------------------------------------------------------------------\n\n/**\n * Build a Loop 2000C (Patient HL) spec carrying a variant-specific Loop\n * 2300. @internal\n */\nfunction makeLoop2000C(loop2300: LoopSpec, variantLabel: string): LoopSpec {\n return defineLoopSpec({\n id: \"2000C\",\n description: `837${variantLabel} Loop 2000C — Patient Hierarchical Level`,\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"PAT\", usage: \"required\", max: 1 },\n ],\n children: [CLAIM_837_LOOP_2010CA, loop2300],\n });\n}\n\n/**\n * Build a Loop 2000B (Subscriber HL) spec carrying the variant's Loop\n * 2000C + Loop 2300. @internal\n */\nfunction makeLoop2000B(loop2300: LoopSpec, loop2000C: LoopSpec, variantLabel: string): LoopSpec {\n return defineLoopSpec({\n id: \"2000B\",\n description: `837${variantLabel} Loop 2000B — Subscriber Hierarchical Level`,\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"SBR\", usage: \"required\", max: 1 },\n { id: \"PAT\", usage: \"situational\", max: 1 },\n ],\n children: [CLAIM_837_LOOP_2010BA, CLAIM_837_LOOP_2010BB, loop2000C, loop2300],\n });\n}\n\n/**\n * Build a Loop 2000A (Billing Provider HL) spec carrying the variant's\n * Loop 2010AA + Loop 2000B. @internal\n */\nfunction makeLoop2000A(loop2000B: LoopSpec, variantLabel: string): LoopSpec {\n return defineLoopSpec({\n id: \"2000A\",\n description: `837${variantLabel} Loop 2000A — Billing Provider Hierarchical Level`,\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"PRV\", usage: \"situational\", max: 1 },\n { id: \"CUR\", usage: \"situational\", max: 1 },\n ],\n children: [CLAIM_837_LOOP_2010AA, loop2000B],\n });\n}\n\nconst PROFESSIONAL_2000C = makeLoop2000C(CLAIM_837P_LOOP_2300, \"P\");\nconst PROFESSIONAL_2000B = makeLoop2000B(CLAIM_837P_LOOP_2300, PROFESSIONAL_2000C, \"P\");\n\nconst INSTITUTIONAL_2000C = makeLoop2000C(CLAIM_837I_LOOP_2300, \"I\");\nconst INSTITUTIONAL_2000B = makeLoop2000B(CLAIM_837I_LOOP_2300, INSTITUTIONAL_2000C, \"I\");\n\nconst DENTAL_2000C = makeLoop2000C(CLAIM_837D_LOOP_2300, \"D\");\nconst DENTAL_2000B = makeLoop2000B(CLAIM_837D_LOOP_2300, DENTAL_2000C, \"D\");\n\n/**\n * 837P Loop 2000A — Billing Provider Hierarchical Level (professional).\n * Top of the HL tree for professional claims. Nests Loop 2010AA (Billing\n * Provider Name) and Loop 2000B (Subscriber HL).\n *\n * @example\n * ```ts\n * import { CLAIM_837P_LOOP_2000A } from \"@cosyte/x12\";\n * CLAIM_837P_LOOP_2000A.id; // \"2000A\"\n * ```\n */\nexport const CLAIM_837P_LOOP_2000A: LoopSpec = makeLoop2000A(PROFESSIONAL_2000B, \"P\");\n\n/**\n * 837I Loop 2000A — Billing Provider Hierarchical Level (institutional).\n *\n * @example\n * ```ts\n * import { CLAIM_837I_LOOP_2000A } from \"@cosyte/x12\";\n * CLAIM_837I_LOOP_2000A.id; // \"2000A\"\n * ```\n */\nexport const CLAIM_837I_LOOP_2000A: LoopSpec = makeLoop2000A(INSTITUTIONAL_2000B, \"I\");\n\n/**\n * 837D Loop 2000A — Billing Provider Hierarchical Level (dental).\n *\n * @example\n * ```ts\n * import { CLAIM_837D_LOOP_2000A } from \"@cosyte/x12\";\n * CLAIM_837D_LOOP_2000A.id; // \"2000A\"\n * ```\n */\nexport const CLAIM_837D_LOOP_2000A: LoopSpec = makeLoop2000A(DENTAL_2000B, \"D\");\n\n/**\n * 837 Loop 1000A — Submitter Name. Same across variants.\n *\n * @example\n * ```ts\n * import { CLAIM_837_LOOP_1000A } from \"@cosyte/x12\";\n * CLAIM_837_LOOP_1000A.id; // \"1000A\"\n * ```\n */\nexport const CLAIM_837_LOOP_1000A: LoopSpec = defineLoopSpec({\n id: \"1000A\",\n description: \"837 Loop 1000A — Submitter Name\",\n trigger: \"NM1\",\n segments: [\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"PER\", usage: \"required\", max: 2 },\n ],\n});\n\n/**\n * 837 Loop 1000B — Receiver Name. Same across variants.\n *\n * @example\n * ```ts\n * import { CLAIM_837_LOOP_1000B } from \"@cosyte/x12\";\n * CLAIM_837_LOOP_1000B.id; // \"1000B\"\n * ```\n */\nexport const CLAIM_837_LOOP_1000B: LoopSpec = defineLoopSpec({\n id: \"1000B\",\n description: \"837 Loop 1000B — Receiver Name\",\n trigger: \"NM1\",\n segments: [{ id: \"NM1\", usage: \"required\", max: 1 }],\n});\n","/**\n * Shared Hierarchical Level (HL) handling for the transaction families\n * that walk an HL tree — 271 eligibility (`005010X279A1`), 277 claim\n * status (`005010X212`), and 277CA claim acknowledgment (`005010X214`).\n * The 837 claim helper carries its own copy (its level set + parent map\n * differ); this module factors the **identical safety primitive** —\n * HL-02 parent-pointer integrity — for the request/response pairs.\n *\n * **Parent-pointer integrity is the #1 structural safety property of an\n * HL transaction.** HL-01 is this level's sequential id; HL-02 names its\n * parent's id; HL-03 is the level code (X12 0735 — `20` Information\n * Source, `21` Information Receiver, `19` Provider of Service, `22`\n * Subscriber, `23` Dependent). The walker validates that HL-02 references\n * an earlier-emitted HL-01 in the same transaction AND that the parent's\n * level matches the TR3-required parent for this level. Violations emit\n * `X12_HL_PARENT_MISMATCH` / `X12_HL_PARENT_LEVEL_INVALID` — the walker\n * NEVER silently re-numbers the hierarchy; the verbatim declared pointer\n * stays on the captured level.\n */\n\nimport { elementOptional, elementValue, type X12Segment } from \"../../parser/segment.js\";\nimport type { Delimiters, X12Position } from \"../../parser/types.js\";\nimport {\n hlParentLevelInvalid,\n hlParentMismatch,\n type X12ParseWarning,\n} from \"../../parser/warnings.js\";\n\n/**\n * X12 0735 Hierarchical Level Codes used by the 270/271 and 276/277(/CA)\n * loop hierarchies. `INFORMATION_SOURCE` (`20`) is the payer at the top;\n * `PROVIDER_OF_SERVICE` (`19`) appears in the 277 / 277CA trees between\n * the receiver and the patient.\n *\n * @example\n * ```ts\n * import { HL_LEVEL_CODES } from \"@cosyte/x12\";\n * HL_LEVEL_CODES.INFORMATION_SOURCE; // \"20\"\n * HL_LEVEL_CODES.SUBSCRIBER; // \"22\"\n * ```\n */\nexport const HL_LEVEL_CODES = Object.freeze({\n INFORMATION_SOURCE: \"20\",\n INFORMATION_RECEIVER: \"21\",\n PROVIDER_OF_SERVICE: \"19\",\n SUBSCRIBER: \"22\",\n DEPENDENT: \"23\",\n});\n\n/**\n * One HL segment captured during an eligibility / claim-status walk. The\n * hierarchy is the structural safety primitive — see the module doc. The\n * verbatim declared `parentHlId` is always preserved even when it fails\n * validation (the parser never re-numbers).\n *\n * @example\n * ```ts\n * import type { X12Hl } from \"@cosyte/x12\";\n * declare const hl: X12Hl;\n * hl.hlId; // \"3\"\n * hl.parentHlId; // \"2\" (undefined at the information-source top level)\n * hl.levelCode; // \"22\" (Subscriber)\n * hl.hasChild; // \"1\"\n * ```\n */\nexport interface X12Hl {\n readonly hlId: string;\n readonly parentHlId: string | undefined;\n readonly levelCode: string;\n readonly hasChild: string;\n}\n\n/**\n * Decode an HL segment into the immutable {@link X12Hl} shape. All four\n * elements are read verbatim; HL-02 is optional (absent at a top-level\n * HL).\n *\n * @internal\n */\nexport function decodeHl(seg: X12Segment, delimiters: Delimiters): X12Hl {\n return Object.freeze({\n hlId: elementValue(seg, 1, delimiters),\n parentHlId: elementOptional(seg, 2, delimiters),\n levelCode: elementValue(seg, 3, delimiters),\n hasChild: elementValue(seg, 4, delimiters),\n });\n}\n\n/**\n * Validate an HL's parent pointer against the index of earlier-emitted\n * HLs and a per-transaction `expectedParentLevel` map (level code →\n * required parent level code; `undefined` value = a legitimately\n * top-level code with no parent). Pushes `X12_HL_PARENT_MISMATCH` /\n * `X12_HL_PARENT_LEVEL_INVALID` on violation; never throws, never\n * re-numbers. A level code absent from the map is treated as an unknown\n * level — no synthesized expectation, only the absent-parent check is\n * skipped.\n *\n * @internal\n */\nexport function validateHl(\n hl: X12Hl,\n index: ReadonlyMap<string, X12Hl>,\n expectedParentLevel: Readonly<Record<string, string | undefined>>,\n position: X12Position,\n warnings: X12ParseWarning[],\n): void {\n const hasExpectation = Object.prototype.hasOwnProperty.call(expectedParentLevel, hl.levelCode);\n const expectedParent = hasExpectation ? expectedParentLevel[hl.levelCode] : undefined;\n if (expectedParent === undefined) {\n // Top-level code (parent must be absent) or an unknown level (no\n // synthesized expectation — surfaced verbatim).\n if (hasExpectation && hl.parentHlId !== undefined) {\n warnings.push(hlParentMismatch(position, hl.hlId, hl.parentHlId));\n }\n return;\n }\n if (hl.parentHlId === undefined) {\n warnings.push(hlParentMismatch(position, hl.hlId, \"\"));\n return;\n }\n const parent = index.get(hl.parentHlId);\n if (parent === undefined) {\n warnings.push(hlParentMismatch(position, hl.hlId, hl.parentHlId));\n return;\n }\n if (parent.levelCode !== expectedParent) {\n warnings.push(\n hlParentLevelInvalid(\n position,\n hl.hlId,\n hl.levelCode,\n parent.hlId,\n parent.levelCode,\n expectedParent,\n ),\n );\n }\n}\n","/**\n * `get271Eligibility` — extract a typed {@link X12Eligibility} from a\n * parsed X12 005010X279A1 271 Health Care Eligibility Benefit Response.\n * Walks the body via a small state machine guided by the HL tree (the\n * dogfooded loop spec lives in `./loop-spec.ts`). Lenient on parse: every\n * recoverable deviation surfaces as a warning, never a throw. Monetary +\n * quantity fields decode as {@link \"../../decimal.js\".X12Decimal} (never\n * `parseFloat`). HL parent-pointer integrity is enforced via the shared\n * {@link \"../shared/hl.js\".validateHl} — mismatches emit\n * `X12_HL_PARENT_MISMATCH` / `X12_HL_PARENT_LEVEL_INVALID`; the walker\n * NEVER silently re-numbers the hierarchy.\n *\n * **TRN echo is the safety-critical property of a 271.** Every TRN is\n * captured verbatim onto its enclosing subscriber / dependent so a\n * provider can re-associate the response with the 270 request it sent.\n *\n * Phase 6 known limitations (documented in CHANGELOG):\n * - **AAA request-validation segments** (rejection reasons at the source /\n * receiver / subscriber level) are preserved on `tx.segments` verbatim\n * but not yet typed onto the model.\n * - **HSD health-service-delivery** detail inside Loop 2110 is not\n * destructured (the EB benefit line carries the headline fields).\n * - **III injury/illness** + **LS/LE loop markers** are preserved verbatim,\n * not typed.\n *\n * Spec source: WPC TR3 `005010X279A1` — Health Care Eligibility Benefit\n * Inquiry and Response (270/271).\n */\n\nimport type { X12Decimal } from \"../../decimal.js\";\nimport { lookupServiceType } from \"../../code-lists/service-type.js\";\nimport {\n elementDecimal,\n elementOptional,\n elementValue,\n getAllSegmentValues,\n type X12Segment,\n} from \"../../parser/segment.js\";\nimport type { Delimiters, X12Position, X12TransactionSet } from \"../../parser/types.js\";\nimport type { X12ParseWarning } from \"../../parser/warnings.js\";\nimport { decodeHl, HL_LEVEL_CODES, validateHl, type X12Hl } from \"../shared/hl.js\";\nimport type {\n X12Eligibility,\n X12EligibilityBenefit,\n X12EligibilityDate,\n X12EligibilityDependent,\n X12EligibilityEntity,\n X12EligibilityMember,\n X12EligibilityReference,\n X12EligibilityServiceType,\n X12EligibilitySubscriber,\n X12EligibilityTrace,\n} from \"./types.js\";\n\n/**\n * Per-level expected parent level for the 271 HL tree. Information source\n * (`20`) has no parent; receiver (`21`) parents to source; subscriber\n * (`22`) parents to receiver; dependent (`23`) parents to subscriber.\n * Violations fire `X12_HL_PARENT_LEVEL_INVALID`. @internal\n */\nconst EXPECTED_PARENT_LEVEL: Readonly<Record<string, string | undefined>> = Object.freeze({\n [HL_LEVEL_CODES.INFORMATION_SOURCE]: undefined,\n [HL_LEVEL_CODES.INFORMATION_RECEIVER]: HL_LEVEL_CODES.INFORMATION_SOURCE,\n [HL_LEVEL_CODES.SUBSCRIBER]: HL_LEVEL_CODES.INFORMATION_RECEIVER,\n [HL_LEVEL_CODES.DEPENDENT]: HL_LEVEL_CODES.SUBSCRIBER,\n});\n\n/**\n * Extract a typed {@link X12Eligibility} from a 271 transaction set. Pure\n * function — no I/O, no global state. Returns `undefined` only when the\n * input transaction's ST-01 is not `\"271\"` (mis-routed call); every other\n * deviation is recoverable and surfaces on `result.warnings`.\n *\n * @example\n * ```ts\n * import { parseX12, get271Eligibility } from \"@cosyte/x12\";\n * const ix = parseX12(raw);\n * for (const group of ix.groups) {\n * for (const tx of group.transactions) {\n * if (tx.st.elements[1] !== \"271\") continue;\n * const elig = get271Eligibility(ix.delimiters, tx);\n * for (const sub of elig?.subscribers ?? []) {\n * sub.traces[0]?.referenceId; // echoed 270 trace number\n * sub.benefits[0]?.eligibilityCode; // \"1\" (Active Coverage)\n * }\n * }\n * }\n * ```\n */\nexport function get271Eligibility(\n delimiters: Delimiters,\n tx: X12TransactionSet,\n): X12Eligibility | undefined {\n if (tx.st.elements[1] !== \"271\") return undefined;\n\n const warnings: X12ParseWarning[] = [];\n const body = tx.se === undefined ? tx.segments.slice(1) : tx.segments.slice(1, -1);\n\n const hierarchies: X12Hl[] = [];\n const hlIndex: Map<string, X12Hl> = new Map();\n\n const subscribers: X12EligibilitySubscriber[] = [];\n let currentSource: X12EligibilityEntity | undefined;\n let currentReceiver: X12EligibilityEntity | undefined;\n let currentSubscriber: SubscriberAccumulator | undefined;\n let currentDependent: DependentAccumulator | undefined;\n let currentBenefit: BenefitAccumulator | undefined;\n // Which HL level the walker is currently inside (drives NM1 routing).\n let context: \"source\" | \"receiver\" | \"subscriber\" | \"dependent\" | \"other\" = \"other\";\n\n /** Close the in-flight EB line onto the active member (dependent first). */\n const flushBenefit = (): void => {\n if (currentBenefit === undefined) return;\n const owner = currentDependent ?? currentSubscriber;\n owner?.benefits.push(freezeBenefit(currentBenefit));\n currentBenefit = undefined;\n };\n\n /** Close the in-flight dependent onto its subscriber. */\n const flushDependent = (): void => {\n flushBenefit();\n if (currentDependent !== undefined && currentSubscriber !== undefined) {\n currentSubscriber.dependents.push(freezeDependent(currentDependent));\n }\n currentDependent = undefined;\n };\n\n /** Close the in-flight subscriber (with its dependents) onto the result. */\n const flushSubscriber = (): void => {\n flushDependent();\n flushBenefit();\n if (currentSubscriber !== undefined) {\n subscribers.push(freezeSubscriber(currentSubscriber));\n }\n currentSubscriber = undefined;\n };\n\n for (let i = 0; i < body.length; i += 1) {\n const seg = body[i];\n if (seg === undefined) continue;\n const position: X12Position = { segmentIndex: i + 1, transactionIndex: 0 };\n switch (seg.id) {\n case \"HL\": {\n const hl = decodeHl(seg, delimiters);\n hierarchies.push(hl);\n validateHl(hl, hlIndex, EXPECTED_PARENT_LEVEL, position, warnings);\n hlIndex.set(hl.hlId, hl);\n currentBenefit = undefined;\n if (hl.levelCode === HL_LEVEL_CODES.INFORMATION_SOURCE) {\n flushSubscriber();\n currentSource = undefined;\n currentReceiver = undefined;\n context = \"source\";\n } else if (hl.levelCode === HL_LEVEL_CODES.INFORMATION_RECEIVER) {\n flushSubscriber();\n currentReceiver = undefined;\n context = \"receiver\";\n } else if (hl.levelCode === HL_LEVEL_CODES.SUBSCRIBER) {\n flushSubscriber();\n currentSubscriber = openSubscriber(hl, currentSource, currentReceiver);\n context = \"subscriber\";\n } else if (hl.levelCode === HL_LEVEL_CODES.DEPENDENT) {\n flushDependent();\n currentDependent = openDependent(hl);\n context = \"dependent\";\n } else {\n flushSubscriber();\n context = \"other\";\n }\n break;\n }\n case \"TRN\": {\n const trace = decodeTrn(seg, delimiters);\n const owner = currentDependent ?? currentSubscriber;\n owner?.traces.push(trace);\n break;\n }\n case \"NM1\": {\n const qualifier = elementValue(seg, 1, delimiters);\n if (currentBenefit !== undefined) {\n // Loop 2120C/D — benefit-related entity (NM1 inside an EB line).\n currentBenefit.relatedEntities.push(decodeEntity(seg, delimiters));\n break;\n }\n if (context === \"source\") {\n currentSource = decodeEntity(seg, delimiters);\n } else if (context === \"receiver\") {\n currentReceiver = decodeEntity(seg, delimiters);\n } else if (context === \"subscriber\" && currentSubscriber !== undefined) {\n if (currentSubscriber.name === undefined) {\n currentSubscriber.name = openMember(seg, delimiters);\n }\n } else if (context === \"dependent\" && currentDependent !== undefined) {\n if (currentDependent.name === undefined) {\n currentDependent.name = openMember(seg, delimiters);\n }\n }\n void qualifier;\n break;\n }\n case \"N3\": {\n const member = activeMemberName(currentDependent, currentSubscriber);\n if (member !== undefined && currentBenefit === undefined) {\n for (let n = 1; n <= 2; n += 1) {\n const line = elementOptional(seg, n, delimiters);\n if (line !== undefined) member.addressLines.push(line);\n }\n }\n break;\n }\n case \"N4\": {\n const member = activeMemberName(currentDependent, currentSubscriber);\n if (member !== undefined && currentBenefit === undefined) {\n member.city = elementOptional(seg, 1, delimiters);\n member.state = elementOptional(seg, 2, delimiters);\n member.postalCode = elementOptional(seg, 3, delimiters);\n member.countryCode = elementOptional(seg, 4, delimiters);\n }\n break;\n }\n case \"DMG\": {\n const member = activeMemberName(currentDependent, currentSubscriber);\n if (member !== undefined && currentBenefit === undefined) {\n member.dateOfBirth = elementOptional(seg, 2, delimiters);\n member.genderCode = elementOptional(seg, 3, delimiters);\n }\n break;\n }\n case \"REF\": {\n const ref = decodeRef(seg, delimiters);\n if (currentBenefit !== undefined) currentBenefit.references.push(ref);\n else if (currentDependent !== undefined) currentDependent.references.push(ref);\n else if (currentSubscriber !== undefined) currentSubscriber.references.push(ref);\n break;\n }\n case \"DTP\": {\n const date = decodeDtp(seg, delimiters);\n if (date === undefined) break;\n if (currentBenefit !== undefined) currentBenefit.dates.push(date);\n else if (currentDependent !== undefined) currentDependent.dates.push(date);\n else if (currentSubscriber !== undefined) currentSubscriber.dates.push(date);\n break;\n }\n case \"EB\": {\n flushBenefit();\n if (currentSubscriber === undefined && currentDependent === undefined) break;\n currentBenefit = openBenefit(seg, delimiters);\n break;\n }\n case \"MSG\": {\n if (currentBenefit === undefined) break;\n const text = elementOptional(seg, 1, delimiters);\n if (text !== undefined) currentBenefit.messages.push(text);\n break;\n }\n default: {\n // AAA / HSD / III / LS / LE / PER and any other optional segment is\n // preserved on tx.segments verbatim; the v1 surface does not\n // enumerate every segment (additive in later phases).\n break;\n }\n }\n }\n\n flushSubscriber();\n\n return Object.freeze({\n subscribers: Object.freeze(subscribers.slice()),\n hierarchies: Object.freeze(hierarchies.slice()),\n warnings: Object.freeze(warnings.slice()),\n });\n}\n\n// ---------------------------------------------------------------------------\n// Mutable accumulators (frozen into the readonly public shape at the end).\n// ---------------------------------------------------------------------------\n\n/** @internal */\ninterface MemberAccumulator {\n readonly entityIdentifierCode: string;\n readonly entityTypeQualifier: string;\n readonly lastName: string | undefined;\n readonly firstName: string | undefined;\n readonly middleName: string | undefined;\n readonly suffix: string | undefined;\n readonly idQualifier: string | undefined;\n readonly idCode: string | undefined;\n readonly addressLines: string[];\n city: string | undefined;\n state: string | undefined;\n postalCode: string | undefined;\n countryCode: string | undefined;\n dateOfBirth: string | undefined;\n genderCode: string | undefined;\n}\n\n/** @internal */\ninterface SubscriberAccumulator {\n readonly hierarchy: X12Hl | undefined;\n readonly informationSource: X12EligibilityEntity | undefined;\n readonly informationReceiver: X12EligibilityEntity | undefined;\n readonly traces: X12EligibilityTrace[];\n name: MemberAccumulator | undefined;\n readonly references: X12EligibilityReference[];\n readonly dates: X12EligibilityDate[];\n readonly benefits: X12EligibilityBenefit[];\n readonly dependents: X12EligibilityDependent[];\n}\n\n/** @internal */\ninterface DependentAccumulator {\n readonly hierarchy: X12Hl | undefined;\n readonly traces: X12EligibilityTrace[];\n name: MemberAccumulator | undefined;\n readonly references: X12EligibilityReference[];\n readonly dates: X12EligibilityDate[];\n readonly benefits: X12EligibilityBenefit[];\n}\n\n/** @internal */\ninterface BenefitAccumulator {\n readonly eligibilityCode: string;\n readonly coverageLevelCode: string | undefined;\n readonly serviceTypeCodes: X12EligibilityServiceType[];\n readonly insuranceTypeCode: string | undefined;\n readonly planCoverageDescription: string | undefined;\n readonly timePeriodQualifier: string | undefined;\n readonly monetaryAmount: X12Decimal | undefined;\n readonly percent: X12Decimal | undefined;\n readonly quantityQualifier: string | undefined;\n readonly quantity: X12Decimal | undefined;\n readonly authorizationRequired: string | undefined;\n readonly inPlanNetwork: string | undefined;\n readonly references: X12EligibilityReference[];\n readonly dates: X12EligibilityDate[];\n readonly messages: string[];\n readonly relatedEntities: X12EligibilityEntity[];\n}\n\n/** The mutable member name accumulator of the active person, or undefined. @internal */\nfunction activeMemberName(\n dependent: DependentAccumulator | undefined,\n subscriber: SubscriberAccumulator | undefined,\n): MemberAccumulator | undefined {\n return dependent?.name ?? subscriber?.name;\n}\n\n// ---------------------------------------------------------------------------\n// Openers + decoders.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction openSubscriber(\n hierarchy: X12Hl,\n informationSource: X12EligibilityEntity | undefined,\n informationReceiver: X12EligibilityEntity | undefined,\n): SubscriberAccumulator {\n return {\n hierarchy,\n informationSource,\n informationReceiver,\n traces: [],\n name: undefined,\n references: [],\n dates: [],\n benefits: [],\n dependents: [],\n };\n}\n\n/** @internal */\nfunction openDependent(hierarchy: X12Hl): DependentAccumulator {\n return {\n hierarchy,\n traces: [],\n name: undefined,\n references: [],\n dates: [],\n benefits: [],\n };\n}\n\n/** @internal */\nfunction openMember(seg: X12Segment, delimiters: Delimiters): MemberAccumulator {\n return {\n entityIdentifierCode: elementValue(seg, 1, delimiters),\n entityTypeQualifier: elementValue(seg, 2, delimiters),\n lastName: elementOptional(seg, 3, delimiters),\n firstName: elementOptional(seg, 4, delimiters),\n middleName: elementOptional(seg, 5, delimiters),\n suffix: elementOptional(seg, 7, delimiters),\n idQualifier: elementOptional(seg, 8, delimiters),\n idCode: elementOptional(seg, 9, delimiters),\n addressLines: [],\n city: undefined,\n state: undefined,\n postalCode: undefined,\n countryCode: undefined,\n dateOfBirth: undefined,\n genderCode: undefined,\n };\n}\n\n/** @internal */\nfunction decodeEntity(seg: X12Segment, delimiters: Delimiters): X12EligibilityEntity {\n return Object.freeze({\n entityIdentifierCode: elementValue(seg, 1, delimiters),\n entityTypeQualifier: elementValue(seg, 2, delimiters),\n name: elementValue(seg, 3, delimiters),\n idQualifier: elementOptional(seg, 8, delimiters),\n idCode: elementOptional(seg, 9, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeTrn(seg: X12Segment, delimiters: Delimiters): X12EligibilityTrace {\n return Object.freeze({\n traceTypeCode: elementValue(seg, 1, delimiters),\n referenceId: elementValue(seg, 2, delimiters),\n originatingCompanyId: elementOptional(seg, 3, delimiters),\n supplementalReferenceId: elementOptional(seg, 4, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeRef(seg: X12Segment, delimiters: Delimiters): X12EligibilityReference {\n return Object.freeze({\n qualifier: elementValue(seg, 1, delimiters),\n value: elementValue(seg, 2, delimiters),\n description: elementOptional(seg, 3, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeDtp(seg: X12Segment, delimiters: Delimiters): X12EligibilityDate | undefined {\n const qualifier = elementOptional(seg, 1, delimiters);\n const value = elementOptional(seg, 3, delimiters);\n if (qualifier === undefined || value === undefined) return undefined;\n return Object.freeze({\n qualifier,\n formatQualifier: elementValue(seg, 2, delimiters),\n value,\n });\n}\n\n/** @internal */\nfunction openBenefit(seg: X12Segment, delimiters: Delimiters): BenefitAccumulator {\n const serviceTypeCodes: X12EligibilityServiceType[] = [];\n for (const code of getAllSegmentValues(seg, \"03\", delimiters)) {\n if (code === \"\") continue;\n serviceTypeCodes.push(\n Object.freeze({ code, description: lookupServiceType(code)?.description }),\n );\n }\n return {\n eligibilityCode: elementValue(seg, 1, delimiters),\n coverageLevelCode: elementOptional(seg, 2, delimiters),\n serviceTypeCodes,\n insuranceTypeCode: elementOptional(seg, 4, delimiters),\n planCoverageDescription: elementOptional(seg, 5, delimiters),\n timePeriodQualifier: elementOptional(seg, 6, delimiters),\n monetaryAmount: elementDecimal(seg, 7, delimiters),\n percent: elementDecimal(seg, 8, delimiters),\n quantityQualifier: elementOptional(seg, 9, delimiters),\n quantity: elementDecimal(seg, 10, delimiters),\n authorizationRequired: elementOptional(seg, 11, delimiters),\n inPlanNetwork: elementOptional(seg, 12, delimiters),\n references: [],\n dates: [],\n messages: [],\n relatedEntities: [],\n };\n}\n\n// ---------------------------------------------------------------------------\n// Freezing accumulators into the readonly public shape.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction freezeMember(acc: MemberAccumulator): X12EligibilityMember {\n const hasAddress =\n acc.addressLines.length > 0 ||\n acc.city !== undefined ||\n acc.state !== undefined ||\n acc.postalCode !== undefined ||\n acc.countryCode !== undefined;\n return Object.freeze({\n entityIdentifierCode: acc.entityIdentifierCode,\n entityTypeQualifier: acc.entityTypeQualifier,\n lastName: acc.lastName,\n firstName: acc.firstName,\n middleName: acc.middleName,\n suffix: acc.suffix,\n idQualifier: acc.idQualifier,\n idCode: acc.idCode,\n address: hasAddress\n ? Object.freeze({\n lines: Object.freeze(acc.addressLines.slice()),\n city: acc.city,\n state: acc.state,\n postalCode: acc.postalCode,\n countryCode: acc.countryCode,\n })\n : undefined,\n dateOfBirth: acc.dateOfBirth,\n genderCode: acc.genderCode,\n });\n}\n\n/** @internal */\nfunction freezeBenefit(acc: BenefitAccumulator): X12EligibilityBenefit {\n return Object.freeze({\n eligibilityCode: acc.eligibilityCode,\n coverageLevelCode: acc.coverageLevelCode,\n serviceTypeCodes: Object.freeze(acc.serviceTypeCodes.slice()),\n insuranceTypeCode: acc.insuranceTypeCode,\n planCoverageDescription: acc.planCoverageDescription,\n timePeriodQualifier: acc.timePeriodQualifier,\n monetaryAmount: acc.monetaryAmount,\n percent: acc.percent,\n quantityQualifier: acc.quantityQualifier,\n quantity: acc.quantity,\n authorizationRequired: acc.authorizationRequired,\n inPlanNetwork: acc.inPlanNetwork,\n references: Object.freeze(acc.references.slice()),\n dates: Object.freeze(acc.dates.slice()),\n messages: Object.freeze(acc.messages.slice()),\n relatedEntities: Object.freeze(acc.relatedEntities.slice()),\n });\n}\n\n/** @internal */\nfunction freezeDependent(acc: DependentAccumulator): X12EligibilityDependent {\n return Object.freeze({\n hierarchy: acc.hierarchy,\n traces: Object.freeze(acc.traces.slice()),\n name: acc.name === undefined ? undefined : freezeMember(acc.name),\n references: Object.freeze(acc.references.slice()),\n dates: Object.freeze(acc.dates.slice()),\n benefits: Object.freeze(acc.benefits.slice()),\n });\n}\n\n/** @internal */\nfunction freezeSubscriber(acc: SubscriberAccumulator): X12EligibilitySubscriber {\n return Object.freeze({\n hierarchy: acc.hierarchy,\n informationSource: acc.informationSource,\n informationReceiver: acc.informationReceiver,\n traces: Object.freeze(acc.traces.slice()),\n name: acc.name === undefined ? undefined : freezeMember(acc.name),\n references: Object.freeze(acc.references.slice()),\n dates: Object.freeze(acc.dates.slice()),\n benefits: Object.freeze(acc.benefits.slice()),\n dependents: Object.freeze(acc.dependents.slice()),\n });\n}\n","/**\n * Thrown errors raised by the 271 domain builder ({@link\n * \"./build-271.js\".build271}). Distinct from the general `X12BuildError`\n * (a structurally impossible envelope): {@link Eligibility271BuildError} is\n * raised when an eligibility-response spec cannot form a valid HL\n * hierarchy, or a per-level structural precondition fails.\n *\n * The HL spine is the 271's safety primitive — the builder OWNS it,\n * computing every HL-01 id, HL-02 parent pointer (20 → 21 → 22 → 23), and\n * HL-04 has-child flag from the nested\n * informationSources → receivers → subscribers → (dependents) tree, so a\n * structurally inconsistent hierarchy is *unrepresentable* and SE-01 is\n * correct by construction.\n *\n * The read side ({@link \"./get-271.js\".get271Eligibility}) is lenient — a\n * real 271 with a broken HL parent pointer is WARNED, never rejected. The\n * builder takes the opposite stance: it REFUSES rather than emit a\n * hierarchy a downstream consumer would have to repair. A caller that must\n * reproduce a knowingly-malformed payer artifact drops to the general\n * `buildInterchange`, which applies no domain guard.\n */\n\n/**\n * Stable string codes for every {@link Eligibility271BuildError}. Locked\n * here so consumers can narrow exhaustively on `err.code`; additions-only\n * thereafter (renaming any code is a breaking change).\n *\n * - `X12_271_BUILD_INVALID_HIERARCHY` — the nested tree cannot form a valid\n * 271 HL spine (no information sources, a source with no receiver, a\n * receiver with no subscriber). The message carries structural indices +\n * counts only — never a member id / name (PHI discipline).\n * - `X12_271_BUILD_INVALID_SPEC` — a non-hierarchy precondition failed (an\n * over-long ISA-13 interchange control number).\n *\n * @example\n * ```ts\n * import { ELIGIBILITY_271_BUILD_ERROR_CODES, Eligibility271BuildError, build271 } from \"@cosyte/x12\";\n * try {\n * build271(spec);\n * } catch (err) {\n * if (\n * err instanceof Eligibility271BuildError &&\n * err.code === ELIGIBILITY_271_BUILD_ERROR_CODES.X12_271_BUILD_INVALID_HIERARCHY\n * ) {\n * // the hierarchy is impossible — fix the tree, do not emit\n * }\n * }\n * ```\n */\nexport const ELIGIBILITY_271_BUILD_ERROR_CODES = {\n X12_271_BUILD_INVALID_HIERARCHY: \"X12_271_BUILD_INVALID_HIERARCHY\",\n X12_271_BUILD_INVALID_SPEC: \"X12_271_BUILD_INVALID_SPEC\",\n} as const;\n\n/**\n * String-literal union over {@link ELIGIBILITY_271_BUILD_ERROR_CODES}. Used\n * as {@link Eligibility271BuildError}.`code`.\n */\nexport type Eligibility271BuildErrorCode =\n (typeof ELIGIBILITY_271_BUILD_ERROR_CODES)[keyof typeof ELIGIBILITY_271_BUILD_ERROR_CODES];\n\n/**\n * Thrown by {@link \"./build-271.js\".build271} when the supplied eligibility\n * spec cannot be emitted as a conformant, self-consistent 271 — most\n * importantly when its nested tree cannot form a valid HL hierarchy. Carries\n * a stable `code` for programmatic narrowing. Deliberately does NOT extend\n * `X12ParseError` or `X12BuildError` — the domain-refusal distinction\n * matters at the type level.\n *\n * @example\n * ```ts\n * import { Eligibility271BuildError } from \"@cosyte/x12\";\n * try {\n * build271(spec);\n * } catch (err) {\n * if (err instanceof Eligibility271BuildError) {\n * // err.code is one of ELIGIBILITY_271_BUILD_ERROR_CODES\n * }\n * }\n * ```\n */\nexport class Eligibility271BuildError extends Error {\n public readonly code: Eligibility271BuildErrorCode;\n\n /** @internal */\n public constructor(code: Eligibility271BuildErrorCode, message: string) {\n super(message);\n this.name = \"Eligibility271BuildError\";\n this.code = code;\n }\n}\n","/**\n * `build271` — pure-function builder for a 005010X279A1 Health Care\n * Eligibility Benefit Response. NEVER auto-sends, NEVER opens a socket,\n * NEVER touches the filesystem. The library mechanically emits the response\n * it is told; a spec whose informationSources → receivers → subscribers →\n * (dependents) tree cannot form a valid HL hierarchy is REFUSED via {@link\n * \"./build-errors.js\".Eligibility271BuildError}.\n *\n * The HL spine is the 271's safety primitive, so the builder OWNS it: it\n * computes every HL-01 id (sequential within the transaction), HL-02 parent\n * pointer (20 → 21 → 22 → 23), and HL-04 has-child flag from the nested\n * tree. Callers never hand-code the spine — a structurally inconsistent\n * hierarchy is therefore unrepresentable, and the SE-01 segment count is\n * correct by construction.\n *\n * The read side ({@link \"./get-271.js\".get271Eligibility}) is lenient — a\n * real 271 with a broken HL parent pointer is WARNED, never rejected. The\n * builder takes the opposite stance: it REFUSES rather than emit a\n * hierarchy a downstream consumer would have to repair. A caller that must\n * reproduce a knowingly-malformed payer artifact drops to {@link\n * \"../../builder/build-interchange.js\".buildInterchange}, which applies no\n * domain guard.\n *\n * Output shape: a complete {@link X12Interchange} wrapping a single GS..GE\n * functional group (GS-01 `\"HB\"`) containing a single ST..SE 271\n * transaction set (ST-03 `005010X279A1`), spec-clean and round-trippable\n * through {@link parseX12}. The builder emits segments in TR3 loop order so\n * a well-formed spec round-trips through `get271Eligibility`\n * field-for-field.\n */\n\nimport { ELIGIBILITY_271_BUILD_ERROR_CODES, Eligibility271BuildError } from \"./build-errors.js\";\nimport type {\n Build271AddressSpec,\n Build271BenefitSpec,\n Build271DependentSpec,\n Build271EntitySpec,\n Build271InformationReceiverSpec,\n Build271InformationSourceSpec,\n Build271MemberSpec,\n Build271ReferenceSpec,\n Build271Spec,\n Build271SubscriberSpec,\n} from \"./build-271-types.js\";\nimport { parseX12 } from \"../../parser/index.js\";\nimport type { X12Interchange } from \"../../parser/types.js\";\nimport { escapeRelease } from \"../../parser/release.js\";\n\n/** GS-08 / ST-03 version + release emitted for every 271 — the WPC TR3 `005010X279A1`. @internal */\nconst X279A1_VERSION_RELEASE = \"005010X279A1\";\n\n/** GS-01 functional identifier code for the 271. `HB` = Eligibility, Coverage or Benefit Information. @internal */\nconst X12_271_FUNCTIONAL_ID = \"HB\";\n\n/** GS-07 standards agency code — `X` for ASC X12. @internal */\nconst X12_AGENCY_CODE = \"X\";\n\n/** HL-03 level codes for the spine the builder computes. @internal */\nconst HL_LEVEL = { SOURCE: \"20\", RECEIVER: \"21\", SUBSCRIBER: \"22\", DEPENDENT: \"23\" } as const;\n\n/**\n * `build271` — assemble a 005010X279A1 271 around the supplied spec.\n *\n * Refused via {@link \"./build-errors.js\".Eligibility271BuildError}:\n * - No information sources, a source with no receivers, or a receiver with\n * no subscribers → `X12_271_BUILD_INVALID_HIERARCHY`.\n * - An over-long (>9 char) interchange control number →\n * `X12_271_BUILD_INVALID_SPEC`.\n *\n * @example\n * ```ts\n * import { build271, X12Decimal } from \"@cosyte/x12\";\n * const ix = build271({\n * envelope: {\n * senderId: \"MEDPAY\", receiverId: \"PROVIDER\",\n * interchangeDate: \"260601\", interchangeTime: \"1200\",\n * interchangeControlNumber: \"000000001\",\n * groupControlNumber: \"1\", transactionSetControlNumber: \"0001\",\n * },\n * informationSources: [{\n * entity: { entityIdentifierCode: \"PR\", entityTypeQualifier: \"2\", name: \"MEDPAY INSURANCE\", idQualifier: \"PI\", idCode: \"00123\" },\n * receivers: [{\n * entity: { entityIdentifierCode: \"1P\", entityTypeQualifier: \"2\", name: \"ANYTOWN CLINIC\", idQualifier: \"XX\", idCode: \"1234567890\" },\n * subscribers: [{\n * traces: [{ traceTypeCode: \"2\", referenceId: \"ELIG001\" }],\n * name: { entityIdentifierCode: \"IL\", entityTypeQualifier: \"1\", lastName: \"DOE\", firstName: \"JANE\", idQualifier: \"MI\", idCode: \"MBR0001\" },\n * benefits: [{ eligibilityCode: \"1\", coverageLevelCode: \"IND\", serviceTypeCodes: [{ code: \"30\" }], monetaryAmount: X12Decimal.fromString(\"1000.00\")! }],\n * }],\n * }],\n * }],\n * });\n * ```\n */\nexport function build271(spec: Build271Spec): X12Interchange {\n const { envelope } = spec;\n\n // ---- Structural preconditions (refuse an impossible spine) ------------\n\n enforceStructuralSpec(spec);\n\n // ---- Delimiter resolution + escape helper -----------------------------\n\n const elementSeparator = envelope.elementSeparator ?? \"*\";\n const repetitionSeparator = envelope.repetitionSeparator ?? \"^\";\n const componentSeparator = envelope.componentSeparator ?? \":\";\n const segmentTerminator = envelope.segmentTerminator ?? \"~\";\n const delimiters = {\n element: elementSeparator,\n repetition: repetitionSeparator,\n component: componentSeparator,\n segment: segmentTerminator,\n };\n const esc = (value: string): string => escapeRelease(value, delimiters);\n\n const seg = (parts: readonly string[]): string => {\n let end = parts.length;\n while (end > 1 && parts[end - 1] === \"\") end -= 1;\n return parts.slice(0, end).join(elementSeparator) + segmentTerminator;\n };\n\n const ctx: EmitContext = { seg, esc, repetitionSeparator };\n\n // ---- ISA envelope -----------------------------------------------------\n\n const senderQualifier = envelope.senderQualifier ?? \"ZZ\";\n const receiverQualifier = envelope.receiverQualifier ?? \"ZZ\";\n const usageIndicator = envelope.usageIndicator ?? \"P\";\n const interchangeControlNumber = padControl(envelope.interchangeControlNumber, 9);\n const isa =\n [\n \"ISA\",\n \"00\",\n pad(\" \", 10),\n \"00\",\n pad(\" \", 10),\n pad(senderQualifier, 2),\n pad(envelope.senderId, 15),\n pad(receiverQualifier, 2),\n pad(envelope.receiverId, 15),\n pad(envelope.interchangeDate, 6),\n pad(envelope.interchangeTime, 4),\n repetitionSeparator,\n \"00501\",\n interchangeControlNumber,\n \"0\",\n usageIndicator,\n componentSeparator,\n ].join(elementSeparator) + segmentTerminator;\n\n // ---- GS / ST ----------------------------------------------------------\n\n const groupDate = envelope.groupDate ?? expandYY(envelope.interchangeDate);\n const groupTime = envelope.groupTime ?? envelope.interchangeTime;\n const applicationSenderCode = envelope.applicationSenderCode ?? envelope.senderId;\n const applicationReceiverCode = envelope.applicationReceiverCode ?? envelope.receiverId;\n\n const gs = seg([\n \"GS\",\n X12_271_FUNCTIONAL_ID,\n esc(applicationSenderCode),\n esc(applicationReceiverCode),\n groupDate,\n groupTime,\n esc(envelope.groupControlNumber),\n X12_AGENCY_CODE,\n X279A1_VERSION_RELEASE,\n ]);\n\n const stControlNumber = envelope.transactionSetControlNumber;\n const st = seg([\"ST\", \"271\", esc(stControlNumber), X279A1_VERSION_RELEASE]);\n\n // ---- Body segments — emit the computed HL spine depth-first -----------\n\n const body: string[] = [];\n const hlCounter: HlCounter = { next: 1 };\n for (const source of spec.informationSources) {\n emitSource(source, body, ctx, hlCounter);\n }\n\n // ---- SE / GE / IEA ----------------------------------------------------\n\n const seCount = body.length + 2;\n const se = seg([\"SE\", String(seCount), esc(stControlNumber)]);\n const ge = seg([\"GE\", \"1\", esc(envelope.groupControlNumber)]);\n const iea = seg([\"IEA\", \"1\", interchangeControlNumber]);\n\n const raw = isa + gs + st + body.join(\"\") + se + ge + iea;\n\n // Final round-trip through `parseX12` so the returned interchange is\n // bit-identical with the parsed form every other helper consumes.\n return parseX12(raw);\n}\n\n// ---------------------------------------------------------------------------\n// Structural guards.\n// ---------------------------------------------------------------------------\n\n/**\n * Refuse a structurally impossible spec before any emit. Covers the HL\n * spine (no sources / childless source / childless receiver). PHI-clean:\n * messages carry indices + counts, never names / member ids. @internal\n */\nfunction enforceStructuralSpec(spec: Build271Spec): void {\n if (spec.informationSources.length === 0) {\n throw new Eligibility271BuildError(\n ELIGIBILITY_271_BUILD_ERROR_CODES.X12_271_BUILD_INVALID_HIERARCHY,\n \"build271: at least one information source (HL level 20) is required.\",\n );\n }\n for (let s = 0; s < spec.informationSources.length; s += 1) {\n const source = spec.informationSources[s];\n if (source === undefined) continue;\n if (source.receivers.length === 0) {\n throw new Eligibility271BuildError(\n ELIGIBILITY_271_BUILD_ERROR_CODES.X12_271_BUILD_INVALID_HIERARCHY,\n `build271: information source at index ${String(s)} has no receiver (HL level 21) child.`,\n );\n }\n for (let r = 0; r < source.receivers.length; r += 1) {\n const receiver = source.receivers[r];\n if (receiver === undefined) continue;\n if (receiver.subscribers.length === 0) {\n throw new Eligibility271BuildError(\n ELIGIBILITY_271_BUILD_ERROR_CODES.X12_271_BUILD_INVALID_HIERARCHY,\n `build271: receiver at source[${String(s)}].receiver[${String(r)}] has no subscriber (HL level 22) child.`,\n );\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Loop emitters.\n// ---------------------------------------------------------------------------\n\ninterface EmitContext {\n readonly seg: (parts: readonly string[]) => string;\n readonly esc: (value: string) => string;\n readonly repetitionSeparator: string;\n}\n\ninterface HlCounter {\n next: number;\n}\n\n/** Emit a Loop 2000A information source HL + its receiver subtree. @internal */\nfunction emitSource(\n source: Build271InformationSourceSpec,\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n body.push(ctx.seg([\"HL\", hlId, \"\", HL_LEVEL.SOURCE, \"1\"]));\n emitEntity(source.entity, body, ctx);\n for (const receiver of source.receivers) {\n emitReceiver(receiver, hlId, body, ctx, counter);\n }\n}\n\n/** Emit a Loop 2000B information receiver HL + its subscriber subtree. @internal */\nfunction emitReceiver(\n receiver: Build271InformationReceiverSpec,\n parentHlId: string,\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n body.push(ctx.seg([\"HL\", hlId, parentHlId, HL_LEVEL.RECEIVER, \"1\"]));\n emitEntity(receiver.entity, body, ctx);\n for (const subscriber of receiver.subscribers) {\n emitSubscriber(subscriber, hlId, body, ctx, counter);\n }\n}\n\n/** Emit a Loop 2000C subscriber HL + traces / name / refs / dates / benefits / dependents. @internal */\nfunction emitSubscriber(\n subscriber: Build271SubscriberSpec,\n parentHlId: string,\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n const dependents = subscriber.dependents ?? [];\n const hasChild = dependents.length > 0 ? \"1\" : \"0\";\n body.push(ctx.seg([\"HL\", hlId, parentHlId, HL_LEVEL.SUBSCRIBER, hasChild]));\n\n for (const trace of subscriber.traces ?? []) emitTrace(trace, body, ctx);\n if (subscriber.name !== undefined) emitMember(subscriber.name, body, ctx);\n for (const ref of subscriber.references ?? []) body.push(emitRef(ref, ctx));\n for (const date of subscriber.dates ?? []) emitDate(date, body, ctx);\n for (const benefit of subscriber.benefits ?? []) emitBenefit(benefit, body, ctx);\n\n for (const dependent of dependents) {\n emitDependent(dependent, hlId, body, ctx, counter);\n }\n}\n\n/** Emit a Loop 2000D dependent HL + traces / name / refs / dates / benefits. @internal */\nfunction emitDependent(\n dependent: Build271DependentSpec,\n parentHlId: string,\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n body.push(ctx.seg([\"HL\", hlId, parentHlId, HL_LEVEL.DEPENDENT, \"0\"]));\n\n for (const trace of dependent.traces ?? []) emitTrace(trace, body, ctx);\n if (dependent.name !== undefined) emitMember(dependent.name, body, ctx);\n for (const ref of dependent.references ?? []) body.push(emitRef(ref, ctx));\n for (const date of dependent.dates ?? []) emitDate(date, body, ctx);\n for (const benefit of dependent.benefits ?? []) emitBenefit(benefit, body, ctx);\n}\n\n/** Emit an NM1 entity (payer / provider / benefit-related). @internal */\nfunction emitEntity(entity: Build271EntitySpec, body: string[], ctx: EmitContext): void {\n body.push(\n ctx.seg([\n \"NM1\",\n ctx.esc(entity.entityIdentifierCode),\n ctx.esc(entity.entityTypeQualifier),\n ctx.esc(entity.name),\n \"\",\n \"\",\n \"\",\n \"\",\n ctx.esc(entity.idQualifier ?? \"\"),\n ctx.esc(entity.idCode ?? \"\"),\n ]),\n );\n}\n\n/** Emit an NM1 member name (+ N3/N4 address, DMG demographics). @internal */\nfunction emitMember(member: Build271MemberSpec, body: string[], ctx: EmitContext): void {\n body.push(\n ctx.seg([\n \"NM1\",\n ctx.esc(member.entityIdentifierCode),\n ctx.esc(member.entityTypeQualifier),\n ctx.esc(member.lastName ?? \"\"),\n ctx.esc(member.firstName ?? \"\"),\n ctx.esc(member.middleName ?? \"\"),\n \"\",\n ctx.esc(member.suffix ?? \"\"),\n ctx.esc(member.idQualifier ?? \"\"),\n ctx.esc(member.idCode ?? \"\"),\n ]),\n );\n if (member.address !== undefined) emitAddress(member.address, body, ctx);\n if (member.dateOfBirth !== undefined || member.genderCode !== undefined) {\n body.push(\n ctx.seg([\"DMG\", \"D8\", ctx.esc(member.dateOfBirth ?? \"\"), ctx.esc(member.genderCode ?? \"\")]),\n );\n }\n}\n\n/** Emit N3 + N4 for an address block. @internal */\nfunction emitAddress(address: Build271AddressSpec, body: string[], ctx: EmitContext): void {\n if (address.lines.length > 0) {\n body.push(ctx.seg([\"N3\", ...address.lines.map(ctx.esc)]));\n }\n if (\n address.city !== undefined ||\n address.state !== undefined ||\n address.postalCode !== undefined ||\n address.countryCode !== undefined\n ) {\n body.push(\n ctx.seg([\n \"N4\",\n ctx.esc(address.city ?? \"\"),\n ctx.esc(address.state ?? \"\"),\n ctx.esc(address.postalCode ?? \"\"),\n ctx.esc(address.countryCode ?? \"\"),\n ]),\n );\n }\n}\n\n/**\n * Emit a Loop 2110 EB benefit line + its nested benefit-related entities,\n * REF / DTP, and MSG. EB-03 is a repeating simple element: each Service\n * Type Code is escaped and joined with the raw repetition separator, then\n * passed into `seg` ALREADY-FORMED (never re-escaped). @internal\n */\nfunction emitBenefit(benefit: Build271BenefitSpec, body: string[], ctx: EmitContext): void {\n const serviceTypeElement = (benefit.serviceTypeCodes ?? [])\n .map((s) => ctx.esc(s.code))\n .join(ctx.repetitionSeparator);\n body.push(\n ctx.seg([\n \"EB\",\n ctx.esc(benefit.eligibilityCode),\n ctx.esc(benefit.coverageLevelCode ?? \"\"),\n serviceTypeElement,\n ctx.esc(benefit.insuranceTypeCode ?? \"\"),\n ctx.esc(benefit.planCoverageDescription ?? \"\"),\n ctx.esc(benefit.timePeriodQualifier ?? \"\"),\n benefit.monetaryAmount === undefined ? \"\" : ctx.esc(benefit.monetaryAmount.toString()),\n benefit.percent === undefined ? \"\" : ctx.esc(benefit.percent.toString()),\n ctx.esc(benefit.quantityQualifier ?? \"\"),\n benefit.quantity === undefined ? \"\" : ctx.esc(benefit.quantity.toString()),\n ctx.esc(benefit.authorizationRequired ?? \"\"),\n ctx.esc(benefit.inPlanNetwork ?? \"\"),\n ]),\n );\n\n for (const related of benefit.relatedEntities ?? []) emitEntity(related, body, ctx);\n for (const ref of benefit.references ?? []) body.push(emitRef(ref, ctx));\n for (const date of benefit.dates ?? []) emitDate(date, body, ctx);\n for (const message of benefit.messages ?? []) {\n body.push(ctx.seg([\"MSG\", ctx.esc(message)]));\n }\n}\n\n/** @internal */\nfunction emitTrace(\n trace: {\n traceTypeCode: string;\n referenceId: string;\n originatingCompanyId?: string;\n supplementalReferenceId?: string;\n },\n body: string[],\n ctx: EmitContext,\n): void {\n body.push(\n ctx.seg([\n \"TRN\",\n ctx.esc(trace.traceTypeCode),\n ctx.esc(trace.referenceId),\n ctx.esc(trace.originatingCompanyId ?? \"\"),\n ctx.esc(trace.supplementalReferenceId ?? \"\"),\n ]),\n );\n}\n\n/** @internal */\nfunction emitRef(ref: Build271ReferenceSpec, ctx: EmitContext): string {\n return ctx.seg([\n \"REF\",\n ctx.esc(ref.qualifier),\n ctx.esc(ref.value),\n ctx.esc(ref.description ?? \"\"),\n ]);\n}\n\n/** @internal */\nfunction emitDate(\n date: { qualifier: string; formatQualifier: string; value: string },\n body: string[],\n ctx: EmitContext,\n): void {\n body.push(\n ctx.seg([\"DTP\", ctx.esc(date.qualifier), ctx.esc(date.formatQualifier), ctx.esc(date.value)]),\n );\n}\n\n// ---------------------------------------------------------------------------\n// String helpers — mirror the `build835` / `build837` emit primitives.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction pad(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return value + \" \".repeat(width - value.length);\n return value.slice(0, width);\n}\n\n/**\n * Zero-pad a control number to `width` chars (ISA-13 / IEA-02 are always\n * 9). Throws {@link Eligibility271BuildError} if the value already exceeds\n * the width. @internal\n */\nfunction padControl(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return \"0\".repeat(width - value.length) + value;\n throw new Eligibility271BuildError(\n ELIGIBILITY_271_BUILD_ERROR_CODES.X12_271_BUILD_INVALID_SPEC,\n `build271: control number \"${value}\" exceeds the ${String(width)}-char spec limit.`,\n );\n}\n\n/**\n * Expand a 6-digit YYMMDD into CCYYMMDD for GS-04. Years `00`–`49` are 21st\n * century, `50`–`99` are 20th. A value already in CCYYMMDD form passes\n * through unchanged. @internal\n */\nfunction expandYY(yymmdd: string): string {\n if (yymmdd.length !== 6) return yymmdd;\n const yy = parseInt(yymmdd.slice(0, 2), 10);\n if (Number.isNaN(yy)) return yymmdd;\n const century = yy < 50 ? \"20\" : \"19\";\n return century + yymmdd;\n}\n","/**\n * 271 TR3 `005010X279A1` loop specification — authored through the\n * **public** {@link \"../../loops/define.js\".defineLoopSpec} API. This is\n * the Phase 6 dogfooding gate: the built-in 271 loop hierarchy goes\n * through the SAME factory consumers use for payer-specific companion-\n * guide loops, so a regression in `defineLoopSpec` cannot hide from the\n * built-in extractor.\n *\n * Hierarchy (per WPC TR3 §1.4.2, the HL tree mirrors the 270 request):\n *\n * ```text\n * Header (ST, BHT)\n * Loop 2000A — Information Source HL (HL*..*20) — required, max >1\n * Loop 2100A — Information Source Name (NM1*PR) — required, max 1\n * Loop 2000B — Information Receiver HL (HL*..*21) — required, max >1\n * Loop 2100B — Information Receiver Name (NM1*1P) — required, max 1\n * Loop 2000C — Subscriber HL (HL*..*22) — required, max >1\n * TRN (Subscriber Trace — echoed verbatim from 270) — situational, max >1\n * Loop 2100C — Subscriber Name (NM1*IL) + REF/N3/N4/DMG/DTP\n * Loop 2110C — Subscriber Eligibility / Benefit — situational, max >1\n * EB HSD REF DTP MSG III (Loop 2120C NM1)\n * Loop 2000D — Dependent HL (HL*..*23) — situational, max >1\n * TRN\n * Loop 2100D — Dependent Name (NM1*03) + REF/N3/N4/DMG/DTP\n * Loop 2110D — Dependent Eligibility / Benefit — situational, max >1\n * ```\n *\n * @remarks\n * Phase 6 surfaces the loop spec as a frozen artifact (consumers can read\n * it and assert it matches their companion-guide expectations); the walker\n * in `./get-271.ts` consults the HL level codes to guide its state\n * machine. Loop 2110C and 2110D share the identical EB-anchored shape — a\n * single {@link ELIGIBILITY_271_LOOP_2110} spec is reused under both the\n * subscriber and dependent name loops.\n */\n\nimport { defineLoopSpec } from \"../../loops/define.js\";\nimport type { LoopSpec } from \"../../loops/types.js\";\n\n/**\n * 271 Loop 2110 — Eligibility or Benefit Information. Triggered by `EB`.\n * Reused under both the subscriber (2110C) and dependent (2110D) name\n * loops — the segment shape is identical.\n *\n * @example\n * ```ts\n * import { ELIGIBILITY_271_LOOP_2110 } from \"@cosyte/x12\";\n * ELIGIBILITY_271_LOOP_2110.trigger; // \"EB\"\n * ```\n */\nexport const ELIGIBILITY_271_LOOP_2110: LoopSpec = defineLoopSpec({\n id: \"2110\",\n description: \"271 Loop 2110C/D — Eligibility or Benefit Information\",\n trigger: \"EB\",\n segments: [\n { id: \"EB\", usage: \"required\", max: 1 },\n { id: \"HSD\", usage: \"situational\", max: \">1\" },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"DTP\", usage: \"situational\", max: \">1\" },\n { id: \"MSG\", usage: \"situational\", max: \">1\" },\n { id: \"III\", usage: \"situational\", max: \">1\" },\n { id: \"NM1\", usage: \"situational\", max: \">1\" },\n ],\n});\n\n/**\n * 271 Loop 2100C — Subscriber Name. Triggered by `NM1` (`NM1-01 = \"IL\"`);\n * the qualifier check happens in the walker, not the spec. Nests\n * {@link ELIGIBILITY_271_LOOP_2110}.\n *\n * @example\n * ```ts\n * import { ELIGIBILITY_271_LOOP_2100C } from \"@cosyte/x12\";\n * ELIGIBILITY_271_LOOP_2100C.children[0]?.trigger; // \"EB\"\n * ```\n */\nexport const ELIGIBILITY_271_LOOP_2100C: LoopSpec = defineLoopSpec({\n id: \"2100C\",\n description: \"271 Loop 2100C — Subscriber Name\",\n trigger: \"NM1\",\n segments: [\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"N3\", usage: \"situational\", max: \">1\" },\n { id: \"N4\", usage: \"situational\", max: 1 },\n { id: \"DMG\", usage: \"situational\", max: 1 },\n { id: \"DTP\", usage: \"situational\", max: \">1\" },\n ],\n children: [ELIGIBILITY_271_LOOP_2110],\n});\n\n/**\n * 271 Loop 2100D — Dependent Name. Triggered by `NM1` (`NM1-01 = \"03\"`).\n * Same shape as 2100C; nests {@link ELIGIBILITY_271_LOOP_2110}.\n *\n * @example\n * ```ts\n * import { ELIGIBILITY_271_LOOP_2100D } from \"@cosyte/x12\";\n * ELIGIBILITY_271_LOOP_2100D.id; // \"2100D\"\n * ```\n */\nexport const ELIGIBILITY_271_LOOP_2100D: LoopSpec = defineLoopSpec({\n id: \"2100D\",\n description: \"271 Loop 2100D — Dependent Name\",\n trigger: \"NM1\",\n segments: [\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"N3\", usage: \"situational\", max: \">1\" },\n { id: \"N4\", usage: \"situational\", max: 1 },\n { id: \"DMG\", usage: \"situational\", max: 1 },\n { id: \"DTP\", usage: \"situational\", max: \">1\" },\n ],\n children: [ELIGIBILITY_271_LOOP_2110],\n});\n\n/**\n * 271 Loop 2000A — Information Source HL (payer). Triggered by `HL`\n * (`HL-03 = \"20\"`); the level-code check happens in the walker. Nests the\n * Loop 2100A payer name.\n *\n * @example\n * ```ts\n * import { ELIGIBILITY_271_LOOP_2000A } from \"@cosyte/x12\";\n * ELIGIBILITY_271_LOOP_2000A.trigger; // \"HL\"\n * ```\n */\nexport const ELIGIBILITY_271_LOOP_2000A: LoopSpec = defineLoopSpec({\n id: \"2000A\",\n description: \"271 Loop 2000A — Information Source HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"PER\", usage: \"situational\", max: \">1\" },\n { id: \"AAA\", usage: \"situational\", max: \">1\" },\n ],\n});\n\n/**\n * 271 Loop 2000B — Information Receiver HL (provider). Triggered by `HL`\n * (`HL-03 = \"21\"`). Carries the receiver NM1 + optional REF/N3/N4/PER and\n * request-validation AAA segments.\n *\n * @example\n * ```ts\n * import { ELIGIBILITY_271_LOOP_2000B } from \"@cosyte/x12\";\n * ELIGIBILITY_271_LOOP_2000B.id; // \"2000B\"\n * ```\n */\nexport const ELIGIBILITY_271_LOOP_2000B: LoopSpec = defineLoopSpec({\n id: \"2000B\",\n description: \"271 Loop 2000B — Information Receiver HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"N3\", usage: \"situational\", max: \">1\" },\n { id: \"N4\", usage: \"situational\", max: 1 },\n { id: \"PER\", usage: \"situational\", max: \">1\" },\n { id: \"AAA\", usage: \"situational\", max: \">1\" },\n ],\n});\n\n/**\n * 271 Loop 2000C — Subscriber HL. Triggered by `HL` (`HL-03 = \"22\"`).\n * Carries the echoed subscriber TRN traces and nests\n * {@link ELIGIBILITY_271_LOOP_2100C}.\n *\n * @example\n * ```ts\n * import { ELIGIBILITY_271_LOOP_2000C } from \"@cosyte/x12\";\n * ELIGIBILITY_271_LOOP_2000C.children[0]?.id; // \"2100C\"\n * ```\n */\nexport const ELIGIBILITY_271_LOOP_2000C: LoopSpec = defineLoopSpec({\n id: \"2000C\",\n description: \"271 Loop 2000C — Subscriber HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"TRN\", usage: \"situational\", max: \">1\" },\n ],\n children: [ELIGIBILITY_271_LOOP_2100C],\n});\n\n/**\n * 271 Loop 2000D — Dependent HL. Triggered by `HL` (`HL-03 = \"23\"`).\n * Carries the echoed dependent TRN traces and nests\n * {@link ELIGIBILITY_271_LOOP_2100D}.\n *\n * @example\n * ```ts\n * import { ELIGIBILITY_271_LOOP_2000D } from \"@cosyte/x12\";\n * ELIGIBILITY_271_LOOP_2000D.id; // \"2000D\"\n * ```\n */\nexport const ELIGIBILITY_271_LOOP_2000D: LoopSpec = defineLoopSpec({\n id: \"2000D\",\n description: \"271 Loop 2000D — Dependent HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"TRN\", usage: \"situational\", max: \">1\" },\n ],\n children: [ELIGIBILITY_271_LOOP_2100D],\n});\n","/**\n * `get277Status` / `get277CADisposition` — extract a typed\n * {@link X12ClaimStatusResponse} from a parsed X12 005010 277 Claim Status\n * Response (`005010X212`) or 277CA Claim Acknowledgment (`005010X214`).\n * Both transactions carry `ST-01 = \"277\"`; they share the HL spine + STC\n * composite and are disambiguated by `ST-03`. A single internal walker\n * serves both; the two public entry points differ only in which `ST-03`\n * they accept.\n *\n * Lenient on parse: every recoverable deviation surfaces as a warning,\n * never a throw. Monetary fields decode as\n * {@link \"../../decimal.js\".X12Decimal} (never `parseFloat`). HL\n * parent-pointer integrity is enforced via the shared\n * {@link \"../shared/hl.js\".validateHl} — mismatches emit\n * `X12_HL_PARENT_MISMATCH` / `X12_HL_PARENT_LEVEL_INVALID`; the walker\n * NEVER silently re-numbers. Unknown CSCC / CSC codes preserve their\n * verbatim value and emit `X12_UNKNOWN_CLAIM_STATUS_CATEGORY` /\n * `X12_UNKNOWN_CLAIM_STATUS`.\n *\n * Phase 6 known limitations (documented in CHANGELOG):\n * - **QTY / AMT** claim-summary segments (claim count / amount roll-ups in\n * a 277CA Loop 2200) are preserved on `tx.segments` verbatim but not yet\n * typed onto the model.\n * - **Per-status free-form MSG** beyond STC-12 is not separately surfaced.\n *\n * Spec source: WPC TR3s `005010X212` (277) + `005010X214` (277CA).\n */\n\nimport type { X12Decimal } from \"../../decimal.js\";\nimport { lookupClaimStatus } from \"../../code-lists/claim-status.js\";\nimport { lookupClaimStatusCategory } from \"../../code-lists/claim-status-category.js\";\nimport {\n componentOptional,\n elementDecimal,\n elementOptional,\n elementValue,\n type X12Segment,\n} from \"../../parser/segment.js\";\nimport type { Delimiters, X12Position, X12TransactionSet } from \"../../parser/types.js\";\nimport {\n unknownClaimStatus,\n unknownClaimStatusCategory,\n type X12ParseWarning,\n} from \"../../parser/warnings.js\";\nimport { decodeHl, HL_LEVEL_CODES, validateHl, type X12Hl } from \"../shared/hl.js\";\nimport type {\n X12ClaimStatus,\n X12ClaimStatusResponse,\n X12ServiceLineStatus,\n X12StatusCode,\n X12StatusDate,\n X12StatusEntity,\n X12StatusInfo,\n X12StatusMember,\n X12StatusReference,\n X12StatusTrace,\n} from \"./types.js\";\n\n/** TR3 implementation-convention reference for the 277CA acknowledgment. @internal */\nconst ICR_277CA = \"005010X214\";\n\n/**\n * Per-level expected parent for the 277 / 277CA HL spine. Source (`20`) has\n * no parent; receiver (`21`) → source; service provider (`19`) → receiver;\n * subscriber (`22`) → provider; dependent (`23`) → subscriber. Violations\n * fire `X12_HL_PARENT_LEVEL_INVALID`. @internal\n */\nconst EXPECTED_PARENT_LEVEL: Readonly<Record<string, string | undefined>> = Object.freeze({\n [HL_LEVEL_CODES.INFORMATION_SOURCE]: undefined,\n [HL_LEVEL_CODES.INFORMATION_RECEIVER]: HL_LEVEL_CODES.INFORMATION_SOURCE,\n [HL_LEVEL_CODES.PROVIDER_OF_SERVICE]: HL_LEVEL_CODES.INFORMATION_RECEIVER,\n [HL_LEVEL_CODES.SUBSCRIBER]: HL_LEVEL_CODES.PROVIDER_OF_SERVICE,\n [HL_LEVEL_CODES.DEPENDENT]: HL_LEVEL_CODES.SUBSCRIBER,\n});\n\n/**\n * Extract a typed {@link X12ClaimStatusResponse} from a 277 / 277CA\n * transaction set. Pure function — no I/O, no global state. Returns\n * `undefined` only when `ST-01` is not `\"277\"` (mis-routed call); every\n * other deviation is recoverable and surfaces on `result.warnings`. The\n * `transactionType` discriminator is derived from `ST-03`\n * (`005010X214` → `\"claim-acknowledgment\"`, otherwise `\"claim-status\"`).\n *\n * @example\n * ```ts\n * import { parseX12, get277Status } from \"@cosyte/x12\";\n * const ix = parseX12(raw);\n * for (const group of ix.groups) {\n * for (const tx of group.transactions) {\n * if (tx.st.elements[1] !== \"277\") continue;\n * const status = get277Status(ix.delimiters, tx);\n * for (const claim of status?.claims ?? []) {\n * claim.traces[0]?.referenceId; // echoed 276 trace\n * claim.statuses[0]?.statuses[0]?.statusCode; // \"20\"\n * }\n * }\n * }\n * ```\n */\nexport function get277Status(\n delimiters: Delimiters,\n tx: X12TransactionSet,\n): X12ClaimStatusResponse | undefined {\n if (tx.st.elements[1] !== \"277\") return undefined;\n return walk277(delimiters, tx);\n}\n\n/**\n * Extract a 277CA Claim Acknowledgment (`005010X214`). Returns `undefined`\n * unless the transaction is a 277 whose `ST-03` is `005010X214` — use\n * {@link get277Status} for the general 277 Claim Status Response. The\n * returned model is the same {@link X12ClaimStatusResponse}; the\n * `transactionType` is always `\"claim-acknowledgment\"`.\n *\n * @example\n * ```ts\n * import { parseX12, get277CADisposition } from \"@cosyte/x12\";\n * const ix = parseX12(raw);\n * const tx = ix.groups[0]?.transactions.find((t) => t.st.elements[1] === \"277\");\n * const ack = tx === undefined ? undefined : get277CADisposition(ix.delimiters, tx);\n * ack?.claims[0]?.statuses[0]?.statuses[0]?.categoryCode; // \"A1\" / \"A2\" / \"A3\"\n * ```\n */\nexport function get277CADisposition(\n delimiters: Delimiters,\n tx: X12TransactionSet,\n): X12ClaimStatusResponse | undefined {\n if (tx.st.elements[1] !== \"277\") return undefined;\n if (tx.st.elements[3] !== ICR_277CA) return undefined;\n return walk277(delimiters, tx);\n}\n\n/**\n * Shared 277 / 277CA walk. The HL spine + STC machinery is identical; the\n * caller's `ST-03` gate decides which public surface admits the\n * transaction. @internal\n */\nfunction walk277(delimiters: Delimiters, tx: X12TransactionSet): X12ClaimStatusResponse {\n const warnings: X12ParseWarning[] = [];\n const body = tx.se === undefined ? tx.segments.slice(1) : tx.segments.slice(1, -1);\n const implementationConventionReference = tx.st.elements[3];\n const transactionType =\n implementationConventionReference === ICR_277CA ? \"claim-acknowledgment\" : \"claim-status\";\n\n const hierarchies: X12Hl[] = [];\n const hlIndex: Map<string, X12Hl> = new Map();\n\n const claims: X12ClaimStatus[] = [];\n let currentSource: X12StatusEntity | undefined;\n let currentReceiver: X12StatusEntity | undefined;\n let currentProvider: X12StatusEntity | undefined;\n let currentSubscriber: X12StatusMember | undefined;\n let currentDependent: X12StatusMember | undefined;\n let currentClaim: ClaimAccumulator | undefined;\n let currentServiceLine: ServiceLineAccumulator | undefined;\n let context: \"source\" | \"receiver\" | \"provider\" | \"subscriber\" | \"dependent\" | \"other\" = \"other\";\n\n const flushServiceLine = (): void => {\n if (currentServiceLine !== undefined && currentClaim !== undefined) {\n currentClaim.serviceLines.push(freezeServiceLine(currentServiceLine));\n }\n currentServiceLine = undefined;\n };\n\n const flushClaim = (): void => {\n flushServiceLine();\n if (currentClaim !== undefined) claims.push(freezeClaim(currentClaim));\n currentClaim = undefined;\n };\n\n /** Open a fresh claim accumulator bound to the current HL context. */\n const openClaim = (): ClaimAccumulator => ({\n informationSource: currentSource,\n informationReceiver: currentReceiver,\n serviceProvider: currentProvider,\n subscriber: currentSubscriber,\n dependent: currentDependent,\n traces: [],\n statuses: [],\n references: [],\n dates: [],\n serviceLines: [],\n });\n\n for (let i = 0; i < body.length; i += 1) {\n const seg = body[i];\n if (seg === undefined) continue;\n const position: X12Position = { segmentIndex: i + 1, transactionIndex: 0 };\n switch (seg.id) {\n case \"HL\": {\n flushClaim();\n const hl = decodeHl(seg, delimiters);\n hierarchies.push(hl);\n validateHl(hl, hlIndex, EXPECTED_PARENT_LEVEL, position, warnings);\n hlIndex.set(hl.hlId, hl);\n if (hl.levelCode === HL_LEVEL_CODES.INFORMATION_SOURCE) {\n currentSource = undefined;\n currentReceiver = undefined;\n currentProvider = undefined;\n currentSubscriber = undefined;\n currentDependent = undefined;\n context = \"source\";\n } else if (hl.levelCode === HL_LEVEL_CODES.INFORMATION_RECEIVER) {\n currentReceiver = undefined;\n currentProvider = undefined;\n currentSubscriber = undefined;\n currentDependent = undefined;\n context = \"receiver\";\n } else if (hl.levelCode === HL_LEVEL_CODES.PROVIDER_OF_SERVICE) {\n currentProvider = undefined;\n currentSubscriber = undefined;\n currentDependent = undefined;\n context = \"provider\";\n } else if (hl.levelCode === HL_LEVEL_CODES.SUBSCRIBER) {\n currentSubscriber = undefined;\n currentDependent = undefined;\n context = \"subscriber\";\n } else if (hl.levelCode === HL_LEVEL_CODES.DEPENDENT) {\n currentDependent = undefined;\n context = \"dependent\";\n } else {\n context = \"other\";\n }\n break;\n }\n case \"NM1\": {\n if (currentClaim !== undefined) break;\n switch (context) {\n case \"source\":\n currentSource = decodeEntity(seg, delimiters);\n break;\n case \"receiver\":\n currentReceiver = decodeEntity(seg, delimiters);\n break;\n case \"provider\":\n currentProvider = decodeEntity(seg, delimiters);\n break;\n case \"subscriber\":\n currentSubscriber = decodeMember(seg, delimiters);\n break;\n case \"dependent\":\n currentDependent = decodeMember(seg, delimiters);\n break;\n case \"other\":\n break;\n }\n break;\n }\n case \"TRN\": {\n // A claim-level reassociation trace opens a new Loop 2200.\n flushClaim();\n currentClaim = openClaim();\n currentClaim.traces.push(decodeTrn(seg, delimiters));\n break;\n }\n case \"STC\": {\n const info = decodeStc(seg, delimiters, warnings, position);\n if (currentServiceLine !== undefined) {\n currentServiceLine.statuses.push(info);\n } else {\n // A 277CA provider-level batch ack may emit STC with no TRN —\n // open a claim on first STC so the status is never dropped.\n if (currentClaim === undefined) currentClaim = openClaim();\n currentClaim.statuses.push(info);\n }\n break;\n }\n case \"SVC\": {\n flushServiceLine();\n if (currentClaim === undefined) currentClaim = openClaim();\n currentServiceLine = openServiceLine(seg, delimiters);\n break;\n }\n case \"REF\": {\n const ref = decodeRef(seg, delimiters);\n if (currentServiceLine !== undefined) currentServiceLine.references.push(ref);\n else if (currentClaim !== undefined) currentClaim.references.push(ref);\n break;\n }\n case \"DTP\": {\n const date = decodeDtp(seg, delimiters);\n if (date === undefined) break;\n if (currentServiceLine !== undefined) currentServiceLine.dates.push(date);\n else if (currentClaim !== undefined) currentClaim.dates.push(date);\n break;\n }\n default: {\n // BHT / QTY / AMT / PER / LX and any other optional segment is\n // preserved on tx.segments verbatim; the v1 surface does not\n // enumerate every segment.\n break;\n }\n }\n }\n\n flushClaim();\n\n return Object.freeze({\n transactionType,\n implementationConventionReference,\n claims: Object.freeze(claims.slice()),\n hierarchies: Object.freeze(hierarchies.slice()),\n warnings: Object.freeze(warnings.slice()),\n });\n}\n\n// ---------------------------------------------------------------------------\n// Mutable accumulators (frozen into the readonly public shape at the end).\n// ---------------------------------------------------------------------------\n\n/** @internal */\ninterface ClaimAccumulator {\n readonly informationSource: X12StatusEntity | undefined;\n readonly informationReceiver: X12StatusEntity | undefined;\n readonly serviceProvider: X12StatusEntity | undefined;\n readonly subscriber: X12StatusMember | undefined;\n readonly dependent: X12StatusMember | undefined;\n readonly traces: X12StatusTrace[];\n readonly statuses: X12StatusInfo[];\n readonly references: X12StatusReference[];\n readonly dates: X12StatusDate[];\n readonly serviceLines: X12ServiceLineStatus[];\n}\n\n/** @internal */\ninterface ServiceLineAccumulator {\n readonly serviceIdQualifier: string | undefined;\n readonly procedureCode: string | undefined;\n readonly modifiers: string[];\n readonly lineChargeAmount: X12Decimal | undefined;\n readonly linePaymentAmount: X12Decimal | undefined;\n readonly revenueCode: string | undefined;\n readonly statuses: X12StatusInfo[];\n readonly references: X12StatusReference[];\n readonly dates: X12StatusDate[];\n}\n\n// ---------------------------------------------------------------------------\n// Segment decoders.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction decodeEntity(seg: X12Segment, delimiters: Delimiters): X12StatusEntity {\n return Object.freeze({\n entityIdentifierCode: elementValue(seg, 1, delimiters),\n entityTypeQualifier: elementValue(seg, 2, delimiters),\n name: elementValue(seg, 3, delimiters),\n idQualifier: elementOptional(seg, 8, delimiters),\n idCode: elementOptional(seg, 9, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeMember(seg: X12Segment, delimiters: Delimiters): X12StatusMember {\n return Object.freeze({\n entityIdentifierCode: elementValue(seg, 1, delimiters),\n entityTypeQualifier: elementValue(seg, 2, delimiters),\n lastName: elementOptional(seg, 3, delimiters),\n firstName: elementOptional(seg, 4, delimiters),\n middleName: elementOptional(seg, 5, delimiters),\n suffix: elementOptional(seg, 7, delimiters),\n idQualifier: elementOptional(seg, 8, delimiters),\n idCode: elementOptional(seg, 9, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeTrn(seg: X12Segment, delimiters: Delimiters): X12StatusTrace {\n return Object.freeze({\n traceTypeCode: elementValue(seg, 1, delimiters),\n referenceId: elementValue(seg, 2, delimiters),\n originatingCompanyId: elementOptional(seg, 3, delimiters),\n supplementalReferenceId: elementOptional(seg, 4, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeRef(seg: X12Segment, delimiters: Delimiters): X12StatusReference {\n return Object.freeze({\n qualifier: elementValue(seg, 1, delimiters),\n value: elementValue(seg, 2, delimiters),\n description: elementOptional(seg, 3, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeDtp(seg: X12Segment, delimiters: Delimiters): X12StatusDate | undefined {\n const qualifier = elementOptional(seg, 1, delimiters);\n const value = elementOptional(seg, 3, delimiters);\n if (qualifier === undefined || value === undefined) return undefined;\n return Object.freeze({\n qualifier,\n formatQualifier: elementValue(seg, 2, delimiters),\n value,\n });\n}\n\n/**\n * Decode an STC segment into one {@link X12StatusInfo}. STC-01 / STC-10 /\n * STC-11 are each a C043 Health Care Claim Status composite (CSCC : CSC :\n * entity); the headline date / action / amounts live in STC-02..06; the\n * free-form message in STC-12. @internal\n */\nfunction decodeStc(\n seg: X12Segment,\n delimiters: Delimiters,\n warnings: X12ParseWarning[],\n position: X12Position,\n): X12StatusInfo {\n const statuses: X12StatusCode[] = [];\n for (const elementIndex of [1, 10, 11]) {\n const code = decodeStatusComposite(seg, elementIndex, delimiters, warnings, position);\n if (code !== undefined) statuses.push(code);\n }\n return Object.freeze({\n statusEffectiveDate: elementOptional(seg, 2, delimiters),\n actionCode: elementOptional(seg, 3, delimiters),\n totalChargeAmount: elementDecimal(seg, 4, delimiters),\n paymentAmount: elementDecimal(seg, 5, delimiters),\n adjudicationDate: elementOptional(seg, 6, delimiters),\n message: elementOptional(seg, 12, delimiters),\n statuses: Object.freeze(statuses),\n });\n}\n\n/**\n * Decode one C043 Health Care Claim Status composite at element N. Returns\n * `undefined` when both the category and status components are absent\n * (so STC-10 / STC-11 on a single-status STC don't synthesize empties).\n * Unknown CSCC / CSC codes are preserved verbatim and emit their\n * respective warnings. @internal\n */\nfunction decodeStatusComposite(\n seg: X12Segment,\n n: number,\n delimiters: Delimiters,\n warnings: X12ParseWarning[],\n position: X12Position,\n): X12StatusCode | undefined {\n const categoryCode = componentOptional(seg, n, 1, delimiters);\n const statusCode = componentOptional(seg, n, 2, delimiters);\n const entityCode = componentOptional(seg, n, 3, delimiters);\n if (categoryCode === undefined && statusCode === undefined) return undefined;\n const category = categoryCode === undefined ? undefined : lookupClaimStatusCategory(categoryCode);\n if (categoryCode !== undefined && category === undefined) {\n warnings.push(unknownClaimStatusCategory(position, categoryCode));\n }\n const status = statusCode === undefined ? undefined : lookupClaimStatus(statusCode);\n if (statusCode !== undefined && status === undefined) {\n warnings.push(unknownClaimStatus(position, statusCode));\n }\n return Object.freeze({\n categoryCode: categoryCode ?? \"\",\n categoryDescription: category?.description,\n statusCode: statusCode ?? \"\",\n statusDescription: status?.description,\n entityCode,\n });\n}\n\n/** @internal */\nfunction openServiceLine(seg: X12Segment, delimiters: Delimiters): ServiceLineAccumulator {\n const modifiers: string[] = [];\n for (let comp = 3; comp <= 6; comp += 1) {\n const m = componentOptional(seg, 1, comp, delimiters);\n if (m !== undefined) modifiers.push(m);\n }\n return {\n serviceIdQualifier: componentOptional(seg, 1, 1, delimiters),\n procedureCode: componentOptional(seg, 1, 2, delimiters),\n modifiers,\n lineChargeAmount: elementDecimal(seg, 2, delimiters),\n linePaymentAmount: elementDecimal(seg, 3, delimiters),\n revenueCode: elementOptional(seg, 4, delimiters),\n statuses: [],\n references: [],\n dates: [],\n };\n}\n\n// ---------------------------------------------------------------------------\n// Freezing accumulators into the readonly public shape.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction freezeServiceLine(acc: ServiceLineAccumulator): X12ServiceLineStatus {\n return Object.freeze({\n serviceIdQualifier: acc.serviceIdQualifier,\n procedureCode: acc.procedureCode,\n modifiers: Object.freeze(acc.modifiers.slice()),\n lineChargeAmount: acc.lineChargeAmount,\n linePaymentAmount: acc.linePaymentAmount,\n revenueCode: acc.revenueCode,\n statuses: Object.freeze(acc.statuses.slice()),\n references: Object.freeze(acc.references.slice()),\n dates: Object.freeze(acc.dates.slice()),\n });\n}\n\n/** @internal */\nfunction freezeClaim(acc: ClaimAccumulator): X12ClaimStatus {\n return Object.freeze({\n informationSource: acc.informationSource,\n informationReceiver: acc.informationReceiver,\n serviceProvider: acc.serviceProvider,\n subscriber: acc.subscriber,\n dependent: acc.dependent,\n traces: Object.freeze(acc.traces.slice()),\n statuses: Object.freeze(acc.statuses.slice()),\n references: Object.freeze(acc.references.slice()),\n dates: Object.freeze(acc.dates.slice()),\n serviceLines: Object.freeze(acc.serviceLines.slice()),\n });\n}\n","/**\n * Thrown errors raised by the 277 / 277CA domain builders ({@link\n * \"./build-277.js\".build277} / {@link \"./build-277.js\".build277CA}).\n * Distinct from the general `X12BuildError` (a structurally impossible\n * envelope): {@link ClaimStatus277BuildError} is raised when a claim-status\n * spec cannot form a valid HL hierarchy, or a per-loop structural\n * precondition fails.\n *\n * The HL spine is the 277's safety primitive — the builder OWNS it,\n * computing every HL-01 id, HL-02 parent pointer (20 → 21 → 19 → 22 → 23),\n * and HL-04 has-child flag from the nested informationSources → receivers →\n * providers → subscribers → (dependents) tree, so a structurally\n * inconsistent hierarchy is *unrepresentable* and SE-01 is correct by\n * construction.\n *\n * The read side ({@link \"./get-277.js\".get277Status}) is lenient — a real\n * 277 with a broken HL parent pointer is WARNED, never rejected. The builder\n * takes the opposite stance: it REFUSES rather than emit a hierarchy a\n * downstream consumer would have to repair. A caller that must reproduce a\n * knowingly-malformed payer artifact drops to the general\n * `buildInterchange`, which applies no domain guard.\n */\n\n/**\n * Stable string codes for every {@link ClaimStatus277BuildError}. Locked\n * here so consumers can narrow exhaustively on `err.code`; additions-only\n * thereafter (renaming any code is a breaking change).\n *\n * - `X12_277_BUILD_INVALID_HIERARCHY` — the nested tree cannot form a valid\n * 277 HL spine (no sources, a source with no receiver, a receiver with no\n * provider, a provider with no subscriber, a subscriber with neither\n * claims nor dependents, a dependent with no claim). The message carries\n * structural indices + counts only — never a member id / name.\n * - `X12_277_BUILD_INVALID_SPEC` — a non-hierarchy precondition failed (a\n * claim that would not materialize on read — no trace, no statuses, no\n * service lines; a status whose first composite has no category code; an\n * over-long ISA-13 control number).\n *\n * @example\n * ```ts\n * import { CLAIM_STATUS_277_BUILD_ERROR_CODES, ClaimStatus277BuildError, build277 } from \"@cosyte/x12\";\n * try {\n * build277(spec);\n * } catch (err) {\n * if (\n * err instanceof ClaimStatus277BuildError &&\n * err.code === CLAIM_STATUS_277_BUILD_ERROR_CODES.X12_277_BUILD_INVALID_HIERARCHY\n * ) {\n * // the hierarchy is impossible — fix the tree, do not emit\n * }\n * }\n * ```\n */\nexport const CLAIM_STATUS_277_BUILD_ERROR_CODES = {\n X12_277_BUILD_INVALID_HIERARCHY: \"X12_277_BUILD_INVALID_HIERARCHY\",\n X12_277_BUILD_INVALID_SPEC: \"X12_277_BUILD_INVALID_SPEC\",\n} as const;\n\n/**\n * String-literal union over {@link CLAIM_STATUS_277_BUILD_ERROR_CODES}. Used\n * as {@link ClaimStatus277BuildError}.`code`.\n */\nexport type ClaimStatus277BuildErrorCode =\n (typeof CLAIM_STATUS_277_BUILD_ERROR_CODES)[keyof typeof CLAIM_STATUS_277_BUILD_ERROR_CODES];\n\n/**\n * Thrown by {@link \"./build-277.js\".build277} / {@link\n * \"./build-277.js\".build277CA} when the supplied claim-status spec cannot be\n * emitted as a conformant, self-consistent 277 — most importantly when its\n * nested tree cannot form a valid HL hierarchy. Carries a stable `code` for\n * programmatic narrowing. Deliberately does NOT extend `X12ParseError` or\n * `X12BuildError` — the domain-refusal distinction matters at the type\n * level.\n *\n * @example\n * ```ts\n * import { ClaimStatus277BuildError } from \"@cosyte/x12\";\n * try {\n * build277(spec);\n * } catch (err) {\n * if (err instanceof ClaimStatus277BuildError) {\n * // err.code is one of CLAIM_STATUS_277_BUILD_ERROR_CODES\n * }\n * }\n * ```\n */\nexport class ClaimStatus277BuildError extends Error {\n public readonly code: ClaimStatus277BuildErrorCode;\n\n /** @internal */\n public constructor(code: ClaimStatus277BuildErrorCode, message: string) {\n super(message);\n this.name = \"ClaimStatus277BuildError\";\n this.code = code;\n }\n}\n","/**\n * `build277` / `build277CA` — pure-function builders for a 005010 277 Claim\n * Status Response (`005010X212`) and 277CA Claim Acknowledgment\n * (`005010X214`). NEVER auto-sends, NEVER opens a socket, NEVER touches the\n * filesystem. The library mechanically emits the response it is told; a\n * spec whose informationSources → receivers → providers → subscribers →\n * (dependents) tree cannot form a valid HL hierarchy is REFUSED via {@link\n * \"./build-errors.js\".ClaimStatus277BuildError}.\n *\n * The HL spine is the 277's safety primitive, so the builder OWNS it: it\n * computes every HL-01 id (sequential within the transaction), HL-02 parent\n * pointer (20 → 21 → 19 → 22 → 23), and HL-04 has-child flag from the\n * nested tree. Callers never hand-code the spine — a structurally\n * inconsistent hierarchy is therefore unrepresentable, and the SE-01\n * segment count is correct by construction.\n *\n * The read side ({@link \"./get-277.js\".get277Status}) is lenient — a real\n * 277 with a broken HL parent pointer is WARNED, never rejected. The builder\n * takes the opposite stance: it REFUSES rather than emit a hierarchy a\n * downstream consumer would have to repair. A caller that must reproduce a\n * knowingly-malformed payer artifact drops to {@link\n * \"../../builder/build-interchange.js\".buildInterchange}, which applies no\n * domain guard.\n *\n * Output shape: a complete {@link X12Interchange} wrapping a single GS..GE\n * functional group (GS-01 `\"HN\"`) containing a single ST..SE 277\n * transaction set (ST-03 per variant), spec-clean and round-trippable\n * through {@link parseX12}. The builder emits segments in TR3 loop order so\n * a well-formed spec round-trips through `get277Status` /\n * `get277CADisposition` field-for-field.\n */\n\nimport { CLAIM_STATUS_277_BUILD_ERROR_CODES, ClaimStatus277BuildError } from \"./build-errors.js\";\nimport type {\n Build277ClaimSpec,\n Build277DependentSpec,\n Build277EntitySpec,\n Build277InformationReceiverSpec,\n Build277InformationSourceSpec,\n Build277MemberSpec,\n Build277ProviderSpec,\n Build277ReferenceSpec,\n Build277ServiceLineSpec,\n Build277Spec,\n Build277StatusSpec,\n Build277SubscriberSpec,\n} from \"./build-277-types.js\";\nimport { parseX12 } from \"../../parser/index.js\";\nimport type { X12Interchange } from \"../../parser/types.js\";\nimport { escapeRelease } from \"../../parser/release.js\";\n\n/** GS-01 functional identifier code for the 277. `HN` = Health Care Claim Status Notification. @internal */\nconst X12_277_FUNCTIONAL_ID = \"HN\";\n\n/** GS-07 standards agency code — `X` for ASC X12. @internal */\nconst X12_AGENCY_CODE = \"X\";\n\n/** ST-03 / GS-08 version + release for each builder entry point. @internal */\ntype ClaimStatusVersion = \"005010X212\" | \"005010X214\";\n\n/** HL-03 level codes for the spine the builder computes. @internal */\nconst HL_LEVEL = {\n SOURCE: \"20\",\n RECEIVER: \"21\",\n PROVIDER: \"19\",\n SUBSCRIBER: \"22\",\n DEPENDENT: \"23\",\n} as const;\n\n/**\n * `build277` — assemble a 005010X212 277 Claim Status Response around the\n * supplied spec.\n *\n * @example\n * ```ts\n * import { build277, X12Decimal } from \"@cosyte/x12\";\n * const ix = build277({\n * envelope: {\n * senderId: \"MEDPAY\", receiverId: \"PROVIDER\",\n * interchangeDate: \"260601\", interchangeTime: \"1200\",\n * interchangeControlNumber: \"000000001\",\n * groupControlNumber: \"1\", transactionSetControlNumber: \"0001\",\n * },\n * informationSources: [{\n * entity: { entityIdentifierCode: \"PR\", entityTypeQualifier: \"2\", name: \"MEDPAY INSURANCE\", idQualifier: \"PI\", idCode: \"00123\" },\n * receivers: [{\n * entity: { entityIdentifierCode: \"41\", entityTypeQualifier: \"2\", name: \"CLEARINGHOUSE\", idQualifier: \"46\", idCode: \"CH001\" },\n * providers: [{\n * entity: { entityIdentifierCode: \"1P\", entityTypeQualifier: \"2\", name: \"ANYTOWN CLINIC\", idQualifier: \"XX\", idCode: \"1234567890\" },\n * subscribers: [{\n * member: { entityIdentifierCode: \"QC\", entityTypeQualifier: \"1\", lastName: \"DOE\", firstName: \"JANE\" },\n * claims: [{ trace: { traceTypeCode: \"2\", referenceId: \"CLAIM001\" }, statuses: [{ statuses: [{ categoryCode: \"A2\", statusCode: \"20\" }] }] }],\n * }],\n * }],\n * }],\n * }],\n * });\n * ```\n */\nexport function build277(spec: Build277Spec): X12Interchange {\n return buildClaimStatus(\"005010X212\", spec);\n}\n\n/**\n * `build277CA` — assemble a 005010X214 277CA Claim Acknowledgment around the\n * supplied spec. Identical body to {@link build277}; only the ST-03 / GS-08\n * version differs (so the parsed result is admitted by\n * {@link \"./get-277.js\".get277CADisposition} and carries\n * `transactionType: \"claim-acknowledgment\"`).\n *\n * @example\n * ```ts\n * import { build277CA } from \"@cosyte/x12\";\n * declare const spec: import(\"@cosyte/x12\").Build277Spec;\n * const ix = build277CA(spec); // ST-03 = 005010X214\n * ```\n */\nexport function build277CA(spec: Build277Spec): X12Interchange {\n return buildClaimStatus(\"005010X214\", spec);\n}\n\n/**\n * Shared emit path for both variants. `version` fixes the GS-08 / ST-03\n * reference; everything else is driven by the spec. Mirrors how\n * `build837P/I/D` delegate to a single `buildClaim837`. @internal\n */\nfunction buildClaimStatus(version: ClaimStatusVersion, spec: Build277Spec): X12Interchange {\n const { envelope } = spec;\n\n // ---- Structural preconditions (refuse an impossible spine) ------------\n\n enforceStructuralSpec(spec);\n\n // ---- Delimiter resolution + escape helper -----------------------------\n\n const elementSeparator = envelope.elementSeparator ?? \"*\";\n const repetitionSeparator = envelope.repetitionSeparator ?? \"^\";\n const componentSeparator = envelope.componentSeparator ?? \":\";\n const segmentTerminator = envelope.segmentTerminator ?? \"~\";\n const delimiters = {\n element: elementSeparator,\n repetition: repetitionSeparator,\n component: componentSeparator,\n segment: segmentTerminator,\n };\n const esc = (value: string): string => escapeRelease(value, delimiters);\n\n const seg = (parts: readonly string[]): string => {\n let end = parts.length;\n while (end > 1 && parts[end - 1] === \"\") end -= 1;\n return parts.slice(0, end).join(elementSeparator) + segmentTerminator;\n };\n\n const comp = (components: readonly string[]): string => {\n const escaped = components.map(esc);\n let end = escaped.length;\n while (end > 0 && escaped[end - 1] === \"\") end -= 1;\n return escaped.slice(0, end).join(componentSeparator);\n };\n\n const ctx: EmitContext = { seg, esc, comp };\n\n // ---- ISA envelope -----------------------------------------------------\n\n const senderQualifier = envelope.senderQualifier ?? \"ZZ\";\n const receiverQualifier = envelope.receiverQualifier ?? \"ZZ\";\n const usageIndicator = envelope.usageIndicator ?? \"P\";\n const interchangeControlNumber = padControl(envelope.interchangeControlNumber, 9);\n const isa =\n [\n \"ISA\",\n \"00\",\n pad(\" \", 10),\n \"00\",\n pad(\" \", 10),\n pad(senderQualifier, 2),\n pad(envelope.senderId, 15),\n pad(receiverQualifier, 2),\n pad(envelope.receiverId, 15),\n pad(envelope.interchangeDate, 6),\n pad(envelope.interchangeTime, 4),\n repetitionSeparator,\n \"00501\",\n interchangeControlNumber,\n \"0\",\n usageIndicator,\n componentSeparator,\n ].join(elementSeparator) + segmentTerminator;\n\n // ---- GS / ST ----------------------------------------------------------\n\n const groupDate = envelope.groupDate ?? expandYY(envelope.interchangeDate);\n const groupTime = envelope.groupTime ?? envelope.interchangeTime;\n const applicationSenderCode = envelope.applicationSenderCode ?? envelope.senderId;\n const applicationReceiverCode = envelope.applicationReceiverCode ?? envelope.receiverId;\n\n const gs = seg([\n \"GS\",\n X12_277_FUNCTIONAL_ID,\n esc(applicationSenderCode),\n esc(applicationReceiverCode),\n groupDate,\n groupTime,\n esc(envelope.groupControlNumber),\n X12_AGENCY_CODE,\n version,\n ]);\n\n const stControlNumber = envelope.transactionSetControlNumber;\n const st = seg([\"ST\", \"277\", esc(stControlNumber), version]);\n\n // ---- Body segments — emit the computed HL spine depth-first -----------\n\n const body: string[] = [];\n const hlCounter: HlCounter = { next: 1 };\n for (const source of spec.informationSources) {\n emitSource(source, body, ctx, hlCounter);\n }\n\n // ---- SE / GE / IEA ----------------------------------------------------\n\n const seCount = body.length + 2;\n const se = seg([\"SE\", String(seCount), esc(stControlNumber)]);\n const ge = seg([\"GE\", \"1\", esc(envelope.groupControlNumber)]);\n const iea = seg([\"IEA\", \"1\", interchangeControlNumber]);\n\n const raw = isa + gs + st + body.join(\"\") + se + ge + iea;\n\n // Final round-trip through `parseX12` so the returned interchange is\n // bit-identical with the parsed form every other helper consumes.\n return parseX12(raw);\n}\n\n// ---------------------------------------------------------------------------\n// Structural guards.\n// ---------------------------------------------------------------------------\n\n/**\n * Refuse a structurally impossible spec before any emit. Covers the HL\n * spine (no sources / childless source / receiver / provider; a subscriber\n * with neither claims nor dependents; a dependent with no claims) and the\n * per-claim / per-status preconditions (a claim that would not materialize\n * on read; a status whose first composite has no category code). PHI-clean:\n * messages carry indices + counts, never names / member ids. @internal\n */\nfunction enforceStructuralSpec(spec: Build277Spec): void {\n if (spec.informationSources.length === 0) {\n throw new ClaimStatus277BuildError(\n CLAIM_STATUS_277_BUILD_ERROR_CODES.X12_277_BUILD_INVALID_HIERARCHY,\n \"build277: at least one information source (HL level 20) is required.\",\n );\n }\n for (let s = 0; s < spec.informationSources.length; s += 1) {\n const source = spec.informationSources[s];\n if (source === undefined) continue;\n if (source.receivers.length === 0) {\n throw new ClaimStatus277BuildError(\n CLAIM_STATUS_277_BUILD_ERROR_CODES.X12_277_BUILD_INVALID_HIERARCHY,\n `build277: information source at index ${String(s)} has no receiver (HL level 21) child.`,\n );\n }\n for (let r = 0; r < source.receivers.length; r += 1) {\n const receiver = source.receivers[r];\n if (receiver === undefined) continue;\n if (receiver.providers.length === 0) {\n throw new ClaimStatus277BuildError(\n CLAIM_STATUS_277_BUILD_ERROR_CODES.X12_277_BUILD_INVALID_HIERARCHY,\n `build277: receiver at source[${String(s)}].receiver[${String(r)}] has no provider (HL level 19) child.`,\n );\n }\n for (let p = 0; p < receiver.providers.length; p += 1) {\n const provider = receiver.providers[p];\n if (provider === undefined) continue;\n const locator = `source[${String(s)}].receiver[${String(r)}].provider[${String(p)}]`;\n if (provider.subscribers.length === 0) {\n throw new ClaimStatus277BuildError(\n CLAIM_STATUS_277_BUILD_ERROR_CODES.X12_277_BUILD_INVALID_HIERARCHY,\n `build277: provider at ${locator} has no subscriber (HL level 22) child.`,\n );\n }\n for (let u = 0; u < provider.subscribers.length; u += 1) {\n const subscriber = provider.subscribers[u];\n if (subscriber === undefined) continue;\n enforceSubscriber(subscriber, `${locator}.subscriber[${String(u)}]`);\n }\n }\n }\n }\n}\n\n/** @internal */\nfunction enforceSubscriber(subscriber: Build277SubscriberSpec, locator: string): void {\n const claims = subscriber.claims ?? [];\n const dependents = subscriber.dependents ?? [];\n if (claims.length === 0 && dependents.length === 0) {\n throw new ClaimStatus277BuildError(\n CLAIM_STATUS_277_BUILD_ERROR_CODES.X12_277_BUILD_INVALID_HIERARCHY,\n `build277: subscriber at ${locator} has neither a claim nor a dependent.`,\n );\n }\n for (let c = 0; c < claims.length; c += 1) {\n const claim = claims[c];\n if (claim !== undefined) enforceClaim(claim, `${locator}.claim[${String(c)}]`, c === 0);\n }\n for (let d = 0; d < dependents.length; d += 1) {\n const dependent = dependents[d];\n if (dependent === undefined) continue;\n const depLocator = `${locator}.dependent[${String(d)}]`;\n if (dependent.claims.length === 0) {\n throw new ClaimStatus277BuildError(\n CLAIM_STATUS_277_BUILD_ERROR_CODES.X12_277_BUILD_INVALID_HIERARCHY,\n `build277: dependent at ${depLocator} has no claim.`,\n );\n }\n for (let c = 0; c < dependent.claims.length; c += 1) {\n const claim = dependent.claims[c];\n if (claim !== undefined) enforceClaim(claim, `${depLocator}.claim[${String(c)}]`, c === 0);\n }\n }\n}\n\n/**\n * Refuse a claim that would not materialize on read (no trace AND no\n * statuses AND no service lines) and any status whose first composite lacks\n * a category code. Only a TRN opens a new Loop 2200 on read, so every claim\n * past the first under a subscriber / dependent MUST carry a trace — without\n * one its STC / REF / DTP would silently fold into the prior claim. @internal\n */\nfunction enforceClaim(claim: Build277ClaimSpec, locator: string, isFirst: boolean): void {\n const statuses = claim.statuses ?? [];\n const serviceLines = claim.serviceLines ?? [];\n if (claim.trace === undefined && statuses.length === 0 && serviceLines.length === 0) {\n throw new ClaimStatus277BuildError(\n CLAIM_STATUS_277_BUILD_ERROR_CODES.X12_277_BUILD_INVALID_SPEC,\n `build277: claim at ${locator} has no trace, status, or service line (it would not materialize on read).`,\n );\n }\n if (!isFirst && claim.trace === undefined) {\n throw new ClaimStatus277BuildError(\n CLAIM_STATUS_277_BUILD_ERROR_CODES.X12_277_BUILD_INVALID_SPEC,\n `build277: claim at ${locator} past the first under its subscriber / dependent has no trace (it would merge into the prior claim on read).`,\n );\n }\n for (let i = 0; i < statuses.length; i += 1) {\n enforceStatus(statuses[i], `${locator}.status[${String(i)}]`);\n }\n for (let l = 0; l < serviceLines.length; l += 1) {\n const line = serviceLines[l];\n if (line === undefined) continue;\n const lineStatuses = line.statuses ?? [];\n for (let i = 0; i < lineStatuses.length; i += 1) {\n enforceStatus(lineStatuses[i], `${locator}.line[${String(l)}].status[${String(i)}]`);\n }\n }\n}\n\n/** @internal */\nfunction enforceStatus(status: Build277StatusSpec | undefined, locator: string): void {\n if (status === undefined) return;\n const first = status.statuses[0];\n if (first === undefined || first.categoryCode === \"\") {\n throw new ClaimStatus277BuildError(\n CLAIM_STATUS_277_BUILD_ERROR_CODES.X12_277_BUILD_INVALID_SPEC,\n `build277: STC at ${locator} requires a non-empty category code on its first composite (STC-01).`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Loop emitters.\n// ---------------------------------------------------------------------------\n\ninterface EmitContext {\n readonly seg: (parts: readonly string[]) => string;\n readonly esc: (value: string) => string;\n readonly comp: (components: readonly string[]) => string;\n}\n\ninterface HlCounter {\n next: number;\n}\n\n/** Emit a Loop 2000A information source HL + its receiver subtree. @internal */\nfunction emitSource(\n source: Build277InformationSourceSpec,\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n body.push(ctx.seg([\"HL\", hlId, \"\", HL_LEVEL.SOURCE, \"1\"]));\n emitEntity(source.entity, body, ctx);\n for (const receiver of source.receivers) {\n emitReceiver(receiver, hlId, body, ctx, counter);\n }\n}\n\n/** Emit a Loop 2000B information receiver HL + its provider subtree. @internal */\nfunction emitReceiver(\n receiver: Build277InformationReceiverSpec,\n parentHlId: string,\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n body.push(ctx.seg([\"HL\", hlId, parentHlId, HL_LEVEL.RECEIVER, \"1\"]));\n emitEntity(receiver.entity, body, ctx);\n for (const provider of receiver.providers) {\n emitProvider(provider, hlId, body, ctx, counter);\n }\n}\n\n/** Emit a Loop 2000C service provider HL (level 19) + its subscriber subtree. @internal */\nfunction emitProvider(\n provider: Build277ProviderSpec,\n parentHlId: string,\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n body.push(ctx.seg([\"HL\", hlId, parentHlId, HL_LEVEL.PROVIDER, \"1\"]));\n emitEntity(provider.entity, body, ctx);\n for (const subscriber of provider.subscribers) {\n emitSubscriber(subscriber, hlId, body, ctx, counter);\n }\n}\n\n/**\n * Emit a Loop 2000D subscriber HL + member NM1 + subscriber-level claims +\n * dependents. The member NM1 is emitted BEFORE the first claim because the\n * read side only consumes an NM1 when no claim is open. @internal\n */\nfunction emitSubscriber(\n subscriber: Build277SubscriberSpec,\n parentHlId: string,\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n const dependents = subscriber.dependents ?? [];\n const hasChild = dependents.length > 0 ? \"1\" : \"0\";\n body.push(ctx.seg([\"HL\", hlId, parentHlId, HL_LEVEL.SUBSCRIBER, hasChild]));\n\n if (subscriber.member !== undefined) emitMember(subscriber.member, body, ctx);\n for (const claim of subscriber.claims ?? []) emitClaim(claim, body, ctx);\n\n for (const dependent of dependents) {\n emitDependent(dependent, hlId, body, ctx, counter);\n }\n}\n\n/** Emit a Loop 2000E dependent HL + member NM1 + claims. @internal */\nfunction emitDependent(\n dependent: Build277DependentSpec,\n parentHlId: string,\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n body.push(ctx.seg([\"HL\", hlId, parentHlId, HL_LEVEL.DEPENDENT, \"0\"]));\n\n if (dependent.member !== undefined) emitMember(dependent.member, body, ctx);\n for (const claim of dependent.claims) emitClaim(claim, body, ctx);\n}\n\n/**\n * Emit a Loop 2200 claim. Order is load-bearing: the TRN opens the claim;\n * claim-level STC / REF / DTP must precede any SVC (after an SVC the read\n * side attaches REF / DTP to the line). @internal\n */\nfunction emitClaim(claim: Build277ClaimSpec, body: string[], ctx: EmitContext): void {\n if (claim.trace !== undefined) {\n body.push(\n ctx.seg([\n \"TRN\",\n ctx.esc(claim.trace.traceTypeCode),\n ctx.esc(claim.trace.referenceId),\n ctx.esc(claim.trace.originatingCompanyId ?? \"\"),\n ctx.esc(claim.trace.supplementalReferenceId ?? \"\"),\n ]),\n );\n }\n for (const status of claim.statuses ?? []) emitStatus(status, body, ctx);\n for (const ref of claim.references ?? []) body.push(emitRef(ref, ctx));\n for (const date of claim.dates ?? []) emitDate(date, body, ctx);\n for (const line of claim.serviceLines ?? []) emitServiceLine(line, body, ctx);\n}\n\n/** Emit a Loop 2220 service line (SVC + its STC / REF / DTP). @internal */\nfunction emitServiceLine(line: Build277ServiceLineSpec, body: string[], ctx: EmitContext): void {\n const svc01 = ctx.comp([\n line.serviceIdQualifier ?? \"\",\n line.procedureCode ?? \"\",\n ...(line.modifiers ?? []),\n ]);\n body.push(\n ctx.seg([\n \"SVC\",\n svc01,\n line.lineChargeAmount === undefined ? \"\" : ctx.esc(line.lineChargeAmount.toString()),\n line.linePaymentAmount === undefined ? \"\" : ctx.esc(line.linePaymentAmount.toString()),\n ctx.esc(line.revenueCode ?? \"\"),\n ]),\n );\n for (const status of line.statuses ?? []) emitStatus(status, body, ctx);\n for (const ref of line.references ?? []) body.push(emitRef(ref, ctx));\n for (const date of line.dates ?? []) emitDate(date, body, ctx);\n}\n\n/**\n * Emit one STC segment. STC-01 / STC-10 / STC-11 are C043 composites; the\n * headline date / action / amounts live in STC-02..06; the message in\n * STC-12. @internal\n */\nfunction emitStatus(status: Build277StatusSpec, body: string[], ctx: EmitContext): void {\n const composite = (index: number): string => {\n const code = status.statuses[index];\n if (code === undefined) return \"\";\n return ctx.comp([code.categoryCode, code.statusCode ?? \"\", code.entityCode ?? \"\"]);\n };\n body.push(\n ctx.seg([\n \"STC\",\n composite(0),\n ctx.esc(status.statusEffectiveDate ?? \"\"),\n ctx.esc(status.actionCode ?? \"\"),\n status.totalChargeAmount === undefined ? \"\" : ctx.esc(status.totalChargeAmount.toString()),\n status.paymentAmount === undefined ? \"\" : ctx.esc(status.paymentAmount.toString()),\n ctx.esc(status.adjudicationDate ?? \"\"),\n \"\",\n \"\",\n \"\",\n composite(1),\n composite(2),\n ctx.esc(status.message ?? \"\"),\n ]),\n );\n}\n\n/** Emit an NM1 entity (payer / receiver / provider). @internal */\nfunction emitEntity(entity: Build277EntitySpec, body: string[], ctx: EmitContext): void {\n body.push(\n ctx.seg([\n \"NM1\",\n ctx.esc(entity.entityIdentifierCode),\n ctx.esc(entity.entityTypeQualifier),\n ctx.esc(entity.name),\n \"\",\n \"\",\n \"\",\n \"\",\n ctx.esc(entity.idQualifier ?? \"\"),\n ctx.esc(entity.idCode ?? \"\"),\n ]),\n );\n}\n\n/** Emit an NM1 member name (subscriber / dependent). @internal */\nfunction emitMember(member: Build277MemberSpec, body: string[], ctx: EmitContext): void {\n body.push(\n ctx.seg([\n \"NM1\",\n ctx.esc(member.entityIdentifierCode),\n ctx.esc(member.entityTypeQualifier),\n ctx.esc(member.lastName ?? \"\"),\n ctx.esc(member.firstName ?? \"\"),\n ctx.esc(member.middleName ?? \"\"),\n \"\",\n ctx.esc(member.suffix ?? \"\"),\n ctx.esc(member.idQualifier ?? \"\"),\n ctx.esc(member.idCode ?? \"\"),\n ]),\n );\n}\n\n/** @internal */\nfunction emitRef(ref: Build277ReferenceSpec, ctx: EmitContext): string {\n return ctx.seg([\n \"REF\",\n ctx.esc(ref.qualifier),\n ctx.esc(ref.value),\n ctx.esc(ref.description ?? \"\"),\n ]);\n}\n\n/** @internal */\nfunction emitDate(\n date: { qualifier: string; formatQualifier: string; value: string },\n body: string[],\n ctx: EmitContext,\n): void {\n body.push(\n ctx.seg([\"DTP\", ctx.esc(date.qualifier), ctx.esc(date.formatQualifier), ctx.esc(date.value)]),\n );\n}\n\n// ---------------------------------------------------------------------------\n// String helpers — mirror the `build835` / `build837` emit primitives.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction pad(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return value + \" \".repeat(width - value.length);\n return value.slice(0, width);\n}\n\n/**\n * Zero-pad a control number to `width` chars (ISA-13 / IEA-02 are always\n * 9). Throws {@link ClaimStatus277BuildError} if the value already exceeds\n * the width. @internal\n */\nfunction padControl(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return \"0\".repeat(width - value.length) + value;\n throw new ClaimStatus277BuildError(\n CLAIM_STATUS_277_BUILD_ERROR_CODES.X12_277_BUILD_INVALID_SPEC,\n `build277: control number \"${value}\" exceeds the ${String(width)}-char spec limit.`,\n );\n}\n\n/**\n * Expand a 6-digit YYMMDD into CCYYMMDD for GS-04. Years `00`–`49` are 21st\n * century, `50`–`99` are 20th. A value already in CCYYMMDD form passes\n * through unchanged. @internal\n */\nfunction expandYY(yymmdd: string): string {\n if (yymmdd.length !== 6) return yymmdd;\n const yy = parseInt(yymmdd.slice(0, 2), 10);\n if (Number.isNaN(yy)) return yymmdd;\n const century = yy < 50 ? \"20\" : \"19\";\n return century + yymmdd;\n}\n","/**\n * 277 / 277CA loop specification — authored through the **public**\n * {@link \"../../loops/define.js\".defineLoopSpec} API (the Phase 6\n * dogfooding gate). The 277 Claim Status Response (`005010X212`) and the\n * 277CA Claim Acknowledgment (`005010X214`) share the same HL spine\n * (`20` Information Source → `21` Information Receiver → `19` Service\n * Provider → `22` Subscriber → `23` Dependent) and the same STC-anchored\n * Loop 2200 status-tracking shape; they differ only by `ST-03` and by\n * which levels carry status (277CA can acknowledge at the provider level).\n *\n * Hierarchy (per WPC TR3 X212 §1.4 / X214 §1.4):\n *\n * ```text\n * Header (ST, BHT)\n * Loop 2000A — Information Source HL (HL*..*20)\n * Loop 2100A — Payer Name (NM1*PR)\n * Loop 2000B — Information Receiver HL (HL*..*21)\n * Loop 2100B — Information Receiver Name (NM1*41)\n * Loop 2000C — Service Provider HL (HL*..*19)\n * Loop 2100C — Provider Name (NM1*1P)\n * Loop 2200C — Claim Status Tracking (277CA batch ack) [STC TRN REF DTP]\n * Loop 2000D — Subscriber HL (HL*..*22)\n * Loop 2100D — Subscriber Name (NM1*IL)\n * Loop 2200D — Claim Status Tracking [TRN STC REF DTP]\n * Loop 2220D — Service Line Status [SVC STC REF DTP]\n * Loop 2000E — Dependent HL (HL*..*23)\n * Loop 2100E — Dependent Name (NM1*QC)\n * Loop 2200E — Claim Status Tracking + Loop 2220E Service Line Status\n * ```\n *\n * @remarks\n * The loop spec is surfaced as a frozen artifact; the walker in\n * `./get-277.ts` keys off the HL level codes + the STC/TRN/SVC triggers.\n * Loop 2200 (claim status) and Loop 2220 (service-line status) are shared\n * across the subscriber and dependent branches — one spec each, reused.\n */\n\nimport { defineLoopSpec } from \"../../loops/define.js\";\nimport type { LoopSpec } from \"../../loops/types.js\";\n\n/**\n * 277 Loop 2220 — Service Line Status Information. Triggered by `SVC`.\n * Reused under both the subscriber (2220D) and dependent (2220E) claim\n * status loops.\n *\n * @example\n * ```ts\n * import { STATUS_277_LOOP_2220 } from \"@cosyte/x12\";\n * STATUS_277_LOOP_2220.trigger; // \"SVC\"\n * ```\n */\nexport const STATUS_277_LOOP_2220: LoopSpec = defineLoopSpec({\n id: \"2220\",\n description: \"277 Loop 2220 — Service Line Status Information\",\n trigger: \"SVC\",\n segments: [\n { id: \"SVC\", usage: \"required\", max: 1 },\n { id: \"STC\", usage: \"required\", max: \">1\" },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"DTP\", usage: \"situational\", max: \">1\" },\n ],\n});\n\n/**\n * 277 Loop 2200 — Claim Status Tracking. Triggered by `TRN` (a 277 claim\n * status) — in a 277CA provider-level batch acknowledgment the same loop\n * may open on a standalone `STC`; the walker handles both. Nests\n * {@link STATUS_277_LOOP_2220}.\n *\n * @example\n * ```ts\n * import { STATUS_277_LOOP_2200 } from \"@cosyte/x12\";\n * STATUS_277_LOOP_2200.children[0]?.trigger; // \"SVC\"\n * ```\n */\nexport const STATUS_277_LOOP_2200: LoopSpec = defineLoopSpec({\n id: \"2200\",\n description: \"277 Loop 2200 — Claim Status Tracking\",\n trigger: \"TRN\",\n segments: [\n { id: \"TRN\", usage: \"situational\", max: 1 },\n { id: \"STC\", usage: \"required\", max: \">1\" },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"DTP\", usage: \"situational\", max: \">1\" },\n ],\n children: [STATUS_277_LOOP_2220],\n});\n\n/**\n * 277 Loop 2000A — Information Source HL (payer). Triggered by `HL`\n * (`HL-03 = \"20\"`); the level-code check happens in the walker.\n *\n * @example\n * ```ts\n * import { STATUS_277_LOOP_2000A } from \"@cosyte/x12\";\n * STATUS_277_LOOP_2000A.trigger; // \"HL\"\n * ```\n */\nexport const STATUS_277_LOOP_2000A: LoopSpec = defineLoopSpec({\n id: \"2000A\",\n description: \"277 Loop 2000A — Information Source HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"PER\", usage: \"situational\", max: \">1\" },\n ],\n});\n\n/**\n * 277 Loop 2000B — Information Receiver HL. Triggered by `HL`\n * (`HL-03 = \"21\"`).\n *\n * @example\n * ```ts\n * import { STATUS_277_LOOP_2000B } from \"@cosyte/x12\";\n * STATUS_277_LOOP_2000B.id; // \"2000B\"\n * ```\n */\nexport const STATUS_277_LOOP_2000B: LoopSpec = defineLoopSpec({\n id: \"2000B\",\n description: \"277 Loop 2000B — Information Receiver HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"NM1\", usage: \"required\", max: 1 },\n ],\n});\n\n/**\n * 277 Loop 2000C — Service Provider HL. Triggered by `HL` (`HL-03 = \"19\"`).\n * In a 277CA this level can also carry a Loop 2200 batch acknowledgment\n * (provider-level STC) — nested here as {@link STATUS_277_LOOP_2200}.\n *\n * @example\n * ```ts\n * import { STATUS_277_LOOP_2000C } from \"@cosyte/x12\";\n * STATUS_277_LOOP_2000C.children[0]?.id; // \"2200\"\n * ```\n */\nexport const STATUS_277_LOOP_2000C: LoopSpec = defineLoopSpec({\n id: \"2000C\",\n description: \"277 Loop 2000C — Service Provider HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"NM1\", usage: \"required\", max: 1 },\n ],\n children: [STATUS_277_LOOP_2200],\n});\n\n/**\n * 277 Loop 2000D — Subscriber HL. Triggered by `HL` (`HL-03 = \"22\"`).\n * Carries the subscriber name (2100D) and its claim status tracking\n * (Loop 2200).\n *\n * @example\n * ```ts\n * import { STATUS_277_LOOP_2000D } from \"@cosyte/x12\";\n * STATUS_277_LOOP_2000D.children[0]?.id; // \"2200\"\n * ```\n */\nexport const STATUS_277_LOOP_2000D: LoopSpec = defineLoopSpec({\n id: \"2000D\",\n description: \"277 Loop 2000D — Subscriber HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"NM1\", usage: \"required\", max: 1 },\n ],\n children: [STATUS_277_LOOP_2200],\n});\n\n/**\n * 277 Loop 2000E — Dependent HL. Triggered by `HL` (`HL-03 = \"23\"`).\n * Carries the dependent name (2100E) and its claim status tracking\n * (Loop 2200).\n *\n * @example\n * ```ts\n * import { STATUS_277_LOOP_2000E } from \"@cosyte/x12\";\n * STATUS_277_LOOP_2000E.id; // \"2000E\"\n * ```\n */\nexport const STATUS_277_LOOP_2000E: LoopSpec = defineLoopSpec({\n id: \"2000E\",\n description: \"277 Loop 2000E — Dependent HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"NM1\", usage: \"required\", max: 1 },\n ],\n children: [STATUS_277_LOOP_2200],\n});\n","/**\n * `get820Payments` — extract a typed {@link X12PremiumPayments} from a\n * parsed X12 `005010X218` transaction set (820 Payroll Deducted and Other\n * Group Premium Payment for Insurance Products). Walk the body segments via\n * a small state machine guided by the dogfooded loop spec (see\n * {@link \"./loop-spec.js\".PREMIUM_820_LOOP_2000A}). Lenient on parse: every\n * recoverable deviation is preserved verbatim, never thrown. Money is\n * decoded as {@link \"../../decimal.js\".X12Decimal} (never `parseFloat` —\n * float arithmetic destroys cents on a real-world premium remittance).\n *\n * Spec source: WPC TR3 `005010X218`.\n */\n\nimport { X12Decimal } from \"../../decimal.js\";\nimport {\n collectElementValues,\n elementDecimal,\n elementDecimalOrZero,\n elementOptional,\n elementValue,\n type X12Segment,\n} from \"../../parser/segment.js\";\nimport type { Delimiters, X12Position, X12TransactionSet } from \"../../parser/types.js\";\nimport type { X12ParseWarning } from \"../../parser/warnings.js\";\nimport type {\n X12PremiumAddress,\n X12PremiumAdjustment,\n X12PremiumDate,\n X12PremiumEntity,\n X12PremiumOpenItem,\n X12PremiumParty,\n X12PremiumPaymentHeader,\n X12PremiumPayments,\n X12PremiumPerson,\n X12PremiumReference,\n X12PremiumRemittance,\n X12PremiumTrace,\n} from \"./types.js\";\n\n/**\n * Extract a typed {@link X12PremiumPayments} from an 820 transaction set.\n * Pure function — no I/O, no global state. Returns `undefined` only if the\n * input transaction's ST-01 is not `\"820\"` (mis-routed call); every other\n * deviation is recoverable and the verbatim segments remain on\n * `tx.segments`.\n *\n * @example\n * ```ts\n * import { parseX12, get820Payments } from \"@cosyte/x12\";\n * const ix = parseX12(raw);\n * const tx = ix.groups[0]?.transactions.find((t) => t.st.elements[1] === \"820\");\n * if (tx !== undefined) {\n * const prem = get820Payments(ix.delimiters, tx);\n * prem?.payment.totalPremiumAmount.toString();\n * for (const r of prem?.remittances ?? []) {\n * r.openItems[0]?.amountPaid.toString();\n * }\n * }\n * ```\n */\nexport function get820Payments(\n delimiters: Delimiters,\n tx: X12TransactionSet,\n): X12PremiumPayments | undefined {\n if (tx.st.elements[1] !== \"820\") return undefined;\n\n const warnings: X12ParseWarning[] = [];\n const body = tx.se === undefined ? tx.segments.slice(1) : tx.segments.slice(1, -1);\n\n let payment: X12PremiumPaymentHeader = EMPTY_HEADER;\n const traces: X12PremiumTrace[] = [];\n let receiver: X12PremiumParty | undefined;\n let remitter: X12PremiumParty | undefined;\n let lastParty: \"receiver\" | \"remitter\" | undefined;\n const remittances: RemittanceAccumulator[] = [];\n let current: RemittanceAccumulator | undefined;\n\n /** Close the in-flight remittance loop. */\n const flushRemittance = (): void => {\n if (current !== undefined) remittances.push(current);\n current = undefined;\n };\n\n for (let i = 0; i < body.length; i += 1) {\n const seg = body[i];\n if (seg === undefined) continue;\n const position: X12Position = { segmentIndex: i + 1, transactionIndex: 0 };\n void position;\n switch (seg.id) {\n case \"BPR\": {\n payment = decodeBpr(seg, delimiters);\n break;\n }\n case \"TRN\": {\n traces.push(decodeTrn(seg, delimiters));\n break;\n }\n case \"N1\": {\n // A header-level party. Once a remittance loop is open, N1 belongs\n // to that loop's party identification (Loop 2100A) and is preserved\n // verbatim only — the typed surface carries receiver / remitter at\n // the header.\n if (current !== undefined) break;\n const qualifier = elementValue(seg, 1, delimiters);\n const party = decodeN1(seg, delimiters);\n if (qualifier === \"PE\") {\n receiver = party;\n lastParty = \"receiver\";\n } else if (qualifier === \"PR\" || qualifier === \"RM\") {\n remitter = party;\n lastParty = \"remitter\";\n } else {\n lastParty = undefined;\n }\n break;\n }\n case \"N3\": {\n if (current !== undefined) break;\n const lines = collectElementValues(seg, 1, 2, delimiters);\n if (lastParty === \"receiver\" && receiver !== undefined) {\n receiver = withAddress(receiver, withLines(receiver.address ?? EMPTY_ADDRESS, lines));\n } else if (lastParty === \"remitter\" && remitter !== undefined) {\n remitter = withAddress(remitter, withLines(remitter.address ?? EMPTY_ADDRESS, lines));\n }\n break;\n }\n case \"N4\": {\n if (current !== undefined) break;\n const address = decodeN4(seg, delimiters);\n if (lastParty === \"receiver\" && receiver !== undefined) {\n receiver = withAddress(\n receiver,\n mergeAddress(receiver.address ?? EMPTY_ADDRESS, address),\n );\n } else if (lastParty === \"remitter\" && remitter !== undefined) {\n remitter = withAddress(\n remitter,\n mergeAddress(remitter.address ?? EMPTY_ADDRESS, address),\n );\n }\n break;\n }\n case \"ENT\": {\n // Opens an organization-summary remittance loop (Loop 2000A).\n flushRemittance();\n lastParty = undefined;\n current = openRemittance(decodeEnt(seg, delimiters), undefined);\n break;\n }\n case \"NM1\": {\n // An NM1 immediately after an ENT (no individual, no open items yet)\n // names the party for that organization-summary loop (Loop 2100A).\n // Any other NM1 opens a fresh individual remittance loop.\n const person = decodeNm1(seg, delimiters);\n if (\n current !== undefined &&\n current.individual === undefined &&\n current.openItems.length === 0\n ) {\n current.individual = person;\n } else {\n flushRemittance();\n lastParty = undefined;\n current = openRemittance(undefined, person);\n }\n break;\n }\n case \"RMR\": {\n if (current === undefined) break;\n const item = decodeRmr(seg, delimiters);\n if (item !== undefined) current.openItems.push(item);\n break;\n }\n case \"ADX\": {\n if (current === undefined) break;\n const adjustment = decodeAdx(seg, delimiters);\n if (adjustment !== undefined) current.adjustments.push(adjustment);\n break;\n }\n case \"REF\": {\n const ref = decodeRef(seg, delimiters);\n if (current !== undefined) current.references.push(ref);\n else if (lastParty === \"receiver\" && receiver !== undefined) {\n receiver = withReference(receiver, ref);\n } else if (lastParty === \"remitter\" && remitter !== undefined) {\n remitter = withReference(remitter, ref);\n }\n break;\n }\n case \"DTM\": {\n if (current === undefined) break;\n const date = decodeDtm(seg, delimiters);\n if (date !== undefined) current.dates.push(date);\n break;\n }\n default: {\n // NTE / CUR / PER / RDM / N2 and other optional segments stay on\n // tx.segments verbatim; the v1 typed surface does not enumerate\n // every optional segment.\n break;\n }\n }\n }\n\n flushRemittance();\n\n return Object.freeze({\n payment,\n traces: Object.freeze(traces.slice()),\n receiver,\n remitter,\n remittances: Object.freeze(remittances.map(freezeRemittance)),\n warnings: Object.freeze(warnings.slice()),\n });\n}\n\n// ---------------------------------------------------------------------------\n// Internal accumulator (mutable during the walk, frozen at the end).\n// ---------------------------------------------------------------------------\n\n/** Mutable in-flight remittance loop (Loop 2000A / individual). @internal */\ninterface RemittanceAccumulator {\n readonly entity: X12PremiumEntity | undefined;\n individual: X12PremiumPerson | undefined;\n readonly references: X12PremiumReference[];\n readonly dates: X12PremiumDate[];\n readonly openItems: X12PremiumOpenItem[];\n readonly adjustments: X12PremiumAdjustment[];\n}\n\n/** @internal */\nfunction openRemittance(\n entity: X12PremiumEntity | undefined,\n individual: X12PremiumPerson | undefined,\n): RemittanceAccumulator {\n return {\n entity,\n individual,\n references: [],\n dates: [],\n openItems: [],\n adjustments: [],\n };\n}\n\n/** @internal */\nfunction freezeRemittance(acc: RemittanceAccumulator): X12PremiumRemittance {\n return Object.freeze({\n entity: acc.entity,\n individual: acc.individual,\n references: Object.freeze(acc.references.slice()),\n dates: Object.freeze(acc.dates.slice()),\n openItems: Object.freeze(acc.openItems.slice()),\n adjustments: Object.freeze(acc.adjustments.slice()),\n });\n}\n\n// ---------------------------------------------------------------------------\n// Segment decoders.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction decodeBpr(seg: X12Segment, delimiters: Delimiters): X12PremiumPaymentHeader {\n return Object.freeze({\n transactionHandlingCode: elementValue(seg, 1, delimiters),\n totalPremiumAmount: elementDecimalOrZero(seg, 2, delimiters),\n creditDebitFlag: elementValue(seg, 3, delimiters),\n method: elementValue(seg, 4, delimiters),\n paymentFormatCode: elementOptional(seg, 5, delimiters),\n paymentDate: elementValue(seg, 16, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeTrn(seg: X12Segment, delimiters: Delimiters): X12PremiumTrace {\n return Object.freeze({\n traceTypeCode: elementValue(seg, 1, delimiters),\n referenceId: elementValue(seg, 2, delimiters),\n originatingCompanyId: elementOptional(seg, 3, delimiters),\n originatingCompanySupplementalCode: elementOptional(seg, 4, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeN1(seg: X12Segment, delimiters: Delimiters): X12PremiumParty {\n return Object.freeze({\n entityIdentifierCode: elementValue(seg, 1, delimiters),\n name: elementValue(seg, 2, delimiters),\n idQualifier: elementOptional(seg, 3, delimiters),\n idCode: elementOptional(seg, 4, delimiters),\n address: undefined,\n references: Object.freeze([]),\n });\n}\n\n/** @internal */\nfunction decodeN4(seg: X12Segment, delimiters: Delimiters): X12PremiumAddress {\n return Object.freeze({\n lines: Object.freeze([]),\n city: elementOptional(seg, 1, delimiters),\n state: elementOptional(seg, 2, delimiters),\n postalCode: elementOptional(seg, 3, delimiters),\n countryCode: elementOptional(seg, 4, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeRef(seg: X12Segment, delimiters: Delimiters): X12PremiumReference {\n return Object.freeze({\n qualifier: elementValue(seg, 1, delimiters),\n value: elementValue(seg, 2, delimiters),\n description: elementOptional(seg, 3, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeDtm(seg: X12Segment, delimiters: Delimiters): X12PremiumDate | undefined {\n const value = elementOptional(seg, 2, delimiters);\n if (value === undefined) return undefined;\n return Object.freeze({\n qualifier: elementValue(seg, 1, delimiters),\n value,\n });\n}\n\n/** @internal */\nfunction decodeEnt(seg: X12Segment, delimiters: Delimiters): X12PremiumEntity {\n return Object.freeze({\n assignedNumber: elementOptional(seg, 1, delimiters),\n entityIdentifierCode: elementOptional(seg, 2, delimiters),\n idQualifier: elementOptional(seg, 3, delimiters),\n idCode: elementOptional(seg, 4, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeNm1(seg: X12Segment, delimiters: Delimiters): X12PremiumPerson {\n return Object.freeze({\n entityIdentifierCode: elementValue(seg, 1, delimiters),\n lastName: elementOptional(seg, 3, delimiters),\n firstName: elementOptional(seg, 4, delimiters),\n middleName: elementOptional(seg, 5, delimiters),\n suffix: elementOptional(seg, 7, delimiters),\n idQualifier: elementOptional(seg, 8, delimiters),\n idCode: elementOptional(seg, 9, delimiters),\n });\n}\n\n/**\n * Decode an RMR open-item reference. RMR-01 reference qualifier, RMR-02\n * reference id, RMR-03 payment action code, RMR-04 amount paid, RMR-05\n * amount due (terms / original). Skipped if neither qualifier nor reference\n * id is present (an RMR with no open-item identity carries no usable line).\n * @internal\n */\nfunction decodeRmr(seg: X12Segment, delimiters: Delimiters): X12PremiumOpenItem | undefined {\n const qualifier = elementValue(seg, 1, delimiters);\n const referenceId = elementValue(seg, 2, delimiters);\n if (qualifier === \"\" && referenceId === \"\") return undefined;\n return Object.freeze({\n qualifier,\n referenceId,\n paymentActionCode: elementOptional(seg, 3, delimiters),\n amountPaid: elementDecimalOrZero(seg, 4, delimiters),\n amountDue: elementDecimal(seg, 5, delimiters),\n });\n}\n\n/**\n * Decode an ADX adjustment. ADX-01 monetary adjustment (signed), ADX-02\n * adjustment reason code, ADX-03 / ADX-04 optional reference qualifier +\n * id. Skipped if the amount is absent. @internal\n */\nfunction decodeAdx(seg: X12Segment, delimiters: Delimiters): X12PremiumAdjustment | undefined {\n const amount = elementDecimal(seg, 1, delimiters);\n if (amount === undefined) return undefined;\n return Object.freeze({\n amount,\n reasonCode: elementValue(seg, 2, delimiters),\n referenceQualifier: elementOptional(seg, 3, delimiters),\n referenceId: elementOptional(seg, 4, delimiters),\n });\n}\n\n// ---------------------------------------------------------------------------\n// Party / address mutators (immutable — return a new party with the change).\n// ---------------------------------------------------------------------------\n\nconst EMPTY_ADDRESS: X12PremiumAddress = Object.freeze({\n lines: Object.freeze([]),\n city: undefined,\n state: undefined,\n postalCode: undefined,\n countryCode: undefined,\n});\n\nconst EMPTY_HEADER: X12PremiumPaymentHeader = Object.freeze({\n transactionHandlingCode: \"\",\n totalPremiumAmount: X12Decimal.ZERO,\n creditDebitFlag: \"\",\n method: \"\",\n paymentFormatCode: undefined,\n paymentDate: \"\",\n});\n\n/** @internal */\nfunction withAddress(party: X12PremiumParty, address: X12PremiumAddress): X12PremiumParty {\n return Object.freeze({ ...party, address });\n}\n\n/** @internal */\nfunction withReference(party: X12PremiumParty, ref: X12PremiumReference): X12PremiumParty {\n return Object.freeze({ ...party, references: Object.freeze([...party.references, ref]) });\n}\n\n/** @internal */\nfunction withLines(address: X12PremiumAddress, lines: readonly string[]): X12PremiumAddress {\n return Object.freeze({ ...address, lines: Object.freeze([...address.lines, ...lines]) });\n}\n\n/** @internal */\nfunction mergeAddress(base: X12PremiumAddress, fromN4: X12PremiumAddress): X12PremiumAddress {\n return Object.freeze({\n lines: base.lines,\n city: fromN4.city ?? base.city,\n state: fromN4.state ?? base.state,\n postalCode: fromN4.postalCode ?? base.postalCode,\n countryCode: fromN4.countryCode ?? base.countryCode,\n });\n}\n","/**\n * Thrown errors raised by the 820 domain builder ({@link\n * \"./build-820.js\".build820}). Distinct from the general `X12BuildError` (a\n * structurally impossible envelope): {@link Premium820BuildError} is raised\n * when a premium-payment spec cannot be emitted as a conformant,\n * self-consistent 820 — most importantly when a remittance loop has no\n * segment that can open it (neither an `ENT` organization summary nor an\n * `NM1` individual), or carries no `RMR` open item.\n *\n * The read side ({@link \"./get-820.js\".get820Payments}) is lenient — a real\n * 820 with a stray, un-openable RMR / DTM is preserved verbatim, never\n * rejected. The builder takes the opposite stance: it REFUSES rather than\n * emit a remittance a downstream cash-poster would silently drop. A caller\n * that must reproduce a knowingly-malformed payer artifact drops to the\n * general `buildInterchange`, which applies no domain guard.\n *\n * The 820 carries no hard TR3 balance equation (the BPR-02 premium total is\n * not required to equal Σ of the RMR open items the way an 835 must\n * balance), so the builder emits all monetary amounts verbatim and does NOT\n * raise a balance-mismatch refusal.\n */\n\n/**\n * Stable string codes for every {@link Premium820BuildError}. Locked here so\n * consumers can narrow exhaustively on `err.code`; additions-only thereafter\n * (renaming any code is a breaking change).\n *\n * - `X12_820_BUILD_INVALID_SPEC` — a structural precondition failed: no TRN\n * trace, no remittance loop, a remittance with neither an `ENT` entity nor\n * an `NM1` individual to open it, a remittance with no `RMR` open item, an\n * open item with no identity (empty qualifier + reference id), or an\n * over-long ISA-13 interchange control number. The message carries\n * structural indices + counts only — never a member id / name (PHI\n * discipline).\n *\n * @example\n * ```ts\n * import { PREMIUM_820_BUILD_ERROR_CODES, Premium820BuildError, build820 } from \"@cosyte/x12\";\n * try {\n * build820(spec);\n * } catch (err) {\n * if (\n * err instanceof Premium820BuildError &&\n * err.code === PREMIUM_820_BUILD_ERROR_CODES.X12_820_BUILD_INVALID_SPEC\n * ) {\n * // the remittance structure is impossible — fix the spec, do not emit\n * }\n * }\n * ```\n */\nexport const PREMIUM_820_BUILD_ERROR_CODES = {\n X12_820_BUILD_INVALID_SPEC: \"X12_820_BUILD_INVALID_SPEC\",\n} as const;\n\n/**\n * String-literal union over {@link PREMIUM_820_BUILD_ERROR_CODES}. Used as\n * {@link Premium820BuildError}.`code`.\n */\nexport type Premium820BuildErrorCode =\n (typeof PREMIUM_820_BUILD_ERROR_CODES)[keyof typeof PREMIUM_820_BUILD_ERROR_CODES];\n\n/**\n * Thrown by {@link \"./build-820.js\".build820} when the supplied premium\n * spec cannot be emitted as a conformant, self-consistent 820. Carries a\n * stable `code` for programmatic narrowing. Deliberately does NOT extend\n * `X12ParseError` or `X12BuildError` — the domain-refusal distinction\n * matters at the type level.\n *\n * @example\n * ```ts\n * import { Premium820BuildError } from \"@cosyte/x12\";\n * try {\n * build820(spec);\n * } catch (err) {\n * if (err instanceof Premium820BuildError) {\n * // err.code is one of PREMIUM_820_BUILD_ERROR_CODES\n * }\n * }\n * ```\n */\nexport class Premium820BuildError extends Error {\n public readonly code: Premium820BuildErrorCode;\n\n /** @internal */\n public constructor(code: Premium820BuildErrorCode, message: string) {\n super(message);\n this.name = \"Premium820BuildError\";\n this.code = code;\n }\n}\n","/**\n * `build820` — pure-function builder for a 005010X218 Payroll Deducted and\n * Other Group Premium Payment for Insurance Products (820). NEVER\n * auto-sends, NEVER opens a socket, NEVER touches the filesystem. The\n * library mechanically emits the premium payment it is told; a spec whose\n * remittance loops cannot form a self-consistent structure is REFUSED via\n * {@link \"./build-errors.js\".Premium820BuildError}.\n *\n * The read side ({@link \"./get-820.js\".get820Payments}) is lenient — a real\n * 820 with a stray, un-openable RMR is preserved verbatim, never rejected.\n * The builder takes the opposite stance: it REFUSES rather than emit a\n * remittance a downstream cash-poster would silently drop or merge into the\n * next loop. A caller that must reproduce a knowingly-malformed payer\n * artifact drops to {@link \"../../builder/build-interchange.js\".buildInterchange},\n * which applies no domain guard.\n *\n * Output shape: a complete {@link X12Interchange} wrapping a single GS..GE\n * functional group (GS-01 `\"RA\"`) containing a single ST..SE 820\n * transaction set (ST-03 `005010X218`), spec-clean and round-trippable\n * through {@link parseX12}. The builder emits segments in TR3 loop order so\n * a well-formed spec round-trips through `get820Payments` field-for-field.\n *\n * Known limitation: the 820 carries no hard TR3 balance equation (BPR-02 is\n * not required to equal Σ of the RMR open items), so the builder emits all\n * monetary amounts verbatim and never raises a balance-mismatch refusal — a\n * deliberate contrast with `build835`.\n */\n\nimport { PREMIUM_820_BUILD_ERROR_CODES, Premium820BuildError } from \"./build-errors.js\";\nimport type {\n Build820AddressSpec,\n Build820OpenItemSpec,\n Build820PartySpec,\n Build820PersonSpec,\n Build820ReferenceSpec,\n Build820RemittanceSpec,\n Build820Spec,\n} from \"./build-820-types.js\";\nimport { parseX12 } from \"../../parser/index.js\";\nimport type { X12Interchange } from \"../../parser/types.js\";\nimport { escapeRelease } from \"../../parser/release.js\";\n\n/** GS-08 / ST-03 version + release emitted for every 820 — the WPC TR3 `005010X218`. @internal */\nconst X218_VERSION_RELEASE = \"005010X218\";\n\n/** GS-01 functional identifier code for the 820. `RA` = Payment Order/Remittance Advice. @internal */\nconst X12_820_FUNCTIONAL_ID = \"RA\";\n\n/** GS-07 standards agency code — `X` for ASC X12. @internal */\nconst X12_AGENCY_CODE = \"X\";\n\n/**\n * `build820` — assemble a 005010X218 820 around the supplied spec.\n *\n * Refused via {@link \"./build-errors.js\".Premium820BuildError} with code\n * `X12_820_BUILD_INVALID_SPEC`:\n * - no TRN trace, or no remittance loop;\n * - a remittance with neither an `entity` nor an `individual` (nothing opens\n * its loop), or with no `openItems`;\n * - an open item with empty `qualifier` AND empty `referenceId` (the read\n * side drops it);\n * - an over-long (> 9 char) interchange control number.\n *\n * @example\n * ```ts\n * import { build820, X12Decimal } from \"@cosyte/x12\";\n * const ix = build820({\n * envelope: {\n * senderId: \"EMPLOYERCO\", receiverId: \"MEDPAY\",\n * interchangeDate: \"260601\", interchangeTime: \"1200\",\n * interchangeControlNumber: \"000000001\",\n * groupControlNumber: \"1\", transactionSetControlNumber: \"0001\",\n * },\n * payment: {\n * transactionHandlingCode: \"I\",\n * totalPremiumAmount: X12Decimal.fromString(\"250.00\")!,\n * creditDebitFlag: \"C\", method: \"ACH\", paymentDate: \"20260601\",\n * },\n * traces: [{ traceTypeCode: \"1\", referenceId: \"PREM-202606\" }],\n * remittances: [{\n * individual: { entityIdentifierCode: \"IL\", lastName: \"DOE\", idQualifier: \"34\", idCode: \"MBR0001\" },\n * openItems: [{ qualifier: \"AZ\", referenceId: \"POL-0001\", amountPaid: X12Decimal.fromString(\"250.00\")! }],\n * }],\n * });\n * ```\n */\nexport function build820(spec: Build820Spec): X12Interchange {\n const { envelope } = spec;\n\n // ---- Structural preconditions (refuse an impossible remittance) -------\n\n enforceStructuralSpec(spec);\n\n // ---- Delimiter resolution + escape helper -----------------------------\n\n const elementSeparator = envelope.elementSeparator ?? \"*\";\n const repetitionSeparator = envelope.repetitionSeparator ?? \"^\";\n const componentSeparator = envelope.componentSeparator ?? \":\";\n const segmentTerminator = envelope.segmentTerminator ?? \"~\";\n const delimiters = {\n element: elementSeparator,\n repetition: repetitionSeparator,\n component: componentSeparator,\n segment: segmentTerminator,\n };\n const esc = (value: string): string => escapeRelease(value, delimiters);\n\n /**\n * Join already-escaped element strings into a segment, dropping trailing\n * empty elements (interior empties are positionally meaningful and kept).\n */\n const seg = (parts: readonly string[]): string => {\n let end = parts.length;\n while (end > 1 && parts[end - 1] === \"\") end -= 1;\n return parts.slice(0, end).join(elementSeparator) + segmentTerminator;\n };\n\n // ---- ISA envelope -----------------------------------------------------\n\n const senderQualifier = envelope.senderQualifier ?? \"ZZ\";\n const receiverQualifier = envelope.receiverQualifier ?? \"ZZ\";\n const usageIndicator = envelope.usageIndicator ?? \"P\";\n const interchangeControlNumber = padControl(envelope.interchangeControlNumber, 9);\n const isa =\n [\n \"ISA\",\n \"00\", // ISA-01\n pad(\" \", 10), // ISA-02\n \"00\", // ISA-03\n pad(\" \", 10), // ISA-04\n pad(senderQualifier, 2), // ISA-05\n pad(envelope.senderId, 15), // ISA-06\n pad(receiverQualifier, 2), // ISA-07\n pad(envelope.receiverId, 15), // ISA-08\n pad(envelope.interchangeDate, 6), // ISA-09 — YYMMDD\n pad(envelope.interchangeTime, 4), // ISA-10 — HHMM\n repetitionSeparator, // ISA-11\n \"00501\", // ISA-12\n interchangeControlNumber, // ISA-13\n \"0\", // ISA-14\n usageIndicator, // ISA-15\n componentSeparator, // ISA-16\n ].join(elementSeparator) + segmentTerminator;\n\n // ---- GS / ST ----------------------------------------------------------\n\n const groupDate = envelope.groupDate ?? expandYY(envelope.interchangeDate);\n const groupTime = envelope.groupTime ?? envelope.interchangeTime;\n const applicationSenderCode = envelope.applicationSenderCode ?? envelope.senderId;\n const applicationReceiverCode = envelope.applicationReceiverCode ?? envelope.receiverId;\n\n const gs = seg([\n \"GS\",\n X12_820_FUNCTIONAL_ID, // GS-01 — \"RA\"\n esc(applicationSenderCode), // GS-02\n esc(applicationReceiverCode), // GS-03\n groupDate, // GS-04 — CCYYMMDD\n groupTime, // GS-05 — HHMM\n esc(envelope.groupControlNumber), // GS-06\n X12_AGENCY_CODE, // GS-07\n X218_VERSION_RELEASE, // GS-08\n ]);\n\n const stControlNumber = envelope.transactionSetControlNumber;\n const st = seg([\"ST\", \"820\", esc(stControlNumber), X218_VERSION_RELEASE]);\n\n // ---- Body segments ----------------------------------------------------\n\n const body: string[] = [];\n\n // BPR — payment header. BPR-16 (payment date) is positionally pinned at\n // element 16, so interior elements 6..15 are emitted empty and held in\n // place by the trailing date.\n body.push(\n seg([\n \"BPR\",\n esc(spec.payment.transactionHandlingCode),\n esc(spec.payment.totalPremiumAmount.toString()),\n esc(spec.payment.creditDebitFlag),\n esc(spec.payment.method),\n esc(spec.payment.paymentFormatCode ?? \"\"),\n \"\", // BPR-06\n \"\", // BPR-07\n \"\", // BPR-08\n \"\", // BPR-09\n \"\", // BPR-10\n \"\", // BPR-11\n \"\", // BPR-12\n \"\", // BPR-13\n \"\", // BPR-14\n \"\", // BPR-15\n esc(spec.payment.paymentDate), // BPR-16\n ]),\n );\n\n for (const trace of spec.traces) {\n body.push(\n seg([\n \"TRN\",\n esc(trace.traceTypeCode),\n esc(trace.referenceId),\n esc(trace.originatingCompanyId ?? \"\"),\n esc(trace.originatingCompanySupplementalCode ?? \"\"),\n ]),\n );\n }\n\n // Header parties — receiver (Loop 1000A, N1*PE) then remitter (Loop\n // 1000B, N1*PR / N1*RM). The read side keys on the N1 qualifier, not the\n // order, but each party's N3/N4/REF must immediately follow its N1.\n if (spec.receiver !== undefined) emitParty(spec.receiver, body, seg, esc);\n if (spec.remitter !== undefined) emitParty(spec.remitter, body, seg, esc);\n\n for (const remittance of spec.remittances) {\n emitRemittance(remittance, body, seg, esc);\n }\n\n // ---- SE / GE / IEA ----------------------------------------------------\n\n // SE-01 counts every segment in the set, ST and SE inclusive.\n const seCount = body.length + 2;\n const se = seg([\"SE\", String(seCount), esc(stControlNumber)]);\n const ge = seg([\"GE\", \"1\", esc(envelope.groupControlNumber)]);\n const iea = seg([\"IEA\", \"1\", interchangeControlNumber]);\n\n const raw = isa + gs + st + body.join(\"\") + se + ge + iea;\n\n // Final round-trip through `parseX12` so the returned interchange is\n // bit-identical with the parsed form every other helper consumes.\n return parseX12(raw);\n}\n\n// ---------------------------------------------------------------------------\n// Structural guards.\n// ---------------------------------------------------------------------------\n\n/**\n * Refuse a structurally impossible spec before any emit. PHI-clean: messages\n * carry indices + counts, never a member id / name. @internal\n */\nfunction enforceStructuralSpec(spec: Build820Spec): void {\n if (spec.traces.length === 0) {\n throw new Premium820BuildError(\n PREMIUM_820_BUILD_ERROR_CODES.X12_820_BUILD_INVALID_SPEC,\n \"build820: at least one TRN trace is required (TR3 005010X218 header).\",\n );\n }\n if (spec.remittances.length === 0) {\n throw new Premium820BuildError(\n PREMIUM_820_BUILD_ERROR_CODES.X12_820_BUILD_INVALID_SPEC,\n \"build820: at least one remittance (Loop 2000) is required.\",\n );\n }\n for (let r = 0; r < spec.remittances.length; r += 1) {\n const remittance = spec.remittances[r];\n if (remittance === undefined) continue;\n if (remittance.entity === undefined && remittance.individual === undefined) {\n throw new Premium820BuildError(\n PREMIUM_820_BUILD_ERROR_CODES.X12_820_BUILD_INVALID_SPEC,\n `build820: remittance at index ${String(r)} has neither an entity (ENT) nor an individual (NM1) to open its loop.`,\n );\n }\n if (remittance.openItems.length === 0) {\n throw new Premium820BuildError(\n PREMIUM_820_BUILD_ERROR_CODES.X12_820_BUILD_INVALID_SPEC,\n `build820: remittance at index ${String(r)} has no RMR open item.`,\n );\n }\n for (let o = 0; o < remittance.openItems.length; o += 1) {\n const item = remittance.openItems[o];\n if (item === undefined) continue;\n if (item.qualifier === \"\" && item.referenceId === \"\") {\n throw new Premium820BuildError(\n PREMIUM_820_BUILD_ERROR_CODES.X12_820_BUILD_INVALID_SPEC,\n `build820: open item at remittance[${String(r)}].openItems[${String(o)}] has no identity (empty RMR-01 qualifier and RMR-02 reference id).`,\n );\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Segment emitters. Each pushes spec-clean segment strings onto `body` in\n// TR3 005010X218 loop order so the result round-trips through `get820Payments`.\n// ---------------------------------------------------------------------------\n\n/** Emit a Loop 1000A/1000B party (N1 + N3 + N4 + REF*). @internal */\nfunction emitParty(\n party: Build820PartySpec,\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): void {\n body.push(\n seg([\n \"N1\",\n esc(party.entityIdentifierCode),\n esc(party.name),\n esc(party.idQualifier ?? \"\"),\n esc(party.idCode ?? \"\"),\n ]),\n );\n emitAddress(party.address, body, seg, esc);\n for (const ref of party.references ?? []) body.push(emitRef(ref, seg, esc));\n}\n\n/** Emit N3 + N4 for an address block, only the present lines / fields. @internal */\nfunction emitAddress(\n address: Build820AddressSpec | undefined,\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): void {\n if (address === undefined) return;\n if (address.lines.length > 0) {\n body.push(seg([\"N3\", ...address.lines.map(esc)]));\n }\n if (\n address.city !== undefined ||\n address.state !== undefined ||\n address.postalCode !== undefined ||\n address.countryCode !== undefined\n ) {\n body.push(\n seg([\n \"N4\",\n esc(address.city ?? \"\"),\n esc(address.state ?? \"\"),\n esc(address.postalCode ?? \"\"),\n esc(address.countryCode ?? \"\"),\n ]),\n );\n }\n}\n\n/**\n * Emit a Loop 2000 remittance. The ENT (if any) opens an organization\n * summary; an NM1 immediately after it (before any RMR) names the loop's\n * individual on the read side, so the NM1 MUST precede the open items. REF /\n * DTM / RMR / ADX then attach to the open loop. @internal\n */\nfunction emitRemittance(\n remittance: Build820RemittanceSpec,\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): void {\n if (remittance.entity !== undefined) {\n const e = remittance.entity;\n body.push(\n seg([\n \"ENT\",\n esc(e.assignedNumber ?? \"\"),\n esc(e.entityIdentifierCode ?? \"\"),\n esc(e.idQualifier ?? \"\"),\n esc(e.idCode ?? \"\"),\n ]),\n );\n }\n if (remittance.individual !== undefined) {\n body.push(emitPerson(remittance.individual, seg, esc));\n }\n for (const ref of remittance.references ?? []) body.push(emitRef(ref, seg, esc));\n for (const date of remittance.dates ?? []) {\n body.push(seg([\"DTM\", esc(date.qualifier), esc(date.value)]));\n }\n for (const item of remittance.openItems) body.push(emitOpenItem(item, seg, esc));\n for (const adjustment of remittance.adjustments ?? []) {\n body.push(\n seg([\n \"ADX\",\n esc(adjustment.amount.toString()),\n esc(adjustment.reasonCode),\n esc(adjustment.referenceQualifier ?? \"\"),\n esc(adjustment.referenceId ?? \"\"),\n ]),\n );\n }\n}\n\n/** Emit an NM1 individual (entity type qualifier `\"1\"`, ignored on read). @internal */\nfunction emitPerson(\n person: Build820PersonSpec,\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): string {\n return seg([\n \"NM1\",\n esc(person.entityIdentifierCode),\n \"1\", // NM1-02 entity type qualifier — not read by get820Payments\n esc(person.lastName ?? \"\"),\n esc(person.firstName ?? \"\"),\n esc(person.middleName ?? \"\"),\n \"\", // NM1-06 name prefix\n esc(person.suffix ?? \"\"),\n esc(person.idQualifier ?? \"\"),\n esc(person.idCode ?? \"\"),\n ]);\n}\n\n/** Emit an RMR open item. RMR-05 amount due is emitted only when supplied. @internal */\nfunction emitOpenItem(\n item: Build820OpenItemSpec,\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): string {\n return seg([\n \"RMR\",\n esc(item.qualifier),\n esc(item.referenceId),\n esc(item.paymentActionCode ?? \"\"),\n esc(item.amountPaid.toString()),\n item.amountDue === undefined ? \"\" : esc(item.amountDue.toString()),\n ]);\n}\n\n/** @internal */\nfunction emitRef(\n ref: Build820ReferenceSpec,\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): string {\n return seg([\"REF\", esc(ref.qualifier), esc(ref.value), esc(ref.description ?? \"\")]);\n}\n\n// ---------------------------------------------------------------------------\n// String helpers — mirror the `build835` emit primitives.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction pad(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return value + \" \".repeat(width - value.length);\n return value.slice(0, width);\n}\n\n/**\n * Zero-pad a control number to `width` chars (ISA-13 / IEA-02 are always 9).\n * Throws {@link Premium820BuildError} if the value already exceeds the\n * width — a silently-truncated control number would break ISA-13↔IEA-02\n * reconciliation. @internal\n */\nfunction padControl(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return \"0\".repeat(width - value.length) + value;\n throw new Premium820BuildError(\n PREMIUM_820_BUILD_ERROR_CODES.X12_820_BUILD_INVALID_SPEC,\n `build820: control number \"${value}\" exceeds the ${String(width)}-char spec limit.`,\n );\n}\n\n/**\n * Expand a 6-digit YYMMDD into CCYYMMDD for GS-04. Years `00`–`49` are 21st\n * century, `50`–`99` are 20th. A value already in CCYYMMDD form passes\n * through unchanged. @internal\n */\nfunction expandYY(yymmdd: string): string {\n if (yymmdd.length !== 6) return yymmdd;\n const yy = parseInt(yymmdd.slice(0, 2), 10);\n if (Number.isNaN(yy)) return yymmdd;\n const century = yy < 50 ? \"20\" : \"19\";\n return century + yymmdd;\n}\n","/**\n * 820 TR3 `005010X218` loop specification — authored through the **public**\n * {@link \"../../loops/define.js\".defineLoopSpec} API, the same dogfooding\n * gate the 835 / 837 / 271 / 277 specs go through. A regression in\n * `defineLoopSpec` cannot hide from the built-in 820 extractor.\n *\n * Hierarchy (per WPC TR3 `005010X218` §3, §4):\n *\n * ```text\n * Header (transaction set, ST..SE)\n * BPR (Financial Information) — required, max 1\n * NTE (Note) — situational, max >1\n * TRN (Reassociation Trace Number) — situational, max 1\n * CUR (Currency) — situational, max 1\n * REF (Premium Receiver / Payer ID Key) — situational, max >1\n * DTM (Date/Time — process / coverage) — situational, max >1\n * Loop 1000A — Premium Receiver's Name — required, max 1\n * N1 (PE) N2 N3 N4 PER RDM\n * Loop 1000B — Premium Payer's Name — required, max 1\n * N1 (PR / RM) N2 N3 N4 PER\n * Loop 2000A — Organization Summary Remittance — situational, max >1\n * ENT\n * Loop 2100A — Party Name — situational, max >1\n * NM1 N1 REF\n * Loop 2300A — Organization Summary Detail — situational, max >1\n * RMR REF DTM\n * Loop 2310A — Adjustment — situational, max >1\n * ADX\n * Trailer\n * SE (Transaction Set Trailer) — required, max 1\n * ```\n *\n * @remarks\n * The walker in `./get-820.js` is a flat state machine; these specs are the\n * frozen introspection artifacts a consumer reads to assert their\n * companion-guide expectations. An 820 may carry detail either at the\n * organization-summary level (`ENT` → `RMR`) or as bare individual\n * remittances (`NM1` → `RMR`); the walker handles both — `NM1` outside an\n * `ENT` opens an individual remittance.\n */\n\nimport { defineLoopSpec } from \"../../loops/define.js\";\nimport type { LoopSpec } from \"../../loops/types.js\";\n\n/**\n * 820 Loop 2310A — Adjustment. Triggered by `ADX`. Innermost detail loop:\n * a signed monetary adjustment tied to the enclosing `RMR` open item.\n *\n * Cited as Loop 2310A in TR3 X218.\n *\n * @example\n * ```ts\n * import { PREMIUM_820_LOOP_2310A } from \"@cosyte/x12\";\n * PREMIUM_820_LOOP_2310A.trigger; // \"ADX\"\n * ```\n */\nexport const PREMIUM_820_LOOP_2310A: LoopSpec = defineLoopSpec({\n id: \"2310A\",\n description: \"820 Loop 2310A — Organization Summary Remittance Adjustment\",\n trigger: \"ADX\",\n segments: [{ id: \"ADX\", usage: \"situational\", max: \">1\" }],\n});\n\n/**\n * 820 Loop 2300A — Organization Summary Remittance Detail. Triggered by\n * `RMR` (the premium-line open-item reference). Nests Loop 2310A.\n *\n * Cited as Loop 2300A in TR3 X218.\n *\n * @example\n * ```ts\n * import { PREMIUM_820_LOOP_2300A } from \"@cosyte/x12\";\n * PREMIUM_820_LOOP_2300A.trigger; // \"RMR\"\n * PREMIUM_820_LOOP_2300A.children[0]?.trigger; // \"ADX\"\n * ```\n */\nexport const PREMIUM_820_LOOP_2300A: LoopSpec = defineLoopSpec({\n id: \"2300A\",\n description: \"820 Loop 2300A — Organization Summary Remittance Detail\",\n trigger: \"RMR\",\n segments: [\n { id: \"RMR\", usage: \"situational\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"DTM\", usage: \"situational\", max: \">1\" },\n ],\n children: [PREMIUM_820_LOOP_2310A],\n});\n\n/**\n * 820 Loop 2100A — Party Name (member / entity inside an organization\n * summary). Triggered by `NM1`.\n *\n * Cited as Loop 2100A in TR3 X218.\n *\n * @example\n * ```ts\n * import { PREMIUM_820_LOOP_2100A } from \"@cosyte/x12\";\n * PREMIUM_820_LOOP_2100A.trigger; // \"NM1\"\n * ```\n */\nexport const PREMIUM_820_LOOP_2100A: LoopSpec = defineLoopSpec({\n id: \"2100A\",\n description: \"820 Loop 2100A — Party Name\",\n trigger: \"NM1\",\n segments: [\n { id: \"NM1\", usage: \"situational\", max: 1 },\n { id: \"N1\", usage: \"situational\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n ],\n});\n\n/**\n * 820 Loop 2000A — Organization Summary Remittance. Triggered by `ENT`.\n * Nests Loop 2100A (party name) and Loop 2300A (remittance detail).\n *\n * Cited as Loop 2000A in TR3 X218.\n *\n * @example\n * ```ts\n * import { PREMIUM_820_LOOP_2000A } from \"@cosyte/x12\";\n * PREMIUM_820_LOOP_2000A.trigger; // \"ENT\"\n * PREMIUM_820_LOOP_2000A.children.length; // 2 (2100A, 2300A)\n * ```\n */\nexport const PREMIUM_820_LOOP_2000A: LoopSpec = defineLoopSpec({\n id: \"2000A\",\n description: \"820 Loop 2000A — Organization Summary Remittance\",\n trigger: \"ENT\",\n segments: [{ id: \"ENT\", usage: \"situational\", max: 1 }],\n children: [PREMIUM_820_LOOP_2100A, PREMIUM_820_LOOP_2300A],\n});\n\n/**\n * 820 Loop 1000A — Premium Receiver's Name. Triggered by `N1` with\n * `N1-01 = \"PE\"`. The qualifier check happens in the walker;\n * `defineLoopSpec` keys off the segment id, not the element value.\n *\n * @example\n * ```ts\n * import { PREMIUM_820_LOOP_1000A } from \"@cosyte/x12\";\n * PREMIUM_820_LOOP_1000A.id; // \"1000A\"\n * ```\n */\nexport const PREMIUM_820_LOOP_1000A: LoopSpec = defineLoopSpec({\n id: \"1000A\",\n description: \"820 Loop 1000A — Premium Receiver's Name\",\n trigger: \"N1\",\n segments: [\n { id: \"N1\", usage: \"required\", max: 1 },\n { id: \"N2\", usage: \"situational\", max: 1 },\n { id: \"N3\", usage: \"situational\", max: \">1\" },\n { id: \"N4\", usage: \"situational\", max: 1 },\n { id: \"PER\", usage: \"situational\", max: \">1\" },\n { id: \"RDM\", usage: \"situational\", max: 1 },\n ],\n});\n\n/**\n * 820 Loop 1000B — Premium Payer's Name (remitter). Triggered by `N1` with\n * `N1-01 = \"PR\"` or `\"RM\"`. Same shape as Loop 1000A minus `RDM`.\n *\n * @example\n * ```ts\n * import { PREMIUM_820_LOOP_1000B } from \"@cosyte/x12\";\n * PREMIUM_820_LOOP_1000B.id; // \"1000B\"\n * ```\n */\nexport const PREMIUM_820_LOOP_1000B: LoopSpec = defineLoopSpec({\n id: \"1000B\",\n description: \"820 Loop 1000B — Premium Payer's Name\",\n trigger: \"N1\",\n segments: [\n { id: \"N1\", usage: \"required\", max: 1 },\n { id: \"N2\", usage: \"situational\", max: 1 },\n { id: \"N3\", usage: \"situational\", max: \">1\" },\n { id: \"N4\", usage: \"situational\", max: 1 },\n { id: \"PER\", usage: \"situational\", max: \">1\" },\n ],\n});\n","/**\n * `get834Header` + `get834Enrollments` — extract a typed 834 Benefit\n * Enrollment and Maintenance (`005010X220A1`) from a parsed transaction set.\n * The header (BGN + sponsor/payer) is a small synchronous read; the\n * member-level detail is a **stream** — `get834Enrollments` is an\n * `AsyncIterable` yielding one {@link X12Enrollment} per `INS` loop so a\n * consumer never holds the whole roster in memory at once.\n *\n * Lenient on parse: every recoverable deviation is preserved verbatim,\n * never thrown. Maintenance type (`INS-03` / `HD-01`, X12 0875) is the\n * safety-critical field — the verbatim code is ALWAYS preserved and the\n * parser NEVER infers an action for an unknown code; it raises\n * `X12_834_UNKNOWN_MAINTENANCE_TYPE` on the affected member instead.\n *\n * Streaming caveat (honest limitation): the member stream iterates over an\n * ALREADY-parsed `X12TransactionSet`, so the file is still parsed into\n * `tx.segments` up front. The memory win is on the RESULT side — a consumer\n * processing a hundreds-of-MB 834 holds one decoded member at a time, not\n * the whole decoded roster. A true file→iterator streaming parser is a v2\n * item (see roadmap Phase 2 streaming invariant).\n *\n * Spec source: WPC TR3 `005010X220A1`.\n */\n\nimport { lookupMaintenanceType } from \"../../code-lists/maintenance-type.js\";\nimport {\n collectElementValues,\n elementDecimal,\n elementOptional,\n elementValue,\n type X12Segment,\n} from \"../../parser/segment.js\";\nimport type { Delimiters, X12Position, X12TransactionSet } from \"../../parser/types.js\";\nimport { unknownMaintenanceType, type X12ParseWarning } from \"../../parser/warnings.js\";\nimport type {\n X12CoordinationOfBenefits,\n X12Enrollment,\n X12EnrollmentAddress,\n X12EnrollmentAmount,\n X12EnrollmentDate,\n X12EnrollmentHeader,\n X12EnrollmentMember,\n X12EnrollmentParty,\n X12EnrollmentReference,\n X12HealthCoverage,\n} from \"./types.js\";\n\n/** Slice the ST..SE body once, dropping the ST (and SE if present). @internal */\nfunction enrollmentBody(tx: X12TransactionSet): readonly X12Segment[] {\n return tx.se === undefined ? tx.segments.slice(1) : tx.segments.slice(1, -1);\n}\n\n/**\n * Extract the 834 header — BGN + sponsor (`N1*P5`) + payer (`N1*IN`).\n * Pure function. Returns `undefined` only if the input transaction's ST-01\n * is not `\"834\"` (mis-routed call). Stops collecting header parties at the\n * first `INS` (member-level detail) — those belong to the member stream.\n *\n * @example\n * ```ts\n * import { parseX12, get834Header } from \"@cosyte/x12\";\n * const ix = parseX12(raw);\n * const tx = ix.groups[0]?.transactions.find((t) => t.st.elements[1] === \"834\");\n * const header = tx === undefined ? undefined : get834Header(ix.delimiters, tx);\n * header?.sponsor?.name;\n * ```\n */\nexport function get834Header(\n delimiters: Delimiters,\n tx: X12TransactionSet,\n): X12EnrollmentHeader | undefined {\n if (tx.st.elements[1] !== \"834\") return undefined;\n\n const warnings: X12ParseWarning[] = [];\n const references: X12EnrollmentReference[] = [];\n const dates: X12EnrollmentDate[] = [];\n let purpose = \"\";\n let referenceId: string | undefined;\n let date: string | undefined;\n let time: string | undefined;\n let actionCode: string | undefined;\n let sponsor: X12EnrollmentParty | undefined;\n let payer: X12EnrollmentParty | undefined;\n\n for (const seg of enrollmentBody(tx)) {\n if (seg.id === \"INS\") break; // member-level detail begins — header is done.\n switch (seg.id) {\n case \"BGN\": {\n purpose = elementValue(seg, 1, delimiters);\n referenceId = elementOptional(seg, 2, delimiters);\n date = elementOptional(seg, 3, delimiters);\n time = elementOptional(seg, 4, delimiters);\n actionCode = elementOptional(seg, 8, delimiters);\n break;\n }\n case \"N1\": {\n const qualifier = elementValue(seg, 1, delimiters);\n const party = decodeN1(seg, delimiters);\n if (qualifier === \"P5\") sponsor = party;\n else if (qualifier === \"IN\") payer = party;\n break;\n }\n case \"REF\": {\n references.push(decodeRef(seg, delimiters));\n break;\n }\n case \"DTP\": {\n const d = decodeDtp(seg, delimiters);\n if (d !== undefined) dates.push(d);\n break;\n }\n default:\n break;\n }\n }\n\n return Object.freeze({\n transactionSetPurposeCode: purpose,\n referenceId,\n date,\n time,\n actionCode,\n sponsor,\n payer,\n references: Object.freeze(references.slice()),\n dates: Object.freeze(dates.slice()),\n warnings: Object.freeze(warnings.slice()),\n });\n}\n\n/**\n * Stream the 834 member-level detail loops — one {@link X12Enrollment} per\n * `INS` segment. For a non-834 transaction the iterable yields nothing.\n * Async-generator typed so the contract leaves room for a future\n * file→iterator streaming source; the v1 implementation iterates the\n * already-parsed `tx.segments` synchronously under the hood.\n *\n * @example\n * ```ts\n * import { parseX12, get834Enrollments } from \"@cosyte/x12\";\n * const ix = parseX12(raw);\n * const tx = ix.groups[0]?.transactions.find((t) => t.st.elements[1] === \"834\");\n * if (tx !== undefined) {\n * for await (const member of get834Enrollments(ix.delimiters, tx)) {\n * member.maintenanceTypeCode; // \"021\"\n * member.member?.idCode; // verbatim member id\n * }\n * }\n * ```\n */\nexport async function* get834Enrollments(\n delimiters: Delimiters,\n tx: X12TransactionSet,\n): AsyncIterable<X12Enrollment> {\n if (tx.st.elements[1] !== \"834\") return;\n // Yield to the microtask queue so the iterator is genuinely async — a\n // consumer's `for await` interleaves with other work even on the v1\n // in-memory source. (Also satisfies the no-bare-async-generator lint.)\n await Promise.resolve();\n\n const body = enrollmentBody(tx);\n let current: EnrollmentAccumulator | undefined;\n let currentCoverage: HealthCoverageAccumulator | undefined;\n\n const flushCoverage = (): void => {\n if (current !== undefined && currentCoverage !== undefined) {\n current.healthCoverages.push(freezeCoverage(currentCoverage));\n }\n currentCoverage = undefined;\n };\n\n for (let i = 0; i < body.length; i += 1) {\n const seg = body[i];\n if (seg === undefined) continue;\n const position: X12Position = { segmentIndex: i + 1, transactionIndex: 0 };\n\n if (seg.id === \"INS\") {\n if (current !== undefined) {\n flushCoverage();\n yield freezeEnrollment(current);\n }\n current = openEnrollment(seg, delimiters, position);\n currentCoverage = undefined;\n continue;\n }\n if (current === undefined) continue; // pre-INS header segments — not ours.\n\n switch (seg.id) {\n case \"NM1\": {\n // Member name (Loop 2100A). The first IL member name on the loop is\n // the member; other NM1 qualifiers (custodial parent, responsible\n // person) stay verbatim on tx.segments in v1.\n const qualifier = elementValue(seg, 1, delimiters);\n if (qualifier === \"IL\" && current.member === undefined) {\n current.member = decodeNm1(seg, delimiters);\n }\n break;\n }\n case \"DMG\": {\n if (current.member !== undefined) {\n current.member = withDemographics(\n current.member,\n elementOptional(seg, 2, delimiters),\n elementOptional(seg, 3, delimiters),\n );\n }\n break;\n }\n case \"N3\": {\n if (current.member !== undefined) {\n const lines = collectElementValues(seg, 1, 2, delimiters);\n current.member = withAddress(\n current.member,\n withLines(current.member.address ?? EMPTY_ADDRESS, lines),\n );\n }\n break;\n }\n case \"N4\": {\n if (current.member !== undefined) {\n current.member = withAddress(\n current.member,\n mergeAddress(current.member.address ?? EMPTY_ADDRESS, decodeN4(seg, delimiters)),\n );\n }\n break;\n }\n case \"HD\": {\n flushCoverage();\n currentCoverage = openCoverage(seg, delimiters, position, current.warnings);\n break;\n }\n case \"COB\": {\n current.coordinationOfBenefits.push(decodeCob(seg, delimiters));\n break;\n }\n case \"REF\": {\n current.references.push(decodeRef(seg, delimiters));\n break;\n }\n case \"DTP\": {\n const date = decodeDtp(seg, delimiters);\n if (date === undefined) break;\n if (currentCoverage !== undefined) currentCoverage.dates.push(date);\n else current.dates.push(date);\n break;\n }\n case \"AMT\": {\n if (currentCoverage === undefined) break;\n const amount = decodeAmt(seg, delimiters);\n if (amount !== undefined) currentCoverage.amounts.push(amount);\n break;\n }\n default:\n break;\n }\n }\n\n if (current !== undefined) {\n flushCoverage();\n yield freezeEnrollment(current);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Internal accumulators (mutable during the walk, frozen at the end).\n// ---------------------------------------------------------------------------\n\n/** Mutable in-flight Loop 2000 member detail. @internal */\ninterface EnrollmentAccumulator {\n readonly subscriberIndicator: string | undefined;\n readonly relationshipCode: string | undefined;\n readonly maintenanceTypeCode: string;\n readonly maintenanceTypeDescription: string | undefined;\n readonly maintenanceReasonCode: string | undefined;\n readonly benefitStatusCode: string | undefined;\n readonly employmentStatusCode: string | undefined;\n member: X12EnrollmentMember | undefined;\n readonly references: X12EnrollmentReference[];\n readonly dates: X12EnrollmentDate[];\n readonly healthCoverages: X12HealthCoverage[];\n readonly coordinationOfBenefits: X12CoordinationOfBenefits[];\n readonly warnings: X12ParseWarning[];\n}\n\n/** Mutable in-flight Loop 2300 health coverage. @internal */\ninterface HealthCoverageAccumulator {\n readonly maintenanceTypeCode: string | undefined;\n readonly maintenanceTypeDescription: string | undefined;\n readonly insuranceLineCode: string | undefined;\n readonly planCoverageDescription: string | undefined;\n readonly coverageLevelCode: string | undefined;\n readonly dates: X12EnrollmentDate[];\n readonly amounts: X12EnrollmentAmount[];\n}\n\n/** @internal */\nfunction openEnrollment(\n seg: X12Segment,\n delimiters: Delimiters,\n position: X12Position,\n): EnrollmentAccumulator {\n const maintenanceTypeCode = elementValue(seg, 3, delimiters);\n const entry = maintenanceTypeCode === \"\" ? undefined : lookupMaintenanceType(maintenanceTypeCode);\n const warnings: X12ParseWarning[] = [];\n if (maintenanceTypeCode !== \"\" && entry === undefined) {\n warnings.push(unknownMaintenanceType(position, maintenanceTypeCode));\n }\n return {\n subscriberIndicator: elementOptional(seg, 1, delimiters),\n relationshipCode: elementOptional(seg, 2, delimiters),\n maintenanceTypeCode,\n maintenanceTypeDescription: entry?.description,\n maintenanceReasonCode: elementOptional(seg, 4, delimiters),\n benefitStatusCode: elementOptional(seg, 5, delimiters),\n employmentStatusCode: elementOptional(seg, 8, delimiters),\n member: undefined,\n references: [],\n dates: [],\n healthCoverages: [],\n coordinationOfBenefits: [],\n warnings,\n };\n}\n\n/** @internal */\nfunction freezeEnrollment(acc: EnrollmentAccumulator): X12Enrollment {\n return Object.freeze({\n subscriberIndicator: acc.subscriberIndicator,\n relationshipCode: acc.relationshipCode,\n maintenanceTypeCode: acc.maintenanceTypeCode,\n maintenanceTypeDescription: acc.maintenanceTypeDescription,\n maintenanceReasonCode: acc.maintenanceReasonCode,\n benefitStatusCode: acc.benefitStatusCode,\n employmentStatusCode: acc.employmentStatusCode,\n member: acc.member,\n references: Object.freeze(acc.references.slice()),\n dates: Object.freeze(acc.dates.slice()),\n healthCoverages: Object.freeze(acc.healthCoverages.slice()),\n coordinationOfBenefits: Object.freeze(acc.coordinationOfBenefits.slice()),\n warnings: Object.freeze(acc.warnings.slice()),\n });\n}\n\n/** @internal */\nfunction openCoverage(\n seg: X12Segment,\n delimiters: Delimiters,\n position: X12Position,\n warnings: X12ParseWarning[],\n): HealthCoverageAccumulator {\n const maintenanceTypeCode = elementOptional(seg, 1, delimiters);\n let maintenanceTypeDescription: string | undefined;\n if (maintenanceTypeCode !== undefined) {\n const entry = lookupMaintenanceType(maintenanceTypeCode);\n if (entry === undefined) warnings.push(unknownMaintenanceType(position, maintenanceTypeCode));\n maintenanceTypeDescription = entry?.description;\n }\n return {\n maintenanceTypeCode,\n maintenanceTypeDescription,\n insuranceLineCode: elementOptional(seg, 3, delimiters),\n planCoverageDescription: elementOptional(seg, 4, delimiters),\n coverageLevelCode: elementOptional(seg, 5, delimiters),\n dates: [],\n amounts: [],\n };\n}\n\n/** @internal */\nfunction freezeCoverage(acc: HealthCoverageAccumulator): X12HealthCoverage {\n return Object.freeze({\n maintenanceTypeCode: acc.maintenanceTypeCode,\n maintenanceTypeDescription: acc.maintenanceTypeDescription,\n insuranceLineCode: acc.insuranceLineCode,\n planCoverageDescription: acc.planCoverageDescription,\n coverageLevelCode: acc.coverageLevelCode,\n dates: Object.freeze(acc.dates.slice()),\n amounts: Object.freeze(acc.amounts.slice()),\n });\n}\n\n// ---------------------------------------------------------------------------\n// Segment decoders.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction decodeN1(seg: X12Segment, delimiters: Delimiters): X12EnrollmentParty {\n return Object.freeze({\n entityIdentifierCode: elementValue(seg, 1, delimiters),\n name: elementValue(seg, 2, delimiters),\n idQualifier: elementOptional(seg, 3, delimiters),\n idCode: elementOptional(seg, 4, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeNm1(seg: X12Segment, delimiters: Delimiters): X12EnrollmentMember {\n return Object.freeze({\n entityIdentifierCode: elementValue(seg, 1, delimiters),\n lastName: elementOptional(seg, 3, delimiters),\n firstName: elementOptional(seg, 4, delimiters),\n middleName: elementOptional(seg, 5, delimiters),\n suffix: elementOptional(seg, 7, delimiters),\n idQualifier: elementOptional(seg, 8, delimiters),\n idCode: elementOptional(seg, 9, delimiters),\n dateOfBirth: undefined,\n genderCode: undefined,\n address: undefined,\n });\n}\n\n/** @internal */\nfunction decodeN4(seg: X12Segment, delimiters: Delimiters): X12EnrollmentAddress {\n return Object.freeze({\n lines: Object.freeze([]),\n city: elementOptional(seg, 1, delimiters),\n state: elementOptional(seg, 2, delimiters),\n postalCode: elementOptional(seg, 3, delimiters),\n countryCode: elementOptional(seg, 4, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeRef(seg: X12Segment, delimiters: Delimiters): X12EnrollmentReference {\n return Object.freeze({\n qualifier: elementValue(seg, 1, delimiters),\n value: elementValue(seg, 2, delimiters),\n description: elementOptional(seg, 3, delimiters),\n });\n}\n\n/**\n * Decode a DTP date. DTP-01 qualifier, DTP-02 format qualifier (`D8` single\n * / `RD8` range), DTP-03 the verbatim date or range. Skipped if DTP-03 is\n * absent. @internal\n */\nfunction decodeDtp(seg: X12Segment, delimiters: Delimiters): X12EnrollmentDate | undefined {\n const value = elementOptional(seg, 3, delimiters);\n if (value === undefined) return undefined;\n return Object.freeze({\n qualifier: elementValue(seg, 1, delimiters),\n value,\n });\n}\n\n/** @internal */\nfunction decodeAmt(seg: X12Segment, delimiters: Delimiters): X12EnrollmentAmount | undefined {\n const amount = elementDecimal(seg, 2, delimiters);\n if (amount === undefined) return undefined;\n return Object.freeze({\n qualifier: elementValue(seg, 1, delimiters),\n amount,\n });\n}\n\n/** @internal */\nfunction decodeCob(seg: X12Segment, delimiters: Delimiters): X12CoordinationOfBenefits {\n return Object.freeze({\n payerResponsibility: elementOptional(seg, 1, delimiters),\n referenceId: elementOptional(seg, 2, delimiters),\n coordinationOfBenefitsCode: elementOptional(seg, 3, delimiters),\n });\n}\n\n// ---------------------------------------------------------------------------\n// Member / address mutators (immutable — return a new member with the change).\n// ---------------------------------------------------------------------------\n\nconst EMPTY_ADDRESS: X12EnrollmentAddress = Object.freeze({\n lines: Object.freeze([]),\n city: undefined,\n state: undefined,\n postalCode: undefined,\n countryCode: undefined,\n});\n\n/** @internal */\nfunction withDemographics(\n member: X12EnrollmentMember,\n dateOfBirth: string | undefined,\n genderCode: string | undefined,\n): X12EnrollmentMember {\n return Object.freeze({ ...member, dateOfBirth, genderCode });\n}\n\n/** @internal */\nfunction withAddress(\n member: X12EnrollmentMember,\n address: X12EnrollmentAddress,\n): X12EnrollmentMember {\n return Object.freeze({ ...member, address });\n}\n\n/** @internal */\nfunction withLines(address: X12EnrollmentAddress, lines: readonly string[]): X12EnrollmentAddress {\n return Object.freeze({ ...address, lines: Object.freeze([...address.lines, ...lines]) });\n}\n\n/** @internal */\nfunction mergeAddress(\n base: X12EnrollmentAddress,\n fromN4: X12EnrollmentAddress,\n): X12EnrollmentAddress {\n return Object.freeze({\n lines: base.lines,\n city: fromN4.city ?? base.city,\n state: fromN4.state ?? base.state,\n postalCode: fromN4.postalCode ?? base.postalCode,\n countryCode: fromN4.countryCode ?? base.countryCode,\n });\n}\n","/**\n * Thrown errors raised by the 834 domain builder ({@link\n * \"./build-834.js\".build834}). Distinct from the general `X12BuildError` (a\n * structurally impossible envelope): {@link Enrollment834BuildError} is\n * raised when an enrollment spec cannot be emitted as a conformant,\n * self-consistent 834 — most importantly when a member or coverage carries a\n * maintenance type code (`INS-03` / `HD-01`, X12 Code Source 875) the\n * builder cannot vouch for.\n *\n * Maintenance type is the safety-critical field of the 834: misreading a\n * termination (`024`) as a change (`001`) leaves a member enrolled who the\n * sponsor dropped, or drops a member the sponsor kept. The read side\n * ({@link \"./get-834.js\".get834Enrollments}) is lenient — an unknown\n * maintenance code on a *received* 834 is WARNED (the verbatim code is still\n * surfaced) so a consumer sees exactly what arrived. The builder takes the\n * opposite stance: it REFUSES to EMIT an action it cannot name, rather than\n * write a maintenance code a downstream enrollment system would mis-apply. A\n * caller that must reproduce a knowingly-nonstandard payer artifact drops to\n * {@link \"../../builder/build-interchange.js\".buildInterchange}, which\n * applies no domain guard.\n */\n\n/**\n * Stable string codes for every {@link Enrollment834BuildError}. Locked here\n * so consumers can narrow exhaustively on `err.code`; additions-only\n * thereafter (renaming any code is a breaking change).\n *\n * - `X12_834_BUILD_UNKNOWN_MAINTENANCE_TYPE` — an `INS-03` or `HD-01`\n * maintenance type code falls outside the X12 Code Source 875 subset the\n * library validates against. The message carries the structural index of\n * the affected member / coverage and the offending code (an X12 control\n * code, never PHI).\n * - `X12_834_BUILD_INVALID_SPEC` — a non-maintenance precondition failed: no\n * member loop, an empty (required) `INS-03`, or an over-long ISA-13\n * interchange control number. The message carries structural indices +\n * counts only — never a member id / name (PHI discipline).\n *\n * @example\n * ```ts\n * import { ENROLLMENT_834_BUILD_ERROR_CODES, Enrollment834BuildError, build834 } from \"@cosyte/x12\";\n * try {\n * build834(spec);\n * } catch (err) {\n * if (\n * err instanceof Enrollment834BuildError &&\n * err.code === ENROLLMENT_834_BUILD_ERROR_CODES.X12_834_BUILD_UNKNOWN_MAINTENANCE_TYPE\n * ) {\n * // the maintenance action is unrecognized — fix the code, do not emit\n * }\n * }\n * ```\n */\nexport const ENROLLMENT_834_BUILD_ERROR_CODES = {\n X12_834_BUILD_UNKNOWN_MAINTENANCE_TYPE: \"X12_834_BUILD_UNKNOWN_MAINTENANCE_TYPE\",\n X12_834_BUILD_INVALID_SPEC: \"X12_834_BUILD_INVALID_SPEC\",\n} as const;\n\n/**\n * String-literal union over {@link ENROLLMENT_834_BUILD_ERROR_CODES}. Used\n * as {@link Enrollment834BuildError}.`code`.\n */\nexport type Enrollment834BuildErrorCode =\n (typeof ENROLLMENT_834_BUILD_ERROR_CODES)[keyof typeof ENROLLMENT_834_BUILD_ERROR_CODES];\n\n/**\n * Thrown by {@link \"./build-834.js\".build834} when the supplied enrollment\n * spec cannot be emitted as a conformant, self-consistent 834 — most\n * importantly when a maintenance type code is outside the validated X12 875\n * subset. Carries a stable `code` for programmatic narrowing. Deliberately\n * does NOT extend `X12ParseError` or `X12BuildError` — the domain-refusal\n * distinction matters at the type level.\n *\n * @example\n * ```ts\n * import { Enrollment834BuildError } from \"@cosyte/x12\";\n * try {\n * build834(spec);\n * } catch (err) {\n * if (err instanceof Enrollment834BuildError) {\n * // err.code is one of ENROLLMENT_834_BUILD_ERROR_CODES\n * }\n * }\n * ```\n */\nexport class Enrollment834BuildError extends Error {\n public readonly code: Enrollment834BuildErrorCode;\n\n /** @internal */\n public constructor(code: Enrollment834BuildErrorCode, message: string) {\n super(message);\n this.name = \"Enrollment834BuildError\";\n this.code = code;\n }\n}\n","/**\n * `build834` — pure-function builder for a 005010X220A1 Benefit Enrollment\n * and Maintenance transaction (834). NEVER auto-sends, NEVER opens a socket,\n * NEVER touches the filesystem. The library mechanically emits the\n * enrollment it is told; a spec that carries a maintenance type code the\n * library cannot vouch for, or that cannot form a self-consistent 834, is\n * REFUSED via {@link \"./build-errors.js\".Enrollment834BuildError}.\n *\n * Maintenance type (`INS-03` / `HD-01`, X12 Code Source 875) is the 834's\n * safety primitive — the builder emits the supplied code VERBATIM (never\n * inferred, never normalized) and REFUSES a code outside the validated\n * subset. The read side ({@link \"./get-834.js\".get834Enrollments}) is\n * lenient — an unknown code on a *received* 834 is WARNED, never rejected,\n * because the parser must surface what arrived. The builder is strict: it\n * will not WRITE an action a downstream enrollment system would mis-apply.\n *\n * Output shape: a complete {@link X12Interchange} wrapping a single GS..GE\n * functional group (GS-01 `\"BE\"`) containing a single ST..SE 834\n * transaction set (ST-03 `005010X220A1`), spec-clean and round-trippable\n * through {@link parseX12}. The builder emits segments in TR3 loop order so\n * a well-formed spec round-trips through `get834Header` /\n * `get834Enrollments` field-for-field.\n */\n\nimport { ENROLLMENT_834_BUILD_ERROR_CODES, Enrollment834BuildError } from \"./build-errors.js\";\nimport type {\n Build834AddressSpec,\n Build834CoverageSpec,\n Build834DateSpec,\n Build834HeaderSpec,\n Build834MemberNameSpec,\n Build834MemberSpec,\n Build834PartySpec,\n Build834ReferenceSpec,\n Build834Spec,\n} from \"./build-834-types.js\";\nimport { lookupMaintenanceType } from \"../../code-lists/maintenance-type.js\";\nimport { parseX12 } from \"../../parser/index.js\";\nimport type { X12Interchange } from \"../../parser/types.js\";\nimport { escapeRelease } from \"../../parser/release.js\";\n\n/** GS-08 / ST-03 version + release emitted for every 834 — the WPC TR3 `005010X220A1`. @internal */\nconst X220A1_VERSION_RELEASE = \"005010X220A1\";\n\n/** GS-01 functional identifier code for the 834. `BE` = Benefit Enrollment and Maintenance. @internal */\nconst X12_834_FUNCTIONAL_ID = \"BE\";\n\n/** GS-07 standards agency code — `X` for ASC X12. @internal */\nconst X12_AGENCY_CODE = \"X\";\n\n/** Default NM1-01 for a member name — the read side captures only the insured. @internal */\nconst MEMBER_DEFAULT_ENTITY_ID = \"IL\";\n\n/** Default DTP-02 date/time format qualifier — single CCYYMMDD date. @internal */\nconst DTP_DEFAULT_FORMAT = \"D8\";\n\n/**\n * `build834` — assemble a 005010X220A1 834 around the supplied spec.\n *\n * Refused via {@link \"./build-errors.js\".Enrollment834BuildError}:\n * - an `INS-03` or `HD-01` maintenance type code outside the validated X12\n * 875 subset → `X12_834_BUILD_UNKNOWN_MAINTENANCE_TYPE`;\n * - no member loop, an empty (required) `INS-03`, or an over-long (> 9 char)\n * interchange control number → `X12_834_BUILD_INVALID_SPEC`.\n *\n * @example\n * ```ts\n * import { build834 } from \"@cosyte/x12\";\n * const ix = build834({\n * envelope: {\n * senderId: \"EMPLOYERCO\", receiverId: \"MEDPAY\",\n * interchangeDate: \"260601\", interchangeTime: \"1200\",\n * interchangeControlNumber: \"000000001\",\n * groupControlNumber: \"1\", transactionSetControlNumber: \"0001\",\n * },\n * header: {\n * transactionSetPurposeCode: \"00\",\n * sponsor: { entityIdentifierCode: \"P5\", name: \"EMPLOYER CO\" },\n * payer: { entityIdentifierCode: \"IN\", name: \"MEDPAY INSURANCE\" },\n * },\n * members: [{\n * subscriberIndicator: \"Y\", relationshipCode: \"18\", maintenanceTypeCode: \"021\",\n * member: { lastName: \"DOE\", firstName: \"JANE\", idQualifier: \"34\", idCode: \"MBR0001\" },\n * healthCoverages: [{ maintenanceTypeCode: \"021\", insuranceLineCode: \"HLT\" }],\n * }],\n * });\n * ```\n */\nexport function build834(spec: Build834Spec): X12Interchange {\n const { envelope } = spec;\n\n // ---- Structural + maintenance-type preconditions ----------------------\n\n enforceStructuralSpec(spec);\n\n // ---- Delimiter resolution + escape helper -----------------------------\n\n const elementSeparator = envelope.elementSeparator ?? \"*\";\n const repetitionSeparator = envelope.repetitionSeparator ?? \"^\";\n const componentSeparator = envelope.componentSeparator ?? \":\";\n const segmentTerminator = envelope.segmentTerminator ?? \"~\";\n const delimiters = {\n element: elementSeparator,\n repetition: repetitionSeparator,\n component: componentSeparator,\n segment: segmentTerminator,\n };\n const esc = (value: string): string => escapeRelease(value, delimiters);\n\n /**\n * Join already-escaped element strings into a segment, dropping trailing\n * empty elements (interior empties are positionally meaningful and kept).\n */\n const seg = (parts: readonly string[]): string => {\n let end = parts.length;\n while (end > 1 && parts[end - 1] === \"\") end -= 1;\n return parts.slice(0, end).join(elementSeparator) + segmentTerminator;\n };\n\n // ---- ISA envelope -----------------------------------------------------\n\n const senderQualifier = envelope.senderQualifier ?? \"ZZ\";\n const receiverQualifier = envelope.receiverQualifier ?? \"ZZ\";\n const usageIndicator = envelope.usageIndicator ?? \"P\";\n const interchangeControlNumber = padControl(envelope.interchangeControlNumber, 9);\n const isa =\n [\n \"ISA\",\n \"00\", // ISA-01\n pad(\" \", 10), // ISA-02\n \"00\", // ISA-03\n pad(\" \", 10), // ISA-04\n pad(senderQualifier, 2), // ISA-05\n pad(envelope.senderId, 15), // ISA-06\n pad(receiverQualifier, 2), // ISA-07\n pad(envelope.receiverId, 15), // ISA-08\n pad(envelope.interchangeDate, 6), // ISA-09 — YYMMDD\n pad(envelope.interchangeTime, 4), // ISA-10 — HHMM\n repetitionSeparator, // ISA-11\n \"00501\", // ISA-12\n interchangeControlNumber, // ISA-13\n \"0\", // ISA-14\n usageIndicator, // ISA-15\n componentSeparator, // ISA-16\n ].join(elementSeparator) + segmentTerminator;\n\n // ---- GS / ST ----------------------------------------------------------\n\n const groupDate = envelope.groupDate ?? expandYY(envelope.interchangeDate);\n const groupTime = envelope.groupTime ?? envelope.interchangeTime;\n const applicationSenderCode = envelope.applicationSenderCode ?? envelope.senderId;\n const applicationReceiverCode = envelope.applicationReceiverCode ?? envelope.receiverId;\n\n const gs = seg([\n \"GS\",\n X12_834_FUNCTIONAL_ID, // GS-01 — \"BE\"\n esc(applicationSenderCode), // GS-02\n esc(applicationReceiverCode), // GS-03\n groupDate, // GS-04 — CCYYMMDD\n groupTime, // GS-05 — HHMM\n esc(envelope.groupControlNumber), // GS-06\n X12_AGENCY_CODE, // GS-07\n X220A1_VERSION_RELEASE, // GS-08\n ]);\n\n const stControlNumber = envelope.transactionSetControlNumber;\n const st = seg([\"ST\", \"834\", esc(stControlNumber), X220A1_VERSION_RELEASE]);\n\n // ---- Body segments ----------------------------------------------------\n\n const body: string[] = [];\n emitHeader(spec.header, body, seg, esc);\n for (const member of spec.members) emitMember(member, body, seg, esc);\n\n // ---- SE / GE / IEA ----------------------------------------------------\n\n // SE-01 counts every segment in the set, ST and SE inclusive.\n const seCount = body.length + 2;\n const se = seg([\"SE\", String(seCount), esc(stControlNumber)]);\n const ge = seg([\"GE\", \"1\", esc(envelope.groupControlNumber)]);\n const iea = seg([\"IEA\", \"1\", interchangeControlNumber]);\n\n const raw = isa + gs + st + body.join(\"\") + se + ge + iea;\n\n // Final round-trip through `parseX12` so the returned interchange is\n // bit-identical with the parsed form every other helper consumes.\n return parseX12(raw);\n}\n\n// ---------------------------------------------------------------------------\n// Structural + maintenance-type guards.\n// ---------------------------------------------------------------------------\n\n/**\n * Refuse a structurally impossible spec, and any unknown maintenance type,\n * before any emit. Maintenance codes are X12 control codes (never PHI), so\n * the offending code is named in the message; member ids / names never\n * appear. @internal\n */\nfunction enforceStructuralSpec(spec: Build834Spec): void {\n if (spec.members.length === 0) {\n throw new Enrollment834BuildError(\n ENROLLMENT_834_BUILD_ERROR_CODES.X12_834_BUILD_INVALID_SPEC,\n \"build834: at least one member loop (INS) is required.\",\n );\n }\n for (let m = 0; m < spec.members.length; m += 1) {\n const member = spec.members[m];\n if (member === undefined) continue;\n if (member.maintenanceTypeCode === \"\") {\n throw new Enrollment834BuildError(\n ENROLLMENT_834_BUILD_ERROR_CODES.X12_834_BUILD_INVALID_SPEC,\n `build834: member at index ${String(m)} has an empty INS-03 maintenance type code (required).`,\n );\n }\n if (lookupMaintenanceType(member.maintenanceTypeCode) === undefined) {\n throw new Enrollment834BuildError(\n ENROLLMENT_834_BUILD_ERROR_CODES.X12_834_BUILD_UNKNOWN_MAINTENANCE_TYPE,\n `build834: member at index ${String(m)} has an unknown INS-03 maintenance type code \"${member.maintenanceTypeCode}\" (outside X12 Code Source 875).`,\n );\n }\n for (let c = 0; c < (member.healthCoverages ?? []).length; c += 1) {\n const coverage = member.healthCoverages?.[c];\n if (coverage === undefined) continue;\n const hd01 = coverage.maintenanceTypeCode;\n if (hd01 !== undefined && hd01 !== \"\" && lookupMaintenanceType(hd01) === undefined) {\n throw new Enrollment834BuildError(\n ENROLLMENT_834_BUILD_ERROR_CODES.X12_834_BUILD_UNKNOWN_MAINTENANCE_TYPE,\n `build834: coverage at member[${String(m)}].healthCoverages[${String(c)}] has an unknown HD-01 maintenance type code \"${hd01}\" (outside X12 Code Source 875).`,\n );\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Segment emitters. Each pushes spec-clean segment strings onto `body` in\n// TR3 005010X220A1 loop order so the result round-trips through `get834*`.\n// ---------------------------------------------------------------------------\n\n/** Emit the header — BGN + sponsor (N1*P5) + payer (N1*IN) + REF* + DTP*. @internal */\nfunction emitHeader(\n header: Build834HeaderSpec,\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): void {\n // BGN-08 (action code) is positionally pinned at element 8; interior\n // elements 5..7 are emitted empty and held in place by the action code.\n body.push(\n seg([\n \"BGN\",\n esc(header.transactionSetPurposeCode),\n esc(header.referenceId ?? \"\"),\n esc(header.date ?? \"\"),\n esc(header.time ?? \"\"),\n \"\", // BGN-05 time zone code\n \"\", // BGN-06 original reference number\n \"\", // BGN-07 transaction type code\n esc(header.actionCode ?? \"\"), // BGN-08\n ]),\n );\n if (header.sponsor !== undefined) body.push(emitParty(header.sponsor, seg, esc));\n if (header.payer !== undefined) body.push(emitParty(header.payer, seg, esc));\n for (const ref of header.references ?? []) body.push(emitRef(ref, seg, esc));\n for (const date of header.dates ?? []) body.push(emitDate(date, seg, esc));\n}\n\n/** Emit a Loop 1000 party (N1). @internal */\nfunction emitParty(\n party: Build834PartySpec,\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): string {\n return seg([\n \"N1\",\n esc(party.entityIdentifierCode),\n esc(party.name),\n esc(party.idQualifier ?? \"\"),\n esc(party.idCode ?? \"\"),\n ]);\n}\n\n/**\n * Emit a Loop 2000 member — INS + (NM1 + DMG + N3/N4) + REF* + DTP* + COB* +\n * Loop 2300 coverages. Member DTPs are emitted BEFORE the first HD so the\n * read side attaches them to the member (a DTP inside an open coverage loop\n * binds to that coverage). @internal\n */\nfunction emitMember(\n member: Build834MemberSpec,\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): void {\n // INS-08 (employment status) is positionally pinned at element 8.\n body.push(\n seg([\n \"INS\",\n esc(member.subscriberIndicator ?? \"\"),\n esc(member.relationshipCode ?? \"\"),\n esc(member.maintenanceTypeCode), // INS-03 — emitted verbatim\n esc(member.maintenanceReasonCode ?? \"\"),\n esc(member.benefitStatusCode ?? \"\"),\n \"\", // INS-06 medicare plan code\n \"\", // INS-07 cobra qualifying event code\n esc(member.employmentStatusCode ?? \"\"), // INS-08\n ]),\n );\n\n if (member.member !== undefined) emitMemberName(member.member, body, seg, esc);\n for (const ref of member.references ?? []) body.push(emitRef(ref, seg, esc));\n for (const date of member.dates ?? []) body.push(emitDate(date, seg, esc));\n for (const cob of member.coordinationOfBenefits ?? []) {\n body.push(\n seg([\n \"COB\",\n esc(cob.payerResponsibility ?? \"\"),\n esc(cob.referenceId ?? \"\"),\n esc(cob.coordinationOfBenefitsCode ?? \"\"),\n ]),\n );\n }\n for (const coverage of member.healthCoverages ?? []) emitCoverage(coverage, body, seg, esc);\n}\n\n/** Emit the member name — NM1*IL + DMG (when dob/gender present) + N3/N4. @internal */\nfunction emitMemberName(\n name: Build834MemberNameSpec,\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): void {\n body.push(\n seg([\n \"NM1\",\n esc(name.entityIdentifierCode ?? MEMBER_DEFAULT_ENTITY_ID),\n \"1\", // NM1-02 entity type qualifier — person\n esc(name.lastName ?? \"\"),\n esc(name.firstName ?? \"\"),\n esc(name.middleName ?? \"\"),\n \"\", // NM1-06 name prefix\n esc(name.suffix ?? \"\"),\n esc(name.idQualifier ?? \"\"),\n esc(name.idCode ?? \"\"),\n ]),\n );\n if (name.dateOfBirth !== undefined || name.genderCode !== undefined) {\n body.push(seg([\"DMG\", \"D8\", esc(name.dateOfBirth ?? \"\"), esc(name.genderCode ?? \"\")]));\n }\n emitAddress(name.address, body, seg, esc);\n}\n\n/** Emit N3 + N4 for a member address block, only the present lines / fields. @internal */\nfunction emitAddress(\n address: Build834AddressSpec | undefined,\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): void {\n if (address === undefined) return;\n if (address.lines.length > 0) {\n body.push(seg([\"N3\", ...address.lines.map(esc)]));\n }\n if (\n address.city !== undefined ||\n address.state !== undefined ||\n address.postalCode !== undefined ||\n address.countryCode !== undefined\n ) {\n body.push(\n seg([\n \"N4\",\n esc(address.city ?? \"\"),\n esc(address.state ?? \"\"),\n esc(address.postalCode ?? \"\"),\n esc(address.countryCode ?? \"\"),\n ]),\n );\n }\n}\n\n/** Emit a Loop 2300 coverage — HD + DTP* + AMT*. @internal */\nfunction emitCoverage(\n coverage: Build834CoverageSpec,\n body: string[],\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): void {\n body.push(\n seg([\n \"HD\",\n esc(coverage.maintenanceTypeCode ?? \"\"), // HD-01 — emitted verbatim\n \"\", // HD-02 maintenance reason code\n esc(coverage.insuranceLineCode ?? \"\"),\n esc(coverage.planCoverageDescription ?? \"\"),\n esc(coverage.coverageLevelCode ?? \"\"),\n ]),\n );\n for (const date of coverage.dates ?? []) body.push(emitDate(date, seg, esc));\n for (const amount of coverage.amounts ?? []) {\n body.push(seg([\"AMT\", esc(amount.qualifier), esc(amount.amount.toString())]));\n }\n}\n\n/** @internal */\nfunction emitRef(\n ref: Build834ReferenceSpec,\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): string {\n return seg([\"REF\", esc(ref.qualifier), esc(ref.value), esc(ref.description ?? \"\")]);\n}\n\n/** @internal */\nfunction emitDate(\n date: Build834DateSpec,\n seg: (parts: readonly string[]) => string,\n esc: (value: string) => string,\n): string {\n return seg([\n \"DTP\",\n esc(date.qualifier),\n esc(date.formatQualifier ?? DTP_DEFAULT_FORMAT),\n esc(date.value),\n ]);\n}\n\n// ---------------------------------------------------------------------------\n// String helpers — mirror the `build835` emit primitives.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction pad(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return value + \" \".repeat(width - value.length);\n return value.slice(0, width);\n}\n\n/**\n * Zero-pad a control number to `width` chars (ISA-13 / IEA-02 are always 9).\n * Throws {@link Enrollment834BuildError} if the value already exceeds the\n * width — a silently-truncated control number would break ISA-13↔IEA-02\n * reconciliation. @internal\n */\nfunction padControl(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return \"0\".repeat(width - value.length) + value;\n throw new Enrollment834BuildError(\n ENROLLMENT_834_BUILD_ERROR_CODES.X12_834_BUILD_INVALID_SPEC,\n `build834: control number \"${value}\" exceeds the ${String(width)}-char spec limit.`,\n );\n}\n\n/**\n * Expand a 6-digit YYMMDD into CCYYMMDD for GS-04. Years `00`–`49` are 21st\n * century, `50`–`99` are 20th. A value already in CCYYMMDD form passes\n * through unchanged. @internal\n */\nfunction expandYY(yymmdd: string): string {\n if (yymmdd.length !== 6) return yymmdd;\n const yy = parseInt(yymmdd.slice(0, 2), 10);\n if (Number.isNaN(yy)) return yymmdd;\n const century = yy < 50 ? \"20\" : \"19\";\n return century + yymmdd;\n}\n","/**\n * 834 TR3 `005010X220A1` loop specification — authored through the\n * **public** {@link \"../../loops/define.js\".defineLoopSpec} API, the same\n * dogfooding gate every other built-in transaction spec goes through.\n *\n * Hierarchy (per WPC TR3 `005010X220A1` §3, §4):\n *\n * ```text\n * Header (transaction set, ST..SE)\n * BGN (Beginning Segment) — required, max 1\n * REF (Transaction Set Policy Number) — situational, max >1\n * DTP (File Effective Date) — situational, max >1\n * QTY (Transaction Set Control Totals) — situational, max >1\n * Loop 1000A — Sponsor Name (N1*P5) — required, max 1\n * Loop 1000B — Payer (N1*IN) — required, max 1\n * Loop 1000C — TPA / Broker (N1*BO / N1*TV) — situational, max >1\n * Loop 2000 — Member Level Detail (INS) — required, max >1\n * INS REF DTP\n * Loop 2100A — Member Name (NM1*IL) — required, max 1\n * NM1 N3 N4 DMG\n * Loop 2300 — Health Coverage (HD) — situational, max >1\n * HD DTP AMT\n * Loop 2320 — Coordination of Benefits — situational, max >1\n * COB\n * Trailer\n * SE (Transaction Set Trailer) — required, max 1\n * ```\n *\n * @remarks\n * The v1 typed surface flattens Loop 2320 (COB) onto the member\n * (`X12Enrollment.coordinationOfBenefits`) rather than nesting it under each\n * health-coverage loop; the spec below reflects the TR3 nesting truth so a\n * consumer's companion-guide introspection still matches the standard.\n */\n\nimport { defineLoopSpec } from \"../../loops/define.js\";\nimport type { LoopSpec } from \"../../loops/types.js\";\n\n/**\n * 834 Loop 2320 — Coordination of Benefits. Triggered by `COB`.\n *\n * @example\n * ```ts\n * import { ENROLLMENT_834_LOOP_2320 } from \"@cosyte/x12\";\n * ENROLLMENT_834_LOOP_2320.trigger; // \"COB\"\n * ```\n */\nexport const ENROLLMENT_834_LOOP_2320: LoopSpec = defineLoopSpec({\n id: \"2320\",\n description: \"834 Loop 2320 — Coordination of Benefits\",\n trigger: \"COB\",\n segments: [{ id: \"COB\", usage: \"situational\", max: 1 }],\n});\n\n/**\n * 834 Loop 2300 — Health Coverage. Triggered by `HD`. Nests Loop 2320.\n *\n * @example\n * ```ts\n * import { ENROLLMENT_834_LOOP_2300 } from \"@cosyte/x12\";\n * ENROLLMENT_834_LOOP_2300.trigger; // \"HD\"\n * ENROLLMENT_834_LOOP_2300.children[0]?.trigger; // \"COB\"\n * ```\n */\nexport const ENROLLMENT_834_LOOP_2300: LoopSpec = defineLoopSpec({\n id: \"2300\",\n description: \"834 Loop 2300 — Health Coverage\",\n trigger: \"HD\",\n segments: [\n { id: \"HD\", usage: \"situational\", max: 1 },\n { id: \"DTP\", usage: \"situational\", max: \">1\" },\n { id: \"AMT\", usage: \"situational\", max: \">1\" },\n ],\n children: [ENROLLMENT_834_LOOP_2320],\n});\n\n/**\n * 834 Loop 2100A — Member Name. Triggered by `NM1` with `NM1-01 = \"IL\"`.\n *\n * @example\n * ```ts\n * import { ENROLLMENT_834_LOOP_2100A } from \"@cosyte/x12\";\n * ENROLLMENT_834_LOOP_2100A.trigger; // \"NM1\"\n * ```\n */\nexport const ENROLLMENT_834_LOOP_2100A: LoopSpec = defineLoopSpec({\n id: \"2100A\",\n description: \"834 Loop 2100A — Member Name\",\n trigger: \"NM1\",\n segments: [\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"N3\", usage: \"situational\", max: \">1\" },\n { id: \"N4\", usage: \"situational\", max: 1 },\n { id: \"DMG\", usage: \"situational\", max: 1 },\n ],\n});\n\n/**\n * 834 Loop 2000 — Member Level Detail. Triggered by `INS`. The streaming\n * unit of {@link \"./get-834.js\".get834Enrollments} — one yielded\n * `X12Enrollment` per `INS`. Nests Loop 2100A (member name) and Loop 2300\n * (health coverage).\n *\n * @example\n * ```ts\n * import { ENROLLMENT_834_LOOP_2000 } from \"@cosyte/x12\";\n * ENROLLMENT_834_LOOP_2000.trigger; // \"INS\"\n * ENROLLMENT_834_LOOP_2000.children.map((c) => c.trigger); // [\"NM1\", \"HD\"]\n * ```\n */\nexport const ENROLLMENT_834_LOOP_2000: LoopSpec = defineLoopSpec({\n id: \"2000\",\n description: \"834 Loop 2000 — Member Level Detail\",\n trigger: \"INS\",\n segments: [\n { id: \"INS\", usage: \"required\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"DTP\", usage: \"situational\", max: \">1\" },\n ],\n children: [ENROLLMENT_834_LOOP_2100A, ENROLLMENT_834_LOOP_2300],\n});\n\n/**\n * 834 Loop 1000A — Sponsor Name. Triggered by `N1` with `N1-01 = \"P5\"`.\n *\n * @example\n * ```ts\n * import { ENROLLMENT_834_LOOP_1000A } from \"@cosyte/x12\";\n * ENROLLMENT_834_LOOP_1000A.id; // \"1000A\"\n * ```\n */\nexport const ENROLLMENT_834_LOOP_1000A: LoopSpec = defineLoopSpec({\n id: \"1000A\",\n description: \"834 Loop 1000A — Sponsor Name\",\n trigger: \"N1\",\n segments: [{ id: \"N1\", usage: \"required\", max: 1 }],\n});\n\n/**\n * 834 Loop 1000B — Payer. Triggered by `N1` with `N1-01 = \"IN\"`.\n *\n * @example\n * ```ts\n * import { ENROLLMENT_834_LOOP_1000B } from \"@cosyte/x12\";\n * ENROLLMENT_834_LOOP_1000B.id; // \"1000B\"\n * ```\n */\nexport const ENROLLMENT_834_LOOP_1000B: LoopSpec = defineLoopSpec({\n id: \"1000B\",\n description: \"834 Loop 1000B — Payer\",\n trigger: \"N1\",\n segments: [{ id: \"N1\", usage: \"required\", max: 1 }],\n});\n","/**\n * `get278Request` / `get278Response` — extract a typed\n * {@link X12ServicesReview} from a parsed X12 278 Health Care Services\n * Review transaction set (request TR3 `005010X217`, response TR3\n * `005010X216`). Both directions share one lenient HL-tree walk; the entry\n * point only records `direction` on the result. Every recoverable deviation\n * surfaces as a warning, never a throw.\n *\n * **The certification decision is the safety-critical surface.** In a\n * response the `HCR-01` action code (certified / not-certified / pended /\n * modified) is captured verbatim onto the review item — the walker NEVER\n * infers a certification outcome. The HL spine `20 → 21 → 22 → 23` is\n * validated for parent-pointer integrity via the shared\n * {@link \"../shared/hl.js\".validateHl}; the `EV` / `SS` event + service\n * levels are intentionally tolerant (omitted from the expected-parent map).\n *\n * Phase 7 known limitations (documented in CHANGELOG):\n * - **Detailed 2010E provider sub-loops** (rendering / attending / operating\n * provider address + secondary IDs) are captured as bare NM1 entities on\n * {@link X12ServiceReview.providers}, not split by role.\n * - **SV1/SV2/SV3 service-line detail, PWK attachments, HSD\n * service-delivery, and CRC condition codes** are preserved verbatim on\n * `tx.segments` but not destructured onto the model.\n *\n * Spec sources: WPC TR3 `005010X217` (request) / `005010X216` (response).\n */\n\nimport { resolveHiQualifier, type X12HiCodeSystem } from \"../../code-lists/hi-qualifiers.js\";\nimport {\n componentOptional,\n elementOptional,\n elementValue,\n type X12Segment,\n} from \"../../parser/segment.js\";\nimport type { Delimiters, X12Position, X12TransactionSet } from \"../../parser/types.js\";\nimport { unknownHiQualifier, type X12ParseWarning } from \"../../parser/warnings.js\";\nimport { decodeHl, HL_LEVEL_CODES, validateHl, type X12Hl } from \"../shared/hl.js\";\nimport type {\n X12AuthDate,\n X12AuthDiagnosis,\n X12AuthEntity,\n X12AuthHeader,\n X12AuthMember,\n X12AuthReference,\n X12AuthTrace,\n X12ReviewDecision,\n X12ServiceReview,\n X12ServicesReview,\n} from \"./types.js\";\n\n/** 278 patient-event HL level code (X12 0735). @internal */\nconst HL_LEVEL_PATIENT_EVENT = \"EV\";\n/** 278 service HL level code (X12 0735). @internal */\nconst HL_LEVEL_SERVICE = \"SS\";\n\n/**\n * Per-level expected parent level for the 278 HL spine. UMO (`20`) has no\n * parent; requester (`21`) parents to UMO; subscriber (`22`) parents to\n * requester; dependent (`23`) parents to subscriber. The `EV` / `SS` event +\n * service levels are deliberately ABSENT — they attach under a subscriber OR\n * a dependent and clearinghouses vary, so the walker stays tolerant there\n * (an absent key means \"unknown level — no synthesized expectation\"). @internal\n */\nconst EXPECTED_PARENT_LEVEL: Readonly<Record<string, string | undefined>> = Object.freeze({\n [HL_LEVEL_CODES.INFORMATION_SOURCE]: undefined,\n [HL_LEVEL_CODES.INFORMATION_RECEIVER]: HL_LEVEL_CODES.INFORMATION_SOURCE,\n [HL_LEVEL_CODES.SUBSCRIBER]: HL_LEVEL_CODES.INFORMATION_RECEIVER,\n [HL_LEVEL_CODES.DEPENDENT]: HL_LEVEL_CODES.SUBSCRIBER,\n});\n\n/**\n * Extract a typed {@link X12ServicesReview} from a 278 **request**\n * (`005010X217`). Pure function — no I/O. Returns `undefined` only when the\n * transaction's ST-01 is not `\"278\"` (mis-routed call); every other\n * deviation is recoverable and surfaces on `result.warnings`.\n *\n * @example\n * ```ts\n * import { parseX12, get278Request } from \"@cosyte/x12\";\n * const ix = parseX12(raw);\n * const tx = ix.groups[0]?.transactions.find((t) => t.st.elements[1] === \"278\");\n * if (tx !== undefined) {\n * const req = get278Request(ix.delimiters, tx);\n * req?.reviews[0]?.requestCategoryCode; // \"HS\"\n * req?.reviews[0]?.diagnoses[0]?.code; // \"E1165\"\n * }\n * ```\n */\nexport function get278Request(\n delimiters: Delimiters,\n tx: X12TransactionSet,\n): X12ServicesReview | undefined {\n return walk278(delimiters, tx, \"request\");\n}\n\n/**\n * Extract a typed {@link X12ServicesReview} from a 278 **response**\n * (`005010X216`). Same lenient walk as {@link get278Request}; the `HCR`\n * decision under each event / service review is the response's\n * safety-critical addition. Returns `undefined` only on a mis-routed ST-01.\n *\n * @example\n * ```ts\n * import { parseX12, get278Response } from \"@cosyte/x12\";\n * const ix = parseX12(raw);\n * const tx = ix.groups[0]?.transactions.find((t) => t.st.elements[1] === \"278\");\n * if (tx !== undefined) {\n * const resp = get278Response(ix.delimiters, tx);\n * resp?.reviews[0]?.decision?.actionCode; // \"A1\"\n * resp?.reviews[0]?.decision?.reviewIdentificationNumber; // \"AUTH123456\"\n * }\n * ```\n */\nexport function get278Response(\n delimiters: Delimiters,\n tx: X12TransactionSet,\n): X12ServicesReview | undefined {\n return walk278(delimiters, tx, \"response\");\n}\n\n/** @internal — the shared request/response HL walk. */\nfunction walk278(\n delimiters: Delimiters,\n tx: X12TransactionSet,\n direction: \"request\" | \"response\",\n): X12ServicesReview | undefined {\n if (tx.st.elements[1] !== \"278\") return undefined;\n\n const warnings: X12ParseWarning[] = [];\n const body = tx.se === undefined ? tx.segments.slice(1) : tx.segments.slice(1, -1);\n\n const hierarchies: X12Hl[] = [];\n const hlIndex: Map<string, X12Hl> = new Map();\n\n let header: X12AuthHeader | undefined;\n let umo: X12AuthEntity | undefined;\n let requester: X12AuthEntity | undefined;\n let subscriber: MemberAccumulator | undefined;\n let dependent: MemberAccumulator | undefined;\n\n const reviews: ReviewAccumulator[] = [];\n let currentReview: ReviewAccumulator | undefined;\n let context: \"umo\" | \"requester\" | \"subscriber\" | \"dependent\" | \"event\" | \"service\" | \"other\" =\n \"other\";\n\n const flushReview = (): void => {\n if (currentReview !== undefined) reviews.push(currentReview);\n currentReview = undefined;\n };\n\n for (let i = 0; i < body.length; i += 1) {\n const seg = body[i];\n if (seg === undefined) continue;\n const position: X12Position = { segmentIndex: i + 1, transactionIndex: 0 };\n switch (seg.id) {\n case \"BHT\": {\n header = decodeBht(seg, delimiters);\n break;\n }\n case \"HL\": {\n const hl = decodeHl(seg, delimiters);\n hierarchies.push(hl);\n validateHl(hl, hlIndex, EXPECTED_PARENT_LEVEL, position, warnings);\n hlIndex.set(hl.hlId, hl);\n if (hl.levelCode === HL_LEVEL_CODES.INFORMATION_SOURCE) {\n flushReview();\n context = \"umo\";\n } else if (hl.levelCode === HL_LEVEL_CODES.INFORMATION_RECEIVER) {\n flushReview();\n context = \"requester\";\n } else if (hl.levelCode === HL_LEVEL_CODES.SUBSCRIBER) {\n flushReview();\n context = \"subscriber\";\n } else if (hl.levelCode === HL_LEVEL_CODES.DEPENDENT) {\n flushReview();\n context = \"dependent\";\n } else if (hl.levelCode === HL_LEVEL_PATIENT_EVENT || hl.levelCode === HL_LEVEL_SERVICE) {\n flushReview();\n currentReview = openReview(hl);\n context = hl.levelCode === HL_LEVEL_PATIENT_EVENT ? \"event\" : \"service\";\n } else {\n flushReview();\n context = \"other\";\n }\n break;\n }\n case \"NM1\": {\n if (context === \"umo\") {\n umo ??= decodeEntity(seg, delimiters);\n } else if (context === \"requester\") {\n requester ??= decodeEntity(seg, delimiters);\n } else if (context === \"subscriber\") {\n subscriber ??= openMember(seg, delimiters);\n } else if (context === \"dependent\") {\n dependent ??= openMember(seg, delimiters);\n } else if (currentReview !== undefined) {\n currentReview.providers.push(decodeEntity(seg, delimiters));\n }\n break;\n }\n case \"DMG\": {\n const member =\n context === \"dependent\" ? dependent : context === \"subscriber\" ? subscriber : undefined;\n if (member !== undefined) {\n member.dateOfBirth = elementOptional(seg, 2, delimiters);\n member.genderCode = elementOptional(seg, 3, delimiters);\n }\n break;\n }\n case \"UM\": {\n if (currentReview !== undefined) {\n currentReview.requestCategoryCode = elementOptional(seg, 1, delimiters);\n currentReview.certificationTypeCode = elementOptional(seg, 2, delimiters);\n currentReview.serviceTypeCode = elementOptional(seg, 3, delimiters);\n currentReview.levelOfServiceCode = elementOptional(seg, 6, delimiters);\n }\n break;\n }\n case \"HCR\": {\n if (currentReview !== undefined) currentReview.decision = decodeHcr(seg, delimiters);\n break;\n }\n case \"HI\": {\n if (currentReview !== undefined) {\n for (const dx of decodeHiDiagnoses(seg, delimiters, warnings, position)) {\n currentReview.diagnoses.push(dx);\n }\n }\n break;\n }\n case \"TRN\": {\n if (currentReview !== undefined) currentReview.traces.push(decodeTrn(seg, delimiters));\n break;\n }\n case \"REF\": {\n if (currentReview !== undefined) currentReview.references.push(decodeRef(seg, delimiters));\n break;\n }\n case \"DTP\": {\n const date = decodeDtp(seg, delimiters);\n if (date !== undefined && currentReview !== undefined) currentReview.dates.push(date);\n break;\n }\n case \"MSG\": {\n const text = elementOptional(seg, 1, delimiters);\n if (text !== undefined && currentReview !== undefined) currentReview.messages.push(text);\n break;\n }\n default:\n break;\n }\n }\n\n flushReview();\n\n const icr = tx.st.elements[3];\n\n return Object.freeze({\n direction,\n implementationConventionReference: icr === undefined || icr === \"\" ? undefined : icr,\n header: header ?? EMPTY_HEADER,\n utilizationManagementOrganization: umo,\n requester,\n subscriber: subscriber === undefined ? undefined : freezeMember(subscriber),\n dependent: dependent === undefined ? undefined : freezeMember(dependent),\n reviews: Object.freeze(reviews.map(freezeReview)),\n hierarchies: Object.freeze(hierarchies.slice()),\n warnings: Object.freeze(warnings.slice()),\n });\n}\n\n// ---------------------------------------------------------------------------\n// Mutable accumulators (frozen into the readonly public shape at the end).\n// ---------------------------------------------------------------------------\n\n/** @internal */\ninterface MemberAccumulator {\n readonly entityIdentifierCode: string;\n readonly entityTypeQualifier: string;\n readonly lastName: string | undefined;\n readonly firstName: string | undefined;\n readonly middleName: string | undefined;\n readonly suffix: string | undefined;\n readonly idQualifier: string | undefined;\n readonly idCode: string | undefined;\n dateOfBirth: string | undefined;\n genderCode: string | undefined;\n}\n\n/** @internal */\ninterface ReviewAccumulator {\n readonly hierarchy: X12Hl;\n requestCategoryCode: string | undefined;\n certificationTypeCode: string | undefined;\n serviceTypeCode: string | undefined;\n levelOfServiceCode: string | undefined;\n decision: X12ReviewDecision | undefined;\n readonly traces: X12AuthTrace[];\n readonly diagnoses: X12AuthDiagnosis[];\n readonly providers: X12AuthEntity[];\n readonly references: X12AuthReference[];\n readonly dates: X12AuthDate[];\n readonly messages: string[];\n}\n\n/** @internal */\nconst EMPTY_HEADER: X12AuthHeader = Object.freeze({\n structurePurposeCode: \"\",\n purposeCode: undefined,\n referenceId: undefined,\n date: undefined,\n time: undefined,\n transactionTypeCode: undefined,\n});\n\n// ---------------------------------------------------------------------------\n// Openers + decoders.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction openReview(hierarchy: X12Hl): ReviewAccumulator {\n return {\n hierarchy,\n requestCategoryCode: undefined,\n certificationTypeCode: undefined,\n serviceTypeCode: undefined,\n levelOfServiceCode: undefined,\n decision: undefined,\n traces: [],\n diagnoses: [],\n providers: [],\n references: [],\n dates: [],\n messages: [],\n };\n}\n\n/** @internal */\nfunction openMember(seg: X12Segment, delimiters: Delimiters): MemberAccumulator {\n return {\n entityIdentifierCode: elementValue(seg, 1, delimiters),\n entityTypeQualifier: elementValue(seg, 2, delimiters),\n lastName: elementOptional(seg, 3, delimiters),\n firstName: elementOptional(seg, 4, delimiters),\n middleName: elementOptional(seg, 5, delimiters),\n suffix: elementOptional(seg, 7, delimiters),\n idQualifier: elementOptional(seg, 8, delimiters),\n idCode: elementOptional(seg, 9, delimiters),\n dateOfBirth: undefined,\n genderCode: undefined,\n };\n}\n\n/** @internal */\nfunction decodeBht(seg: X12Segment, delimiters: Delimiters): X12AuthHeader {\n return Object.freeze({\n structurePurposeCode: elementValue(seg, 1, delimiters),\n purposeCode: elementOptional(seg, 2, delimiters),\n referenceId: elementOptional(seg, 3, delimiters),\n date: elementOptional(seg, 4, delimiters),\n time: elementOptional(seg, 5, delimiters),\n transactionTypeCode: elementOptional(seg, 6, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeEntity(seg: X12Segment, delimiters: Delimiters): X12AuthEntity {\n return Object.freeze({\n entityIdentifierCode: elementValue(seg, 1, delimiters),\n entityTypeQualifier: elementValue(seg, 2, delimiters),\n name: elementValue(seg, 3, delimiters),\n idQualifier: elementOptional(seg, 8, delimiters),\n idCode: elementOptional(seg, 9, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeHcr(seg: X12Segment, delimiters: Delimiters): X12ReviewDecision {\n return Object.freeze({\n actionCode: elementValue(seg, 1, delimiters),\n reviewIdentificationNumber: elementOptional(seg, 2, delimiters),\n reasonCode: elementOptional(seg, 3, delimiters),\n secondSurgicalOpinionCode: elementOptional(seg, 4, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeTrn(seg: X12Segment, delimiters: Delimiters): X12AuthTrace {\n return Object.freeze({\n traceTypeCode: elementValue(seg, 1, delimiters),\n referenceId: elementValue(seg, 2, delimiters),\n originatingCompanyId: elementOptional(seg, 3, delimiters),\n supplementalReferenceId: elementOptional(seg, 4, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeRef(seg: X12Segment, delimiters: Delimiters): X12AuthReference {\n return Object.freeze({\n qualifier: elementValue(seg, 1, delimiters),\n value: elementValue(seg, 2, delimiters),\n description: elementOptional(seg, 3, delimiters),\n });\n}\n\n/** @internal */\nfunction decodeDtp(seg: X12Segment, delimiters: Delimiters): X12AuthDate | undefined {\n const qualifier = elementOptional(seg, 1, delimiters);\n const value = elementOptional(seg, 3, delimiters);\n if (qualifier === undefined || value === undefined) return undefined;\n return Object.freeze({\n qualifier,\n formatQualifier: elementValue(seg, 2, delimiters),\n value,\n });\n}\n\n/** @internal — decode the HI diagnosis composites (up to 12). */\nfunction decodeHiDiagnoses(\n seg: X12Segment,\n delimiters: Delimiters,\n warnings: X12ParseWarning[],\n position: X12Position,\n): X12AuthDiagnosis[] {\n const out: X12AuthDiagnosis[] = [];\n for (let comp = 1; comp <= 12; comp += 1) {\n const qualifier = componentOptional(seg, comp, 1, delimiters);\n const code = componentOptional(seg, comp, 2, delimiters);\n if (qualifier === undefined && code === undefined) continue;\n const resolved = qualifier === undefined ? undefined : resolveHiQualifier(qualifier);\n const codeSystem: X12HiCodeSystem | \"unknown\" = resolved?.system ?? \"unknown\";\n if (qualifier !== undefined && resolved === undefined) {\n warnings.push(unknownHiQualifier(position, qualifier));\n }\n out.push(Object.freeze({ qualifier: qualifier ?? \"\", code: code ?? \"\", codeSystem }));\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Freezing accumulators into the readonly public shape.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction freezeMember(acc: MemberAccumulator): X12AuthMember {\n return Object.freeze({\n entityIdentifierCode: acc.entityIdentifierCode,\n entityTypeQualifier: acc.entityTypeQualifier,\n lastName: acc.lastName,\n firstName: acc.firstName,\n middleName: acc.middleName,\n suffix: acc.suffix,\n idQualifier: acc.idQualifier,\n idCode: acc.idCode,\n dateOfBirth: acc.dateOfBirth,\n genderCode: acc.genderCode,\n });\n}\n\n/** @internal */\nfunction freezeReview(acc: ReviewAccumulator): X12ServiceReview {\n return Object.freeze({\n hierarchy: acc.hierarchy,\n requestCategoryCode: acc.requestCategoryCode,\n certificationTypeCode: acc.certificationTypeCode,\n serviceTypeCode: acc.serviceTypeCode,\n levelOfServiceCode: acc.levelOfServiceCode,\n decision: acc.decision,\n traces: Object.freeze(acc.traces.slice()),\n diagnoses: Object.freeze(acc.diagnoses.slice()),\n providers: Object.freeze(acc.providers.slice()),\n references: Object.freeze(acc.references.slice()),\n dates: Object.freeze(acc.dates.slice()),\n messages: Object.freeze(acc.messages.slice()),\n });\n}\n","/**\n * Thrown errors raised by the 278 domain builders ({@link\n * \"./build-278.js\".build278Request} / {@link\n * \"./build-278.js\".build278Response}). Distinct from the general\n * `X12BuildError` (a structurally impossible envelope): {@link\n * ServicesReview278BuildError} is raised when a services-review spec cannot\n * form a valid HL hierarchy, or a per-loop / certification precondition\n * fails.\n *\n * The HL spine is the 278's safety primitive — the builder OWNS it,\n * computing every HL-01 id, HL-02 parent pointer (20 → 21 → 22 → 23), and\n * HL-04 has-child flag from the nested UMO → requester → subscriber →\n * (dependent) → reviews tree, so a structurally inconsistent hierarchy is\n * *unrepresentable* and SE-01 is correct by construction.\n *\n * The read side ({@link \"./get-278.js\".get278Request}) is lenient — a real\n * 278 with a broken HL parent pointer is WARNED, never rejected. The builder\n * takes the opposite stance: it REFUSES rather than emit a hierarchy a\n * downstream consumer would have to repair. A caller that must reproduce a\n * knowingly-malformed payer artifact drops to the general `buildInterchange`,\n * which applies no domain guard.\n */\n\n/**\n * Stable string codes for every {@link ServicesReview278BuildError}. Locked\n * here so consumers can narrow exhaustively on `err.code`; additions-only\n * thereafter (renaming any code is a breaking change).\n *\n * - `X12_278_BUILD_INVALID_HIERARCHY` — the nested tree cannot form a valid\n * 278 HL spine (a subscriber with neither a review nor a dependent; a\n * dependent with no review). The message carries structural indices +\n * counts only — never a member id / name.\n * - `X12_278_BUILD_INVALID_SPEC` — a non-hierarchy precondition failed (a\n * review with no `requestCategoryCode`; a request spec carrying an `HCR`\n * certification decision — `HCR` is response-only; a response review with a\n * decision whose `actionCode` is empty; an over-long ISA-13 control\n * number).\n *\n * @example\n * ```ts\n * import { AUTH_278_BUILD_ERROR_CODES, ServicesReview278BuildError, build278Response } from \"@cosyte/x12\";\n * try {\n * build278Response(spec);\n * } catch (err) {\n * if (\n * err instanceof ServicesReview278BuildError &&\n * err.code === AUTH_278_BUILD_ERROR_CODES.X12_278_BUILD_INVALID_HIERARCHY\n * ) {\n * // the hierarchy is impossible — fix the tree, do not emit\n * }\n * }\n * ```\n */\nexport const AUTH_278_BUILD_ERROR_CODES = {\n X12_278_BUILD_INVALID_HIERARCHY: \"X12_278_BUILD_INVALID_HIERARCHY\",\n X12_278_BUILD_INVALID_SPEC: \"X12_278_BUILD_INVALID_SPEC\",\n} as const;\n\n/**\n * String-literal union over {@link AUTH_278_BUILD_ERROR_CODES}. Used as\n * {@link ServicesReview278BuildError}.`code`.\n */\nexport type ServicesReview278BuildErrorCode =\n (typeof AUTH_278_BUILD_ERROR_CODES)[keyof typeof AUTH_278_BUILD_ERROR_CODES];\n\n/**\n * Thrown by {@link \"./build-278.js\".build278Request} / {@link\n * \"./build-278.js\".build278Response} when the supplied services-review spec\n * cannot be emitted as a conformant, self-consistent 278 — most importantly\n * when its nested tree cannot form a valid HL hierarchy, or when a response's\n * `HCR` certification action is missing the verbatim `actionCode` the builder\n * is forbidden to infer. Carries a stable `code` for programmatic narrowing.\n * Deliberately does NOT extend `X12ParseError` or `X12BuildError` — the\n * domain-refusal distinction matters at the type level.\n *\n * @example\n * ```ts\n * import { ServicesReview278BuildError } from \"@cosyte/x12\";\n * try {\n * build278Request(spec);\n * } catch (err) {\n * if (err instanceof ServicesReview278BuildError) {\n * // err.code is one of AUTH_278_BUILD_ERROR_CODES\n * }\n * }\n * ```\n */\nexport class ServicesReview278BuildError extends Error {\n public readonly code: ServicesReview278BuildErrorCode;\n\n /** @internal */\n public constructor(code: ServicesReview278BuildErrorCode, message: string) {\n super(message);\n this.name = \"ServicesReview278BuildError\";\n this.code = code;\n }\n}\n","/**\n * `build278Request` / `build278Response` — pure-function builders for a\n * 005010 278 Health Care Services Review: Request for Review (`005010X217`)\n * and Response (`005010X216`). NEVER auto-sends, NEVER opens a socket, NEVER\n * touches the filesystem. The library mechanically emits the review it is\n * told; a spec whose UMO → requester → subscriber → (dependent) → reviews\n * tree cannot form a valid HL hierarchy is REFUSED via {@link\n * \"./build-errors.js\".ServicesReview278BuildError}.\n *\n * The HL spine is the 278's safety primitive, so the builder OWNS it: it\n * computes every HL-01 id (sequential within the transaction), HL-02 parent\n * pointer (20 → 21 → 22 → 23 → EV/SS), and HL-04 has-child flag from the\n * nested tree. Callers never hand-code the spine — a structurally\n * inconsistent hierarchy is therefore unrepresentable, and the SE-01 segment\n * count is correct by construction.\n *\n * **The certification decision is response-only and safety-critical.**\n * {@link build278Request} REFUSES a review carrying a `decision`; {@link\n * build278Response} emits the supplied HCR-01 `actionCode` VERBATIM — never\n * inferred, never upgraded — so the response round-trips the exact outcome\n * the caller supplied through {@link \"./get-278.js\".get278Response}.\n *\n * The read side ({@link \"./get-278.js\".get278Request} / {@link\n * \"./get-278.js\".get278Response}) is lenient — a real 278 with a broken HL\n * parent pointer is WARNED, never rejected. The builder takes the opposite\n * stance: it REFUSES rather than emit a hierarchy a downstream consumer would\n * have to repair. A caller that must reproduce a knowingly-malformed payer\n * artifact drops to {@link\n * \"../../builder/build-interchange.js\".buildInterchange}, which applies no\n * domain guard.\n *\n * Output shape: a complete {@link X12Interchange} wrapping a single GS..GE\n * functional group (GS-01 `\"HI\"`) containing a single ST..SE 278 transaction\n * set (ST-03 per direction), spec-clean and round-trippable through {@link\n * parseX12}.\n */\n\nimport { AUTH_278_BUILD_ERROR_CODES, ServicesReview278BuildError } from \"./build-errors.js\";\nimport type {\n Build278DependentSpec,\n Build278EntitySpec,\n Build278MemberSpec,\n Build278ReviewSpec,\n Build278Spec,\n Build278SubscriberSpec,\n} from \"./build-278-types.js\";\nimport { parseX12 } from \"../../parser/index.js\";\nimport type { X12Interchange } from \"../../parser/types.js\";\nimport { escapeRelease } from \"../../parser/release.js\";\n\n/** GS-01 functional identifier code for the 278. `HI` = Health Care Services Review Information. @internal */\nconst X12_278_FUNCTIONAL_ID = \"HI\";\n\n/** GS-07 standards agency code — `X` for ASC X12. @internal */\nconst X12_AGENCY_CODE = \"X\";\n\n/** ST-03 / GS-08 version + release for each builder entry point. @internal */\ntype ServicesReviewVersion = \"005010X217\" | \"005010X216\";\n\n/** HL-03 level codes for the spine the builder computes. @internal */\nconst HL_LEVEL = {\n UMO: \"20\",\n REQUESTER: \"21\",\n SUBSCRIBER: \"22\",\n DEPENDENT: \"23\",\n} as const;\n\n/** Default review HL-03 level code when the spec omits it. @internal */\nconst DEFAULT_REVIEW_LEVEL = \"EV\";\n\n/**\n * `build278Request` — assemble a 005010X217 278 Request for Review around the\n * supplied spec. Refuses any review carrying an HCR `decision` (HCR is\n * response-only).\n *\n * @example\n * ```ts\n * import { build278Request } from \"@cosyte/x12\";\n * const ix = build278Request({\n * envelope: {\n * senderId: \"SUBMITTER\", receiverId: \"UMOPAYER\",\n * interchangeDate: \"260601\", interchangeTime: \"1200\",\n * interchangeControlNumber: \"000000001\",\n * groupControlNumber: \"1\", transactionSetControlNumber: \"0001\",\n * },\n * header: { structurePurposeCode: \"0078\", purposeCode: \"13\", referenceId: \"AUTHREQ-202606\" },\n * utilizationManagementOrganization: { entityIdentifierCode: \"X3\", entityTypeQualifier: \"2\", name: \"UTILIZATION REVIEW CO\", idQualifier: \"PI\", idCode: \"UMO001\" },\n * requester: { entityIdentifierCode: \"1P\", entityTypeQualifier: \"2\", name: \"RENDERING CLINIC\", idQualifier: \"XX\", idCode: \"1234567893\" },\n * subscriber: {\n * member: { entityIdentifierCode: \"IL\", entityTypeQualifier: \"1\", lastName: \"DOE\", firstName: \"JANE\", idQualifier: \"MI\", idCode: \"MBR0001\" },\n * reviews: [{ requestCategoryCode: \"HS\", certificationTypeCode: \"I\", serviceTypeCode: \"1\" }],\n * },\n * });\n * ```\n */\nexport function build278Request(spec: Build278Spec): X12Interchange {\n return buildServicesReview(\"005010X217\", \"request\", spec);\n}\n\n/**\n * `build278Response` — assemble a 005010X216 278 Response around the supplied\n * spec. The HCR `actionCode` on each review's `decision` is emitted VERBATIM\n * (never inferred), so the response round-trips the exact certification\n * outcome through {@link \"./get-278.js\".get278Response}.\n *\n * @example\n * ```ts\n * import { build278Response } from \"@cosyte/x12\";\n * declare const base: import(\"@cosyte/x12\").Build278Spec;\n * const ix = build278Response({\n * ...base,\n * subscriber: {\n * ...base.subscriber,\n * reviews: [{ requestCategoryCode: \"HS\", certificationTypeCode: \"I\", decision: { actionCode: \"A1\", reviewIdentificationNumber: \"AUTH123456\" } }],\n * },\n * }); // ST-03 = 005010X216, HCR*A1*AUTH123456\n * ```\n */\nexport function build278Response(spec: Build278Spec): X12Interchange {\n return buildServicesReview(\"005010X216\", \"response\", spec);\n}\n\n/**\n * Shared emit path for both directions. `version` fixes the GS-08 / ST-03\n * reference and `direction` gates the HCR decision (response-only); the rest\n * is driven by the spec. Mirrors how `build277` / `build277CA` delegate to a\n * single `buildClaimStatus`. @internal\n */\nfunction buildServicesReview(\n version: ServicesReviewVersion,\n direction: \"request\" | \"response\",\n spec: Build278Spec,\n): X12Interchange {\n const { envelope } = spec;\n\n // ---- Structural preconditions (refuse an impossible spine) ------------\n\n enforceStructuralSpec(spec, direction);\n\n // ---- Delimiter resolution + escape helper -----------------------------\n\n const elementSeparator = envelope.elementSeparator ?? \"*\";\n const repetitionSeparator = envelope.repetitionSeparator ?? \"^\";\n const componentSeparator = envelope.componentSeparator ?? \":\";\n const segmentTerminator = envelope.segmentTerminator ?? \"~\";\n const delimiters = {\n element: elementSeparator,\n repetition: repetitionSeparator,\n component: componentSeparator,\n segment: segmentTerminator,\n };\n const esc = (value: string): string => escapeRelease(value, delimiters);\n\n const seg = (parts: readonly string[]): string => {\n let end = parts.length;\n while (end > 1 && parts[end - 1] === \"\") end -= 1;\n return parts.slice(0, end).join(elementSeparator) + segmentTerminator;\n };\n\n const comp = (components: readonly string[]): string => {\n const escaped = components.map(esc);\n let end = escaped.length;\n while (end > 0 && escaped[end - 1] === \"\") end -= 1;\n return escaped.slice(0, end).join(componentSeparator);\n };\n\n const ctx: EmitContext = { seg, esc, comp };\n\n // ---- ISA envelope -----------------------------------------------------\n\n const senderQualifier = envelope.senderQualifier ?? \"ZZ\";\n const receiverQualifier = envelope.receiverQualifier ?? \"ZZ\";\n const usageIndicator = envelope.usageIndicator ?? \"P\";\n const interchangeControlNumber = padControl(envelope.interchangeControlNumber, 9);\n const isa =\n [\n \"ISA\",\n \"00\",\n pad(\" \", 10),\n \"00\",\n pad(\" \", 10),\n pad(senderQualifier, 2),\n pad(envelope.senderId, 15),\n pad(receiverQualifier, 2),\n pad(envelope.receiverId, 15),\n pad(envelope.interchangeDate, 6),\n pad(envelope.interchangeTime, 4),\n repetitionSeparator,\n \"00501\",\n interchangeControlNumber,\n \"0\",\n usageIndicator,\n componentSeparator,\n ].join(elementSeparator) + segmentTerminator;\n\n // ---- GS / ST ----------------------------------------------------------\n\n const groupDate = envelope.groupDate ?? expandYY(envelope.interchangeDate);\n const groupTime = envelope.groupTime ?? envelope.interchangeTime;\n const applicationSenderCode = envelope.applicationSenderCode ?? envelope.senderId;\n const applicationReceiverCode = envelope.applicationReceiverCode ?? envelope.receiverId;\n\n const gs = seg([\n \"GS\",\n X12_278_FUNCTIONAL_ID,\n esc(applicationSenderCode),\n esc(applicationReceiverCode),\n groupDate,\n groupTime,\n esc(envelope.groupControlNumber),\n X12_AGENCY_CODE,\n version,\n ]);\n\n const stControlNumber = envelope.transactionSetControlNumber;\n const st = seg([\"ST\", \"278\", esc(stControlNumber), version]);\n\n // ---- BHT header -------------------------------------------------------\n\n const { header } = spec;\n const bht = seg([\n \"BHT\",\n esc(header.structurePurposeCode),\n esc(header.purposeCode ?? \"\"),\n esc(header.referenceId ?? \"\"),\n esc(header.date ?? \"\"),\n esc(header.time ?? \"\"),\n esc(header.transactionTypeCode ?? \"\"),\n ]);\n\n // ---- Body segments — emit the computed HL spine depth-first -----------\n\n const body: string[] = [bht];\n const hlCounter: HlCounter = { next: 1 };\n\n const umoHlId = String(hlCounter.next);\n hlCounter.next += 1;\n body.push(ctx.seg([\"HL\", umoHlId, \"\", HL_LEVEL.UMO, \"1\"]));\n emitEntity(spec.utilizationManagementOrganization, body, ctx);\n\n const requesterHlId = String(hlCounter.next);\n hlCounter.next += 1;\n body.push(ctx.seg([\"HL\", requesterHlId, umoHlId, HL_LEVEL.REQUESTER, \"1\"]));\n emitEntity(spec.requester, body, ctx);\n\n emitSubscriber(spec.subscriber, requesterHlId, direction, body, ctx, hlCounter);\n\n // ---- SE / GE / IEA ----------------------------------------------------\n\n const seCount = body.length + 2;\n const se = seg([\"SE\", String(seCount), esc(stControlNumber)]);\n const ge = seg([\"GE\", \"1\", esc(envelope.groupControlNumber)]);\n const iea = seg([\"IEA\", \"1\", interchangeControlNumber]);\n\n const raw = isa + gs + st + body.join(\"\") + se + ge + iea;\n\n // Final round-trip through `parseX12` so the returned interchange is\n // bit-identical with the parsed form every other helper consumes.\n return parseX12(raw);\n}\n\n// ---------------------------------------------------------------------------\n// Structural guards.\n// ---------------------------------------------------------------------------\n\n/**\n * Refuse a structurally impossible spec before any emit. Covers the HL spine\n * (a subscriber with neither a review nor a dependent; a dependent with no\n * review) and the per-review preconditions (a review with no\n * `requestCategoryCode`; a request review carrying an HCR decision; a response\n * review whose decision `actionCode` is empty). PHI-clean: messages carry\n * indices + counts, never names / member ids / traces. @internal\n */\nfunction enforceStructuralSpec(spec: Build278Spec, direction: \"request\" | \"response\"): void {\n const subscriber = spec.subscriber;\n const subscriberReviews = subscriber.reviews ?? [];\n if (subscriberReviews.length === 0 && subscriber.dependent === undefined) {\n throw new ServicesReview278BuildError(\n AUTH_278_BUILD_ERROR_CODES.X12_278_BUILD_INVALID_HIERARCHY,\n \"build278: subscriber has neither a review (HL level EV/SS) nor a dependent (HL level 23).\",\n );\n }\n for (let r = 0; r < subscriberReviews.length; r += 1) {\n const review = subscriberReviews[r];\n if (review !== undefined) enforceReview(review, `subscriber.review[${String(r)}]`, direction);\n }\n const dependent = subscriber.dependent;\n if (dependent !== undefined) {\n if (dependent.reviews.length === 0) {\n throw new ServicesReview278BuildError(\n AUTH_278_BUILD_ERROR_CODES.X12_278_BUILD_INVALID_HIERARCHY,\n \"build278: dependent has no review (HL level EV/SS) child.\",\n );\n }\n for (let r = 0; r < dependent.reviews.length; r += 1) {\n const review = dependent.reviews[r];\n if (review !== undefined) enforceReview(review, `dependent.review[${String(r)}]`, direction);\n }\n }\n}\n\n/**\n * Refuse a review with no request category code, a request review carrying an\n * HCR decision (response-only), or a response decision with an empty action\n * code. Recurses into nested service reviews. @internal\n */\nfunction enforceReview(\n review: Build278ReviewSpec,\n locator: string,\n direction: \"request\" | \"response\",\n): void {\n if (review.requestCategoryCode === \"\") {\n throw new ServicesReview278BuildError(\n AUTH_278_BUILD_ERROR_CODES.X12_278_BUILD_INVALID_SPEC,\n `build278: review at ${locator} requires a non-empty request category code (UM-01).`,\n );\n }\n if (review.decision !== undefined) {\n if (direction === \"request\") {\n throw new ServicesReview278BuildError(\n AUTH_278_BUILD_ERROR_CODES.X12_278_BUILD_INVALID_SPEC,\n `build278: review at ${locator} carries an HCR certification decision, which is response-only.`,\n );\n }\n if (review.decision.actionCode === \"\") {\n throw new ServicesReview278BuildError(\n AUTH_278_BUILD_ERROR_CODES.X12_278_BUILD_INVALID_SPEC,\n `build278: response review at ${locator} has an HCR decision with an empty action code (HCR-01).`,\n );\n }\n }\n const nested = review.reviews ?? [];\n for (let r = 0; r < nested.length; r += 1) {\n const child = nested[r];\n if (child !== undefined) enforceReview(child, `${locator}.review[${String(r)}]`, direction);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Loop emitters.\n// ---------------------------------------------------------------------------\n\ninterface EmitContext {\n readonly seg: (parts: readonly string[]) => string;\n readonly esc: (value: string) => string;\n readonly comp: (components: readonly string[]) => string;\n}\n\ninterface HlCounter {\n next: number;\n}\n\n/**\n * Emit the Loop 2000C subscriber HL + member NM1/DMG + subscriber-level\n * reviews + an optional dependent subtree. @internal\n */\nfunction emitSubscriber(\n subscriber: Build278SubscriberSpec,\n parentHlId: string,\n direction: \"request\" | \"response\",\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n body.push(ctx.seg([\"HL\", hlId, parentHlId, HL_LEVEL.SUBSCRIBER, \"1\"]));\n\n if (subscriber.member !== undefined) emitMember(subscriber.member, body, ctx);\n for (const review of subscriber.reviews ?? []) {\n emitReview(review, hlId, direction, body, ctx, counter);\n }\n if (subscriber.dependent !== undefined) {\n emitDependent(subscriber.dependent, hlId, direction, body, ctx, counter);\n }\n}\n\n/** Emit the Loop 2000D dependent HL + member NM1/DMG + reviews. @internal */\nfunction emitDependent(\n dependent: Build278DependentSpec,\n parentHlId: string,\n direction: \"request\" | \"response\",\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n body.push(ctx.seg([\"HL\", hlId, parentHlId, HL_LEVEL.DEPENDENT, \"1\"]));\n\n if (dependent.member !== undefined) emitMember(dependent.member, body, ctx);\n for (const review of dependent.reviews) {\n emitReview(review, hlId, direction, body, ctx, counter);\n }\n}\n\n/**\n * Emit a Loop 2000E/2000F review HL + its UM / HCR / HI / NM1 / TRN / REF /\n * DTP / MSG detail, then recurse into any nested service reviews. HL-04 is\n * `\"1\"` when nested reviews are present. @internal\n */\nfunction emitReview(\n review: Build278ReviewSpec,\n parentHlId: string,\n direction: \"request\" | \"response\",\n body: string[],\n ctx: EmitContext,\n counter: HlCounter,\n): void {\n const hlId = String(counter.next);\n counter.next += 1;\n const nested = review.reviews ?? [];\n const hasChild = nested.length > 0 ? \"1\" : \"0\";\n const levelCode = review.levelCode ?? DEFAULT_REVIEW_LEVEL;\n body.push(ctx.seg([\"HL\", hlId, parentHlId, levelCode, hasChild]));\n\n for (const trace of review.traces ?? []) {\n body.push(\n ctx.seg([\n \"TRN\",\n ctx.esc(trace.traceTypeCode),\n ctx.esc(trace.referenceId),\n ctx.esc(trace.originatingCompanyId ?? \"\"),\n ctx.esc(trace.supplementalReferenceId ?? \"\"),\n ]),\n );\n }\n\n body.push(\n ctx.seg([\n \"UM\",\n ctx.esc(review.requestCategoryCode),\n ctx.esc(review.certificationTypeCode ?? \"\"),\n ctx.esc(review.serviceTypeCode ?? \"\"),\n \"\",\n \"\",\n ctx.esc(review.levelOfServiceCode ?? \"\"),\n ]),\n );\n\n if (review.decision !== undefined) {\n body.push(\n ctx.seg([\n \"HCR\",\n ctx.esc(review.decision.actionCode),\n ctx.esc(review.decision.reviewIdentificationNumber ?? \"\"),\n ctx.esc(review.decision.reasonCode ?? \"\"),\n ctx.esc(review.decision.secondSurgicalOpinionCode ?? \"\"),\n ]),\n );\n }\n\n for (const ref of review.references ?? []) {\n body.push(\n ctx.seg([\"REF\", ctx.esc(ref.qualifier), ctx.esc(ref.value), ctx.esc(ref.description ?? \"\")]),\n );\n }\n\n for (const date of review.dates ?? []) {\n body.push(\n ctx.seg([\"DTP\", ctx.esc(date.qualifier), ctx.esc(date.formatQualifier), ctx.esc(date.value)]),\n );\n }\n\n const diagnoses = review.diagnoses ?? [];\n if (diagnoses.length > 0) {\n body.push(ctx.seg([\"HI\", ...diagnoses.map((dx) => ctx.comp([dx.qualifier, dx.code]))]));\n }\n\n for (const message of review.messages ?? []) {\n body.push(ctx.seg([\"MSG\", ctx.esc(message)]));\n }\n\n for (const provider of review.providers ?? []) emitEntity(provider, body, ctx);\n\n for (const child of nested) {\n emitReview(child, hlId, direction, body, ctx, counter);\n }\n}\n\n/** Emit an NM1 entity (UMO / requester / provider). @internal */\nfunction emitEntity(entity: Build278EntitySpec, body: string[], ctx: EmitContext): void {\n body.push(\n ctx.seg([\n \"NM1\",\n ctx.esc(entity.entityIdentifierCode),\n ctx.esc(entity.entityTypeQualifier),\n ctx.esc(entity.name),\n \"\",\n \"\",\n \"\",\n \"\",\n ctx.esc(entity.idQualifier ?? \"\"),\n ctx.esc(entity.idCode ?? \"\"),\n ]),\n );\n}\n\n/** Emit an NM1 member name (subscriber / dependent) + optional DMG. @internal */\nfunction emitMember(member: Build278MemberSpec, body: string[], ctx: EmitContext): void {\n body.push(\n ctx.seg([\n \"NM1\",\n ctx.esc(member.entityIdentifierCode),\n ctx.esc(member.entityTypeQualifier),\n ctx.esc(member.lastName ?? \"\"),\n ctx.esc(member.firstName ?? \"\"),\n ctx.esc(member.middleName ?? \"\"),\n \"\",\n ctx.esc(member.suffix ?? \"\"),\n ctx.esc(member.idQualifier ?? \"\"),\n ctx.esc(member.idCode ?? \"\"),\n ]),\n );\n if (member.dateOfBirth !== undefined || member.genderCode !== undefined) {\n body.push(\n ctx.seg([\"DMG\", \"D8\", ctx.esc(member.dateOfBirth ?? \"\"), ctx.esc(member.genderCode ?? \"\")]),\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// String helpers — mirror the `build277` emit primitives.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction pad(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return value + \" \".repeat(width - value.length);\n return value.slice(0, width);\n}\n\n/**\n * Zero-pad a control number to `width` chars (ISA-13 / IEA-02 are always 9).\n * Throws {@link ServicesReview278BuildError} if the value already exceeds the\n * width. @internal\n */\nfunction padControl(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return \"0\".repeat(width - value.length) + value;\n throw new ServicesReview278BuildError(\n AUTH_278_BUILD_ERROR_CODES.X12_278_BUILD_INVALID_SPEC,\n `build278: control number \"${value}\" exceeds the ${String(width)}-char spec limit.`,\n );\n}\n\n/**\n * Expand a 6-digit YYMMDD into CCYYMMDD for GS-04. Years `00`–`49` are 21st\n * century, `50`–`99` are 20th. A value already in CCYYMMDD form passes\n * through unchanged. @internal\n */\nfunction expandYY(yymmdd: string): string {\n if (yymmdd.length !== 6) return yymmdd;\n const yy = parseInt(yymmdd.slice(0, 2), 10);\n if (Number.isNaN(yy)) return yymmdd;\n const century = yy < 50 ? \"20\" : \"19\";\n return century + yymmdd;\n}\n","/**\n * 278 TR3 `005010X217` (request) / `005010X216` (response) loop\n * specification — authored through the **public** {@link\n * \"../../loops/define.js\".defineLoopSpec} API (the Phase 7 dogfooding gate).\n * The built-in 278 HL hierarchy goes through the SAME factory consumers use\n * for payer-specific companion-guide loops.\n *\n * Hierarchy (per WPC TR3 §1.4, request + response share the HL spine; the\n * response adds the `HCR` decision under the event / service levels):\n *\n * ```text\n * Header (ST, BHT)\n * Loop 2000A — Utilization Management Organization (UMO) HL (HL*..*20)\n * Loop 2010A — UMO Name (NM1*X3)\n * Loop 2000B — Requester HL (HL*..*21)\n * Loop 2010B — Requester Name (NM1*1P/FA/…)\n * Loop 2000C — Subscriber HL (HL*..*22)\n * Loop 2010C — Subscriber Name (NM1*IL) + DMG/REF\n * Loop 2000D — Dependent HL (HL*..*23)\n * Loop 2010D — Dependent Name (NM1*QC/03) + DMG/REF\n * Loop 2000E — Patient Event HL (HL*..*EV)\n * UM (services review) · HCR (decision, response) · HI (diagnoses) · TRN\n * REF · DTP · MSG · Loop 2010E* (service-provider NM1s)\n * Loop 2000F — Service HL (HL*..*SS)\n * UM · HCR · SV1/SV2/SV3 · REF · DTP\n * ```\n *\n * @remarks\n * The HL spine `20 → 21 → 22 → 23` is validated for parent-pointer\n * integrity; the `EV` / `SS` event + service levels are intentionally\n * **omitted from the expected-parent map** — the 278 attaches them under a\n * subscriber **or** a dependent (and clearinghouses vary), so the walker is\n * tolerant there rather than emitting false `X12_HL_PARENT_MISMATCH`\n * warnings. Detailed sub-loops (PWK attachments, the full 2010E provider\n * family, HSD service-delivery, SV1/SV2/SV3 line detail) are preserved\n * verbatim on `tx.segments` but not yet destructured onto the model — a\n * documented Phase 7 limitation.\n */\n\nimport { defineLoopSpec } from \"../../loops/define.js\";\nimport type { LoopSpec } from \"../../loops/types.js\";\n\n/**\n * 278 Loop 2000F — Service HL. Triggered by `HL` (`HL-03 = \"SS\"`). Carries a\n * service-level `UM` review and, in a response, its `HCR` decision.\n *\n * @example\n * ```ts\n * import { AUTH_278_LOOP_2000F } from \"@cosyte/x12\";\n * AUTH_278_LOOP_2000F.trigger; // \"HL\"\n * ```\n */\nexport const AUTH_278_LOOP_2000F: LoopSpec = defineLoopSpec({\n id: \"2000F\",\n description: \"278 Loop 2000F — Service HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"UM\", usage: \"situational\", max: 1 },\n { id: \"HCR\", usage: \"situational\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"DTP\", usage: \"situational\", max: \">1\" },\n { id: \"SV1\", usage: \"situational\", max: 1 },\n { id: \"SV2\", usage: \"situational\", max: 1 },\n { id: \"SV3\", usage: \"situational\", max: 1 },\n { id: \"MSG\", usage: \"situational\", max: \">1\" },\n ],\n});\n\n/**\n * 278 Loop 2000E — Patient Event HL. Triggered by `HL` (`HL-03 = \"EV\"`).\n * Anchors the `UM` services-review information, the `HCR` decision (response\n * only), `HI` diagnoses, the echoed `TRN`, and the service-provider NM1s.\n * Nests {@link AUTH_278_LOOP_2000F}.\n *\n * @example\n * ```ts\n * import { AUTH_278_LOOP_2000E } from \"@cosyte/x12\";\n * AUTH_278_LOOP_2000E.children[0]?.id; // \"2000F\"\n * ```\n */\nexport const AUTH_278_LOOP_2000E: LoopSpec = defineLoopSpec({\n id: \"2000E\",\n description: \"278 Loop 2000E — Patient Event HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"TRN\", usage: \"situational\", max: \">1\" },\n { id: \"UM\", usage: \"required\", max: 1 },\n { id: \"HCR\", usage: \"situational\", max: 1 },\n { id: \"HI\", usage: \"situational\", max: \">1\" },\n { id: \"NM1\", usage: \"situational\", max: \">1\" },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"DTP\", usage: \"situational\", max: \">1\" },\n { id: \"MSG\", usage: \"situational\", max: \">1\" },\n ],\n children: [AUTH_278_LOOP_2000F],\n});\n\n/**\n * 278 Loop 2000D — Dependent HL. Triggered by `HL` (`HL-03 = \"23\"`). Carries\n * the dependent name NM1 + DMG demographics.\n *\n * @example\n * ```ts\n * import { AUTH_278_LOOP_2000D } from \"@cosyte/x12\";\n * AUTH_278_LOOP_2000D.id; // \"2000D\"\n * ```\n */\nexport const AUTH_278_LOOP_2000D: LoopSpec = defineLoopSpec({\n id: \"2000D\",\n description: \"278 Loop 2000D — Dependent HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"DMG\", usage: \"situational\", max: 1 },\n ],\n});\n\n/**\n * 278 Loop 2000C — Subscriber HL. Triggered by `HL` (`HL-03 = \"22\"`).\n * Carries the subscriber name NM1 + DMG demographics.\n *\n * @example\n * ```ts\n * import { AUTH_278_LOOP_2000C } from \"@cosyte/x12\";\n * AUTH_278_LOOP_2000C.id; // \"2000C\"\n * ```\n */\nexport const AUTH_278_LOOP_2000C: LoopSpec = defineLoopSpec({\n id: \"2000C\",\n description: \"278 Loop 2000C — Subscriber HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"DMG\", usage: \"situational\", max: 1 },\n ],\n});\n\n/**\n * 278 Loop 2000B — Requester HL. Triggered by `HL` (`HL-03 = \"21\"`). The\n * requesting provider / facility.\n *\n * @example\n * ```ts\n * import { AUTH_278_LOOP_2000B } from \"@cosyte/x12\";\n * AUTH_278_LOOP_2000B.id; // \"2000B\"\n * ```\n */\nexport const AUTH_278_LOOP_2000B: LoopSpec = defineLoopSpec({\n id: \"2000B\",\n description: \"278 Loop 2000B — Requester HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"NM1\", usage: \"required\", max: 1 },\n { id: \"REF\", usage: \"situational\", max: \">1\" },\n { id: \"N3\", usage: \"situational\", max: \">1\" },\n { id: \"N4\", usage: \"situational\", max: 1 },\n { id: \"PER\", usage: \"situational\", max: \">1\" },\n ],\n});\n\n/**\n * 278 Loop 2000A — Utilization Management Organization (UMO) HL. Triggered by\n * `HL` (`HL-03 = \"20\"`) — the top of the hierarchy, no parent. Carries the\n * UMO name NM1.\n *\n * @example\n * ```ts\n * import { AUTH_278_LOOP_2000A } from \"@cosyte/x12\";\n * AUTH_278_LOOP_2000A.trigger; // \"HL\"\n * ```\n */\nexport const AUTH_278_LOOP_2000A: LoopSpec = defineLoopSpec({\n id: \"2000A\",\n description: \"278 Loop 2000A — Utilization Management Organization HL\",\n trigger: \"HL\",\n segments: [\n { id: \"HL\", usage: \"required\", max: 1 },\n { id: \"NM1\", usage: \"required\", max: 1 },\n ],\n});\n","/**\n * Thrown errors emitted by the X12 acknowledgment builders (`build999`,\n * `buildTA1`). Distinct from `X12ParseError` — the parsers stay lenient\n * (Postel's Law) and never throw on a real-world acknowledgment, but the\n * builders DO throw when the caller asks the library to fabricate an\n * inconsistent disposition. The safety invariant the library enforces:\n *\n * > A library can mechanically build the disposition it is told. It MUST\n * > NOT silently fabricate an `Accept` against a non-empty error list,\n * > because doing so would lie to the inbound sender that their input\n * > passed when it did not — a real downstream patient-safety hazard.\n *\n * This file is the chokepoint for that refusal.\n */\n\n/**\n * Stable string codes for every `AckBuildError` thrown by the\n * acknowledgment builders. Locked here so consumers can narrow on\n * `err.code` exhaustively. Additions-only thereafter; renaming any of\n * these codes is a breaking change.\n *\n * - `X12_ACK_INVALID_DISPOSITION` — A disposition was supplied that does\n * not match {@link \"./codes.js\".X12AckDispositionCode} (or\n * {@link \"./codes.js\".Ta1AckCode} for `buildTA1`).\n * - `X12_ACK_INVALID_SPEC` — A spec field violated a structural constraint\n * the builder cannot recover from (e.g., an ISA-13 control number longer\n * than the spec's 9-char limit).\n * - `X12_ACK_ACCEPT_WITH_ERRORS` — An `A` disposition was supplied\n * alongside non-empty per-transaction errors or a transaction-set whose\n * own disposition is not `A`. Refused — accept must mean accept. Use\n * `E` for \"accepted, errors noted\" or `R` for \"rejected\" instead.\n * - `X12_ACK_COUNT_MISMATCH` — The functional-level\n * `numberOfTransactionSets` / `numberReceived` / `numberAccepted` are\n * internally inconsistent (e.g., accepted > received) or do not match\n * the supplied `transactionResponses` list.\n * - `X12_TA1_ACCEPT_WITH_NOTE` — A TA1 `A` ack code was supplied with a\n * note code other than `000` (no error). Refused for the same safety\n * reason: an accept cannot cite a non-zero note.\n *\n * @example\n * ```ts\n * import { ACK_BUILD_ERROR_CODES, AckBuildError } from \"@cosyte/x12\";\n * try {\n * buildSomeAck();\n * } catch (err) {\n * if (err instanceof AckBuildError && err.code === ACK_BUILD_ERROR_CODES.X12_ACK_ACCEPT_WITH_ERRORS) {\n * // application bug — never silently accept with errors\n * }\n * }\n * ```\n */\nexport const ACK_BUILD_ERROR_CODES = {\n X12_ACK_INVALID_DISPOSITION: \"X12_ACK_INVALID_DISPOSITION\",\n X12_ACK_INVALID_SPEC: \"X12_ACK_INVALID_SPEC\",\n X12_ACK_ACCEPT_WITH_ERRORS: \"X12_ACK_ACCEPT_WITH_ERRORS\",\n X12_ACK_COUNT_MISMATCH: \"X12_ACK_COUNT_MISMATCH\",\n X12_TA1_ACCEPT_WITH_NOTE: \"X12_TA1_ACCEPT_WITH_NOTE\",\n} as const;\n\n/**\n * String-literal union over {@link ACK_BUILD_ERROR_CODES}. Used as\n * `AckBuildError.code`.\n */\nexport type AckBuildErrorCode = (typeof ACK_BUILD_ERROR_CODES)[keyof typeof ACK_BUILD_ERROR_CODES];\n\n/**\n * Thrown by `build999` / `buildTA1` when the caller asks the library to\n * fabricate an inconsistent acknowledgment (most notably an accept paired\n * with errors). Carries a stable `code` for programmatic narrowing.\n *\n * Throwing here is the documented contract for the cosyte ack archetype:\n * the library mechanically builds the disposition it is told; if the\n * disposition is internally inconsistent it refuses, surfacing the bug at\n * the call site rather than silently lying to the inbound sender.\n *\n * `AckBuildError` deliberately does NOT extend `X12ParseError` — the\n * parser-vs-builder distinction matters at the type level (a parser catch\n * should never catch a builder bug, and vice versa).\n *\n * @example\n * ```ts\n * import { AckBuildError, ACK_BUILD_ERROR_CODES } from \"@cosyte/x12\";\n * try {\n * build999({ ... ack: { ..., functional: { disposition: \"A\", ... } }, ... });\n * } catch (err) {\n * if (err instanceof AckBuildError) {\n * // err.code is one of ACK_BUILD_ERROR_CODES\n * }\n * }\n * ```\n */\nexport class AckBuildError extends Error {\n public readonly code: AckBuildErrorCode;\n\n /**\n * Construct a new `AckBuildError`. Both fields required so every thrower\n * pins a stable code.\n *\n * @internal\n */\n public constructor(code: AckBuildErrorCode, message: string) {\n super(message);\n this.name = \"AckBuildError\";\n this.code = code;\n }\n}\n","/**\n * Code-list registries for the X12 acknowledgment surface (999 + TA1).\n *\n * Every code list here is a {@link https://x12.org/codes ASC X12 standard\n * code list} cited by TR3 005010X231A1 (999) or by the ASC X12 standard\n * itself (TA1). The registries are FROZEN string-literal unions so\n * consumers narrow exhaustively on `disposition: X12AckDispositionCode`\n * and the like — adding a code is an additive public-surface change; a\n * rename is breaking (locked by the warning/code-snapshot tripwires).\n *\n * Per the cosyte parser archetype, every code list is **structural** —\n * control numbers, segment IDs, position counters, error-condition codes.\n * **Acknowledgments carry no PHI by design.** This is the safety property\n * that makes the \"library mechanically builds the disposition it is told\"\n * pattern safe.\n */\n\n/**\n * AK9-01 (functional group) + IK5-01 (transaction set) disposition codes.\n * Sourced from ASC X12 code list 715. The implementation acknowledges the\n * inbound functional group / transaction set with one of these dispositions;\n * the LIBRARY does not decide accept-vs-reject — the application does.\n * `build999` / `buildTA1` MECHANICALLY build the cited disposition; a\n * fabricated `A` against a non-empty error list is a bug and refused at\n * build time (see {@link \"./errors.js\".AckBuildError}).\n *\n * - `A` — Accepted.\n * - `E` — Accepted, but errors were noted.\n * - `P` — Partially accepted: at least one transaction set was rejected\n * while the functional group as a whole was accepted.\n * - `R` — Rejected.\n * - `M` — Rejected: message authentication code (MAC) failed.\n * - `W` — Rejected: assurance failed validity tests.\n * - `X` — Rejected: content after decryption could not be analyzed.\n *\n * @example\n * ```ts\n * import type { X12AckDispositionCode } from \"@cosyte/x12\";\n * const accept: X12AckDispositionCode = \"A\";\n * ```\n */\nexport const X12_ACK_DISPOSITION_CODES = {\n A: \"A\",\n E: \"E\",\n P: \"P\",\n R: \"R\",\n M: \"M\",\n W: \"W\",\n X: \"X\",\n} as const;\n\n/**\n * String-literal union over {@link X12_ACK_DISPOSITION_CODES}. Used as the\n * type of `AK9-01`, `IK5-01`, and the `disposition` field on the\n * ack-spec/parsed-ack models.\n *\n * @example\n * ```ts\n * import type { X12AckDispositionCode } from \"@cosyte/x12\";\n * function isReject(code: X12AckDispositionCode): boolean {\n * return code === \"R\" || code === \"M\" || code === \"W\" || code === \"X\";\n * }\n * ```\n */\nexport type X12AckDispositionCode =\n (typeof X12_ACK_DISPOSITION_CODES)[keyof typeof X12_ACK_DISPOSITION_CODES];\n\n/**\n * The four disposition codes that flag rejection — `R`, `M`, `W`, `X`. A\n * disposition NOT in this set (`A`, `E`, `P`) is some form of acceptance.\n * Used by the build-time safety guard to refuse a fabricated accept\n * against a non-empty error list.\n *\n * @internal\n */\nconst ACCEPT_DISPOSITIONS = new Set<X12AckDispositionCode>([\"A\", \"E\", \"P\"]);\n\n/**\n * True when the supplied disposition is some form of \"accept\" (`A`, `E`,\n * `P`) rather than reject (`R`, `M`, `W`, `X`). Used by the build-time\n * safety guard and by consumer code that wants a yes/no on the inbound.\n *\n * @example\n * ```ts\n * import { isAcceptDisposition } from \"@cosyte/x12\";\n * isAcceptDisposition(\"A\"); // true\n * isAcceptDisposition(\"R\"); // false\n * ```\n */\nexport function isAcceptDisposition(code: X12AckDispositionCode): boolean {\n return ACCEPT_DISPOSITIONS.has(code);\n}\n\n/**\n * IK3-04 implementation segment syntax error codes (ASC X12 code list 716).\n * Cited per IK3 segment to identify the structural issue against the\n * inbound segment. The library NEVER auto-classifies — the application\n * supplies the code; the library mechanically builds the IK3 around it.\n *\n * - `1` — Unrecognized segment ID.\n * - `2` — Unexpected segment.\n * - `3` — Required segment missing.\n * - `4` — Loop occurs over maximum times.\n * - `5` — Segment exceeds maximum use.\n * - `6` — Segment not in defined transaction set.\n * - `7` — Segment not in proper sequence.\n * - `8` — Segment has data element errors.\n * - `I4` — Implementation \"Not Used\" segment present.\n * - `I6` — Implementation dependent segment missing.\n * - `I7` — Implementation loop occurs under minimum times.\n * - `I8` — Implementation segment below minimum use.\n * - `I9` — Implementation dependent \"Not Used\" segment present.\n *\n * @example\n * ```ts\n * import type { Ik304Code } from \"@cosyte/x12\";\n * const required: Ik304Code = \"3\";\n * ```\n */\nexport const IK3_SYNTAX_ERROR_CODES = {\n \"1\": \"1\",\n \"2\": \"2\",\n \"3\": \"3\",\n \"4\": \"4\",\n \"5\": \"5\",\n \"6\": \"6\",\n \"7\": \"7\",\n \"8\": \"8\",\n I4: \"I4\",\n I6: \"I6\",\n I7: \"I7\",\n I8: \"I8\",\n I9: \"I9\",\n} as const;\n\n/**\n * String-literal union over {@link IK3_SYNTAX_ERROR_CODES}. Used as the\n * type of `IK3-04` on the ack-spec/parsed-ack models.\n */\nexport type Ik304Code = (typeof IK3_SYNTAX_ERROR_CODES)[keyof typeof IK3_SYNTAX_ERROR_CODES];\n\n/**\n * IK4-03 implementation data element syntax error codes (ASC X12 code list\n * 723). Cited per IK4 segment to identify the issue against the inbound\n * element/component/repetition.\n *\n * - `1` — Required data element missing.\n * - `2` — Conditional required data element missing.\n * - `3` — Too many data elements.\n * - `4` — Data element too short.\n * - `5` — Data element too long.\n * - `6` — Invalid character in data element.\n * - `7` — Invalid code value.\n * - `8` — Invalid date.\n * - `9` — Invalid time.\n * - `10` — Exclusion condition violated.\n * - `12` — Too many repetitions.\n * - `13` — Too many components.\n * - `I6` — Code value not used in implementation.\n * - `I9` — Implementation dependent data element missing.\n * - `I10` — Implementation \"Not Used\" data element present.\n * - `I11` — Implementation too few repetitions.\n * - `I12` — Implementation pattern match failure.\n * - `I13` — Implementation dependent \"Not Used\" data element present.\n *\n * @example\n * ```ts\n * import type { Ik403Code } from \"@cosyte/x12\";\n * const tooShort: Ik403Code = \"4\";\n * ```\n */\nexport const IK4_SYNTAX_ERROR_CODES = {\n \"1\": \"1\",\n \"2\": \"2\",\n \"3\": \"3\",\n \"4\": \"4\",\n \"5\": \"5\",\n \"6\": \"6\",\n \"7\": \"7\",\n \"8\": \"8\",\n \"9\": \"9\",\n \"10\": \"10\",\n \"12\": \"12\",\n \"13\": \"13\",\n I6: \"I6\",\n I9: \"I9\",\n I10: \"I10\",\n I11: \"I11\",\n I12: \"I12\",\n I13: \"I13\",\n} as const;\n\n/**\n * String-literal union over {@link IK4_SYNTAX_ERROR_CODES}. Used as the\n * type of `IK4-03` on the ack-spec/parsed-ack models.\n */\nexport type Ik403Code = (typeof IK4_SYNTAX_ERROR_CODES)[keyof typeof IK4_SYNTAX_ERROR_CODES];\n\n/**\n * TA1-04 interchange acknowledgment code (ASC X12 code list I13). Three\n * values: `A` accepted, `E` accepted with errors, `R` rejected. Distinct\n * from the 999 disposition (no `M`/`W`/`X` here — TA1 covers only the\n * interchange envelope, not crypto failures of contained groups).\n *\n * @example\n * ```ts\n * import type { Ta1AckCode } from \"@cosyte/x12\";\n * const accept: Ta1AckCode = \"A\";\n * ```\n */\nexport const TA1_ACK_CODES = {\n A: \"A\",\n E: \"E\",\n R: \"R\",\n} as const;\n\n/** String-literal union over {@link TA1_ACK_CODES}. */\nexport type Ta1AckCode = (typeof TA1_ACK_CODES)[keyof typeof TA1_ACK_CODES];\n\n/**\n * TA1-05 interchange note code (ASC X12 code list I18). Codes `000`–`028`\n * are defined by the standard; values past `028` exist in some standard\n * revisions and are accepted on parse (Postel's Law) but not enumerated\n * here — the parsed model carries the raw string for verbatim preservation.\n *\n * `000` is the canonical \"no error\" note paired with a `TA1-04 == 'A'`\n * acceptance. The build-time safety guard refuses a fabricated `A` paired\n * with any non-`000` note (see {@link \"./errors.js\".AckBuildError}).\n *\n * Standard-issued values:\n * - `000` — No error.\n * - `001` — Interchange Control Number in the Header and Trailer do not match.\n * - `002` — Standard as noted in the Control Standards Identifier is not supported.\n * - `003` — Version of the controls is not supported.\n * - `004` — Segment Terminator is invalid.\n * - `005` — Invalid Interchange ID Qualifier for Sender.\n * - `006` — Invalid Interchange Sender ID.\n * - `007` — Invalid Interchange ID Qualifier for Receiver.\n * - `008` — Invalid Interchange Receiver ID.\n * - `009` — Unknown Interchange Receiver ID.\n * - `010` — Invalid Authorization Information Qualifier value.\n * - `011` — Invalid Authorization Information value.\n * - `012` — Invalid Security Information Qualifier value.\n * - `013` — Invalid Security Information value.\n * - `014` — Invalid Interchange Date value.\n * - `015` — Invalid Interchange Time value.\n * - `016` — Invalid Interchange Standards Identifier value.\n * - `017` — Invalid Interchange Version ID value.\n * - `018` — Invalid Interchange Control Number value.\n * - `019` — Invalid Acknowledgment Requested value.\n * - `020` — Invalid Test Indicator value.\n * - `021` — Invalid Number of Included Groups value.\n * - `022` — Invalid Control Structure.\n * - `023` — Improper (premature) end-of-file (transmission).\n * - `024` — Invalid Interchange Content (e.g., invalid GS segment).\n * - `025` — Duplicate Interchange Control Number.\n * - `026` — Invalid Data Element Separator.\n * - `027` — Invalid Component Element Separator.\n * - `028` — Invalid Delivery Date in Deferred Delivery Request.\n *\n * @example\n * ```ts\n * import { TA1_NOTE_CODES, type Ta1NoteCode } from \"@cosyte/x12\";\n * const noError: Ta1NoteCode = TA1_NOTE_CODES[\"000\"];\n * ```\n */\nexport const TA1_NOTE_CODES = {\n \"000\": \"000\",\n \"001\": \"001\",\n \"002\": \"002\",\n \"003\": \"003\",\n \"004\": \"004\",\n \"005\": \"005\",\n \"006\": \"006\",\n \"007\": \"007\",\n \"008\": \"008\",\n \"009\": \"009\",\n \"010\": \"010\",\n \"011\": \"011\",\n \"012\": \"012\",\n \"013\": \"013\",\n \"014\": \"014\",\n \"015\": \"015\",\n \"016\": \"016\",\n \"017\": \"017\",\n \"018\": \"018\",\n \"019\": \"019\",\n \"020\": \"020\",\n \"021\": \"021\",\n \"022\": \"022\",\n \"023\": \"023\",\n \"024\": \"024\",\n \"025\": \"025\",\n \"026\": \"026\",\n \"027\": \"027\",\n \"028\": \"028\",\n} as const;\n\n/**\n * String-literal union over {@link TA1_NOTE_CODES} — the standard-issued\n * note codes `000`–`028`. Real-world inbound TA1 may carry a value past\n * `028` (some revisions extend the list); `parseTA1` exposes the raw\n * string in that case so the verbatim value survives even when the union\n * cannot statically type it.\n */\nexport type Ta1NoteCode = (typeof TA1_NOTE_CODES)[keyof typeof TA1_NOTE_CODES];\n","/**\n * `parse999` — decode a 005010X231A1 Implementation Acknowledgment into the\n * typed {@link X12Ack999} model. PURE FUNCTION; never opens sockets, never\n * touches the filesystem.\n *\n * Two-pass strategy:\n *\n * 1. Delegate envelope decode to `parseX12` (handles ISA / GS / ST / SE /\n * GE / IEA + delimiter detection + envelope-level warnings).\n * 2. Find the first ST..SE whose ST-01 is `\"999\"` and walk its body\n * segments — AK1 → AK2 → (IK3 [→ CTX] (IK4 [→ CTX])*)* → IK5 → AK9. As a\n * Postel's-Law lenient accommodation we also accept the legacy\n * `AK3` / `AK4` / `AK5` segment IDs (some converters still emit them\n * inside a 999 envelope) and normalize them onto the X231A1 model.\n *\n * Postel's Law: every recoverable deviation is a warning (Tier-2), never a\n * throw. If the input contains no 999 transaction set, `parse999` returns\n * `undefined` rather than throwing — consumers wanting to assert presence\n * narrow on `!== undefined`.\n */\n\nimport type { Buffer } from \"node:buffer\";\n\nimport { parseX12 } from \"../../parser/index.js\";\nimport { getSegmentValue, type X12Segment } from \"../../parser/segment.js\";\nimport type {\n Delimiters,\n X12Interchange,\n X12ParseOptions,\n X12TransactionSet,\n} from \"../../parser/types.js\";\nimport { splitWithRelease, unescapeRelease } from \"../../parser/release.js\";\nimport type { X12ParseWarning } from \"../../parser/warnings.js\";\n// `warnings` is reserved for future 999-specific Tier-2 codes; the Phase 3\n// parser is silent + fail-safe — see fail-safe fallbacks below.\n\nimport {\n IK3_SYNTAX_ERROR_CODES,\n IK4_SYNTAX_ERROR_CODES,\n X12_ACK_DISPOSITION_CODES,\n type Ik304Code,\n type Ik403Code,\n type X12AckDispositionCode,\n} from \"./codes.js\";\nimport type {\n X12Ack999,\n X12Ack999Ak1,\n X12Ack999Ak2,\n X12Ack999Ak9,\n X12Ack999ElementNote,\n X12Ack999Ik3,\n X12Ack999Ik4,\n X12Ack999Ik5,\n X12Ack999SegmentNote,\n X12Ack999TransactionResponse,\n} from \"./types.js\";\n\n/**\n * Decode a 005010X231A1 Implementation Acknowledgment from a raw `string`\n * or `Buffer`. Returns the typed {@link X12Ack999} or `undefined` when the\n * input does not contain any 999 transaction set. Lenient on parse: every\n * recoverable deviation surfaces as an envelope-level warning (see\n * {@link X12Ack999.warnings}).\n *\n * @example\n * ```ts\n * import { parse999 } from \"@cosyte/x12\";\n * const ack = parse999(rawBytes);\n * if (ack !== undefined) {\n * ack.ak9.disposition; // \"A\" | \"E\" | \"P\" | \"R\" | \"M\" | \"W\" | \"X\"\n * ack.transactionResponses[0]?.ik5.disposition;\n * }\n * ```\n */\nexport function parse999(\n raw: string | Buffer,\n options: X12ParseOptions = {},\n): X12Ack999 | undefined {\n const interchange = parseX12(raw, options);\n for (const group of interchange.groups) {\n for (const tx of group.transactions) {\n // Element 1 (1-indexed) carries the ST transaction set identifier\n // code; for a 999, it is the literal `\"999\"`. Phase 1 already\n // decoded ST/SE elements so reading the raw string here is safe\n // and zero-allocation.\n const stId = tx.st.elements[1];\n if (stId === \"999\") {\n return decodeAck999(interchange, tx);\n }\n }\n }\n return undefined;\n}\n\n/**\n * Walk one ST..SE 999 transaction set's body segments and assemble the\n * typed {@link X12Ack999} model. Internal — invoked from {@link parse999}\n * after `parseX12` resolved the envelope.\n *\n * @internal\n */\nfunction decodeAck999(interchange: X12Interchange, tx: X12TransactionSet): X12Ack999 {\n const { delimiters } = interchange;\n // Local warnings collected during the 999-specific walk. These are\n // distinct from envelope-level warnings (which live on\n // `interchange.warnings`) and are merged at the end so consumers see\n // both sets together.\n const warnings: X12ParseWarning[] = [];\n\n // Skip the ST segment (always at index 0) and the trailing SE segment\n // when iterating body segments. When SE is missing (truncated tx) the\n // envelope walker didn't append it to `segments` — slice from index 1\n // to the end instead so no body segment is dropped.\n const body = tx.se === undefined ? tx.segments.slice(1) : tx.segments.slice(1, -1);\n\n // State machine for the AK1 / AK2 / (IK3+CTX (IK4+CTX)*)* / IK5 / AK9\n // walk. We process body segments sequentially and accumulate the\n // current AK2 response + the current IK3 segment-note in-flight.\n let ak1: X12Ack999Ak1 | undefined;\n const transactionResponses: X12Ack999TransactionResponse[] = [];\n let currentResponse:\n | {\n ak2: X12Ack999Ak2;\n segmentNotes: X12Ack999SegmentNote[];\n }\n | undefined;\n let currentSegmentNote:\n | {\n ik3: X12Ack999Ik3;\n contexts: string[];\n elementNotes: X12Ack999ElementNote[];\n }\n | undefined;\n let currentElementNote:\n | {\n ik4: X12Ack999Ik4;\n contexts: string[];\n }\n | undefined;\n let ak9: X12Ack999Ak9 | undefined;\n\n /**\n * Flush the in-flight element note (if any) onto the current segment\n * note. Called whenever a new IK3/IK4/IK5/AK9 closes the prior IK4.\n */\n const flushElementNote = (): void => {\n if (currentElementNote !== undefined && currentSegmentNote !== undefined) {\n currentSegmentNote.elementNotes.push({\n ik4: currentElementNote.ik4,\n contexts: Object.freeze(currentElementNote.contexts.slice()),\n });\n }\n currentElementNote = undefined;\n };\n\n /**\n * Flush the in-flight segment note (if any) onto the current response.\n * Called whenever a new IK3/IK5 closes the prior IK3.\n */\n const flushSegmentNote = (): void => {\n flushElementNote();\n if (currentSegmentNote !== undefined && currentResponse !== undefined) {\n currentResponse.segmentNotes.push({\n ik3: currentSegmentNote.ik3,\n contexts: Object.freeze(currentSegmentNote.contexts.slice()),\n elementNotes: Object.freeze(currentSegmentNote.elementNotes.slice()),\n });\n }\n currentSegmentNote = undefined;\n };\n\n /**\n * Flush the in-flight transaction response (if any). Called whenever\n * AK9 closes the last AK2..IK5 block, or a stray AK2 opens a new one.\n *\n * Caller is responsible for supplying the closing IK5 (every AK2 needs\n * one); if it's missing this fallback synthesizes a placeholder so the\n * typed model still resolves and the caller can decide via the warning.\n */\n const flushResponse = (ik5: X12Ack999Ik5 | undefined): void => {\n flushSegmentNote();\n if (currentResponse !== undefined) {\n transactionResponses.push({\n ak2: currentResponse.ak2,\n segmentNotes: Object.freeze(currentResponse.segmentNotes.slice()),\n ik5: ik5 ?? {\n disposition: X12_ACK_DISPOSITION_CODES.R,\n syntaxErrorCodes: Object.freeze([]),\n },\n });\n }\n currentResponse = undefined;\n };\n\n for (const seg of body) {\n // Lenient-accept of legacy AK3/AK4/AK5 (standard 999 / pre-X231A1\n // converters): normalize onto the X231A1 IK3/IK4/IK5 names so the\n // walker has one shape to switch on. The verbatim raw text is still\n // preserved on `tx.rawSegments` for forensic review.\n const id =\n seg.id === \"AK3\" ? \"IK3\" : seg.id === \"AK4\" ? \"IK4\" : seg.id === \"AK5\" ? \"IK5\" : seg.id;\n switch (id) {\n case \"AK1\": {\n ak1 = {\n functionalIdCode: getElement(seg, 1, delimiters),\n groupControlNumber: getElement(seg, 2, delimiters),\n versionRelease: getOptionalElement(seg, 3, delimiters),\n };\n break;\n }\n case \"AK2\": {\n // Opening a new AK2 closes the prior one (if it had no IK5, the\n // flush synthesizes a reject placeholder — the inbound was\n // structurally truncated).\n if (currentResponse !== undefined) flushResponse(undefined);\n currentResponse = {\n ak2: {\n transactionSetIdCode: getElement(seg, 1, delimiters),\n transactionSetControlNumber: getElement(seg, 2, delimiters),\n implementationConventionReference: getOptionalElement(seg, 3, delimiters),\n },\n segmentNotes: [],\n };\n break;\n }\n case \"IK3\": {\n flushSegmentNote();\n if (currentResponse === undefined) break; // structurally lost — segment outside AK2\n const positionRaw = getElement(seg, 2, delimiters);\n const position = parseNonNegativeInteger(positionRaw);\n currentSegmentNote = {\n ik3: {\n segmentIdCode: getElement(seg, 1, delimiters),\n segmentPositionInTransactionSet: position,\n loopIdentifier: getOptionalElement(seg, 3, delimiters),\n syntaxErrorCode: narrowIk304Code(getOptionalElement(seg, 4, delimiters)),\n },\n contexts: [],\n elementNotes: [],\n };\n break;\n }\n case \"IK4\": {\n flushElementNote();\n if (currentSegmentNote === undefined) break;\n const rawCode = getOptionalElement(seg, 3, delimiters);\n const code = narrowIk403Code(rawCode);\n if (code === undefined) break; // IK4-03 is required; without it the IK4 is malformed and dropped\n const rawPos = getElement(seg, 1, delimiters);\n const pos = parseIk4Position(rawPos, delimiters);\n currentElementNote = {\n ik4: {\n position: pos,\n dataElementReferenceNumber: getOptionalElement(seg, 2, delimiters),\n syntaxErrorCode: code,\n copyOfBadDataElement: getOptionalElement(seg, 4, delimiters),\n },\n contexts: [],\n };\n break;\n }\n case \"CTX\": {\n // CTX situates the prior IK3 or IK4. We surface the raw CTX-01\n // composite value verbatim — the X231A1 CTX syntax is non-trivial\n // and the typed model deliberately stops at \"preserve verbatim\"\n // rather than over-decompose.\n const ctxValue = getElement(seg, 1, delimiters);\n if (currentElementNote !== undefined) {\n currentElementNote.contexts.push(ctxValue);\n } else if (currentSegmentNote !== undefined) {\n currentSegmentNote.contexts.push(ctxValue);\n }\n break;\n }\n case \"IK5\": {\n // Lenient fail-safe: an unknown disposition (anything past code\n // list 715) collapses to typed reject. The raw IK5/AK5 bytes\n // remain reachable on `interchange.groups[*].transactions[*].rawSegments`\n // for forensic review without polluting the warning registry.\n const disposition =\n narrowDispositionCode(getElement(seg, 1, delimiters)) ?? X12_ACK_DISPOSITION_CODES.R;\n const ik5: X12Ack999Ik5 = {\n disposition,\n syntaxErrorCodes: collectErrorCodes(seg, 2, 6, delimiters),\n };\n flushResponse(ik5);\n break;\n }\n case \"AK9\": {\n // AK9 is the last 999 body segment. Close any straggler.\n if (currentResponse !== undefined) flushResponse(undefined);\n const disposition =\n narrowDispositionCode(getElement(seg, 1, delimiters)) ?? X12_ACK_DISPOSITION_CODES.R;\n const errorCodes = collectErrorCodes(seg, 5, 9, delimiters);\n ak9 = {\n disposition,\n numberOfTransactionSets: parseNonNegativeInteger(getElement(seg, 2, delimiters)),\n numberOfReceivedTransactionSets: parseNonNegativeInteger(getElement(seg, 3, delimiters)),\n numberOfAcceptedTransactionSets: parseNonNegativeInteger(getElement(seg, 4, delimiters)),\n syntaxErrorCodes: errorCodes,\n };\n break;\n }\n default: {\n // Anything else inside a 999 body is structurally unexpected;\n // skip (the underlying `tx.segments` still carries it verbatim).\n break;\n }\n }\n }\n\n // EOF without AK9 → synthesize a placeholder + warn so the typed model\n // resolves but the caller can detect the truncation.\n if (currentResponse !== undefined) flushResponse(undefined);\n const finalAk1: X12Ack999Ak1 = ak1 ?? {\n functionalIdCode: \"\",\n groupControlNumber: \"\",\n versionRelease: undefined,\n };\n const finalAk9: X12Ack999Ak9 = ak9 ?? {\n disposition: X12_ACK_DISPOSITION_CODES.R,\n numberOfTransactionSets: 0,\n numberOfReceivedTransactionSets: 0,\n numberOfAcceptedTransactionSets: 0,\n syntaxErrorCodes: Object.freeze([]),\n };\n\n return Object.freeze({\n interchange,\n ak1: finalAk1,\n transactionResponses: Object.freeze(transactionResponses.slice()),\n ak9: finalAk9,\n warnings: Object.freeze(warnings.slice()),\n });\n}\n\n// ---------------------------------------------------------------------------\n// Element accessors (segment-internal).\n// ---------------------------------------------------------------------------\n\n/**\n * Read element `n` (1-indexed) of `seg`. Returns `\"\"` when missing — the\n * lenient narrow consistent with the envelope walker's `el()` helper.\n *\n * @internal\n */\nfunction getElement(seg: X12Segment, n: number, delimiters: Delimiters): string {\n const value = getSegmentValue(seg, String(n).padStart(2, \"0\"), delimiters);\n return value ?? \"\";\n}\n\n/**\n * Read optional element `n` (1-indexed) of `seg`. Returns `undefined`\n * when missing OR when present-but-empty (X12 represents \"not supplied\"\n * either way), so the typed-model `string | undefined` collapses both.\n *\n * @internal\n */\nfunction getOptionalElement(\n seg: X12Segment,\n n: number,\n delimiters: Delimiters,\n): string | undefined {\n const value = getSegmentValue(seg, String(n).padStart(2, \"0\"), delimiters);\n if (value === undefined || value === \"\") return undefined;\n return value;\n}\n\n/**\n * Collect non-empty element strings between positions `start` and `end`\n * inclusive (1-indexed). Used for the trailing AK9-05..AK9-09 and\n * IK5-02..IK5-06 syntax-error code lists. Returns a frozen readonly\n * array — empty when no codes are present.\n *\n * @internal\n */\nfunction collectErrorCodes(\n seg: X12Segment,\n start: number,\n end: number,\n delimiters: Delimiters,\n): readonly string[] {\n const out: string[] = [];\n for (let i = start; i <= end; i++) {\n const value = getOptionalElement(seg, i, delimiters);\n if (value !== undefined) out.push(value);\n }\n return Object.freeze(out);\n}\n\n/**\n * Parse a non-negative integer from an X12 numeric element. Returns `0`\n * for empty / unparseable input — the lenient narrow consistent with the\n * envelope walker's behavior on malformed-but-not-fatal counts.\n *\n * @internal\n */\nfunction parseNonNegativeInteger(value: string): number {\n if (value.length === 0) return 0;\n if (!/^\\d+$/u.test(value)) return 0;\n return parseInt(value, 10);\n}\n\n/**\n * Narrow an inbound IK5/AK5/AK9 disposition string to {@link\n * X12AckDispositionCode}, or `undefined` when the value is not one of the\n * seven known codes. Used by the lenient parse path so unknown\n * dispositions fall back to a typed reject (fail-safe) AND warn.\n *\n * @internal\n */\nfunction narrowDispositionCode(value: string): X12AckDispositionCode | undefined {\n switch (value) {\n case \"A\":\n case \"E\":\n case \"P\":\n case \"R\":\n case \"M\":\n case \"W\":\n case \"X\":\n return value;\n default:\n return undefined;\n }\n}\n\n/**\n * Narrow an inbound IK3-04 / AK3-04 error code, or `undefined` if absent\n * or unrecognized. Lenient-accept of an unknown code drops the type-level\n * narrowing so consumers see `undefined`; the raw segment still carries\n * the verbatim bytes for forensic review.\n *\n * @internal\n */\nfunction narrowIk304Code(value: string | undefined): Ik304Code | undefined {\n if (value === undefined) return undefined;\n if (value in IK3_SYNTAX_ERROR_CODES) {\n return value as Ik304Code;\n }\n return undefined;\n}\n\n/**\n * Narrow an inbound IK4-03 / AK4-03 error code, or `undefined` if absent\n * or unrecognized.\n *\n * @internal\n */\nfunction narrowIk403Code(value: string | undefined): Ik403Code | undefined {\n if (value === undefined) return undefined;\n if (value in IK4_SYNTAX_ERROR_CODES) {\n return value as Ik403Code;\n }\n return undefined;\n}\n\n/**\n * Parse the IK4-01 composite (element / component / repetition position)\n * into its triple. The composite is encoded with the active component\n * delimiter (typically `:` or `\\\\`). All three numeric positions are\n * 1-indexed against the inbound TR3.\n *\n * @internal\n */\nfunction parseIk4Position(\n raw: string,\n delimiters: Delimiters,\n): { element: number; component: number | undefined; repetition: number | undefined } {\n const parts = splitWithRelease(raw, delimiters.component);\n const elementText = unescapeRelease(parts[0] ?? \"\", delimiters, noop, { segmentIndex: 0 });\n const componentText =\n parts[1] === undefined\n ? undefined\n : unescapeRelease(parts[1], delimiters, noop, { segmentIndex: 0 });\n const repetitionText =\n parts[2] === undefined\n ? undefined\n : unescapeRelease(parts[2], delimiters, noop, { segmentIndex: 0 });\n return {\n element: parseNonNegativeInteger(elementText),\n component:\n componentText === undefined || componentText === \"\"\n ? undefined\n : parseNonNegativeInteger(componentText),\n repetition:\n repetitionText === undefined || repetitionText === \"\"\n ? undefined\n : parseNonNegativeInteger(repetitionText),\n };\n}\n\n/** @internal */\nconst noop = (_w: X12ParseWarning): void => {\n /* intentionally empty */\n};\n","/**\n * `parseTA1` — decode the first envelope-level TA1 Interchange\n * Acknowledgment on a parsed {@link X12Interchange} into the typed\n * {@link X12AckTA1} model. PURE FUNCTION.\n *\n * TA1 is NOT a transaction set: per the ASC X12 standard it lives at the\n * envelope level, between ISA and the first GS (or alone inside an\n * ISA..IEA with no GS at all — the \"TA1-only interchange\" pattern). The\n * Phase 3 envelope walker captures every envelope-level TA1 verbatim onto\n * {@link X12Interchange.ta1Segments}; this function decodes the first\n * one. Multiple TA1 acks for prior interchanges may co-exist on a single\n * inbound — pass `index` to read the Nth, or scan `ta1Segments` directly.\n */\n\nimport type { X12Interchange } from \"../../parser/types.js\";\n\nimport { TA1_ACK_CODES, TA1_NOTE_CODES, type Ta1AckCode, type Ta1NoteCode } from \"./codes.js\";\nimport type { X12AckTA1 } from \"./types.js\";\n\n/**\n * Decode the first TA1 Interchange Acknowledgment on the supplied\n * `interchange`. Returns the typed {@link X12AckTA1} or `undefined` when\n * the interchange has no TA1 (the common case for non-ack inbounds).\n *\n * @example\n * ```ts\n * import { parseTA1, parseX12 } from \"@cosyte/x12\";\n * const ix = parseX12(rawAckBytes);\n * const ta1 = parseTA1(ix);\n * if (ta1?.ackCode === \"R\") {\n * // inbound interchange was rejected\n * }\n * ```\n */\nexport function parseTA1(interchange: X12Interchange): X12AckTA1 | undefined {\n const ta1 = interchange.ta1Segments[0];\n if (ta1 === undefined) return undefined;\n\n // TA1 is a fixed-position 5-element segment (no `?`-escape applies — the\n // standard does NOT define escaped TA1 content). Read elements verbatim.\n const elements = ta1.elements;\n const interchangeControlNumber = elements[1] ?? \"\";\n const interchangeDate = elements[2] ?? \"\";\n const interchangeTime = elements[3] ?? \"\";\n const ackCodeRaw = elements[4] ?? \"\";\n const noteCodeRaw = elements[5] ?? \"\";\n\n // Lenient narrow: unknown ack code (anything past code list I13) falls\n // back to typed reject — fail-safe. Unknown note code (anything past\n // code list I18 028) collapses the typed narrow to `undefined` but\n // preserves the verbatim raw string for forensic review.\n const ackCode = narrowAckCode(ackCodeRaw) ?? TA1_ACK_CODES.R;\n const noteCode = narrowNoteCode(noteCodeRaw);\n\n return Object.freeze({\n interchangeControlNumber,\n interchangeDate,\n interchangeTime,\n ackCode,\n noteCode,\n noteCodeRaw,\n raw: ta1,\n });\n}\n\n/** @internal */\nfunction narrowAckCode(value: string): Ta1AckCode | undefined {\n switch (value) {\n case \"A\":\n case \"E\":\n case \"R\":\n return value;\n default:\n return undefined;\n }\n}\n\n/** @internal */\nfunction narrowNoteCode(value: string): Ta1NoteCode | undefined {\n if (value in TA1_NOTE_CODES) {\n return value as Ta1NoteCode;\n }\n return undefined;\n}\n","/**\n * `build999` — pure-function builder for a 005010X231A1 Implementation\n * Acknowledgment. NEVER auto-sends, NEVER opens a socket, NEVER touches\n * the filesystem. The library mechanically builds the disposition it is\n * told; an inconsistent spec (an `Accept` paired with errors) is REFUSED\n * via {@link \"./errors.js\".AckBuildError} — the safety invariant the\n * cosyte ack archetype enforces (mirrors `@cosyte/hl7`'s `buildAck`\n * boundary and `@cosyte/mllp`'s commit-contract pattern).\n *\n * Output shape: a complete {@link X12Interchange} wrapping a single\n * GS..GE functional group containing a single ST..SE 999 transaction set,\n * spec-clean and round-trippable through {@link parseX12}. Defaults match\n * the cosyte parser archetype (`*^:~` delimiters, `P` usage indicator,\n * `005010X231A1` ST-03) — every override is keyed by the spec field name\n * so the caller's intent reads off the spec at the call site.\n */\n\nimport { X12_ACK_DISPOSITION_CODES } from \"./codes.js\";\nimport { ACK_BUILD_ERROR_CODES, AckBuildError } from \"./errors.js\";\nimport type {\n Build999ElementErrorSpec,\n Build999FunctionalGroupSpec,\n Build999SegmentErrorSpec,\n Build999Spec,\n Build999TransactionResponseSpec,\n} from \"./types.js\";\nimport { parseX12 } from \"../../parser/index.js\";\nimport type { X12Interchange } from \"../../parser/types.js\";\nimport { escapeRelease } from \"../../parser/release.js\";\n\n/**\n * The version string emitted at GS-08 and ST-03 for every 999 the library\n * builds. The 005010X231A1 errata-applied TR3 is the HIPAA-cited\n * implementation guide for the 999 Implementation Acknowledgment.\n *\n * @internal\n */\nconst X231A1_VERSION_RELEASE = \"005010X231A1\";\n\n/**\n * The single ASC X12 standard agency-code value the library emits at\n * GS-07 — `X` for ASC X12 itself. (TIBCO / vendor traffic occasionally\n * uses `T` but that is non-conformant for healthcare; the library refuses\n * to mirror that quirk on emit, per Postel's Law.)\n *\n * @internal\n */\nconst X12_AGENCY_CODE = \"X\";\n\n/**\n * `build999` — assemble a 005010X231A1 Implementation Acknowledgment\n * around the supplied envelope + functional-group spec.\n *\n * Safety guards (refused via {@link AckBuildError}):\n * - Functional-level `A` disposition paired with any per-transaction\n * non-`A` response, or any per-transaction segment-error / syntax-error\n * payload anywhere in the spec → {@link\n * \"./errors.js\".ACK_BUILD_ERROR_CODES.X12_ACK_ACCEPT_WITH_ERRORS}.\n * - Per-transaction `A` disposition paired with non-empty\n * `segmentErrors` / `syntaxErrorCodes` → same.\n * - AK9-04 (accepted) > AK9-03 (received), AK9-03 > AK9-02 (declared),\n * or response-list length not equal to AK9-03 → {@link\n * \"./errors.js\".ACK_BUILD_ERROR_CODES.X12_ACK_COUNT_MISMATCH}.\n *\n * @example\n * ```ts\n * import { build999 } from \"@cosyte/x12\";\n * const ix = build999({\n * envelope: {\n * senderId: \"SENDER\", receiverId: \"RECEIVER\",\n * interchangeDate: \"250101\", interchangeTime: \"1200\",\n * interchangeControlNumber: \"000000001\",\n * groupControlNumber: \"1\", transactionSetControlNumber: \"0001\",\n * },\n * functionalGroup: {\n * functionalIdCode: \"HC\", groupControlNumber: \"1\", versionRelease: \"005010X222A2\",\n * disposition: \"A\",\n * numberOfTransactionSets: 1, numberOfReceivedTransactionSets: 1, numberOfAcceptedTransactionSets: 1,\n * transactionResponses: [\n * { transactionSetIdCode: \"837\", transactionSetControlNumber: \"0001\", disposition: \"A\" },\n * ],\n * },\n * });\n * ```\n */\nexport function build999(spec: Build999Spec): X12Interchange {\n const { envelope, functionalGroup } = spec;\n\n // ---- Safety guards (refuse inconsistent dispositions) -----------------\n\n enforceAcceptIsClean(functionalGroup);\n enforceCountInvariants(functionalGroup);\n\n // ---- Delimiter resolution + escape helper -----------------------------\n\n // `*` is the only element separator the cosyte builder emits. The ISA\n // itself declares it (ISA byte 4) and the build path needs no override:\n // overriding `elementSeparator` is offered for testing parity with\n // unusual companion guides but is not advertised on the public API.\n const elementSeparator = envelope.elementSeparator ?? \"*\";\n const repetitionSeparator = envelope.repetitionSeparator ?? \"^\";\n const componentSeparator = envelope.componentSeparator ?? \":\";\n const segmentTerminator = envelope.segmentTerminator ?? \"~\";\n const delimiters = {\n element: elementSeparator,\n repetition: repetitionSeparator,\n component: componentSeparator,\n segment: segmentTerminator,\n };\n\n /**\n * Apply `?`-release-character escape to a single data element so that\n * any occurrence of the active delimiters inside the value survives the\n * emit step. The output is always spec-clean (Postel's-Law conservative\n * emit) and round-trippable through the parser's lenient mode.\n */\n const esc = (value: string): string => escapeRelease(value, delimiters);\n\n // ---- ISA envelope -----------------------------------------------------\n\n const senderQualifier = envelope.senderQualifier ?? \"ZZ\";\n const receiverQualifier = envelope.receiverQualifier ?? \"ZZ\";\n const usageIndicator = envelope.usageIndicator ?? \"P\";\n const interchangeControlNumber = padControl(envelope.interchangeControlNumber, 9);\n const isa =\n [\n \"ISA\",\n \"00\", // ISA-01 — Authorization Info Qualifier\n pad(\" \", 10), // ISA-02 — Authorization Info (blank when ISA-01 == \"00\")\n \"00\", // ISA-03 — Security Info Qualifier\n pad(\" \", 10), // ISA-04 — Security Info (blank when ISA-03 == \"00\")\n pad(senderQualifier, 2), // ISA-05\n pad(envelope.senderId, 15), // ISA-06\n pad(receiverQualifier, 2), // ISA-07\n pad(envelope.receiverId, 15), // ISA-08\n pad(envelope.interchangeDate, 6), // ISA-09 — YYMMDD\n pad(envelope.interchangeTime, 4), // ISA-10 — HHMM\n repetitionSeparator, // ISA-11 — repetition separator\n \"00501\", // ISA-12 — interchange version\n interchangeControlNumber, // ISA-13\n \"0\", // ISA-14 — ack requested (0 = no inbound TA1)\n usageIndicator, // ISA-15\n componentSeparator, // ISA-16 — component separator\n ].join(elementSeparator) + segmentTerminator;\n\n // ---- Body segments ----------------------------------------------------\n\n const groupDate = envelope.groupDate ?? expandYY(envelope.interchangeDate);\n const groupTime = envelope.groupTime ?? envelope.interchangeTime;\n const groupResponsibleAgency = envelope.groupResponsibleAgency ?? X12_AGENCY_CODE;\n\n // GS-08 carries the version + release of the 999 itself (005010X231A1),\n // not the inbound functional group's version (which travels on AK1-03).\n const gs = joinSeg(\n [\n \"GS\",\n \"FA\", // GS-01 — functional ID code \"FA\" for ack\n esc(envelope.senderId), // GS-02\n esc(envelope.receiverId), // GS-03\n groupDate, // GS-04 — CCYYMMDD\n groupTime, // GS-05 — HHMM\n envelope.groupControlNumber, // GS-06\n groupResponsibleAgency, // GS-07\n X231A1_VERSION_RELEASE, // GS-08 — the 999 TR3\n ],\n elementSeparator,\n segmentTerminator,\n );\n\n const stControlNumber = envelope.transactionSetControlNumber;\n const st = joinSeg(\n [\"ST\", \"999\", stControlNumber, X231A1_VERSION_RELEASE],\n elementSeparator,\n segmentTerminator,\n );\n\n const ak1 = joinSeg(\n [\n \"AK1\",\n esc(functionalGroup.functionalIdCode),\n esc(functionalGroup.groupControlNumber),\n esc(functionalGroup.versionRelease),\n ],\n elementSeparator,\n segmentTerminator,\n );\n\n const responseSegments: string[] = [];\n for (const response of functionalGroup.transactionResponses) {\n responseSegments.push(buildAk2(response, esc, elementSeparator, segmentTerminator));\n for (const segError of response.segmentErrors ?? []) {\n responseSegments.push(\n ...buildIk3WithChildren(\n segError,\n esc,\n delimiters.component,\n elementSeparator,\n segmentTerminator,\n ),\n );\n }\n responseSegments.push(buildIk5(response, esc, elementSeparator, segmentTerminator));\n }\n\n const ak9 = buildAk9(functionalGroup, esc, elementSeparator, segmentTerminator);\n\n // SE-01 includes ST and SE themselves.\n const bodySegments = [st, ak1, ...responseSegments, ak9];\n const seCount = bodySegments.length + 1;\n const se = joinSeg([\"SE\", String(seCount), stControlNumber], elementSeparator, segmentTerminator);\n\n const ge = joinSeg([\"GE\", \"1\", envelope.groupControlNumber], elementSeparator, segmentTerminator);\n\n const iea = joinSeg([\"IEA\", \"1\", interchangeControlNumber], elementSeparator, segmentTerminator);\n\n const raw = isa + gs + bodySegments.join(\"\") + se + ge + iea;\n\n // Final round-trip through `parseX12` so the returned `X12Interchange`\n // is bit-identical with the parsed form the consumer's other helpers\n // operate on — and so the build path inherits delimiter detection,\n // envelope walking, and any future Phase-1+ refinements for free. This\n // also catches any internal builder bug at the call boundary (any\n // self-build-self-parse divergence surfaces as Tier-2 warnings on the\n // returned interchange's `warnings` array).\n return parseX12(raw);\n}\n\n// ---------------------------------------------------------------------------\n// Safety guards — refuse inconsistent dispositions.\n// ---------------------------------------------------------------------------\n\n/**\n * Refuse an `Accept` disposition paired with errors anywhere in the spec.\n * Enforces the cosyte ack archetype's safety invariant: a library that\n * silently fabricates an accept against a non-empty error list lies to the\n * inbound sender that their input passed when it did not — a real\n * patient-safety hazard. Mirrors the hl7 `buildAck` boundary +\n * `@cosyte/mllp`'s commit contract.\n *\n * @internal\n */\nfunction enforceAcceptIsClean(group: Build999FunctionalGroupSpec): void {\n const functionalIsAccept = group.disposition === X12_ACK_DISPOSITION_CODES.A;\n const functionalHasErrorCodes = (group.syntaxErrorCodes ?? []).length > 0;\n if (functionalIsAccept && functionalHasErrorCodes) {\n throw new AckBuildError(\n ACK_BUILD_ERROR_CODES.X12_ACK_ACCEPT_WITH_ERRORS,\n `build999: AK9-01 was 'A' (Accept) but AK9-05..AK9-09 carried ${String(\n (group.syntaxErrorCodes ?? []).length,\n )} syntax error code(s). Use 'E' (Accept, with errors noted) or a reject disposition instead.`,\n );\n }\n for (const response of group.transactionResponses) {\n const responseIsAccept = response.disposition === X12_ACK_DISPOSITION_CODES.A;\n const responseHasErrors = responseHasAnyError(response);\n if (responseIsAccept && responseHasErrors) {\n throw new AckBuildError(\n ACK_BUILD_ERROR_CODES.X12_ACK_ACCEPT_WITH_ERRORS,\n `build999: AK2 (ST-02 ${response.transactionSetControlNumber}) IK5-01 was 'A' (Accept) but the response carried error payload. Use 'E' (Accept, with errors noted) or a reject disposition instead.`,\n );\n }\n if (functionalIsAccept && (!responseIsAccept || responseHasErrors)) {\n throw new AckBuildError(\n ACK_BUILD_ERROR_CODES.X12_ACK_ACCEPT_WITH_ERRORS,\n `build999: AK9-01 was 'A' (Accept) but transaction response (ST-02 ${response.transactionSetControlNumber}) reported a non-accept disposition or carried errors. Lift the functional disposition to 'P' (Partial), 'E' (Accept, errors noted), or a reject.`,\n );\n }\n }\n}\n\n/**\n * Refuse internally inconsistent AK9-02 / AK9-03 / AK9-04 counts. Enforces\n * `0 ≤ accepted ≤ received ≤ declared` and `responses.length == received`.\n *\n * @internal\n */\nfunction enforceCountInvariants(group: Build999FunctionalGroupSpec): void {\n const declared = group.numberOfTransactionSets;\n const received = group.numberOfReceivedTransactionSets;\n const accepted = group.numberOfAcceptedTransactionSets;\n if (declared < 0 || received < 0 || accepted < 0) {\n throw new AckBuildError(\n ACK_BUILD_ERROR_CODES.X12_ACK_COUNT_MISMATCH,\n `build999: AK9 counts must be non-negative (declared=${String(declared)}, received=${String(received)}, accepted=${String(accepted)}).`,\n );\n }\n if (accepted > received) {\n throw new AckBuildError(\n ACK_BUILD_ERROR_CODES.X12_ACK_COUNT_MISMATCH,\n `build999: AK9-04 accepted (${String(accepted)}) cannot exceed AK9-03 received (${String(received)}).`,\n );\n }\n if (received > declared) {\n throw new AckBuildError(\n ACK_BUILD_ERROR_CODES.X12_ACK_COUNT_MISMATCH,\n `build999: AK9-03 received (${String(received)}) cannot exceed AK9-02 declared (${String(declared)}).`,\n );\n }\n if (group.transactionResponses.length !== received) {\n throw new AckBuildError(\n ACK_BUILD_ERROR_CODES.X12_ACK_COUNT_MISMATCH,\n `build999: AK9-03 received (${String(received)}) must equal the number of supplied transaction responses (${String(group.transactionResponses.length)}).`,\n );\n }\n // No cross-check of AK9-04 vs the count of IK5-01='A' responses: TR3\n // 005010X231A1 is ambiguous on whether IK5='E' (accept with errors)\n // counts toward AK9-04. The accept-clean guard above already refuses\n // the load-bearing safety case (functional `A` against any non-accept\n // response); finer disposition-vs-count consistency is the caller's\n // call.\n}\n\n/** @internal */\nfunction responseHasAnyError(response: Build999TransactionResponseSpec): boolean {\n if ((response.syntaxErrorCodes ?? []).length > 0) return true;\n if ((response.segmentErrors ?? []).length > 0) return true;\n return false;\n}\n\n// ---------------------------------------------------------------------------\n// Segment builders.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction buildAk2(\n response: Build999TransactionResponseSpec,\n esc: (value: string) => string,\n elementSeparator: string,\n segmentTerminator: string,\n): string {\n const parts: string[] = [\n \"AK2\",\n esc(response.transactionSetIdCode),\n esc(response.transactionSetControlNumber),\n ];\n if (response.implementationConventionReference !== undefined) {\n parts.push(esc(response.implementationConventionReference));\n }\n return joinSeg(parts, elementSeparator, segmentTerminator);\n}\n\n/** @internal */\nfunction buildIk3WithChildren(\n segError: Build999SegmentErrorSpec,\n esc: (value: string) => string,\n componentSeparator: string,\n elementSeparator: string,\n segmentTerminator: string,\n): readonly string[] {\n const ik3Parts: string[] = [\n \"IK3\",\n esc(segError.segmentIdCode),\n String(segError.segmentPositionInTransactionSet),\n ];\n if (segError.loopIdentifier !== undefined || segError.syntaxErrorCode !== undefined) {\n ik3Parts.push(esc(segError.loopIdentifier ?? \"\"));\n }\n if (segError.syntaxErrorCode !== undefined) {\n ik3Parts.push(segError.syntaxErrorCode);\n }\n const out: string[] = [joinSeg(ik3Parts, elementSeparator, segmentTerminator)];\n for (const ctxValue of segError.contexts ?? []) {\n out.push(joinSeg([\"CTX\", esc(ctxValue)], elementSeparator, segmentTerminator));\n }\n for (const elemError of segError.elementErrors ?? []) {\n out.push(buildIk4(elemError, esc, componentSeparator, elementSeparator, segmentTerminator));\n for (const ctxValue of elemError.contexts ?? []) {\n out.push(joinSeg([\"CTX\", esc(ctxValue)], elementSeparator, segmentTerminator));\n }\n }\n return out;\n}\n\n/** @internal */\nfunction buildIk4(\n elemError: Build999ElementErrorSpec,\n esc: (value: string) => string,\n componentSeparator: string,\n elementSeparator: string,\n segmentTerminator: string,\n): string {\n const positionComponents: string[] = [String(elemError.position.element)];\n if (elemError.position.component !== undefined) {\n positionComponents.push(String(elemError.position.component));\n } else if (elemError.position.repetition !== undefined) {\n positionComponents.push(\"\");\n }\n if (elemError.position.repetition !== undefined) {\n positionComponents.push(String(elemError.position.repetition));\n }\n const positionComposite = positionComponents.join(componentSeparator);\n const parts: string[] = [\"IK4\", positionComposite];\n // IK4-02 is situational. We always emit it (empty when not supplied) so\n // IK4-03 stays positionally pinned at element index 3.\n parts.push(esc(elemError.dataElementReferenceNumber ?? \"\"));\n parts.push(elemError.syntaxErrorCode);\n if (elemError.copyOfBadDataElement !== undefined) {\n parts.push(esc(elemError.copyOfBadDataElement));\n }\n return joinSeg(parts, elementSeparator, segmentTerminator);\n}\n\n/** @internal */\nfunction buildIk5(\n response: Build999TransactionResponseSpec,\n esc: (value: string) => string,\n elementSeparator: string,\n segmentTerminator: string,\n): string {\n const parts: string[] = [\"IK5\", response.disposition];\n const codes = response.syntaxErrorCodes ?? [];\n if (codes.length > 5) {\n throw new AckBuildError(\n ACK_BUILD_ERROR_CODES.X12_ACK_COUNT_MISMATCH,\n `build999: IK5 accepts up to 5 syntax error codes (IK5-02..IK5-06); ${String(codes.length)} supplied.`,\n );\n }\n for (const code of codes) parts.push(esc(code));\n return joinSeg(parts, elementSeparator, segmentTerminator);\n}\n\n/** @internal */\nfunction buildAk9(\n group: Build999FunctionalGroupSpec,\n esc: (value: string) => string,\n elementSeparator: string,\n segmentTerminator: string,\n): string {\n const parts: string[] = [\n \"AK9\",\n group.disposition,\n String(group.numberOfTransactionSets),\n String(group.numberOfReceivedTransactionSets),\n String(group.numberOfAcceptedTransactionSets),\n ];\n const codes = group.syntaxErrorCodes ?? [];\n if (codes.length > 5) {\n throw new AckBuildError(\n ACK_BUILD_ERROR_CODES.X12_ACK_COUNT_MISMATCH,\n `build999: AK9 accepts up to 5 syntax error codes (AK9-05..AK9-09); ${String(codes.length)} supplied.`,\n );\n }\n for (const code of codes) parts.push(esc(code));\n return joinSeg(parts, elementSeparator, segmentTerminator);\n}\n\n// ---------------------------------------------------------------------------\n// String helpers.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction joinSeg(\n parts: readonly string[],\n elementSeparator: string,\n segmentTerminator: string,\n): string {\n return parts.join(elementSeparator) + segmentTerminator;\n}\n\n/** @internal */\nfunction pad(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return value + \" \".repeat(width - value.length);\n return value.slice(0, width);\n}\n\n/**\n * Zero-pad a control number to `width` chars. Used for ISA-13 / IEA-02\n * (always 9 chars). Throws if the value is already too long.\n *\n * @internal\n */\nfunction padControl(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return \"0\".repeat(width - value.length) + value;\n throw new AckBuildError(\n ACK_BUILD_ERROR_CODES.X12_ACK_INVALID_SPEC,\n `build999: control number \"${value}\" exceeds the ${String(width)}-char spec limit.`,\n );\n}\n\n/**\n * Expand a 6-digit YYMMDD into CCYYMMDD. GS-04 carries the 4-digit year\n * form even when ISA-09 carries the 2-digit form. Years `00`–`49` are\n * 21st century (e.g. `25` → `2025`); `50`–`99` are 20th century — the\n * conventional X12 century-expansion window.\n *\n * @internal\n */\nfunction expandYY(yymmdd: string): string {\n if (yymmdd.length !== 6) return yymmdd; // pass-through if caller already supplied CCYYMMDD\n const yy = parseInt(yymmdd.slice(0, 2), 10);\n if (Number.isNaN(yy)) return yymmdd;\n const century = yy < 50 ? \"20\" : \"19\";\n return century + yymmdd;\n}\n\n// The TA1 sibling lives in build-ta1.ts; this builder owns only the 999.\n","/**\n * `buildTA1` — pure-function builder for an envelope-level TA1 Interchange\n * Acknowledgment. PURE FUNCTION; NEVER auto-sends. The library mechanically\n * builds the disposition it is told; an `A` ack code paired with a note\n * other than `000` (no error) is REFUSED via `AckBuildError` — the same\n * safety invariant as `build999`.\n *\n * Returns the typed {@link Ta1Segment} (matching the envelope-level shape\n * the Phase 3 envelope walker surfaces on\n * {@link \"../../parser/types.js\".X12Interchange.ta1Segments}). Callers that\n * want a complete on-the-wire byte stream concatenate `raw` + a segment\n * terminator, or wrap the segment inside their preferred envelope. The\n * library does NOT silently invent envelope bytes around it — the caller's\n * application boundary owns whether the TA1 is embedded in an outbound\n * interchange or sent as a standalone TA1-only interchange.\n */\n\nimport type { Ta1Segment } from \"../../parser/types.js\";\n\nimport { TA1_ACK_CODES, type Ta1AckCode, type Ta1NoteCode } from \"./codes.js\";\nimport { ACK_BUILD_ERROR_CODES, AckBuildError } from \"./errors.js\";\nimport type { BuildTA1Spec } from \"./types.js\";\n\n/**\n * `buildTA1` — assemble a TA1 Interchange Acknowledgment segment from the\n * supplied spec. The returned {@link Ta1Segment} carries the 1-indexed\n * 5-element value array (`elements[0]` = `\"TA1\"`, `elements[1]` =\n * TA1-01, …, `elements[5]` = TA1-05) plus the verbatim wire text on `raw`\n * (no segment terminator appended — that's the envelope's job).\n *\n * Safety guards (refused via {@link AckBuildError}):\n *\n * - `ackCode === \"A\"` paired with `noteCode !== \"000\"` →\n * {@link \"./errors.js\".ACK_BUILD_ERROR_CODES.X12_TA1_ACCEPT_WITH_NOTE}.\n * Accept must mean accept. Use `E` (accept with errors) when the\n * inbound had structural defects you elected to ignore.\n *\n * @param spec - The TA1 fields. `interchangeControlNumber` echoes the\n * inbound ISA-13; `interchangeDate` / `interchangeTime` echo\n * the inbound ISA-09 / ISA-10; `ackCode` is the disposition;\n * `noteCode` is the note (`000` for no-error pairings).\n * @param options - Optional delimiter overrides for callers building TA1\n * segments embedded in non-default envelopes. The\n * defaults match the cosyte parser archetype (`*` element,\n * `~` segment) — override when wrapping a TA1 in an ISA\n * envelope whose declared delimiters differ.\n *\n * @example\n * ```ts\n * import { buildTA1 } from \"@cosyte/x12\";\n *\n * // Accept (canonical \"no error\" pairing).\n * const ok = buildTA1({\n * interchangeControlNumber: \"000000001\",\n * interchangeDate: \"250101\",\n * interchangeTime: \"1200\",\n * ackCode: \"A\",\n * noteCode: \"000\",\n * });\n * ok.raw; // 'TA1*000000001*250101*1200*A*000'\n *\n * // Reject (control number mismatch).\n * const reject = buildTA1({\n * interchangeControlNumber: \"000000007\",\n * interchangeDate: \"250101\",\n * interchangeTime: \"1200\",\n * ackCode: \"R\",\n * noteCode: \"001\",\n * });\n * ```\n */\nexport function buildTA1(spec: BuildTA1Spec, options: BuildTA1Options = {}): Ta1Segment {\n enforceAcceptIsClean(spec);\n\n const elementSeparator = options.elementSeparator ?? \"*\";\n\n const elements: readonly string[] = Object.freeze([\n \"TA1\",\n spec.interchangeControlNumber,\n spec.interchangeDate,\n spec.interchangeTime,\n spec.ackCode,\n spec.noteCode,\n ]);\n const raw = elements.join(elementSeparator);\n return Object.freeze({ raw, elements });\n}\n\n/**\n * Options accepted by {@link buildTA1}. Both fields are optional — pass\n * none for the cosyte default envelope (`*` element separator). Override\n * only when the TA1 is being embedded in an outer envelope whose declared\n * delimiters differ from the cosyte default.\n */\nexport interface BuildTA1Options {\n readonly elementSeparator?: string;\n}\n\n/**\n * Refuse a fabricated `A` (accept) paired with a non-`000` note code.\n *\n * @internal\n */\nfunction enforceAcceptIsClean(spec: BuildTA1Spec): void {\n if (spec.ackCode === TA1_ACK_CODES.A && spec.noteCode !== \"000\") {\n throw new AckBuildError(\n ACK_BUILD_ERROR_CODES.X12_TA1_ACCEPT_WITH_NOTE,\n `buildTA1: TA1-04 was \"A\" (Accept) but TA1-05 carried note \"${spec.noteCode}\". An accept must cite \"000\" (no error). Use ackCode \"E\" (accept, errors noted) when the inbound had defects you elected to ignore.`,\n );\n }\n}\n\n// Type-only re-exports for callers wanting just the TA1 surface.\nexport type { Ta1AckCode, Ta1NoteCode };\n","/**\n * The emit half of the `@cosyte/x12` parser — `serializeX12` turns any\n * {@link X12Interchange} back into an X12 byte stream. Two modes:\n *\n * - **Byte-faithful (default).** Reconstructs the interchange purely from the\n * verbatim `.raw` strings the parser preserved (ISA + terminator, then each\n * GS / transaction segment / GE / IEA terminator-joined, then any\n * `trailingBytes`). For a Tier-1 (spec-clean, no-CRLF) input this is exactly\n * the source bytes — the idempotency fixed point `serialize(parse(s)) === s`.\n * Inter-segment CRLF and a trailing newline are NOT reproduced: the parser\n * silently normalizes them away (they are not in the model), so a\n * pretty-printed source round-trips to its compact spec-clean form.\n *\n * - **Spec-clean (`{ specClean: true }`).** Same byte-faithful structure, but\n * the serializer ALSO reconciles the envelope counts and control numbers:\n * SE-01 (segment count) vs the actual ST..SE segment count, GE-01\n * (transaction count) vs the actual ST count, IEA-01 (group count) vs the\n * actual group count, plus the ISA-13↔IEA-02 / GS-06↔GE-02 / ST-02↔SE-02\n * control-number pairs. A mismatch is surfaced via `opts.onWarning` and\n * NEVER silently corrected — the output keeps the model's values unless the\n * caller ALSO opts in with `{ recomputeCounts: true }`, which substitutes\n * the recomputed SE-01 / GE-01 / IEA-01 counts into the emitted control\n * segments. Control numbers are identity, not derived, so they are NEVER\n * rewritten — only flagged.\n *\n * Warning messages carry positional context + bounded numeric metadata only;\n * they never echo element VALUES (the H-PHI invariant shared across the\n * `@cosyte/x12` warning factories).\n */\n\nimport type { OnWarningCallback, X12Interchange } from \"../parser/types.js\";\nimport {\n controlNumberMismatch,\n groupCountMismatch,\n segmentCountMismatch,\n transactionCountMismatch,\n type X12ParseWarning,\n} from \"../parser/warnings.js\";\n\n/**\n * Options accepted by {@link serializeX12}. Every field is optional;\n * `serializeX12(ix)` produces the byte-faithful reconstruction with no\n * reconciliation.\n *\n * @remarks\n * With `exactOptionalPropertyTypes: true`, do not pass `specClean: undefined`\n * explicitly — omit the key instead.\n *\n * @example\n * ```ts\n * import { serializeX12, parseX12 } from \"@cosyte/x12\";\n * const ix = parseX12(raw);\n * // Spec-clean emit that fixes any stale envelope counts:\n * const out = serializeX12(ix, {\n * specClean: true,\n * recomputeCounts: true,\n * onWarning: (w) => console.warn(w.code, w.message),\n * });\n * ```\n */\nexport interface SerializeOptions {\n /**\n * Reconcile envelope counts + control-number pairs and surface any\n * mismatch via {@link onWarning}. Default `false` (pure byte-faithful\n * reconstruction, no reconciliation, no warnings).\n */\n readonly specClean?: boolean;\n /**\n * Substitute the recomputed SE-01 / GE-01 / IEA-01 counts into the emitted\n * control segments (only meaningful with `specClean: true`). Default\n * `false` — the serializer warns on a count mismatch but emits the model's\n * verbatim value. Control NUMBERS are never rewritten regardless.\n */\n readonly recomputeCounts?: boolean;\n /** Invoked once per reconciliation warning (spec-clean mode only). */\n readonly onWarning?: OnWarningCallback;\n}\n\n/**\n * Serialize an {@link X12Interchange} back to an X12 byte stream. Pure\n * function — never throws, never mutates the input, never performs I/O. See\n * the module header for the two emit modes.\n *\n * @example\n * ```ts\n * import { parseX12, serializeX12 } from \"@cosyte/x12\";\n * const ix = parseX12(raw);\n * const bytes = serializeX12(ix); // byte-faithful for a Tier-1 input\n * ```\n */\nexport function serializeX12(interchange: X12Interchange, opts: SerializeOptions = {}): string {\n const specClean = opts.specClean === true;\n const recompute = specClean && opts.recomputeCounts === true;\n const onWarning = opts.onWarning;\n const elementSep = interchange.delimiters.element;\n const term = interchange.delimiters.segment;\n\n const emit = (warning: X12ParseWarning): void => {\n if (onWarning !== undefined) onWarning(warning);\n };\n\n // ISA.raw already carries its segment terminator (the 106-byte head); every\n // other raw is terminator-stripped, so they are joined with `term`.\n let out = interchange.isa.raw;\n\n // Running global segment index for warning positions. ISA occupies index 0.\n let segIdx = 0;\n\n for (const ta1 of interchange.ta1Segments) {\n out += ta1.raw + term;\n segIdx++;\n }\n\n for (const [g, group] of interchange.groups.entries()) {\n const gsSegIdx = ++segIdx;\n out += group.gs.raw + term;\n\n for (const [t, tx] of group.transactions.entries()) {\n const stSegIdx = segIdx + 1;\n const segCount = tx.rawSegments.length;\n const lastIdx = tx.rawSegments.length - 1;\n\n for (const [k, raw] of tx.rawSegments.entries()) {\n segIdx++;\n // The final raw segment is the SE (when the transaction is not\n // truncated). In recompute mode, substitute the corrected SE-01.\n if (recompute && tx.se !== undefined && k === lastIdx) {\n out += substituteElement(tx.se.elements, 1, String(segCount), elementSep) + term;\n } else {\n out += raw + term;\n }\n }\n\n if (specClean && tx.se !== undefined) {\n const declaredSe = elementAt(tx.se.elements, 1);\n if (declaredSe !== String(segCount)) {\n emit(\n segmentCountMismatch(\n {\n segmentIndex: stSegIdx,\n interchangeIndex: 0,\n groupIndex: g,\n transactionIndex: t,\n elementIndex: 1,\n },\n declaredSe,\n segCount,\n ),\n );\n }\n const st02 = elementAt(tx.st.elements, 2);\n const se02 = elementAt(tx.se.elements, 2);\n if (st02 !== se02) {\n emit(\n controlNumberMismatch(\n {\n segmentIndex: stSegIdx,\n interchangeIndex: 0,\n groupIndex: g,\n transactionIndex: t,\n elementIndex: 2,\n },\n \"ST-02/SE-02\",\n st02,\n se02,\n ),\n );\n }\n }\n }\n\n if (group.ge !== undefined) {\n const txCount = group.transactions.length;\n segIdx++;\n if (recompute) {\n out += substituteElement(group.ge.elements, 1, String(txCount), elementSep) + term;\n } else {\n out += group.ge.raw + term;\n }\n if (specClean) {\n const declaredGe = elementAt(group.ge.elements, 1);\n if (declaredGe !== String(txCount)) {\n emit(\n transactionCountMismatch(\n { segmentIndex: gsSegIdx, interchangeIndex: 0, groupIndex: g, elementIndex: 1 },\n declaredGe,\n txCount,\n ),\n );\n }\n const gs06 = elementAt(group.gs.elements, 6);\n const ge02 = elementAt(group.ge.elements, 2);\n if (gs06 !== ge02) {\n emit(\n controlNumberMismatch(\n { segmentIndex: gsSegIdx, interchangeIndex: 0, groupIndex: g, elementIndex: 2 },\n \"GS-06/GE-02\",\n gs06,\n ge02,\n ),\n );\n }\n }\n }\n }\n\n if (interchange.iea !== undefined) {\n const groupCount = interchange.groups.length;\n segIdx++;\n if (recompute) {\n out += substituteElement(interchange.iea.elements, 1, String(groupCount), elementSep) + term;\n } else {\n out += interchange.iea.raw + term;\n }\n if (specClean) {\n const declaredIea = elementAt(interchange.iea.elements, 1);\n if (declaredIea !== String(groupCount)) {\n emit(\n groupCountMismatch(\n { segmentIndex: segIdx, interchangeIndex: 0, elementIndex: 1 },\n declaredIea,\n groupCount,\n ),\n );\n }\n const isa13 = elementAt(interchange.isa.elements, 13);\n const iea02 = elementAt(interchange.iea.elements, 2);\n if (isa13 !== iea02) {\n emit(\n controlNumberMismatch(\n { segmentIndex: segIdx, interchangeIndex: 0, elementIndex: 2 },\n \"ISA-13/IEA-02\",\n isa13,\n iea02,\n ),\n );\n }\n }\n }\n\n if (interchange.trailingBytes !== undefined) {\n out += interchange.trailingBytes;\n }\n\n return out;\n}\n\n/**\n * Read an element by index, defaulting to `\"\"` for missing positions —\n * mirrors the envelope walker's `el` narrowing so truncated control segments\n * reconcile against `\"\"` rather than throwing.\n *\n * @internal\n */\nfunction elementAt(elements: readonly string[], index: number): string {\n return elements[index] ?? \"\";\n}\n\n/**\n * Rebuild a control segment's raw text with one element substituted. The\n * element arrays on ISA / GS / GE / IEA / ST / SE come from a plain\n * element-separator split, so `elements.join(elementSep)` is the exact\n * inverse — substituting an index and rejoining yields a spec-clean raw. The\n * substituted values here are always recomputed integer counts (SE-01 / GE-01\n * / IEA-01), never PHI. A missing index is a no-op (returns the verbatim\n * join) so truncated segments degrade gracefully.\n *\n * @internal\n */\nfunction substituteElement(\n elements: readonly string[],\n index: number,\n value: string,\n elementSep: string,\n): string {\n if (index >= elements.length) return elements.join(elementSep);\n const copy = elements.slice();\n copy[index] = value;\n return copy.join(elementSep);\n}\n","/**\n * Thrown errors emitted by the general-purpose interchange builder\n * (`buildInterchange`). Distinct from `X12ParseError` (the parser stays\n * lenient and never throws on real-world input) and from `AckBuildError`\n * (the ack-specific disposition guard): `X12BuildError` is raised when the\n * caller hands the builder a structurally impossible envelope spec — an\n * over-long ISA-13 control number, a malformed segment spec, and the like.\n * Surfacing these as a thrown, code-tagged error keeps the bug at the call\n * site rather than emitting a silently-malformed interchange.\n */\n\n/**\n * Stable string codes for every {@link X12BuildError}. Locked here so\n * consumers can narrow on `err.code` exhaustively; additions-only thereafter\n * (renaming any code is a breaking change).\n *\n * - `X12_BUILD_INVALID_SPEC` — a spec field violated a structural constraint\n * the builder cannot recover from (an ISA-13 / IEA-02 control number longer\n * than the 9-char fixed width, a segment spec with no segment id, etc.).\n *\n * @example\n * ```ts\n * import { X12_BUILD_ERROR_CODES, X12BuildError } from \"@cosyte/x12\";\n * try {\n * buildInterchange(spec);\n * } catch (err) {\n * if (err instanceof X12BuildError && err.code === X12_BUILD_ERROR_CODES.X12_BUILD_INVALID_SPEC) {\n * // application bug — the envelope spec is structurally impossible\n * }\n * }\n * ```\n */\nexport const X12_BUILD_ERROR_CODES = {\n X12_BUILD_INVALID_SPEC: \"X12_BUILD_INVALID_SPEC\",\n} as const;\n\n/**\n * String-literal union over {@link X12_BUILD_ERROR_CODES}. Used as\n * {@link X12BuildError}.`code`.\n */\nexport type X12BuildErrorCode = (typeof X12_BUILD_ERROR_CODES)[keyof typeof X12_BUILD_ERROR_CODES];\n\n/**\n * Thrown by {@link \"./build-interchange.js\".buildInterchange} when the\n * supplied envelope spec is structurally impossible. Carries a stable `code`\n * for programmatic narrowing. Deliberately does NOT extend `X12ParseError`\n * — the parser-vs-builder distinction matters at the type level.\n *\n * @example\n * ```ts\n * import { X12BuildError } from \"@cosyte/x12\";\n * try {\n * buildInterchange({ ...spec, interchangeControlNumber: \"0123456789\" });\n * } catch (err) {\n * if (err instanceof X12BuildError) {\n * // err.code is one of X12_BUILD_ERROR_CODES\n * }\n * }\n * ```\n */\nexport class X12BuildError extends Error {\n public readonly code: X12BuildErrorCode;\n\n /** @internal */\n public constructor(code: X12BuildErrorCode, message: string) {\n super(message);\n this.name = \"X12BuildError\";\n this.code = code;\n }\n}\n","/**\n * `buildInterchange` — the general-purpose, segment-level interchange builder\n * for `@cosyte/x12`. Given an {@link InterchangeSpec} (ISA identity + groups +\n * per-transaction body segments) it assembles a complete, spec-clean X12 byte\n * stream — owning every envelope mechanic the caller should never hand-roll:\n * the ISA fixed-width layout, the GS/GE/SE/IEA control segments, and the\n * SE-01 / GE-01 / IEA-01 counts. The result is round-tripped back through\n * {@link parseX12} so the returned {@link X12Interchange} is bit-identical to\n * the parsed form every other helper consumes — and so the build path inherits\n * delimiter detection and envelope walking for free (any internal builder bug\n * surfaces as Tier-2 warnings on the returned interchange's `warnings` array).\n *\n * NEVER auto-sends, NEVER opens a socket, NEVER touches the filesystem.\n * Structurally impossible specs (an over-long ISA-13, a segment with no id)\n * are REFUSED via {@link \"./errors.js\".X12BuildError}; this mirrors the\n * `build999` boundary but without any disposition-specific safety guard —\n * those belong to the domain builders layered on top.\n */\n\nimport { X12_BUILD_ERROR_CODES, X12BuildError } from \"./errors.js\";\nimport type { FunctionalGroupSpec, InterchangeSpec, TransactionSetSpec } from \"./types.js\";\nimport { parseX12 } from \"../parser/index.js\";\nimport { escapeRelease } from \"../parser/release.js\";\nimport type { X12Interchange } from \"../parser/types.js\";\n\n/**\n * Assemble a complete {@link X12Interchange} from a segment-level\n * {@link InterchangeSpec}. See the module header for the envelope mechanics\n * the builder owns.\n *\n * @example\n * ```ts\n * import { buildInterchange } from \"@cosyte/x12\";\n * const ix = buildInterchange({\n * senderId: \"SENDER\", receiverId: \"RECEIVER\",\n * interchangeDate: \"250101\", interchangeTime: \"1200\",\n * interchangeControlNumber: \"000000001\",\n * groups: [\n * {\n * functionalIdCode: \"HC\", groupControlNumber: \"1\", versionRelease: \"005010X222A2\",\n * transactions: [\n * {\n * transactionSetIdCode: \"837\", transactionSetControlNumber: \"0001\",\n * implementationConventionReference: \"005010X222A2\",\n * segments: [[\"BHT\", \"0019\", \"00\", \"REF\", \"20250101\", \"1200\", \"CH\"]],\n * },\n * ],\n * },\n * ],\n * });\n * ```\n */\nexport function buildInterchange(spec: InterchangeSpec): X12Interchange {\n const elementSeparator = spec.elementSeparator ?? \"*\";\n const repetitionSeparator = spec.repetitionSeparator ?? \"^\";\n const componentSeparator = spec.componentSeparator ?? \":\";\n const segmentTerminator = spec.segmentTerminator ?? \"~\";\n const delimiters = {\n element: elementSeparator,\n repetition: repetitionSeparator,\n component: componentSeparator,\n segment: segmentTerminator,\n };\n const esc = (value: string): string => escapeRelease(value, delimiters);\n\n const senderQualifier = spec.senderQualifier ?? \"ZZ\";\n const receiverQualifier = spec.receiverQualifier ?? \"ZZ\";\n const usageIndicator = spec.usageIndicator ?? \"P\";\n const version = spec.version ?? \"00501\";\n const interchangeControlNumber = padControl(spec.interchangeControlNumber, 9);\n\n // ISA is fixed-width per ASC X12 .5 — pad each element, never escape (the\n // separators are the ISA's own structural bytes, declared in-band).\n const isa =\n [\n \"ISA\",\n \"00\", // ISA-01\n pad(\" \", 10), // ISA-02\n \"00\", // ISA-03\n pad(\" \", 10), // ISA-04\n pad(senderQualifier, 2), // ISA-05\n pad(spec.senderId, 15), // ISA-06\n pad(receiverQualifier, 2), // ISA-07\n pad(spec.receiverId, 15), // ISA-08\n pad(spec.interchangeDate, 6), // ISA-09 — YYMMDD\n pad(spec.interchangeTime, 4), // ISA-10 — HHMM\n repetitionSeparator, // ISA-11\n pad(version, 5), // ISA-12\n interchangeControlNumber, // ISA-13\n \"0\", // ISA-14 — ack requested (0 = no inbound TA1)\n usageIndicator, // ISA-15\n componentSeparator, // ISA-16\n ].join(elementSeparator) + segmentTerminator;\n\n let body = \"\";\n for (const group of spec.groups) {\n body += buildGroup(group, spec, esc, elementSeparator, segmentTerminator);\n }\n\n const iea = joinSeg(\n [\"IEA\", String(spec.groups.length), interchangeControlNumber],\n elementSeparator,\n segmentTerminator,\n );\n\n const raw = isa + body + iea;\n return parseX12(raw);\n}\n\n/** @internal */\nfunction buildGroup(\n group: FunctionalGroupSpec,\n spec: InterchangeSpec,\n esc: (value: string) => string,\n elementSeparator: string,\n segmentTerminator: string,\n): string {\n const applicationSenderCode = group.applicationSenderCode ?? spec.senderId;\n const applicationReceiverCode = group.applicationReceiverCode ?? spec.receiverId;\n const groupDate = group.groupDate ?? expandYY(spec.interchangeDate);\n const groupTime = group.groupTime ?? spec.interchangeTime;\n const responsibleAgencyCode = group.responsibleAgencyCode ?? \"X\";\n\n const gs = joinSeg(\n [\n \"GS\",\n esc(group.functionalIdCode),\n esc(applicationSenderCode),\n esc(applicationReceiverCode),\n groupDate,\n groupTime,\n esc(group.groupControlNumber),\n responsibleAgencyCode,\n esc(group.versionRelease),\n ],\n elementSeparator,\n segmentTerminator,\n );\n\n let transactions = \"\";\n for (const tx of group.transactions) {\n transactions += buildTransaction(tx, esc, elementSeparator, segmentTerminator);\n }\n\n const ge = joinSeg(\n [\"GE\", String(group.transactions.length), esc(group.groupControlNumber)],\n elementSeparator,\n segmentTerminator,\n );\n\n return gs + transactions + ge;\n}\n\n/** @internal */\nfunction buildTransaction(\n tx: TransactionSetSpec,\n esc: (value: string) => string,\n elementSeparator: string,\n segmentTerminator: string,\n): string {\n const stParts = [\"ST\", esc(tx.transactionSetIdCode), esc(tx.transactionSetControlNumber)];\n if (tx.implementationConventionReference !== undefined) {\n stParts.push(esc(tx.implementationConventionReference));\n }\n const st = joinSeg(stParts, elementSeparator, segmentTerminator);\n\n let bodySegments = \"\";\n for (const segment of tx.segments) {\n if (segment.length === 0 || (segment[0] ?? \"\") === \"\") {\n throw new X12BuildError(\n X12_BUILD_ERROR_CODES.X12_BUILD_INVALID_SPEC,\n `buildInterchange: a segment spec in transaction \"${esc(tx.transactionSetIdCode)}\" has no segment id.`,\n );\n }\n bodySegments += joinSeg(segment.map(esc), elementSeparator, segmentTerminator);\n }\n\n // SE-01 counts every segment in the set, ST and SE inclusive.\n const seCount = tx.segments.length + 2;\n const se = joinSeg(\n [\"SE\", String(seCount), esc(tx.transactionSetControlNumber)],\n elementSeparator,\n segmentTerminator,\n );\n\n return st + bodySegments + se;\n}\n\n// ---------------------------------------------------------------------------\n// String helpers — mirror the `build999` emit primitives.\n// ---------------------------------------------------------------------------\n\n/** @internal */\nfunction joinSeg(\n parts: readonly string[],\n elementSeparator: string,\n segmentTerminator: string,\n): string {\n return parts.join(elementSeparator) + segmentTerminator;\n}\n\n/** @internal */\nfunction pad(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return value + \" \".repeat(width - value.length);\n return value.slice(0, width);\n}\n\n/**\n * Zero-pad a control number to `width` chars (ISA-13 / IEA-02 are always 9).\n * Throws {@link X12BuildError} if the value already exceeds the width — a\n * silently-truncated control number would break ISA-13↔IEA-02 reconciliation.\n *\n * @internal\n */\nfunction padControl(value: string, width: number): string {\n if (value.length === width) return value;\n if (value.length < width) return \"0\".repeat(width - value.length) + value;\n throw new X12BuildError(\n X12_BUILD_ERROR_CODES.X12_BUILD_INVALID_SPEC,\n `buildInterchange: control number \"${value}\" exceeds the ${String(width)}-char spec limit.`,\n );\n}\n\n/**\n * Expand a 6-digit YYMMDD into CCYYMMDD for GS-04. Years `00`–`49` are 21st\n * century, `50`–`99` are 20th — the conventional X12 century window. A value\n * already in CCYYMMDD form passes through unchanged.\n *\n * @internal\n */\nfunction expandYY(yymmdd: string): string {\n if (yymmdd.length !== 6) return yymmdd;\n const yy = parseInt(yymmdd.slice(0, 2), 10);\n if (Number.isNaN(yy)) return yymmdd;\n const century = yy < 50 ? \"20\" : \"19\";\n return century + yymmdd;\n}\n","/**\n * Error taxonomy for the `@cosyte/x12` profile subsystem (Phase 9).\n *\n * `X12ProfileError` is thrown by `defineProfile()` when a profile definition\n * is structurally invalid — a bad/missing name, an unknown option key, or a\n * quirk that violates the locked hard rule (missing `fixture`, unknown\n * `effect`, an `expectedWarnings` code outside the Tier-2 registry). It is a\n * definition-time error (developer mistake), distinct from the Tier-3\n * runtime `X12ParseError` thrown on corrupt input.\n */\n\n/**\n * Thrown by `defineProfile()` and profile-validation code when a profile\n * definition is structurally invalid. Carries the offending profile name\n * (when known) so consumers can pinpoint which definition failed.\n *\n * @example\n * ```ts\n * import { defineProfile, X12ProfileError } from \"@cosyte/x12\";\n * try {\n * defineProfile({ name: \"\" });\n * } catch (err) {\n * if (err instanceof X12ProfileError) {\n * console.error(err.message, err.profileName);\n * }\n * }\n * ```\n */\nexport class X12ProfileError extends Error {\n public readonly profileName: string | undefined;\n\n /**\n * Construct a new `X12ProfileError`. `profileName` is optional so the\n * name validator can throw before a usable name is available.\n *\n * @internal\n */\n public constructor(message: string, profileName?: string) {\n super(message);\n this.name = \"X12ProfileError\";\n this.profileName = profileName;\n }\n}\n","/**\n * Validation helpers for `defineProfile()`. Every validator returns `void`\n * on success and throws {@link \"./errors.js\".X12ProfileError} on failure.\n *\n * The name validator is split out so `defineProfile()` can call it FIRST and\n * pass `opts.name` to every subsequent throw site (fail-fast: a caller who\n * hits a quirk error should see their own profile flagged by name).\n *\n * Zero runtime deps — inlined Levenshtein (~15 LoC) for \"did you mean?\"\n * hints on unknown option keys.\n *\n * @internal\n */\n\nimport { WARNING_CODES } from \"../parser/warnings.js\";\nimport type { X12WarningCode } from \"../parser/warnings.js\";\n\nimport { X12ProfileError } from \"./errors.js\";\nimport type { X12ProfileQuirk, X12ProfileSpec } from \"./types.js\";\n\n/**\n * Known top-level option keys accepted by `defineProfile()`. Any key outside\n * this list throws with an optional Levenshtein \"did you mean?\" hint.\n *\n * @internal\n */\nconst KNOWN_OPTION_KEYS: readonly string[] = [\"name\", \"description\", \"quirks\", \"extends\"];\n\n/**\n * Valid quirk `effect` buckets. A quirk with any other effect is rejected.\n *\n * @internal\n */\nconst KNOWN_EFFECTS: readonly string[] = [\"relaxes\", \"adds\", \"requires\"];\n\n/**\n * Stable, kebab-case-ish quirk id shape: 2-64 lowercase-alphanumeric chars\n * with internal hyphens. Keeps ids machine-friendly and free of arbitrary\n * bytes.\n *\n * @internal\n */\nconst QUIRK_ID_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/u;\n\n/**\n * Fixture path shape: a relative `dir/file.edi` path under `test/fixtures/`.\n * Rejects absolute paths and parent-directory escapes so the cited fixture\n * stays inside the corpus.\n *\n * @internal\n */\nconst FIXTURE_PATH_RE = /^[A-Za-z0-9._-]+(?:\\/[A-Za-z0-9._-]+)+$/u;\n\n/**\n * The frozen set of valid Tier-2 warning codes, used to validate a quirk's\n * `expectedWarnings`. Built once from the registry.\n *\n * @internal\n */\nconst WARNING_CODE_SET: ReadonlySet<string> = new Set(Object.values(WARNING_CODES));\n\n/**\n * Iterative DP Levenshtein distance. Used by {@link validateOptionKeys} for\n * \"did you mean?\" hints. Zero deps; ≤ 15 LoC excluding the signature.\n *\n * @internal\n */\nfunction levenshtein(a: string, b: string): number {\n if (a === b) return 0;\n if (a.length === 0) return b.length;\n if (b.length === 0) return a.length;\n let prev: number[] = [];\n for (let j = 0; j <= b.length; j++) prev.push(j);\n for (let i = 1; i <= a.length; i++) {\n const curr: number[] = [i];\n for (let j = 1; j <= b.length; j++) {\n const cost = a.charCodeAt(i - 1) === b.charCodeAt(j - 1) ? 0 : 1;\n curr.push(Math.min((prev[j] ?? 0) + 1, (curr[j - 1] ?? 0) + 1, (prev[j - 1] ?? 0) + cost));\n }\n prev = curr;\n }\n return prev[b.length] ?? 0;\n}\n\n/**\n * Validate the profile NAME (fail-fast). Throws on null/undefined opts,\n * non-string name, or empty/whitespace-only name.\n *\n * @internal\n */\nexport function validateProfileName(opts: X12ProfileSpec): void {\n if (opts === null || opts === undefined) {\n throw new X12ProfileError(\n `defineProfile: options is required and must be an object. Received: ${String(opts)}.`,\n );\n }\n if (typeof opts.name !== \"string\") {\n throw new X12ProfileError(\n \"defineProfile: 'name' is required and must be a non-empty string. \" +\n `Received: ${JSON.stringify((opts as { name?: unknown }).name)}.`,\n );\n }\n if (opts.name.trim().length === 0) {\n throw new X12ProfileError(\n \"defineProfile: 'name' is required and must be a non-empty string. \" +\n `Received: ${JSON.stringify(opts.name)}.`,\n opts.name,\n );\n }\n}\n\n/**\n * Validate TOP-LEVEL option keys. Throws on any unknown key with a\n * Levenshtein \"did you mean?\" hint when distance ≤ 2 from a known key.\n *\n * @internal\n */\nexport function validateOptionKeys(opts: X12ProfileSpec): void {\n for (const key of Object.keys(opts)) {\n if (KNOWN_OPTION_KEYS.includes(key)) continue;\n let hint: string | undefined;\n for (const known of KNOWN_OPTION_KEYS) {\n if (levenshtein(key, known) <= 2) {\n hint = known;\n break;\n }\n }\n throw new X12ProfileError(\n `Profile '${opts.name}' has unknown option key '${key}'. ` +\n (hint !== undefined ? `Did you mean '${hint}'? ` : \"\") +\n `Known keys: ${KNOWN_OPTION_KEYS.join(\", \")}.`,\n opts.name,\n );\n }\n}\n\n/**\n * Validate a quirk set. Enforces the locked hard rule (every quirk MUST cite\n * a `fixture`) plus structural correctness: unique kebab ids, a known\n * `effect`, non-empty `summary` / `sourceCategory`, a well-formed relative\n * `fixture` path, and `expectedWarnings` drawn only from the Tier-2\n * registry. Run both pre-merge (self quirks, so errors name the offending\n * profile) and post-merge (the composed set).\n *\n * @internal\n */\nexport function validateQuirks(quirks: readonly X12ProfileQuirk[], profileName: string): void {\n const seenIds = new Set<string>();\n for (let i = 0; i < quirks.length; i++) {\n const q = quirks[i];\n const at = `quirks[${String(i)}]`;\n if (q === undefined || q === null || typeof q !== \"object\") {\n throw new X12ProfileError(`Profile '${profileName}' ${at} must be an object.`, profileName);\n }\n if (typeof q.id !== \"string\" || !QUIRK_ID_RE.test(q.id)) {\n throw new X12ProfileError(\n `Profile '${profileName}' ${at}.id must be a kebab-case string (e.g. \"payer-loop-ref-2u\"). ` +\n `Received: ${JSON.stringify(q.id)}.`,\n profileName,\n );\n }\n if (seenIds.has(q.id)) {\n throw new X12ProfileError(\n `Profile '${profileName}' declares duplicate quirk id '${q.id}'. Each quirk id must be unique within a profile.`,\n profileName,\n );\n }\n seenIds.add(q.id);\n if (typeof q.effect !== \"string\" || !KNOWN_EFFECTS.includes(q.effect)) {\n throw new X12ProfileError(\n `Profile '${profileName}' quirk '${q.id}' has invalid effect ${JSON.stringify(q.effect)} — ` +\n `must be one of ${KNOWN_EFFECTS.join(\" / \")}.`,\n profileName,\n );\n }\n if (typeof q.summary !== \"string\" || q.summary.trim().length === 0) {\n throw new X12ProfileError(\n `Profile '${profileName}' quirk '${q.id}' must have a non-empty summary.`,\n profileName,\n );\n }\n // The locked hard rule: no quirk without a demonstrating fixture.\n if (typeof q.fixture !== \"string\" || !FIXTURE_PATH_RE.test(q.fixture)) {\n throw new X12ProfileError(\n `Profile '${profileName}' quirk '${q.id}' must cite a 'fixture' — a relative path under test/fixtures/ ` +\n `(e.g. \"remit/835-availity-quirk.edi\") demonstrating the deviation. No invented quirks. ` +\n `Received: ${JSON.stringify(q.fixture)}.`,\n profileName,\n );\n }\n if (typeof q.sourceCategory !== \"string\" || q.sourceCategory.trim().length === 0) {\n throw new X12ProfileError(\n `Profile '${profileName}' quirk '${q.id}' must have a non-empty sourceCategory ` +\n `(where the deviation was observed).`,\n profileName,\n );\n }\n if (q.expectedWarnings !== undefined) {\n for (const code of q.expectedWarnings) {\n if (!WARNING_CODE_SET.has(code)) {\n throw new X12ProfileError(\n `Profile '${profileName}' quirk '${q.id}' lists unknown expected warning ${JSON.stringify(code)} — ` +\n `must be a member of WARNING_CODES.`,\n profileName,\n );\n }\n }\n }\n }\n}\n\n/**\n * Collect the sorted, de-duplicated union of every quirk's\n * `expectedWarnings`. Used by `describe()` and `partitionWarnings`.\n *\n * @internal\n */\nexport function collectExpectedWarnings(\n quirks: readonly X12ProfileQuirk[],\n): readonly X12WarningCode[] {\n const seen = new Set<X12WarningCode>();\n for (const q of quirks) {\n for (const code of q.expectedWarnings ?? []) seen.add(code);\n }\n return Object.freeze([...seen].sort((a, b) => a.localeCompare(b)));\n}\n","/**\n * Build the structured {@link \"./types.js\".X12ProfileDescription} returned\n * by `profile.describe()`. Unlike hl7 (which returns a formatted multi-line\n * string), x12 returns DATA — the \"relaxes / adds / requires\" buckets plus\n * the union of expected warnings — so downstream tooling can consume it\n * programmatically. This record is published with the package.\n *\n * @internal\n */\n\nimport { collectExpectedWarnings } from \"./validate.js\";\nimport type { X12ProfileDescription, X12ProfileQuirk } from \"./types.js\";\n\n/**\n * Local mutable-during-assembly helper — honours `exactOptionalPropertyTypes`\n * by conditionally assigning the optional `description` rather than writing\n * `description: undefined`.\n *\n * @internal\n */\ntype Mutable<T> = { -readonly [K in keyof T]?: T[K] };\n\n/**\n * Assemble the structured description from a fully-merged profile. Buckets\n * quirks by `effect` in their merged order; `expectedWarnings` is the\n * sorted, de-duplicated union across all quirks.\n *\n * @internal\n */\nexport function buildDescribe(profile: {\n readonly name: string;\n readonly description?: string;\n readonly lineage: readonly string[];\n readonly quirks: readonly X12ProfileQuirk[];\n}): X12ProfileDescription {\n const relaxes: X12ProfileQuirk[] = [];\n const adds: X12ProfileQuirk[] = [];\n const requires: X12ProfileQuirk[] = [];\n for (const q of profile.quirks) {\n if (q.effect === \"relaxes\") relaxes.push(q);\n else if (q.effect === \"adds\") adds.push(q);\n else requires.push(q);\n }\n const out: Mutable<X12ProfileDescription> = {\n name: profile.name,\n lineage: profile.lineage,\n relaxes: Object.freeze(relaxes),\n adds: Object.freeze(adds),\n requires: Object.freeze(requires),\n expectedWarnings: collectExpectedWarnings(profile.quirks),\n };\n if (profile.description !== undefined) out.description = profile.description;\n return Object.freeze(out) as X12ProfileDescription;\n}\n","/**\n * Pure merge helpers consumed by `defineProfile()` when `opts.extends` is\n * supplied. Every helper takes a `readonly parents[]` + a self value and\n * returns the merged result; none mutate input. Mirrors hl7's merge\n * semantics: lineage flatten+dedupe (first occurrence wins), scalar\n * last-wins, and a quirk merge keyed by id where later layers (child) win on\n * id collision while non-colliding parent quirks survive additively.\n *\n * Post-merge re-validation is the CALLER's responsibility — these helpers\n * are pure reducers.\n *\n * @internal\n */\n\nimport type { X12Profile, X12ProfileQuirk } from \"./types.js\";\n\n/**\n * Normalise the `extends` input to a readonly array. Accepts a single\n * profile or an array; returns `[]` for `undefined`.\n *\n * @internal\n */\nexport function normaliseParents(\n ext: X12Profile | readonly X12Profile[] | undefined,\n): readonly X12Profile[] {\n if (ext === undefined) return [];\n // `Array.isArray` narrows to `any[]`, erasing the element type; the cast\n // restores it. The contrary branch is a single profile, not an array.\n if (Array.isArray(ext)) return ext as readonly X12Profile[];\n return [ext as X12Profile];\n}\n\n/**\n * Compute lineage: flatten parent lineages (or `[parent.name]` when a parent\n * has no lineage), append `selfName`, dedupe preserving first occurrence.\n *\n * @internal\n */\nexport function mergeLineage(parents: readonly X12Profile[], selfName: string): readonly string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const p of parents) {\n const parentLineage = p.lineage.length > 0 ? p.lineage : [p.name];\n for (const n of parentLineage) {\n if (!seen.has(n)) {\n seen.add(n);\n out.push(n);\n }\n }\n }\n if (!seen.has(selfName)) out.push(selfName);\n return Object.freeze(out);\n}\n\n/**\n * Merge quirks by id: iterate every parent in order (left-to-right) then\n * self. A later layer's quirk with the same id REPLACES the earlier one but\n * keeps its first-seen position, so a child can specialise an inherited\n * quirk (e.g. re-source it to its own companion guide) without reordering\n * the set. Non-colliding parent quirks survive additively.\n *\n * @internal\n */\nexport function mergeQuirks(\n parents: readonly X12Profile[],\n selfQuirks: readonly X12ProfileQuirk[],\n): readonly X12ProfileQuirk[] {\n const order: string[] = [];\n const byId = new Map<string, X12ProfileQuirk>();\n const layer = (quirks: readonly X12ProfileQuirk[]): void => {\n for (const q of quirks) {\n if (!byId.has(q.id)) order.push(q.id);\n byId.set(q.id, q); // later layers overwrite earlier\n }\n };\n for (const p of parents) layer(p.quirks);\n layer(selfQuirks);\n return Object.freeze(order.map((id) => byId.get(id) as X12ProfileQuirk));\n}\n\n/**\n * Merge the `description` scalar: child value wins when provided; otherwise\n * the LAST parent with a non-undefined description.\n *\n * @internal\n */\nexport function mergeDescription(\n parents: readonly X12Profile[],\n selfValue: string | undefined,\n): string | undefined {\n if (selfValue !== undefined) return selfValue;\n for (let i = parents.length - 1; i >= 0; i--) {\n const v = parents[i]?.description;\n if (v !== undefined) return v;\n }\n return undefined;\n}\n","/**\n * `defineProfile()` — public factory for building {@link\n * \"./types.js\".X12Profile} objects with validation + a structured\n * `describe()` attached. Mirrors hl7's `defineProfile` flow: validate name →\n * validate keys → validate self quirks → merge `extends` → re-validate the\n * merged set → assemble + freeze.\n *\n * Zero runtime deps. Boundary freeze is top-level only (the nested\n * `quirks` / `lineage` arrays are `readonly` at the type level; frozen at\n * runtime by the merge helpers).\n */\n\nimport { buildDescribe } from \"./describe.js\";\nimport { mergeDescription, mergeLineage, mergeQuirks, normaliseParents } from \"./merge.js\";\nimport type { X12Profile, X12ProfileSpec } from \"./types.js\";\nimport { validateOptionKeys, validateProfileName, validateQuirks } from \"./validate.js\";\n\n/**\n * Build a readonly {@link X12Profile} from a validated spec. Invalid input\n * throws {@link \"./errors.js\".X12ProfileError} with an actionable message:\n * missing/empty name, unknown option key (with a typo hint), or a quirk that\n * violates the locked hard rule (missing `fixture`, bad `effect`, unknown\n * `expectedWarnings` code).\n *\n * `extends` composes parent profiles: lineage flattens + dedupes, quirks\n * merge by id (child wins on collision, non-colliding parent quirks survive),\n * and `description` is last-wins.\n *\n * @example\n * ```ts\n * import { defineProfile } from \"@cosyte/x12\";\n * const availity = defineProfile({\n * name: \"availity\",\n * description: \"Availity clearinghouse 835 ERA conventions\",\n * quirks: [\n * {\n * id: \"payer-loop-ref-2u\",\n * effect: \"adds\",\n * summary: \"Payer Loop 1000A carries a REF*2U additional payer identifier.\",\n * fixture: \"remit/835-availity-quirk.edi\",\n * sourceCategory: \"Availity 835 ERA companion guide — payer-loop REF\",\n * },\n * ],\n * });\n * availity.name; // \"availity\"\n * availity.lineage; // [\"availity\"]\n * availity.describe().adds; // [{ id: \"payer-loop-ref-2u\", ... }]\n * ```\n */\nexport function defineProfile(opts: X12ProfileSpec): X12Profile {\n // Fail-fast: name first so downstream throws can name the offending profile.\n validateProfileName(opts);\n validateOptionKeys(opts);\n\n // Pre-merge: validate self quirks in isolation so a hard-rule violation\n // surfaces with the offending profile's own name (not the composed lineage).\n const selfQuirks = opts.quirks ?? [];\n validateQuirks(selfQuirks, opts.name);\n\n // Compose `extends`.\n const parents = normaliseParents(opts.extends);\n const lineage = mergeLineage(parents, opts.name);\n const quirks = mergeQuirks(parents, selfQuirks);\n const description = mergeDescription(parents, opts.description);\n\n // Post-merge re-validation — catches a rogue parent (a hand-crafted\n // X12Profile bypassing defineProfile whose quirks violate the rules) and\n // id collisions introduced by the merge.\n validateQuirks(quirks, opts.name);\n\n // exactOptionalPropertyTypes: conditionally assign optional `description`.\n type Mutable<T> = { -readonly [K in keyof T]?: T[K] };\n const profile: Mutable<X12Profile> = {\n name: opts.name,\n lineage,\n quirks,\n };\n if (description !== undefined) profile.description = description;\n\n // `describe()` closes over the assembled profile so it always reflects the\n // fully-merged state.\n const finalised = profile as X12Profile;\n profile.describe = () => buildDescribe(finalised);\n\n return Object.freeze(profile) as X12Profile;\n}\n","/**\n * `partitionWarnings()` — the one behavioural hook a v1 x12 profile carries.\n *\n * The lenient parser absorbs most corpus deviations with zero warnings, so a\n * profile is primarily descriptive. Where a deviation DOES surface a warning,\n * a profile lets a consumer separate the warnings it expects (because a known\n * partner quirk produces them) from the ones it does not — so an integration\n * can alert only on the genuinely unexpected. The split is driven by the\n * union of each quirk's `expectedWarnings` (see `describe().expectedWarnings`).\n *\n * Pure function, zero deps. NEVER mutates the input warnings.\n */\n\nimport type { X12ParseWarning } from \"../parser/warnings.js\";\n\nimport { collectExpectedWarnings } from \"./validate.js\";\nimport type { X12Profile } from \"./types.js\";\n\n/**\n * The result of {@link partitionWarnings}: warnings split into those a\n * profile leads you to EXPECT and those it does not.\n *\n * @example\n * ```ts\n * import type { X12WarningPartition } from \"@cosyte/x12\";\n * declare const p: X12WarningPartition;\n * p.unexpected.length; // alert only on these\n * ```\n */\nexport interface X12WarningPartition {\n readonly expected: readonly X12ParseWarning[];\n readonly unexpected: readonly X12ParseWarning[];\n}\n\n/**\n * Split a parse's warnings against a profile's expected-warning union. A\n * warning whose `code` is in the profile's `expectedWarnings` lands in\n * `expected`; everything else lands in `unexpected`. Order within each bucket\n * preserves the input order.\n *\n * @example\n * ```ts\n * import { parseX12, partitionWarnings, profiles } from \"@cosyte/x12\";\n * const ix = parseX12(raw, { profile: profiles.availity });\n * const { expected, unexpected } = partitionWarnings(ix.warnings, profiles.availity);\n * if (unexpected.length > 0) flagForReview(unexpected);\n * ```\n */\nexport function partitionWarnings(\n warnings: readonly X12ParseWarning[],\n profile: X12Profile,\n): X12WarningPartition {\n const expectedCodes = new Set(collectExpectedWarnings(profile.quirks));\n const expected: X12ParseWarning[] = [];\n const unexpected: X12ParseWarning[] = [];\n for (const w of warnings) {\n if (expectedCodes.has(w.code)) expected.push(w);\n else unexpected.push(w);\n }\n return Object.freeze({\n expected: Object.freeze(expected),\n unexpected: Object.freeze(unexpected),\n });\n}\n","/**\n * Built-in `availity` profile — common Availity clearinghouse 835 ERA\n * conventions. Authored via the public `defineProfile()` API; use via\n * `parseX12(raw, { profile: profiles.availity })`.\n *\n * Every quirk is grounded in `test/fixtures/remit/835-availity-quirk.edi`,\n * the Tier-2 fixture that demonstrates the payer-routed REF additions (see\n * `test/transactions-remit-835.test.ts` \"Tier-2 Availity quirk\"). The parser\n * already tolerates these losslessly with zero warnings — the profile makes\n * the convention explicit and documented rather than relying on silent\n * leniency.\n */\n\nimport { defineProfile } from \"./define.js\";\n\n/**\n * Built-in Availity 835 ERA profile. See file header for grounding; use via\n * `parseX12(raw, { profile: profiles.availity })`.\n *\n * @example\n * ```ts\n * import { parseX12, profiles } from \"@cosyte/x12\";\n * const ix = parseX12(raw, { profile: profiles.availity });\n * ix.profile?.describe().adds.map((q) => q.id);\n * ```\n */\nexport const availity = defineProfile({\n name: \"availity\",\n description: \"Availity clearinghouse 835 ERA conventions — payer-routed REF segment additions\",\n quirks: [\n {\n id: \"payer-loop-ref-2u\",\n effect: \"adds\",\n summary:\n \"Payer Loop 1000A carries an additional REF*2U payer-identification segment alongside the N1*PR.\",\n fixture: \"remit/835-availity-quirk.edi\",\n sourceCategory: \"Availity 835 ERA companion guide — payer-loop REF*2U routing identifier\",\n },\n {\n id: \"service-line-ref-f8\",\n effect: \"adds\",\n summary:\n \"Service line (Loop 2110) carries a REF*F8 original-reference identifier for clearinghouse trace-back.\",\n fixture: \"remit/835-availity-quirk.edi\",\n sourceCategory: \"Availity 835 ERA companion guide — service-line REF*F8 original reference\",\n },\n ],\n});\n","/**\n * Built-in `bcbsCommon` profile — the lowest-common-denominator BCBS\n * envelope quirk. Authored via the public `defineProfile()` API; use via\n * `parseX12(raw, { profile: profiles.bcbsCommon })`.\n *\n * Each BCBS plan still ships its own companion guide — this is a documented\n * starting point, not a complete BCBS edit set. The one quirk here is\n * grounded in `test/fixtures/envelope/bcbs-subelement.edi` (see\n * `test/parser-envelope.test.ts`), which uses a backslash component separator\n * (ISA-16 = `\\`) instead of the common `:`. The parser detects ISA-16 from\n * its fixed byte position and handles this losslessly; the profile documents\n * that BCBS senders may diverge from the `:` most consumers assume.\n */\n\nimport { defineProfile } from \"./define.js\";\n\n/**\n * Built-in BCBS common-denominator profile. See file header for grounding;\n * use via `parseX12(raw, { profile: profiles.bcbsCommon })`.\n *\n * @example\n * ```ts\n * import { parseX12, profiles } from \"@cosyte/x12\";\n * const ix = parseX12(raw, { profile: profiles.bcbsCommon });\n * ix.profile?.describe().relaxes.map((q) => q.id);\n * ```\n */\nexport const bcbsCommon = defineProfile({\n name: \"bcbsCommon\",\n description:\n \"Lowest-common-denominator BCBS envelope quirks — a documented starting point, not a complete plan-specific edit set\",\n quirks: [\n {\n id: \"backslash-component-separator\",\n effect: \"relaxes\",\n summary:\n \"ISA-16 component (sub-element) separator is a backslash `\\\\`, not the commonly-assumed `:`.\",\n fixture: \"envelope/bcbs-subelement.edi\",\n sourceCategory: \"BCBS plan companion guides — non-colon ISA-16 sub-element separator\",\n },\n ],\n});\n","/**\n * Public barrel for the `@cosyte/x12` profile subsystem (Phase 9). Assembles\n * the `profiles` namespace object and re-exports the public profile API:\n * `defineProfile`, `setDefaultProfile`, `getDefaultProfile`,\n * `partitionWarnings`, the `X12ProfileError` class, and the supporting types.\n *\n * Contract (mirrors hl7): individual built-ins are NOT top-level named\n * exports — consumers reach them via `profiles.availity`, `profiles.bcbsCommon`\n * (\"availity\" is too generic for a top-level export).\n *\n * **Shipped built-ins are intentionally few.** Per the locked hard rule, a\n * built-in profile may only ship quirks grounded in a real Tier-2 fixture\n * demonstrating the deviation. The roadmap's `changeHealthcare`, `medicareFFS`,\n * `waystar`, and `trizetto` are DEFERRED — the current corpus has no fixture\n * exhibiting a parser-relevant deviation unique to them (the Medicare fixtures\n * are canonical `:` baselines, not deviations). They land as corpus accrues;\n * see KNOWN-LIMITATIONS.md.\n */\n\nexport { defineProfile } from \"./define.js\";\nexport { setDefaultProfile, getDefaultProfile } from \"./default.js\";\nexport { partitionWarnings } from \"./apply.js\";\nexport type { X12WarningPartition } from \"./apply.js\";\nexport { X12ProfileError } from \"./errors.js\";\nexport type {\n X12Profile,\n X12ProfileDescription,\n X12ProfileEffect,\n X12ProfileQuirk,\n X12ProfileSpec,\n} from \"./types.js\";\n\nimport { availity } from \"./availity.js\";\nimport { bcbsCommon } from \"./bcbsCommon.js\";\n\n/**\n * Namespace object exposing the shipped built-in profiles. Each is authored\n * via the public `defineProfile()` API and grounded in a real Tier-2 fixture.\n *\n * @example\n * ```ts\n * import { parseX12, profiles } from \"@cosyte/x12\";\n * const ix = parseX12(raw, { profile: profiles.availity });\n * ix.profile?.name; // \"availity\"\n * ```\n */\nexport const profiles = Object.freeze({\n availity,\n bcbsCommon,\n}) as {\n readonly availity: typeof availity;\n readonly bcbsCommon: typeof bcbsCommon;\n};\n","/**\n * Public entry point for the `@cosyte/x12` package. Phase 1 lands the\n * envelope decoder (ISA / GS / GE / IEA + delimiter detection); Phase 2+\n * adds segment/element/composite decode, the warning-code registry\n * expansion, and the public `defineLoopSpec`. Per-transaction helpers\n * (`get835`, `get837Claims`, ...) arrive in Phases 4+.\n */\n\n/**\n * Library version string, synced with `package.json#version` at build\n * time by downstream phases. Exported now so consumers (and the\n * type-check pipeline) have at least one symbol to resolve through the\n * `exports` map.\n *\n * @example\n * ```ts\n * import { VERSION } from \"@cosyte/x12\";\n * console.log(VERSION);\n * ```\n */\nexport const VERSION: string = \"0.0.1\";\n\n// Phase 1 — envelope parser surface.\nexport { parseX12 } from \"./parser/index.js\";\nexport { detectDelimiters, DELIMITER_POSITIONS, ISA_MIN_LENGTH } from \"./parser/delimiters.js\";\nexport { FATAL_CODES, X12ParseError } from \"./parser/errors.js\";\nexport type { X12FatalCode } from \"./parser/errors.js\";\nexport {\n WARNING_CODES,\n controlNumberMismatch,\n danglingReleaseChar,\n groupCountMismatch,\n hlParentLevelInvalid,\n hlParentMismatch,\n missingGe,\n missingIea,\n missingRequiredLoop,\n missingSe,\n pre005010,\n remitBalanceMismatch,\n segmentCountMismatch,\n trailingGarbage,\n transactionCountMismatch,\n unexpectedSegment,\n unknown837Variant,\n unknownCarc,\n unknownClaimStatus,\n unknownClaimStatusCategory,\n unknownHiQualifier,\n unknownMaintenanceType,\n unknownRarc,\n} from \"./parser/warnings.js\";\nexport type { X12ParseWarning, X12WarningCode } from \"./parser/warnings.js\";\nexport type {\n Delimiters,\n GeSegment,\n GsSegment,\n IeaSegment,\n IsaSegment,\n OnWarningCallback,\n Ta1Segment,\n X12FunctionalGroup,\n X12Interchange,\n X12ParseOptions,\n X12Position,\n X12TransactionSet,\n} from \"./parser/types.js\";\n\n// Phase 2 — segment / element / composite / repetition decode surface.\nexport { escapeRelease, RELEASE_CHAR, unescapeRelease } from \"./parser/release.js\";\nexport {\n collectElementValues,\n componentOptional,\n decodeSegment,\n elementDecimal,\n elementDecimalOrZero,\n elementOptional,\n elementValue,\n getAllSegmentValues,\n getSegmentValue,\n} from \"./parser/segment.js\";\nexport type { X12Segment } from \"./parser/segment.js\";\n\n// Phase 2 — loop-spec authoring surface (dogfooded by built-in transaction\n// specs in Phases 3+).\nexport { defineLoopSpec, LoopSpecDefinitionError } from \"./loops/define.js\";\nexport type { DefineLoopSpecInput } from \"./loops/define.js\";\nexport type { LoopMax, LoopSegmentSpec, LoopSpec, LoopUsage } from \"./loops/types.js\";\n\n// Phase 4 — money + bundled code-list snapshots used by 835.\nexport { X12Decimal } from \"./decimal.js\";\nexport {\n CARC,\n CLAIM_ADJUSTMENT_GROUP_CODES,\n CLAIM_STATUS_CATEGORY_CODES,\n CLAIM_STATUS_CODES,\n CLP_STATUS,\n MAINTENANCE_TYPE_CODES,\n RARC,\n HI_QUALIFIERS,\n SERVICE_TYPE_CODES,\n isClaimAdjustmentGroupCode,\n isDiagnosisQualifier,\n isProcedureQualifier,\n lookupCarc,\n lookupClaimStatus,\n lookupClaimStatusCategory,\n lookupClpStatus,\n lookupMaintenanceType,\n lookupRarc,\n lookupServiceType,\n resolveHiQualifier,\n type ClaimAdjustmentGroupCode,\n type CodeListEntry,\n type CodeListMeta,\n type CodeListSnapshot,\n type X12HiCategory,\n type X12HiCodeSystem,\n type X12HiQualifier,\n} from \"./code-lists/index.js\";\n\n// Phase 4 — 835 Healthcare Claim Payment/Advice (ERA) surface (TR3 005010X221A1).\nexport {\n REMIT_835_BUILD_ERROR_CODES,\n REMIT_835_LOOP_1000A,\n REMIT_835_LOOP_1000B,\n REMIT_835_LOOP_2000,\n REMIT_835_LOOP_2100,\n REMIT_835_LOOP_2110,\n Remit835BuildError,\n build835,\n checkClaimBalance,\n checkRemitTotalBalance,\n checkServiceLineBalance,\n get835,\n type Build835AddressSpec,\n type Build835AdjustmentSpec,\n type Build835AmountSpec,\n type Build835ClaimSpec,\n type Build835ContactSpec,\n type Build835EnvelopeSpec,\n type Build835PartySpec,\n type Build835PaymentSpec,\n type Build835PersonSpec,\n type Build835ProviderAdjustmentSpec,\n type Build835ProviderSpec,\n type Build835ReferenceSpec,\n type Build835RemarkSpec,\n type Build835ServiceLineSpec,\n type Build835Spec,\n type Build835TraceSpec,\n type Remit835BuildErrorCode,\n type X12RemitAddress,\n type X12RemitAdjustment,\n type X12RemitAmount,\n type X12RemitClaim,\n type X12RemitContact,\n type X12RemitParty,\n type X12RemitPaymentHeader,\n type X12RemitPerson,\n type X12RemitProvider,\n type X12RemitProviderAdjustment,\n type X12RemitReference,\n type X12RemitRemark,\n type X12RemitServiceLine,\n type X12RemitTrace,\n type X12Remittance,\n} from \"./transactions/remit/index.js\";\n\n// Phase 5 — 837 Healthcare Claim surface (TR3s 005010X222A2 / X223A3 / X224A2).\nexport {\n CLAIM_837D_LOOP_2000A,\n CLAIM_837D_LOOP_2300,\n CLAIM_837D_LOOP_2400,\n CLAIM_837I_LOOP_2000A,\n CLAIM_837I_LOOP_2300,\n CLAIM_837I_LOOP_2400,\n CLAIM_837P_LOOP_2000A,\n CLAIM_837P_LOOP_2300,\n CLAIM_837P_LOOP_2400,\n CLAIM_837P_LOOP_2410,\n CLAIM_837_LOOP_1000A,\n CLAIM_837_LOOP_1000B,\n CLAIM_837_LOOP_2010AA,\n CLAIM_837_LOOP_2010BA,\n CLAIM_837_LOOP_2010BB,\n CLAIM_837_LOOP_2010CA,\n CLAIM_837_LOOP_2430,\n CLAIM_837_BUILD_ERROR_CODES,\n Claim837BuildError,\n HL_LEVEL_CODES,\n NM1_QUALIFIERS,\n build837D,\n build837I,\n build837P,\n get837Claims,\n type Build837AddressSpec,\n type Build837AdjudicationSpec,\n type Build837AdjustmentSpec,\n type Build837AmountSpec,\n type Build837BillingProviderSpec,\n type Build837ClaimSpec,\n type Build837ContactSpec,\n type Build837DateSpec,\n type Build837DrugSpec,\n type Build837EntitySpec,\n type Build837EnvelopeSpec,\n type Build837HiCodeSpec,\n type Build837NoteSpec,\n type Build837OtherSubscriberSpec,\n type Build837PatientSpec,\n type Build837ReferenceSpec,\n type Build837ServiceLineBaseSpec,\n type Build837ServiceLineDentalSpec,\n type Build837ServiceLineInstitutionalSpec,\n type Build837ServiceLineProfessionalSpec,\n type Build837ServiceLineSpec,\n type Build837Spec,\n type Build837SubscriberInfoSpec,\n type Build837SubscriberSpec,\n type Build837ToothSpec,\n type Claim837BuildErrorCode,\n type X12Claim,\n type X12Claim837Variant,\n type X12ClaimAddress,\n type X12ClaimAmount,\n type X12ClaimContact,\n type X12ClaimDate,\n type X12ClaimEntity,\n type X12ClaimHiCode,\n type X12ClaimMember,\n type X12ClaimNote,\n type X12ClaimReference,\n type X12HierarchicalLevel,\n type X12LineAdjudication,\n type X12LineDrug,\n type X12OtherSubscriber,\n type X12SubscriberInfo,\n type X12ToothInformation,\n type X12_837ServiceLine,\n type X12_837ServiceLineDental,\n type X12_837ServiceLineInstitutional,\n type X12_837ServiceLineProfessional,\n type X12_837Submission,\n} from \"./transactions/claim/index.js\";\n\n// Phase 6 — 271 Health Care Eligibility Benefit Response surface (TR3 005010X279A1).\nexport {\n ELIGIBILITY_271_BUILD_ERROR_CODES,\n ELIGIBILITY_271_LOOP_2000A,\n ELIGIBILITY_271_LOOP_2000B,\n ELIGIBILITY_271_LOOP_2000C,\n ELIGIBILITY_271_LOOP_2000D,\n ELIGIBILITY_271_LOOP_2100C,\n ELIGIBILITY_271_LOOP_2100D,\n ELIGIBILITY_271_LOOP_2110,\n Eligibility271BuildError,\n build271,\n get271Eligibility,\n type Build271AddressSpec,\n type Build271BenefitSpec,\n type Build271DateSpec,\n type Build271DependentSpec,\n type Build271EntitySpec,\n type Build271EnvelopeSpec,\n type Build271InformationReceiverSpec,\n type Build271InformationSourceSpec,\n type Build271MemberSpec,\n type Build271ReferenceSpec,\n type Build271ServiceTypeSpec,\n type Build271Spec,\n type Build271SubscriberSpec,\n type Build271TraceSpec,\n type Eligibility271BuildErrorCode,\n type X12Eligibility,\n type X12EligibilityAddress,\n type X12EligibilityBenefit,\n type X12EligibilityDate,\n type X12EligibilityDependent,\n type X12EligibilityEntity,\n type X12EligibilityMember,\n type X12EligibilityReference,\n type X12EligibilityServiceType,\n type X12EligibilitySubscriber,\n type X12EligibilityTrace,\n} from \"./transactions/eligibility/index.js\";\n\n// Phase 6 — 277 / 277CA Claim Status surface (TR3s 005010X212 / X214).\nexport {\n CLAIM_STATUS_277_BUILD_ERROR_CODES,\n ClaimStatus277BuildError,\n STATUS_277_LOOP_2000A,\n STATUS_277_LOOP_2000B,\n STATUS_277_LOOP_2000C,\n STATUS_277_LOOP_2000D,\n STATUS_277_LOOP_2000E,\n STATUS_277_LOOP_2200,\n STATUS_277_LOOP_2220,\n build277,\n build277CA,\n get277CADisposition,\n get277Status,\n type Build277ClaimSpec,\n type Build277DateSpec,\n type Build277DependentSpec,\n type Build277EntitySpec,\n type Build277EnvelopeSpec,\n type Build277InformationReceiverSpec,\n type Build277InformationSourceSpec,\n type Build277MemberSpec,\n type Build277ProviderSpec,\n type Build277ReferenceSpec,\n type Build277ServiceLineSpec,\n type Build277Spec,\n type Build277StatusCodeSpec,\n type Build277StatusSpec,\n type Build277SubscriberSpec,\n type Build277TraceSpec,\n type ClaimStatus277BuildErrorCode,\n type X12ClaimStatus,\n type X12ClaimStatusResponse,\n type X12ServiceLineStatus,\n type X12StatusCode,\n type X12StatusDate,\n type X12StatusEntity,\n type X12StatusInfo,\n type X12StatusMember,\n type X12StatusReference,\n type X12StatusTrace,\n} from \"./transactions/status/index.js\";\n\n// Phase 7 — 820 Premium Payment surface (TR3 005010X218).\nexport {\n PREMIUM_820_LOOP_1000A,\n PREMIUM_820_LOOP_1000B,\n PREMIUM_820_LOOP_2000A,\n PREMIUM_820_LOOP_2100A,\n PREMIUM_820_LOOP_2300A,\n PREMIUM_820_LOOP_2310A,\n PREMIUM_820_BUILD_ERROR_CODES,\n Premium820BuildError,\n build820,\n get820Payments,\n type Build820AddressSpec,\n type Build820AdjustmentSpec,\n type Build820DateSpec,\n type Build820EntitySpec,\n type Build820EnvelopeSpec,\n type Build820OpenItemSpec,\n type Build820PartySpec,\n type Build820PaymentSpec,\n type Build820PersonSpec,\n type Build820ReferenceSpec,\n type Build820RemittanceSpec,\n type Build820Spec,\n type Build820TraceSpec,\n type Premium820BuildErrorCode,\n type X12PremiumAddress,\n type X12PremiumAdjustment,\n type X12PremiumDate,\n type X12PremiumEntity,\n type X12PremiumOpenItem,\n type X12PremiumParty,\n type X12PremiumPaymentHeader,\n type X12PremiumPayments,\n type X12PremiumPerson,\n type X12PremiumReference,\n type X12PremiumRemittance,\n type X12PremiumTrace,\n} from \"./transactions/premium/index.js\";\n\n// Phase 7 — 834 Benefit Enrollment and Maintenance surface (TR3 005010X220A1).\nexport {\n ENROLLMENT_834_LOOP_1000A,\n ENROLLMENT_834_LOOP_1000B,\n ENROLLMENT_834_LOOP_2000,\n ENROLLMENT_834_LOOP_2100A,\n ENROLLMENT_834_LOOP_2300,\n ENROLLMENT_834_LOOP_2320,\n ENROLLMENT_834_BUILD_ERROR_CODES,\n Enrollment834BuildError,\n build834,\n get834Enrollments,\n get834Header,\n type Build834AddressSpec,\n type Build834AmountSpec,\n type Build834CoordinationOfBenefitsSpec,\n type Build834CoverageSpec,\n type Build834DateSpec,\n type Build834EnvelopeSpec,\n type Build834HeaderSpec,\n type Build834MemberNameSpec,\n type Build834MemberSpec,\n type Build834PartySpec,\n type Build834ReferenceSpec,\n type Build834Spec,\n type Enrollment834BuildErrorCode,\n type X12CoordinationOfBenefits,\n type X12Enrollment,\n type X12EnrollmentAddress,\n type X12EnrollmentAmount,\n type X12EnrollmentDate,\n type X12EnrollmentHeader,\n type X12EnrollmentMember,\n type X12EnrollmentParty,\n type X12EnrollmentReference,\n type X12HealthCoverage,\n} from \"./transactions/enrollment/index.js\";\n\n// Phase 7 — 278 Health Care Services Review surface (request TR3 005010X217 /\n// response TR3 005010X216).\nexport {\n AUTH_278_BUILD_ERROR_CODES,\n AUTH_278_LOOP_2000A,\n AUTH_278_LOOP_2000B,\n AUTH_278_LOOP_2000C,\n AUTH_278_LOOP_2000D,\n AUTH_278_LOOP_2000E,\n AUTH_278_LOOP_2000F,\n ServicesReview278BuildError,\n build278Request,\n build278Response,\n get278Request,\n get278Response,\n type Build278DateSpec,\n type Build278DecisionSpec,\n type Build278DependentSpec,\n type Build278DiagnosisSpec,\n type Build278EntitySpec,\n type Build278EnvelopeSpec,\n type Build278HeaderSpec,\n type Build278MemberSpec,\n type Build278ReferenceSpec,\n type Build278ReviewSpec,\n type Build278Spec,\n type Build278SubscriberSpec,\n type Build278TraceSpec,\n type ServicesReview278BuildErrorCode,\n type X12AuthDate,\n type X12AuthDiagnosis,\n type X12AuthEntity,\n type X12AuthHeader,\n type X12AuthMember,\n type X12AuthReference,\n type X12AuthTrace,\n type X12ReviewDecision,\n type X12ServiceReview,\n type X12ServicesReview,\n} from \"./transactions/auth/index.js\";\n\n// Phase 6 — shared HL hierarchy primitive (271 / 277 / 277CA walkers).\nexport type { X12Hl } from \"./transactions/shared/hl.js\";\n\n// Phase 3 — acknowledgments surface: parse / build 999 (005010X231A1) and\n// envelope-level TA1 as pure functions. See `src/transactions/ack/index.ts`\n// for the full barrel.\nexport {\n ACK_BUILD_ERROR_CODES,\n AckBuildError,\n IK3_SYNTAX_ERROR_CODES,\n IK4_SYNTAX_ERROR_CODES,\n TA1_ACK_CODES,\n TA1_NOTE_CODES,\n X12_ACK_DISPOSITION_CODES,\n build999,\n buildTA1,\n isAcceptDisposition,\n parse999,\n parseTA1,\n type AckBuildErrorCode,\n type Build999ElementErrorSpec,\n type Build999EnvelopeSpec,\n type Build999FunctionalGroupSpec,\n type Build999SegmentErrorSpec,\n type Build999Spec,\n type Build999TransactionResponseSpec,\n type BuildTA1Options,\n type BuildTA1Spec,\n type Ik304Code,\n type Ik403Code,\n type Ta1AckCode,\n type Ta1NoteCode,\n type X12Ack999,\n type X12Ack999Ak1,\n type X12Ack999Ak2,\n type X12Ack999Ak9,\n type X12Ack999ElementNote,\n type X12Ack999Ik3,\n type X12Ack999Ik4,\n type X12Ack999Ik4Position,\n type X12Ack999Ik5,\n type X12Ack999SegmentNote,\n type X12Ack999TransactionResponse,\n type X12AckDispositionCode,\n type X12AckTA1,\n} from \"./transactions/ack/index.js\";\n\n// Phase 8 — spec-clean serializer (the emit half of the parser).\nexport { serializeX12 } from \"./serialize/index.js\";\nexport type { SerializeOptions } from \"./serialize/index.js\";\n\n// Phase 8 — general-purpose, segment-level interchange builder. The\n// domain-specific builders (build835, build837P, …) layer on top of this.\nexport { buildInterchange, X12_BUILD_ERROR_CODES, X12BuildError } from \"./builder/index.js\";\nexport type {\n FunctionalGroupSpec,\n InterchangeSpec,\n SegmentSpec,\n TransactionSetSpec,\n X12BuildErrorCode,\n} from \"./builder/index.js\";\n\n// Phase 9 — trading-partner / companion-guide profile system. Built-ins are\n// reached via the `profiles` namespace (not top-level), each grounded in a\n// real Tier-2 fixture per the locked hard rule.\nexport {\n defineProfile,\n getDefaultProfile,\n partitionWarnings,\n profiles,\n setDefaultProfile,\n X12ProfileError,\n} from \"./profiles/index.js\";\nexport type {\n X12Profile,\n X12ProfileDescription,\n X12ProfileEffect,\n X12ProfileQuirk,\n X12ProfileSpec,\n X12WarningPartition,\n} from \"./profiles/index.js\";\n"]}