| “We sent it.” Nothing in the TMS. | The interchange was rejected at the envelope, or no acknowledgement ever went back, and nobody is watching the loop. | Reconcile every interchange received against the acknowledgements sent. Alert on a missing or negative ack, not on a missing load. |
| The same load appears twice. | A resend with fresh control numbers, or a change tender processed as a new one. | Idempotency on partner, shipment id and purpose code. Changes and cancellations update the load that already exists. |
| A cancelled load keeps dispatching. | The parser only ever handled the original purpose code, so cancellations fall on the floor. | The purpose code drives the write path, and a cancellation for an unknown shipment is queued rather than dropped. |
| The shipper thinks a truck is coming. It isn’t. | A functional acknowledgement was read as a business acceptance. | Syntax and acceptance are separate states. A tender is accepted only on a response carrying that partner’s accept code. |
| Declines read as accepts. | The response code list differs between the standard and the partner’s own guide. | Code lists are per-partner configuration, loaded from their guide and tested against their samples before go-live. |
| Tracking events arrive out of order, or on the wrong day. | Status timestamps are local time with no offset, and the stream is ordered by arrival instead. | Normalise every event to UTC using the stop’s own zone, keep the original, and order by event time. |
| Some status updates never show. | The partner sends codes outside the subset their own guide lists, and unmapped codes are discarded. | Unknown codes land as unclassified with the raw segment attached, visible in a queue a human clears. |
| Every new partner takes weeks. | Delimiters, envelope ids, qualifiers and code lists were hard-coded for the first partner. | One profile per partner holds all of it, so onboarding is configuration and a sample run, not a release. |
| References don’t match the customer’s system. | Reference segments were read by position, and each partner orders them differently. | Map by qualifier into named fields, and keep the full raw set for audit and disputes. |
| Rejects nobody can explain. | Acknowledgement error codes are logged where no human looks. | Every negative acknowledgement is decoded to plain English — segment, element, expected value — and routed to the partner contact. |