Skip to main content
Version: v0.0.10

Spec notes: Telecom compound + COB + DUR depth + prior-auth

These notes record exactly what the @cosyte/ncpdp/telecom request-side depth readers decode, where the structural facts come from, and what they deliberately do not do. No NCPDP-copyrighted prose is reproduced here. Field/segment labels below are our own short paraphrases; the codes and field-number designators are factual identifiers from the NCPDP Telecommunication Standard vD.0 and the NCPDP Data Dictionary (paywalled), recorded against our own paraphrased names.

What these readers do​

Adds four reads over an already-parsed transaction (three on the request side, one spanning both):

  • Compound (segment 10), compound(t): the multi-ingredient detail of a compounded claim, every ingredient surfaced and none dropped or merged.
  • Coordination of Benefits / Other Payments (request segment 05), cobOtherPayments(t): each prior payer with its amount-paid and patient-responsibility money rows.
  • Response COB / Other Payers (response segment 28), responseCob(t): the next-payer routing blocks the payer returns.
  • DUR/PPS request depth (segment 08), requestDur(t): the submitted DUR/PPS interactions; plus the response DUR alert (segment 24) gains professional-service / result / level-of-effort depth.
  • Prior Authorization (segment 12), priorAuthorization(t): presence + submitted type/number, presence only, never adjudicated.

All are lenient reads over the existing tokenizer; no new fatal conditions are introduced.

Segments + fields modeled​

Segment Identification (111-AM) codes paraphrased: 05 Coordination of Benefits/Other Payments, 08 DUR/PPS, 10 Compound, 12 Prior Authorization, 28 Response COB. A code outside the recognized set is preserved verbatim and warned (NCPDP_TELECOM_UNKNOWN_SEGMENT).

  • Compound (10): EF Dosage Form Description Code (450-EF), EG Dispensing Unit Form Indicator (451-EG), EC Compound Ingredient Component Count (447-EC); then per ingredient, repeating: RE Compound Product ID Qualifier (488-RE), TE Compound Product ID (489-TE), ED Compound Ingredient Quantity (448-ED, implied 3-place decimal), EE Compound Ingredient Drug Cost (449-EE, money), UE Compound Ingredient Basis of Cost Determination (490-UE).
  • Request COB / Other Payments (05): 4C Coordination of Benefits/Other Payments Count (337-4C); then per other payer, repeating: 5C Other Payer Coverage Type (338-5C), 6C Other Payer ID Qualifier (339-6C), 7C Other Payer ID (340-7C), E8 Other Payer Date (443-E8), and the money rows HC Other Payer Amount Paid Qualifier (342-HC) / DV Other Payer Amount Paid (431-DV), 6E Other Payer-Patient Responsibility Amount Qualifier (472-6E) / 7E Other Payer-Patient Responsibility Amount (473-7E).
  • Response COB / Other Payers (28): NT Other Payer ID Count (355-NT); then per other payer: 5C Other Payer Coverage Type (338-5C), 6C Other Payer ID Qualifier (339-6C), 7C Other Payer ID (340-7C), MH Other Payer Processor Control Number (991-MH), NU Other Payer Cardholder ID (356-NU), MJ Other Payer Group ID (992-MJ).
  • DUR/PPS request (08): per interaction, splitting on E4 Reason For Service Code (439-E4): E5 Professional Service Code (440-E5), E6 Result of Service Code (441-E6), 8E DUR/PPS Level of Effort (474-8E), J9 DUR Co-Agent ID Qualifier (475-J9), H7 DUR Co-Agent ID (476-H7).
  • Response DUR/PPS (24) depth: the existing alert reader now also lifts E5 Professional Service Code, E6 Result of Service Code, and 8E Level of Effort onto each alert.
  • Prior Authorization (12): EU Prior Authorization Type Code (461-EU), EV Prior Authorization Number Submitted (462-EV).

Safety-critical handling​

  • Every compound ingredient is surfaced, none dropped or merged. A new ingredient begins at each Compound Product ID Qualifier (488-RE) or Compound Product ID (489-TE), so an ingredient is recognized even when a sender omits the qualifier. When the declared component count (447-EC) disagrees with the number of decoded ingredients, the count is not trusted to drop or pad data. Every decoded ingredient is kept and the disagreement surfaces as NCPDP_TELECOM_COMPOUND_COUNT_MISMATCH.
  • Every COB money row is preserved with its amount. Each other-payer block repeats on the Other Payer Coverage Type (338-5C); the segment-level count field (337-4C / 355-NT) is metadata and does not seed a spurious block. Within a block, amount rows pair a qualifier with the next amount in wire order, so two payments are never collapsed. A declared other-payer count that disagrees with the decoded block count surfaces as NCPDP_TELECOM_COB_COUNT_MISMATCH; all decoded blocks are kept.
  • Money is never a float. Compound drug cost (449-EE) and the COB amount fields decode through the same telecomMoney path as the response pricing reader: implied 2-place decimal + zoned-decimal overpunch sign, interpreted string-wise with the verbatim source authoritative; unrecognized input is kept with isValid: false. Compound ingredient quantity (448-ED) uses the implied 3-place decimal string-wise (leading zeros stripped from the whole part, consistent with the money decode).
  • An unknown DUR reason is kept, never dropped. A Reason For Service code (439-E4) outside the recognized set is preserved verbatim with reasonKnown: false and surfaces as NCPDP_TELECOM_UNKNOWN_DUR_REASON. Professional-service / result codes are preserved verbatim with no bundled description (the standard's code list is paywalled; consumers bring their own).
  • Prior authorization is presence, not adjudication. priorAuthorization reports that the segment was submitted and echoes the type/number verbatim; it never decides whether a PA is valid, active, or honored. That is the payer's adjudication, returned in the response, not the request.

What these readers do NOT do​

  • No serializer/builder (emit), parse only.
  • No clinical interpretation of DUR/PPS codes beyond the bundled Reason-For-Service descriptions; the professional-service, result-of-service, and level-of-effort code meanings are not bundled.
  • No cross-segment reconciliation of the COB chain against the response pricing (e.g. verifying that other-payer amounts sum to a coordinated total).
  • Only the first transaction in a multi-transaction transmission is decoded.

PHI​

All fixtures are synthetic: no real BIN/PCN/NDC/cardholder/payer identifiers. Other Payer Cardholder ID (356-NU) is PHI-adjacent and is surfaced verbatim but never logged. Warnings and fatal errors carry only a stable code, a registry message selected by that code, and a position (byte offset + optional 2-char field id), never a field value.