Build a Customs SAD / Single-Window Declaration Dataset
Skill: Convert shipment data into a Single Administrative Document customs declaration dataset
Region: Global (WCO Data Model / EU SAD — import & export declarations) Category: Customs — Single Administrative Document (SAD) / Single-Window declaration dataset Does: Takes commercial shipment data (invoice, packing list, transport docs) and produces a structured SAD / Single-Window import (or export) declaration dataset — HS classification, customs-value build-up from the Incoterm, origin/preference, procedure codes, and per-item duty/VAT lines, aligned with the WCO Data Model and the EU SAD box structure. Schema version: WCO Data Model 3.x / EU Single Administrative Document (Annex B UCC-IA box set)
The AI assembles the declaration dataset from your documents; it does not transmit to a customs authority and is not a customs-broker substitute. HS classification, valuation method, and preference eligibility carry legal liability — have a licensed customs broker confirm the classification, procedure codes and valuation before lodging in the national system (e.g. EU AES/ICS2 national import systems, CDS, ABI/ACE).
When this applies
- Import declaration (release for free circulation) into a customs territory.
- Export declaration lodged before goods leave.
- Preparing the data payload for a Single-Window / national customs system upload (the SAD boxes map to the system's message fields).
Build procedure
- Read the source — commercial invoice (parties, Incoterm, value, currency), packing list (gross/net mass, packages), transport document (mode, country of dispatch), and any preference/origin proof.
- Identify parties and the procedure — exporter/consignor, importer/consignee, declarant/representative; the requested + previous procedure code (SAD Box 37).
- Classify each item — assign the HS/commodity code (CN8 / 10-digit TARIC for the EU); record description, origin country, gross/net mass.
- Build the customs value — start from the invoice value and adjust to the valuation basis (CIF for the EU): add freight/insurance to the named place per the Incoterm; deduct post-importation costs.
- Determine duty & import VAT — apply the duty rate for the HS code/origin (less any preference), then import VAT on (customs value + duty + other charges).
- Assemble header + item lines — totals (packages, gross mass, invoice value) in the header; one line per HS item.
- Emit the dataset — structured JSON keyed to SAD boxes, per the worked example.
- Validate — work through the checklist.
Source → SAD box map
| From the source | → SAD box |
|---|---|
| Declaration type (IM/EX) + procedure | Box 1 |
| Consignor / exporter | Box 2 |
| Consignee / importer | Box 8 |
| Declarant / representative | Box 14 |
| Country of dispatch / export | Box 15 |
| Country of origin (per item) | Box 34 |
| Country of destination | Box 17 |
| Incoterm / delivery terms | Box 20 |
| Total invoice value & currency | Box 22 |
| Total packages | Box 6 |
| Gross mass (kg) | Box 35 |
| Net mass (kg) | Box 38 |
| Commodity (HS/CN/TARIC) code | Box 33 |
| Procedure code (requested/previous) | Box 37 |
| Customs value | Box 47 (basis) |
| Duty / VAT calculation | Box 47 (type/rate/amount) |
Document structure (declaration dataset)
Declaration
├── header
│ ├── type (IM/EX), totalProcedure
│ ├── declarant / exporter / importer
│ ├── countryDispatch / countryDestination
│ ├── incoterm, invoiceValue, currency
│ └── totals (packages, grossMass)
└── items[ ]
├── itemNo, description
├── commodityCode (HS/CN/TARIC), originCountry
├── grossMass, netMass
├── procedureCode (requested+previous)
├── customsValue
└── duties[ ] (type, base, rate, amount)
Code tables
Declaration type (Box 1, first subdivision)
| Code | Meaning |
|---|---|
IM |
Import (from outside the territory) |
EX |
Export (to outside the territory) |
CO |
Goods in intra-union/community trade with special status |
Procedure codes (Box 37, requested + previous; EU 4-digit example)
| Code | Meaning |
|---|---|
4000 |
Release for free circulation (no previous procedure) |
4071 |
Release for free circulation from a customs warehouse |
1000 |
Permanent export |
5100 |
Inward processing |
Duty/tax type (Box 47, EU example)
| Code | Meaning |
|---|---|
A00 |
Customs duty |
B00 |
Import VAT |
A20 |
Additional / anti-dumping duty |
Calculation rules
- Customs value (CIF basis) = invoice value + freight + insurance to the place of introduction (per the Incoterm), minus any included post-importation charges. EXW adds inland + main carriage; CIF needs no addition; DDP deducts import duties/taxes already included.
- Customs duty = customs value × duty rate (use the preferential rate only with valid origin proof).
- Import VAT = (customs value + customs duty + other charges to the first destination) × VAT rate.
- Header totals must equal the sum of item lines (gross mass, value, packages).
Worked example (end-to-end)
Input — import shipment
One line of electronics, HS 8517.62.00, origin CN, into the EU (DE); invoice value €10,000.00 CIF Hamburg; gross 520 kg, net 500 kg, 20 packages; duty rate 0%, import VAT 19%.
After valuation (intermediate)
- Customs value = €10,000.00 (already CIF, no addition).
- Duty (A00) = 10,000.00 × 0% = €0.00.
- Import VAT (B00) = (10,000.00 + 0.00) × 19% = €1,900.00.
Output — declaration dataset (JSON)
{
"header": {
"type": "IM",
"declarationProcedure": "4000",
"exporter": { "name": "Shenzhen Electronics Co", "country": "CN" },
"importer": { "name": "Northwind GmbH", "eori": "DE123456789012345" },
"countryDispatch": "CN",
"countryDestination": "DE",
"incoterm": "CIF",
"incotermPlace": "Hamburg",
"invoiceValue": 10000.00,
"currency": "EUR",
"totals": { "packages": 20, "grossMass": 520.0 }
},
"items": [
{
"itemNo": 1,
"description": "Base stations for cellular networks",
"commodityCode": "8517620000",
"originCountry": "CN",
"grossMass": 520.0,
"netMass": 500.0,
"procedureCode": { "requested": "40", "previous": "00" },
"customsValue": 10000.00,
"duties": [
{ "type": "A00", "base": 10000.00, "rate": 0.0, "amount": 0.00 },
{ "type": "B00", "base": 10000.00, "rate": 19.0, "amount": 1900.00 }
]
}
]
}
Valuation note: CIF value used directly as the customs value; import VAT base = customs value + duty = €10,000.00.
Validation checklist
- Declaration type and procedure code (Box 1 / Box 37) correct for the movement
- Exporter, importer (EORI/identifier) and declarant captured
- Each item has an HS/CN/TARIC code, origin country, and gross/net mass
- Customs value built from the Incoterm (additions/deductions shown)
- Duty applied at the correct (preferential only with valid origin) rate
- Import VAT base = customs value + duty + other charges
- Header totals = Σ item lines (mass, value, packages)
- Classification, valuation and procedure confirmed by a licensed customs broker
Last updated: 2026-06-12 — confirm the national Single-Window message schema, current TARIC/HS rates, and procedure-code set with a licensed customs broker before lodging.