Build a Road Shipment into a RO e-Transport Declaration XML
Skill: Convert a high-fiscal-risk goods shipment into the RO e-Transport XML
Region: Romania (România)
Category: Logistics — RO e-Transport (Sistemul RO e-Transport, ANAF SPV)
Does: Takes a road shipment of high-fiscal-risk (or international) goods and produces the RO e-Transport declaration XML uploaded to ANAF SPV to obtain the UIT code (codul UIT) that must accompany the transport.
Standard: ANAF RO e-Transport schema eTransport (OPANAF 2545/1190 + OUG 41/2022, OUG 115/2023)
This XML is the declaration payload uploaded to ANAF SPV (
/eTransport/upload); ANAF validates and returns a sealed response containing the UIT code, valid for a defined window (5 days domestic, longer for international). The UIT must be presented to authorities (ANAF/Vamă) during transport. The declaration is due before the vehicle moves. The AI produces the XML; the user validates and uploads. Verify the current high-fiscal-risk CN/NC code list and weight/value thresholds before use.
When this applies
- A road transport of high-fiscal-risk goods (per the ANAF/ANRE list) above the weight/value threshold (gross > 500 kg or value > 10,000 RON per consignment), or any international movement (intra-EU acquisition/supply, import, export) of monitored goods.
- The output is one
eTransportdeclaration per transport, yielding one UIT code. - Excluded: purely internal movements below threshold and goods outside the monitored CN list — confirm the goods are in scope before generating.
Conversion procedure
- Read the source. Accept a transport order / CMR text (
pdftotext), CSV/JSON shipment export, or pasted dispatch data. Parse declaration type, parties, goods lines, vehicle, and route. - Extract fields. Identify: declaration type and operation code; sender (CUI/name/address), recipient (CUI or foreign id/name/address); each goods line (CN/NC code, description, gross/net weight, quantity, value, tariff); vehicle plate(s); transporter CUI; loading and unloading places + dates; estimated transport date. If a CN code, CUI, or vehicle plate is missing, stop and ask — never invent identifiers.
- Normalize. Dates →
YYYY-MM-DD. CUI → digits (withROonly where the schema'scuiOperator/VAT field requires it). Plates → uppercase, no spaces. County → SIRUTA/ISORO-XXwhere required. Amounts → dot decimal, 2 decimals; weights in kg. - Compute. Sum line gross weights and values to the declaration totals; reconcile against any stated total. Validity window = issue date + statutory days.
- Emit the declaration. Build per the Document structure section using the worked example. Set the
codTipOperatiuneandcodScopOperatiune. - Validate. Work through the Validation checklist; upload to ANAF SPV and capture the returned UIT.
Source → e-Transport field map
| From the source | → Target element / field |
|---|---|
| Declarant CUI | eTransport/@codDeclarant |
| Reference / internal no | eTransport/@refDeclarant |
| Operation type code | declaratie/@codTipOperatiune |
| Operation scope/purpose code | declaratie/@codScopOperatiune |
| Sender CUI + name | partiImplicate/expeditor/@cui, @denumire |
| Sender address (county/locality/street) | expeditor/locStart/... |
| Recipient CUI/foreign id + name | partiImplicate/beneficiar/@cui, @denumire |
| Recipient address | beneficiar/locFinal/... |
| Goods line CN/NC code | bunuriTransportate/bun/@codTarifar |
| Goods description | bun/@denumireMarfa |
| Gross weight (kg) | bun/@greutateBruta |
| Net weight (kg) | bun/@greutateNeta |
| Quantity + unit | bun/@cantitate, @codUnitateMasura |
| Goods value (RON) | bun/@valoareLeiFaraTva |
| Vehicle plate | dateTransport/@nrVehicul |
| Trailer plate | dateTransport/@nrRemorca1 |
| Transporter CUI | dateTransport/@codTaraOrgTransport, @codOrgTransport |
| Transport country code | dateTransport/@codTaraOrgTransport |
| Loading place + date | locStart/..., dateTransport/@dataTransport |
| Unloading place | locFinal/... |
Repeat bun once per goods line.
Document structure
eTransport (xmlns mfp:anaf:dgti:eTransport:declaratie:v2; @codDeclarant, @refDeclarant)
└── declaratie (@codTipOperatiune, @codScopOperatiune)
├── partiImplicate
│ ├── expeditor (@codTara, @cui, @denumire; address attrs)
│ └── beneficiar (@codTara, @cui, @denumire; address attrs)
├── locStart (loading: codJudet, codLocalitate, denumireLocalitate, strada, ...)
├── locFinal (unloading: same shape)
├── bunuriTransportate
│ └── bun (1..n) (@codScopOperatiune, @codTarifar, @denumireMarfa,
│ @cantitate, @codUnitateMasura, @greutateNeta,
│ @greutateBruta, @valoareLeiFaraTva)
└── dateTransport (@dataTransport, @nrVehicul, @nrRemorca1,
@codTaraOrgTransport, @codOrgTransport, @denumireOrgTransport)
declaratie, partiImplicate, bunuriTransportate, and dateTransport are mandatory. locStart/locFinal carry county (codJudet SIRUTA) and locality codes. The returned UIT is not part of the upload — it is issued by ANAF in the response.
Code tables
codTipOperatiune (operation type)
| Code | Meaning |
|---|---|
10 |
Achiziție intracomunitară (intra-EU acquisition) |
12 |
Operațiuni în sistem lohn — intrare (inward processing in) |
14 |
Stocuri la dispoziția clientului — intrare (call-off stock in) |
20 |
Livrare intracomunitară (intra-EU supply) |
22 |
Operațiuni în sistem lohn — ieșire (processing out) |
30 |
Transport pe teritoriul național (domestic transport) |
40 |
Import |
50 |
Export |
60 |
Tranzacție intracomunitară — tranzit (intra-EU transit) |
70 |
Tranzacție în afara UE — tranzit (non-EU transit) |
codScopOperatiune (operation purpose, selected)
| Code | Meaning |
|---|---|
101 |
Comercializare (sale) |
201 |
Producție (production) |
301 |
Gratuități (free of charge) |
401 |
Aport active (contribution of assets) |
501 |
Bunuri puse la dispoziția clientului (goods at client's disposal) |
601 |
Transfer între gestiuni (transfer between warehouses) |
703 |
Comercializare cu amănuntul (retail) |
9999 |
Altele (other) |
codUnitateMasura (UN/ECE units, selected)
| Code | Meaning |
|---|---|
KGM |
Kilogram |
TNE |
Tonne |
LTR |
Litre |
MTQ |
Cubic metre |
NIU |
Piece / unit (bucată) |
codJudet (county, SIRUTA — selected)
| Code | County |
|---|---|
40 |
București |
12 |
Cluj |
22 |
Iași |
35 |
Timiș |
8 |
Brașov |
13 |
Constanța |
Calculation rules
- Declaration gross weight = Σ
bun/@greutateBrutaacross all goods lines (kg, 2 decimals). - Declaration value = Σ
bun/@valoareLeiFaraTva(RON, net of VAT, 2 decimals). - Threshold test: declaration is mandatory when total gross weight > 500 kg or total value > 10,000 RON per high-fiscal-risk consignment (or any international monitored movement regardless of threshold).
- Net ≤ gross: each line
@greutateNeta≤@greutateBruta; flag any line violating this. - Validity window = transport date + 5 days (domestic) / per statute for international; the UIT must remain valid for the whole route.
- Weights in kg, values in RON dot-decimal 2dp; recompute totals and flag any mismatch with a stated total.
Worked example (end-to-end)
Input — pasted transport order
Declarant CUI: RO12345678
Tip operatiune: transport national (30), scop: comercializare (101)
Expeditor: Exemplu Distributie SRL, CUI RO12345678, Bucuresti
Beneficiar: Client Beta SRL, CUI RO87654321, Cluj-Napoca, jud. Cluj
Marfa: zahar, cod tarifar 1701, cantitate 800 kg, greutate bruta 850 kg,
greutate neta 800 kg, valoare fara TVA 6.400,00 lei
Vehicul: B123ABC, transportator CUI RO55667788
Data transport: 2026-06-15, incarcare Bucuresti, descarcare Cluj-Napoca
After extraction + normalization (intermediate)
{
"codDeclarant": "12345678",
"refDeclarant": "ORD-2026-0015",
"codTipOperatiune": "30",
"codScopOperatiune": "101",
"expeditor": { "cui": "RO12345678", "denumire": "Exemplu Distributie SRL", "judet": "40" },
"beneficiar": { "cui": "RO87654321", "denumire": "Client Beta SRL", "judet": "12" },
"bunuri": [ { "codTarifar": "1701", "denumire": "Zahar", "cantitate": 800,
"um": "KGM", "greutateNeta": 800.00, "greutateBruta": 850.00,
"valoareLeiFaraTva": 6400.00 } ],
"transport": { "dataTransport": "2026-06-15", "nrVehicul": "B123ABC",
"codTaraOrgTransport": "RO", "codOrgTransport": "55667788" },
"totals": { "greutateBruta": 850.00, "valoare": 6400.00 }
}
Output — RO e-Transport declaration
<?xml version="1.0" encoding="UTF-8"?>
<eTransport xmlns="mfp:anaf:dgti:eTransport:declaratie:v2" codDeclarant="12345678" refDeclarant="ORD-2026-0015">
<declaratie codTipOperatiune="30" codScopOperatiune="101">
<partiImplicate>
<expeditor codTara="RO" cui="RO12345678" denumire="Exemplu Distributie SRL"/>
<beneficiar codTara="RO" cui="RO87654321" denumire="Client Beta SRL"/>
</partiImplicate>
<locStart>
<locatie codJudet="40" denumireLocalitate="Bucuresti" strada="Str. Victoriei" numar="10"/>
</locStart>
<locFinal>
<locatie codJudet="12" denumireLocalitate="Cluj-Napoca" strada="Calea Mosilor" numar="5"/>
</locFinal>
<bunuriTransportate>
<bun codScopOperatiune="101" codTarifar="1701" denumireMarfa="Zahar" cantitate="800" codUnitateMasura="KGM" greutateNeta="800.00" greutateBruta="850.00" valoareLeiFaraTva="6400.00"/>
</bunuriTransportate>
<dateTransport dataTransport="2026-06-15" nrVehicul="B123ABC" codTaraOrgTransport="RO" codOrgTransport="55667788" denumireOrgTransport="Exemplu Distributie SRL"/>
</declaratie>
</eTransport>
Normalisations shown: declarant CUI RO12345678 → 12345678 on @codDeclarant (bare digits), RO-prefixed on party @cui; county Bucuresti → codJudet 40, jud. Cluj → 12; plate B123ABC uppercased no spaces; quantity unit kg → KGM; value 6.400,00 → 6400.00; net 800.00 ≤ gross 850.00 (valid); totals recomputed gross 850.00, value 6400.00. Uploaded to ANAF SPV (/eTransport/upload), which returns the sealed response with the UIT code to carry during transport.
Validation checklist
- All required fields extracted; AI asked about anything missing or ambiguous (no invented CUI, CN code, or plate)
-
@codDeclarantset;codTipOperatiuneandcodScopOperatiuneare valid codes for the movement - Sender and recipient present with
@cui/foreign id and@denumire;codTaraset -
locStartandlocFinalcarry validcodJudet(SIRUTA) and locality - Each
bunhas a valid@codTarifar(CN/NC), weights, quantity + unit, and@valoareLeiFaraTva - Each line
@greutateNeta≤@greutateBruta -
dateTransport,nrVehicul, and transporter CUI present; plate uppercased - Total gross weight and value recomputed; threshold/scope confirms the declaration is required
- Weights in kg, values RON dot-decimal 2dp; dates
YYYY-MM-DD - Declaration uploaded to ANAF SPV before transport and the returned UIT captured and valid for the route
Last updated: 2026-06-13 — verify the active RO e-Transport schema version, high-fiscal-risk CN/NC list, weight/value thresholds, and UIT validity rules before use.