Skip to main content

Acknowledgments (999 / TA1 / 277CA)

Outcome

You can read every layer of the ack chain — TA1 envelope, 999 functional, 277CA claim — interpret the codes correctly, and route the right kind of failure to the right kind of fix.

Prerequisites

Familiarity with the ack hierarchy and segment shapes (9.1 — Glossary, 9.3 — Acknowledgment codes).

The ack hierarchy

Each ack closes a different question:

AckQuestion it answers
TA1Did the interchange envelope parse?
999Did the 837's functional content (loops + segments) parse?
277CADid the payer accept individual claims into adjudication?

A 277CA "accepted" answer is not payment — adjudication can still deny later. The 277CA only confirms the claim got past the gate.

Reading a TA1

A TA1 arriving on its own (separate inbound) is parsed by packages/x12/src/inbound/ack-ta1.ts.

TA1*ICN0000123*250131*1234*A*000~
ElementValueMeaning
TA101ICN0000123Acknowledged interchange control number.
TA102250131Date.
TA1031234Time.
TA104AStatus — A accepted, E accepted with errors, R rejected.
TA105000Note code (see 9.3).

A TA104 = R is envelope-fatal — the partner could not parse what we sent. The most common cause is wrong sender / receiver authorization (TA105 = 003). No 999 will follow; the operator must fix and resubmit.

Reading a 999

The 999 has nested response loops:

ST*999*0001~
AK1*HC*1*005010X222A1~ (group response header)
AK2*837*0001*005010X222A1~ (transaction response header)
IK3*NM1*4*2010BB*8~ (segment with errors — NM1 at position 4 in 2010BB, code 8 = element errors follow)
IK4*1:1*1098*7~ (element errors — NM101 sub 1, ref 1098 reason 7 = invalid code value)
IK5*R~ (transaction rejected)
AK9*P*1*1*0~ (group partial — 1 of 1 transactions, 0 accepted)
SE*8*0001~
SegmentMeaning
AK1Group-level response header. Echoes our GS01 and GS08.
AK2Transaction-level response header. Echoes our ST01 and ST02.
IK3Segment-level error inside a transaction.
IK4Element-level error inside the segment named in the preceding IK3.
CTXContext — the loop and position the error refers to.
IK5Transaction response trailer — A/E/R/P.
AK9Group response trailer — A/E/R/P.

Read top-down: AK1 says "this group is for 837 005010X222A1". AK2 says "this transaction is 837 control number 0001". IK3 / IK4 cite the specific error. IK5 says transaction-level outcome. AK9 says group-level outcome.

The transaction's IK5 = R means the whole transaction was rejected — not just the segment cited. Most payers reject at first error.

Source: packages/x12/src/inbound/ack-999.ts.

Reading a 277CA

The 277CA is a 277 with BHT02 = 08. It carries one STC per claim, inside a 2200D loop that mirrors our outbound 2300:

ST*277*0001~
BHT*0085*08*REF12345*20260131*1200*TH~
HL*1**20*1~
NM1*PR*2*ANTHEM PPO*****PI*60054~
HL*2*1*21*1~
NM1*41*2*ACME BILLING*****46*1234567890~
HL*3*2*19*1~
NM1*85*2*ACME PROVIDER*****XX*9876543210~
HL*4*3*PT~
NM1*QC*1*DOE*JOHN****MI*ABC123~
TRN*2*PT123*1234567890~ (echoes our outbound CLM01)
STC*A2:20*20260131*WQ*250.00~ (status — accepted into adjudication, $250 acknowledged)
DTP*472*RD8*20260101-20260101~
REF*1K*ANTHEM-CC-99887766~ (payer claim control number — save this!)
SE*15*0001~
SegmentNotable elements
BHTBHT02 = 08 (claim ack); BHT04 is partner's reference.
HLHierarchy: payer → submitter → provider → patient.
NM1Same shape as 837 outbound — names echo.
TRNTRN02 echoes our outbound CLM01. The matching key.
STCSTC01 composite category : status : entity. The decision.
STC02Effective date.
STC04Total amount acknowledged.
REF*1KPayer claim control number — record this on the claim.

STC01 is the field every operator should know:

STC01MeaningWhat to do
A1:19:…Receipt acknowledgedWait for A2.
A2:20:…Accepted into adjudicationDone — wait for 835.
A3:21:…Returned as un-processableRead narrative; rebuild.
A6:21:…Rejected for missing infoRead narrative; supply the info; rebuild.
A7:…Rejected for invalid infoSame.
A8:…Rejected for relational errorCross-reference issue (e.g. POS doesn't match service location); rebuild.

STC03 carries the human-readable narrative. Read it before doing anything; it usually names the exact field at fault.

Full code lists: 9.3 — Acknowledgment codes.

Steps to consume an ack chain

The flow is automated; operator awareness for diagnosis only.

  1. Each inbound ack lands as a transaction record at /transactions with tx_type = TA1 / 999 / 277CA. The correlation ID points at the originating outbound (and through it, the source claim).

  2. The response-processor parses the ack and updates the source claim's status:

    • TA1 R → claim back to BUILT; error_details carries TA1 reason.
    • 999 A → claim stays SUBMITTED; waits for 277CA.
    • 999 R / 999 P with this transaction rejected → claim back to BUILT with structured IK3/IK4 errors.
    • 277CA A2 → claim advances to ACCEPTED; payer_claim_control_number recorded from REF*1K.
    • 277CA A3-A8 → claim advances to REJECTED; STC decoded into the error_details.
  3. Operator-side rcm-app surfaces the error details on the claim detail's Submission tab. The billing clerk handles the rest.

Validation

CheckExpected
Each inbound ack creates a transaction record with the correct correlationYes.
Source claim's status advances per ack outcomeYes.
payer_claim_control_number populated from REF*1KYes — confirm on the claim detail's Identifiers section.
277CA STC narrative visible to the billing clerkYes — surfaced on the claim's Submission tab.

Troubleshooting

SymptomCauseFix
Inbound ack received but claim's status does not changeCorrelation failed — the ack's TRN02 does not match a known outbound CLM01Open the inbound transaction; manually correlate via the admin endpoint.
999 IK5 = E but claim status stays SUBMITTEDE is "accepted with errors" — informational, claim should continueCorrect behavior; check that E is what you saw.
277CA never arrivesPartner does not produce 277CA, or 277CA inbound capability not enabledCheck capability; confirm with partner.
STC01 = A0 "forwarded" sits indefinitelyPartner is a clearinghouse passing through to the real payer; another ack will comeWait — the next-tier ack carries the real decision.

Next

3.5 — 276 / 277 claim status