The due diligence statement (DDS) is the visible output of EUDR compliance. Everything else, from plot mapping to risk assessment to traceability, exists to make this statement true.
Here's what goes into it, from the perspective of someone building the system that generates it. For the overall picture, start with EUDR Explained for Software Teams.
The building blocks
Conceptually, a DDS contains:
| Block | Contents |
|---|---|
| Operator / trader | Name, address, EORI number where applicable, role |
| Activity | Placing on the market, making available, or export |
| Product | Description, HS code, trade name, scientific name for wood |
| Quantity | Net mass and/or supplementary units, volume |
| Country of production | Each country where the commodity was produced |
| Geolocation | Points or polygons for every relevant plot (details) |
| References | Any upstream DDS reference numbers relied upon |
| Declaration | Confirmation that due diligence was done and risk is negligible |
The reference and verification numbers
After submission, the system returns a reference number (and a verification number). These travel with the goods: to customs declarations and to downstream companies who may reference them.
Store them against the lots they cover. Losing the link between a DDS and its lots is a painful bug to discover during an audit.
Generating a DDS from your data model
If you've modelled plots, lots, and products well, the DDS is mostly serialisation:
function buildDds(lot: Lot, plots: Plot[], operator: Operator) { return { operator: { name: operator.name, eori: operator.eori }, activityType: "IMPORT", commodities: [ { hsCode: lot.hsCode, description: lot.description, netMassKg: lot.quantityKg, producers: groupBy(plots, (p) => p.country).map(([country, ps]) => ({ country, geometry: toFeatureCollection(ps), })), }, ], }; }
This is illustrative. Map it carefully to the official schema.
Validation before submission
Check everything you can before hitting the EU system:
- Geometry valid and in WGS 84 (validation guide).
- Every plot linked to the lot has passed risk assessment.
- HS code is in scope according to the Annex.
- Quantities reconcile with shipping documents.
- File size fits system limits. Large polygon sets may need simplification within precision rules.
Operational tips
- Keep an audit log of every submission attempt and response.
- Handle rejections with clear messages for compliance staff.
- Plan for amendments: shipments change, and so might statements.
- Use the training/acceptance environment before production.