Skip to main content

SAC and TXI Segments for Allowances, Charges, and Pricing — Key Fields and Common Errors

How do I add new charge codes to my trading partner guidelines?

A
Written by Ashwath Kirthyvasan
Updated over a month ago

Audience: EDI developers, B2B integration teams, trading partner technical contacts


The Money Segments and How They Relate

Several segments work together to represent the complete financial picture of an EDI invoice or order. Understanding how they relate to each other is essential before diagnosing errors in any one of them.

  • SAC (Service, Promotion, Allowance, or Charge) carries individual commercial adjustments — freight, fuel surcharges, promotional discounts, handling fees, deductions. Each SAC segment represents exactly one charge or allowance. SAC is not for taxes.

  • TXI (Tax Information) carries tax amounts separately. Sales tax, VAT, excise tax, and similar belong in TXI — not in SAC with a tax-related code. This is one of the most common mapping mistakes. TXI carries the tax type, the calculated amount, and the rate.

  • TDS (Total Monetary Value Summary) carries the invoice net total. It appears once per transaction and must equal the sum of all line totals plus SAC charges minus SAC allowances, adjusted for taxes if the partner includes TXI amounts in TDS. A mismatch between TDS and the partner's independent calculation of the net total is one of the most common causes of invoice rejection.

  • AMT (Monetary Amount) carries specific financial subtotals alongside TDS — total allowances, total charges, total taxes — for partner reconciliation. AMT01 is a qualifier that defines what the amount represents. The AMT value must match the sum of the corresponding segments it's summarizing: an AMT with a total-charges qualifier must equal the sum of all SAC charge amounts, and so on. Partners that use AMT for reconciliation will reject or flag transactions where AMT values don't add up correctly.

  • L1 / L7 (Motor Carrier) are the 210-specific equivalents of SAC. L1 carries the charge code and amount; L7 carries the tariff reference that justifies the charge. Same logic applies as SAC: one segment per charge type, positive amounts only, code substitution when a code isn't in the allowed list, same validation errors.

These segments are interdependent. Getting SAC levels wrong affects TDS. Putting taxes in SAC instead of TXI causes misclassification. AMT values that don't match SAC totals cause reconciliation failures. Errors in one segment usually have downstream effects on the others.


Transaction Types

These segments appear across multiple transaction types. Which segments are present depends on the transaction type and your trading partner's implementation guidelines.

Here are the most common transaction types impacted:

  • 810 Invoice

  • 850 PO

  • 855 Order Ack

  • 856 ASN

  • 820 Remittance

  • 210 Motor Carrier


SAC — Allowances and Charges

Where SAC Can Appear

SAC can appear at three levels, and placing a charge at the wrong level causes partner rejection or double-counting.

  • Line item level — inside the IT1 or PO1 loop. Applies to that specific line only. Use for item-specific charges or allowances: a defective allowance on one product, a line-level promotional discount, a handling charge for a particular item.

  • Summary level — after the last IT1 or PO1 loop, before TDS. Applies to the whole invoice. Use for transaction-wide adjustments: freight, fuel surcharges, total truckload allowances, invoice-wide discounts.

  • Header level — before the IT1 or PO1 loops, in some implementations. Used by some partners for invoice-wide charges that need to appear early in the transaction structure.

The critical rule: do not duplicate a charge at both line and summary level. If a freight charge is included in each IT1 line and also appears as a summary SAC, the partner counts it twice. Line-level charges stay in the IT1 loop; transaction-wide charges go at summary level only.

Key SAC Elements

  • SAC01 controls direction: A for allowance (reduces amount owed), C for charge (increases amount owed). This is not a sign — SAC05 should always be a positive number regardless. Sending a negative amount in SAC05 for an allowance is a common mistake that causes the adjustment to be applied in the wrong direction.

  • SAC02 identifies the type of charge or allowance with a 4-character X12 code. There are over 1,000 valid codes, but trading partners configure a subset in their guidelines — a code that is valid in X12 can still be rejected if it isn't in the partner's allowed list.

  • SAC05 is the total monetary amount, always positive. When present alongside a rate (SAC07) or percentage (SAC08), SAC05 takes precedence as the authoritative total.

  • SAC08 carries a percentage rate for percentage-based charges. SAC09 and SAC10 carry the unit qualifier and basis amount the percentage is applied against. Always include SAC05 alongside SAC08 — without an explicit total, partner systems may calculate the percentage against a different basis than you intended.

  • SAC15 is the free-form description. Required by some partners whenever SAC01 is present. Essential when using catch-all codes — without a description the partner has no way to identify what the charge represents.

Common SAC02 Codes

The most widely used codes across retail and logistics relationships:

  • Freight and logistics: D240 (Freight — the primary specific code), G830 (Shipping and Handling — the standard general bucket when freight and handling are combined), D270 (Fuel Surcharge), D500 (Handling), C040 (Delivery)

  • Allowances and discounts: F800 (Promotional Allowance), C000 (Defective Allowance), C310 (Discount — general discount fallback), H000 (Special Allowance — general allowance bucket), I170 (Trade Discount)

  • Catch-all: F050 (Other — requires SAC15 description; accepted by many partners when no specific code fits; some partners explicitly prohibit it). Codes 499 and 999 are prohibited by many partner guidelines and should not be used.

When a Code Is Rejected — Finding a Substitution

A code may be valid in the X12 standard but still face rejection if it isn't explicitly configured in your partner's guidelines. Always start by reviewing their allowed SAC02 list.

While the full list of X12 codes is extensive, finding a substitute is usually straightforward. You can typically resolve rejections by using general buckets and catch-all codes:

  • Freight/Shipping: If a specific freight code is rejected, use G830 (Shipping and Handling).

  • Discounts: Use C310 (Discount) or H000 (Special Allowance) as standard fallbacks.

  • Miscellaneous: Use F050 (Other). If you use this, ensure you include a description in SAC15 so the partner can identify the charge.

If no general substitute fits the business case, contact your trading partner to request they add the specific code to their guidelines.

SAC Calculations

  • Fixed amount — SAC05 carries the total dollar amount directly. Most freight charges, flat fees, and fixed allowances use this.

  • Percentage-based — SAC08 carries the rate (e.g., 200 for 2%), SAC09 carries the unit basis qualifier, SAC10 carries the basis amount.
    Example: A 2% promotional allowance on a $10,000 invoice

    SAC*A*F80***20000***200*DO~
  • Per-unit — SAC07 carries the rate per unit, SAC09/SAC10 carry the quantity basis. A $12.00-per-hundredweight charge on 500 lbs: SAC01=C, SAC07=1200, SAC09=CW, SAC10=500, SAC05=6000 ($60.00 total).

    SAC*C*F80***6000**1200**CW*500~

Always include SAC05 alongside SAC08 or SAC07 to remove any ambiguity.
Without an explicit total, the partner's system may calculate the percentage against a different basis than you intended.

Positive vs. Negative: Avoid the "Double Negative" Error

There could be a point of confusion is whether the "minus sign" should be implied by the code or explicitly written in the amount.

  • The "Standard" Way (Implied): Most modern systems use SAC01 as the mathematical operator. In this scenario, SAC05 should always be a positive number. The system sees SAC01=A and automatically treats the amount as a deduction (negative) for the final total.

  • The "Legacy" or "Explicit" Way: Some older or custom systems ignore or don't use SAC01 for calculation purposes and rely entirely on the mathematical sign in SAC05. In these cases, you might see a negative sign (e.g., -50.00) to explicitly denote an allowance.

Critical Rule: Read the "double-dip" the negative. If you send SAC01=A (Allowance) and a negative amount in SAC05, some systems will perform a "double negative" and accidentally turn your discount into a charge.


TXI — Taxes

Levels

TXI follows the same three-level logic as SAC.

  • Line item level — inside the IT1 loop. Use for item-specific taxes: excise tax on a particular product, beverage tax on a specific line, country-specific item-level VAT.

  • Summary level — after the IT1 loops, near TDS. Use for invoice-wide taxes: state sales tax on the whole order, federal excise tax applied to the transaction total.

  • Header level — some implementations place TXI at the header for taxes that apply broadly before line items are processed.

The same duplication rule applies: do not report an item-level tax inside the IT1 loop and again as a summary-level TXI. The partner will add them together and the invoice total will not match.

TXI Element Reference

  • TXI01 — Tax Type Code Identifies the type of tax. Common codes. As with SAC02, trading partners configure an accepted subset of TXI01 codes. A valid X12 tax type code can still be rejected if it isn't in the partner's allowed list.

  • TXI02 — Monetary Amount The calculated tax dollar amount. Always a positive number.

  • TXI03 — Percent The tax rate as a percentage (e.g., 8.5 for 8.5% sales tax). Best practice is to include both TXI03 and TXI02 — provide the rate and the explicitly calculated amount. Without TXI02, the partner's system may calculate the tax against a different base than you intended, resulting in a mismatch.

  • TXI06 — Tax Jurisdiction Code Identifies the jurisdiction (state, county, city) the tax applies to. Required by some partners for multi-jurisdiction tax reporting.

Taxes vs. SAC

Never use SAC segments for taxes, even though the SAC02 codelist includes tax-related codes like H625 (Tax — Beverage Tax). Most trading partners expect taxes in dedicated TXI segments. Using SAC for taxes when a partner expects TXI will result in the tax being misclassified, rejected, or excluded from the partner's tax reconciliation process.


TDS and AMT — Total Monetary Amount

TDS carries a single net total and appears once, always at summary level. There is no line-level or header-level TDS equivalent — the line-level total is derived from line items.

How SAC and TXI Affect TDS

The TDS value must reflect the net result of all adjustments:

TDS = sum of IT1 line totals + summary-level SAC charges − summary-level SAC allowances

Whether TXI taxes are included in TDS or excluded depends on the partner's guidelines. Some partners expect TDS to be the pre-tax subtotal, with taxes communicated separately via TXI.

Others expect TDS to include all taxes. Confirm with your trading partner which convention they use before going live.

Line-level SAC adjustments are typically already factored into the IT1 line total by ERP systems — verify this before including them in the TDS calculation, otherwise you will double-count them.

AMT segments are sometimes used alongside TDS to communicate specific subtotals — total charges, total allowances, total taxes — for partner reconciliation without changing the TDS value itself.


Common Validation Errors

"[code] is not a valid input" or "[code] is not an allowed code in SAC02 / TXI01"

The code is valid in X12 but not in the partner's configured allowed list for this relationship. Find a substitute in the partner's guidelines.

TDS mismatch — invoice rejected by partner

TDS doesn't match the partner's independent calculation. Check for: SAC charges duplicated at line and summary level; negative SAC05 amounts; SAC01 set to the wrong indicator (charge vs. allowance reversed); TXI taxes included or excluded from TDS contrary to the partner's expectation.

Tax amount in SAC instead of TXI

A partner rejecting a tax-coded SAC segment likely expects taxes in TXI. Move tax amounts to TXI with the appropriate TXI01 code and remove the SAC segment.

Percentage charge or tax calculating differently at partner

Include an explicit SAC05 or TXI02 dollar amount alongside the percentage rate. Without it, the partner's system may calculate against a different basis than intended.


What to Send Orderful Support

Contact [email protected] with:

  • Transaction ID from the failed transaction in Orderful

  • The specific code being rejected and the full error message

  • Transaction type (210, 810, 850, etc.)

  • Trading partner ISA IDs

  • The code you need added and a description of what it represents

  • Whether the code is a standard X12 code or a custom code not in the X12 codelist


Frequently Asked Questions

Can SAC appear in an 850 Purchase Order?

Yes. A buyer may include SAC segments in the 850 to communicate expected allowances or charges — a pre-

negotiated freight allowance, a promotional discount, or a handling fee. The supplier is expected to reflect those charges accurately in the corresponding 810 invoice. Discrepancies between SAC in the 850 and SAC in the 810 are a common cause of invoice disputes.

Should SAC05 be negative for an allowance?

No. SAC05 should always be a positive number. SAC01 (A or C) already tells the partner the direction. A negative SAC05 on an allowance will cause it to be applied in the wrong direction by many partner systems.

What's the difference between SAC charges and TXI taxes?

SAC is for commercial charges and allowances — freight, discounts, promotions, handling. TXI is specifically for taxes. Even when the SAC02 codelist includes tax-related codes, most partners expect taxes in TXI for proper classification and reconciliation.

My invoice total is wrong but all the line prices are correct — what should I check?

Verify TDS against the correct formula: IT1 line totals plus summary SAC charges minus summary SAC allowances, adjusted for TXI taxes per your partner's convention. Check for SAC charges duplicated at both line and summary level, and confirm SAC05 amounts are positive.

Can I use one SAC segment for multiple charge types? No.

Each SAC segment carries exactly one charge or allowance. For multiple charges, send multiple SAC segments in sequence. The same applies to L1 segments in 210 transactions.

A partner guideline doesn't include a code for a charge I need to send — what do I do?

Use G830 for combined freight and handling or H000 for a general allowance if those fit. Otherwise use F050 (Other) with a SAC15 description if the partner accepts it. If no fallback applies, contact your trading partner to request the specific code be added to their guidelines.

Did this answer your question?