EDI Acknowledgements

Updated Jul 26, 2026
EDI

EDI Acknowledgements

A functional acknowledgement — 997 in X12, 999 in some profiles, CONTRL in EDIFACT — reports whether a file arrived and whether it was structurally acceptable. It says nothing about whether anyone agreed to the order. See Concepts for the distinction.

Acknowledging what a partner sends you

DataMagik builds an acknowledgement for every inbound interchange as part of the pipeline. Whether it is sent depends on one setting.

Turning it on

On the trading partner, tick Send acknowledgements (997) on the routing row for that document. It is a per-partner, per-document decision, so you can acknowledge a customer's orders without acknowledging everything else they send.

With it on, DataMagik reserves a real interchange control number from the partner's counter, rebuilds the acknowledgement with that number, delivers it over the partner's transport, and logs it as an outbound transaction you can see in the console.

Without sendAck, the acknowledgement is still built and handed back to the caller — a script can send it itself. What the setting adds is a real control number and automatic delivery, which is the part a script cannot do well on its own.

The acknowledgement agrees with what you did

Content problems are folded into the acknowledgement, not just envelope arithmetic. A document that failed conformance and was sent to review is reported as rejected (AK5*R), not accepted.

An acknowledgement that says something different from what you actually did is the worst thing an acknowledgement can say: the partner believes the order is in your system and stops chasing it, while it sits in your review queue.

Acknowledgements are never acknowledged

An inbound 997/999/CONTRL never generates an acknowledgement of its own. That is how you build an infinite loop with a trading partner, and it is suppressed unconditionally.

Reconciling what a partner sends back

When a partner acknowledges a document you sent, that acknowledgement is recognised as an acknowledgement before partner routing is consulted — it needs no routing row and no spec. DataMagik parses it and settles the outbound documents it covers, recording the count on the acknowledgement's own row: "reconciled 2 outbound document(s)".

Only documents still awaiting an acknowledgement are touched, so a re-delivered acknowledgement is harmless.

The outbound rows move from Awaiting ack to Ack accepted or Ack rejected, and the console has filters for exactly those three states.

Reconciling one by hand

If a partner sends an acknowledgement out of band — by email, or through a channel DataMagik does not watch — press Reconcile ack… in the console, paste the raw acknowledgement, and submit. It reports how many documents it settled.

This is the console's only paste-in field, and it never transmits anything. It is for acknowledgements you received.

Chasing a document that was never acknowledged

  1. Filter the console to Outbound + Awaiting ack.
  2. Anything old in that list either never arrived, or arrived and was not acknowledged.
  3. The row carries the interchange control number — quote it to the partner. That is what it is for.

From a script

const parsed = edi.parse(raw);
const check  = edi.validate(parsed);
const ack    = edi.ack(parsed, { control: "000000101" });
const conf   = edi.conformance(raw, "850-acme");  // content rules, separately
Was this page helpful?