I work on EUDR compliance software at Dimitra. This post describes a general architecture for this kind of system. It's not a description of any specific product, and I've kept it generic on purpose.
The components
┌───────────────┐ Field apps ───▶ │ Plot registry │◀── Bulk imports (CSV/GeoJSON) └──────┬────────┘ │ ┌──────▼────────┐ ┌──────────────┐ │ Risk engine │◀────▶│ Forest data │ └──────┬────────┘ └──────────────┘ │ ERP / logistics ──▶ ┌──▼───────────┐ │ Lot lineage │ └──┬───────────┘ │ ┌──────▼────────┐ ┌──────────────┐ │ DDS service │─────▶│ EU system │ └──────┬────────┘ └──────────────┘ │ ┌──────▼────────┐ │ Dashboards + │ │ audit log │ └───────────────┘
1. Plot registry
- PostgreSQL + PostGIS for geometry, validity checks, and spatial indexes (PostGIS guide).
- Validation on write: reject or flag invalid geometry immediately (validation pipeline).
- Versioning: plots change (boundaries corrected, ownership changes). Keep history.
- Producer identity: deduplicate farmers and plots across cooperatives.
2. Lot lineage
The crux of traceability: which plots does this shipment trace back to?
Model events explicitly:
| Event | Inputs | Outputs |
|---|---|---|
| Harvest | Plot(s) | Lot |
| Aggregate | Many lots | One lot |
| Split | One lot | Many lots |
| Transform | Lot (e.g. cocoa beans) | Lot (e.g. cocoa butter) |
| Ship | Lot(s) | Shipment |
A relational lineage table (lot_inputs(lot_id, input_lot_id, quantity)) with recursive CTEs answers "which plots feed this shipment?" for most volumes. More in Data Models for Agricultural Supply-Chain Traceability.
3. Risk engine
- Runs on plot creation and on a schedule (new alerts arrive constantly).
- Overlays plots on forest baselines and loss data (detection).
- Combines with country risk and legality checks.
- Outputs a risk status with evidence, not just a boolean.
- Feeds a human review queue.
4. DDS service
- Builds statements from lineage plus plot data (DDS fields).
- Talks to the EU information system API.
- Handles retries, rejections, and amendments.
- Stores reference numbers against lots.
5. Dashboards and audit
- Compliance overview: % of volume traced, risk status, pending reviews.
- Plot maps with risk overlays (dashboard patterns).
- Immutable audit log of every decision, submission, and data change.
Design decisions that matter
- Make risk status explainable. Every flag links to its evidence.
- Treat data quality as a feature. Show completeness and confidence everywhere.
- Design for mass balance and segregation from day one if your sector mixes material.
- Async everything heavy. Geometry checks and satellite overlays go in background jobs.
- Multi-tenant with care. Exporters, cooperatives, and importers see different slices of the same data.