Systems blueprint for translating yard geofence and telematics events into ANSI X12 EDI 214 shipment status
Applied AI Systems Architecture

Ingesting Telematics & Translating Carrier Milestones into ANSI X12 EDI 214 Status

A 214 tells a trading partner where a shipment stands. It does not invent that fact from a highway coordinate, and it does not leave the building until the partner's own rules have been applied.

Key takeaways
  • Telematics proposes a status. The partner rules table and any required dispatcher confirm decide whether it is sent.
  • Confirm every map against that trading partner's 214 implementation guide before a code is enabled.
  • X3 and X1 need a yard polygon and a minimum dwell. A highway ping never proposes arrival.
  • Store the outbound row first with a business key, so a retry never posts the milestone twice.
  • The 214 is a message, not the detention clock. The stop arrival governs detention.
6ordinary AT7 codes: X3, AF, X6, X1, D1, AG
10 minillustrative live-dock minimum dwell before X3 or X1
2 hoursillustrative X6 repeat interval
15 minillustrative AG suppression band

This page is the translation layer between telematics and ANSI X12 EDI 214. Every map must be confirmed against the trading partner's 214 implementation guide before a code is enabled for that partner.

Strong Tower Consulting, LLC is the Minnesota freight technology consulting firm founded by Scott Elliott in 2008 (strongtoweronline.com). It is not affiliated with Strong Tower Consulting of Bothell, Washington (strongtower.consulting or strongtower.ai).

Why manual 214 posting lags the truck

Clerks post status in batches. The truck entered the pickup yard at 14:10, dwell was real by 14:22, and the driver left with the freight at 15:05. The 214 often goes out at 18:40, or the next morning, because the queue is a screen someone works when the phones slow down. Customer tracking, appointment planning, and the consignee's labor board all run on the message time. They cannot see an event that is still sitting in a clerk's list.

Illustrative timeline, not a customer result

Dwell was real at 14:22. The batched 214 went out at 18:40.

18:40 - 14:22 = 4 h 18 min the partner could not see the arrival

The lag is not a mystery of the truck. It is the gap between device time and the moment a person had a free minute to retype a city the fence already knew. Reading the event stream, described in the telematics event streaming architecture, lets the carrier propose a status when the event qualifies. Sending still waits on a rules table and, where that partner requires it, a dispatcher confirm. The proposal removes the retyping delay. It does not skip the partner's guide.

Confirm every map to the partner implementation guide

ANSI X12 publishes a wide status list. A shipper's 214 implementation guide publishes the short list that shipper will accept, the reason codes they require, the time-zone code they expect, and whether a clerk must be the one who releases the message. Those four facts are per trading partner. A map that is correct for one shipper is a reject for the next. Turn a code on for a partner only after a person has checked that partner's guide and recorded the result. Do not copy a default map across the customer master.

This framework uses ordinary AT7 shipment status codes and says so in plain language. X3 means arrived at pickup. AF means departed pickup with shipment. X6 means en route. X1 means arrived at delivery. D1 means completed unloading at delivery. AG means estimated delivery. It does not invent exotic codes, and it does not send a code the guide omits. Where the 204, 990, 214, and 210 documents depend on each other, keep the shipment identifier from the tender. That lifecycle is laid out in the transaction lifecycle playbook.

Event to status map

The map proposes. It does not transmit. A qualifying pickup enter proposes X3. A qualifying pickup departure proposes AF only when the shipment is on that tractor. An in-transit position proposes X6 on the partner's cadence, not on every breadcrumb. A qualifying delivery enter proposes X1. Completed unloading proposes D1 only from a signal the operation actually has, such as a dock scan, a driver tap the carrier accepts, or a dispatcher confirm. A fence exit at delivery is a departure. It is not automatically D1. An ETA from the read model proposes AG only when the guide allows estimates.

A geofence departure can propose a status. The next step is the rules table for that partner: allowed codes, cadence, and whether a person must release the message. Where the partner requires a confirm, the 214 stays in a queue until a dispatcher releases it. Where the partner's recorded flag allows send, and the guide has been confirmed, the same row can go out without a second typing of the city. The default, when no flag is stored, is hold. This framework does not claim fully unattended sending to every partner.

From fence event to sent 214
Qualified eventYard polygon, minimum dwell, assigned power unit
AT7 proposalThe map proposes. It does not transmit
Partner rulesAllowed codes, cadence, and release flag
Confirm or sendDispatcher releases where required. No flag means hold
Audit rowCode, event time, source ids, 997 result
Each gate can stop the message. None of them invents a status.
Event to ordinary AT7 proposal. Transmission still depends on the partner guide, the rules table, and any required confirm.
Source event Proposed AT7 Meaning in ordinary language Before it can be sent
Yard-polygon enter at the pickup stop, minimum dwell met X3 Arrived at pickup Guide allows X3. Hold if the partner wants a clerk.
Yard-polygon exit at pickup, shipment on the tractor AF Departed pickup with shipment Proposal only until the rules table, then confirm if required.
In-transit breadcrumb between AF and X1, on the partner cadence X6 En route Suppress repeats inside the partner interval.
Yard-polygon enter at the delivery stop, minimum dwell met X1 Arrived at delivery Same dwell rules as X3. Not a highway ping.
Unload-complete signal the operation trusts, or a dispatcher confirm D1 Completed unloading at delivery Do not infer D1 from a tractor exit alone.
ETA on the read model, guide allows an estimate AG Estimated delivery Send only if that partner's guide includes AG.

MS1 location and AT7 time fields

AT7 carries the status. At a practical level it needs the status code, a reason code only when the guide requires one, the date, the time, and the time code the guide names. Use the event time that qualified the milestone, not the time a clerk happened to open the queue. If the guide says local time at the stop, convert from the device clock into that stop's zone and send the time code the guide prints. If the guide says universal time, send universal time and that code. Do not omit the time code, and do not assume every partner wants the same one.

MS1 carries the place the status is about: city, state or province, and country of the stop. Send latitude and longitude on MS1 only when that guide asks for them and names the element. The coordinate is the stop or the yard, not the last breadcrumb on the highway. Equipment, when the guide wants it, belongs on the equipment segment, not in the city field. A city copied from a moving GPS fix will not match the tender stop, and many partners reject the interchange for that mismatch alone.

Practical AT7 and MS1 content. Element positions and codes still come from the partner's 214 implementation guide.
Piece What to put there Practical rule
AT7 status code X3, AF, X6, X1, D1, or AG Only if this partner's guide lists that code.
AT7 reason The partner's reason code, when required Leave blank only when the guide allows blank. Do not invent a reason.
AT7 date and time Date and time of the qualified event Not the transmit clock, and not a backdated clerk keystroke.
AT7 time code The zone code the guide names Local at the stop, or universal, exactly as that guide states.
MS1 city, state, country The tender stop, not a highway fix Must agree with the stop this status claims.
MS1 coordinates Stop or yard point, and only if requested Omit when the guide does not ask. Never use a pass-by ping.

Confidence and dwell rules before X3 or X1

X3 and X1 mean the truck is at the stop, not near the road that passes it. Require a yard polygon drawn to the property, then a minimum dwell inside that polygon. An illustrative live-dock minimum is 10 minutes, in the same 8 to 12 minute band a yard review would already use. The figure is illustrative. Replace it with the site minimum the carrier stores on the facility. One GPS fix inside the polygon is not dwell. Two consecutive fixes, or a dwell timer, must agree before a proposal exists.

A highway ping never proposes X3 or X1. A circle around a geocoded office that covers the frontage road or the interstate is not a yard polygon, and hits on that circle are discarded rather than queued for a clerk to rubber-stamp. The fence id must match the facility on the stop, the power unit must be the one assigned to the shipment in that window, and the event age must be inside the ingest lag budget from the readiness evaluation. Fail any one of those gates and there is no proposal. Low confidence is a drop, not a status.

Propose X3 or X1 from

  • A yard polygon drawn to the property
  • Two consecutive fixes or a dwell timer at the site minimum
  • The fence and power unit matching the stop and assignment

Never from

  • A highway ping
  • A radius fence covering the frontage road
  • One GPS fix inside the polygon

Duplicate suppression

Geofences flicker. A tractor can enter, lose signal under a canopy, and enter again. That is one arrival. For X3, AF, X1, and D1 the business key is the partner shipment identifier, the stop, and the AT7 code. The first qualified proposal creates one outbound row. Later flickers for the same key attach to that row and do not create another message. A dispatcher edit changes the row before send. It does not allocate a second milestone.

X6 and AG are repeating codes, so the key needs a bucket or they would block every later update. X6 suppresses until the partner interval elapses or the guide's city-change rule trips. An illustrative interval is 2 hours. AG suppresses when the new estimate sits inside an illustrative 15 minute band of the estimate already sent. Both numbers are illustrative and lose to the guide when the guide states a cadence. Suppression is not the same as a failed transmit. A row that never reached the partner may still be retried. A row the partner already accepted may not be reinvented as a new status.

Partner exceptions and dispatcher confirm

Some partners want a clerk. Their guide, or their operating letter, says status is posted by a person, or they accept X3 and X1 only after a phone check, or they reject AG entirely. Those are exceptions stored per trading partner: allowed codes, X6 cadence, whether AG is permitted, whether a reason code is required when X1 is after the appointment, and whether release requires a named dispatcher. The translation worker reads that row. It does not hard-code one behavior for the whole customer list.

Where the exception says confirm, the proposal waits on a dispatcher. The screen shows the code, the stop, the event time, the fence, and the dwell. The person releases or rejects. Reject stores the reason and does not send. Where the exception says send, and a person has already confirmed the guide, the worker may transmit without a second review. Partners with no exception row stay on hold. Unattended send is an explicit flag after due diligence on that guide. It is never the default, and it is never a claim you can make about every partner on the list.

Hard rule: no exception row means hold

If a guide is not on file for a partner, the honest state is hold. Unattended send is an explicit flag after due diligence on that guide, never the default.

Failure and resend idempotency

  1. Write the outbound row before the socket opens. The row holds the business key, a hash of the status code, location, and event time, the state "queued", and no interchange control number yet.
  2. Transmit that row.
  3. On a clean handoff, store the interchange control number and mark the row sent.
  4. On a communication failure, retry the same row.

Do not insert a second X3 or X1 for the same stop because the first attempt timed out. A new envelope control number may be required by the transport. The business key stays put so a worker cannot treat the retry as a new milestone.

Unknown outcome is the dangerous case. If the session dropped after the partner may have stored the interchange, do not create another row. Reconcile with the 997 or the mailbox report, then either mark the original row sent or retry that same row. A 997 rejection is not a blind resend. Read the error, fix the map or the time code, and record a corrected send linked to the rejected control number. The functional acknowledgment says the envelope was accepted or not. It does not prove the yard dwell was true. That proof stays in the event ids on the row.

Audit of what was sent

Keep an audit row for every proposal, including the ones that were held or rejected. Store the AT7 code, the MS1 city, state, and country, the event time that was put on the AT7, the source event ids, the payload hash, and whether a person released it. If a person released it, store that user id and the time of the release. After transmit, store the interchange control number, the send time, and the 997 result. A later dispute should be answerable from this row without replaying a telematics topic that may already have expired.

Proposed and sent can differ. If a dispatcher changes the time or refuses AF, the audit shows the proposal and the decision, not only the bytes that left. Retain the audit with the shipment record for the same window the carrier keeps billing documents. The hot telematics log is the wrong archive. Its retention is sized for replay of the pin, not for a customer asking in ninety days why an X1 said 16:40. The long-lived copy belongs with the warehouse pattern in the carrier data lakehouse, under access rules that do not open every status file to every login.

The 214 and detention clocks

The 214 is a message. It is not always the detention system of record, and it should not be treated as one by default. Detention starts from the contractual free-time clock on the stop, using the arrival the carrier already named: yard-polygon enter after the site minimum dwell, or a dock scan where the site scans. The time the interchange was transmitted is when the partner was told. It is not when the truck arrived. A clerk batch at 18:40 must not start free time at 18:40 for a 14:22 arrival.

When the AT7 time and the stop arrival disagree, the stop arrival governs detention and the disagreement opens an exception for the map owner. The message can corroborate. It does not overwrite the stop. Use the 214 as the detention clock only when that partner's contract literally says the customer-facing status is the clock, and store that as a partner rule rather than a system default. Billing integration can read the stop clock. It should not read "sent at" from the mailbox and call it dwell. Accessorial posting after a match is a different pipeline, covered beside the ledger discussion in the general ledger synchronization guide.

The translator reads a projection

The 214 worker is a consumer of the read model, not a writer on the live dispatch grid. It reads the qualified geofence, the assignment window, and the partner exception row. It inserts the outbound status row in its own table. It does not lock the order while it formats MS1, and a slow mailbox must not freeze assignment. That split is the same idea as the decoupled services architecture: the message side effect stays outside the transaction that covers the load.

Replay of the telematics log rebuilds proposals only for keys that are not already sent. A replay must not emit a second interchange for a milestone the audit already marks sent. Idempotency on the business key is what makes a stream rebuild safe for customer messages. If the key is missing and the worker "just sends what it sees," a redeploy becomes a duplicate-status incident. Build the key before the first partner is enabled.

Frequently asked questions

These questions are the ones EDI leads and dispatch managers ask when a vendor offers to "turn on automatic 214s." The answers keep the ordinary code list, the partner guide, and the confirm step in front of any send flag.

If a guide is not on file for a partner, the honest state is hold. Do not borrow the map from a similar shipper for the afternoon and backfill the guide later. The first reject will be the afternoon load.

Which ordinary AT7 codes does this framework use?

X3 means arrived at pickup, AF means departed pickup with shipment, X6 means en route, X1 means arrived at delivery, D1 means completed unloading at delivery, and AG means estimated delivery. These are ordinary codes. Every map still has to be confirmed against that trading partner's 214 implementation guide. This page does not invent exotic codes.

Can a geofence departure send a 214 by itself?

A geofence departure can propose a status, usually AF when the shipment is on the tractor. A rules table runs next. Where the partner requires it, a dispatcher confirms before the 214 is sent. This framework does not claim fully unattended sending to every partner.

Why can a highway ping not become X3 or X1?

X3 and X1 require a yard polygon and a minimum dwell inside that polygon. A single position on the highway, or a radius fence that covers the frontage road, is not arrival. The proposal is discarded. It is not queued as a status.

How is a failed 214 resent without posting the milestone twice?

The outbound row is stored first, with a business idempotency key of shipment, stop, and AT7 code. A communication failure retries that same row. It does not insert a second milestone. If the partner already accepted the interchange, the row is marked sent and a retry does not create another X3 or X1.

Is the EDI 214 the clock for detention?

No. The 214 is a message to the trading partner. Detention uses the contractual free-time clock and the arrival the carrier named as the system of record. The time the 214 was transmitted is not the start of free time. When the message time and the stop time disagree, the stop time governs detention and the disagreement is an exception.

Talk to an architect

Turn real arrivals into 214s your partners accept.

Strong Tower Consulting provides independent systems architecture, feasibility audits, and engineering roadmaps for motor carriers and freight brokers. Contact our advisory team or call 763-244-1373 to discuss your operational data and evaluate practical implementation paths for your fleet.

Published October 23, 2026 by Strong Tower Consulting, LLC. Founded 2008 in Minnesota by Scott Elliott.