Conformitate ANAF · e-Transport

Declari transportul de marfă, printr-un apel.

Transformă un JSON de business în XML de declarație e-Transport valid (schema v2), îl validează cu XSD-ul și Schematron-ul oficial ANAF și îl randează PDF — totul printr-un API, fără să stochezi nimic.

Nu e un set de date, ci un instrument. Trimiți transportul ca obiect, primești înapoi XML-ul, verdictul de validare și, la cerere, PDF-ul de sinteză. Procesarea e în memorie; conținutul nu atinge un disc de-al nostru.

Un obiect intră, o declarație conformă iesePOST · în memorie · zero retenție
POST /etransport/v1/build
{
  "declarant":  { "cui": "RO12345678" }, // obiectul tău de business
  "operatiune": "30",                    // TTN — transport intern
  "bunuri":     [ { "cod_tarifar": "0409", "cantitate": 500 } ]
}

// → { valid: true, xml: "<eTransport…", meta: { … } }
Ce ai la dispoziție Un endpoint POST, un JSON de transport, un răspuns. Nici cont de SPV la noi, nici declarație scrisă pe disc — doar transformarea și verdictul. Codul UIT îl obții tu, din SPV.
Standard
e-Transport declarație v2
Namespace
mfp:anaf:dgti:eTransport
Operațiuni
build · validate · parse · render
Nomenclatoare
operațiuni, NC, PTF, birou vamal
Retenție
niciuna
01 Problema

Conformitatea e-Transport e grea. Și nu e produsul tău.

Între obiectul tău de business și un XML pe care ANAF îl acceptă la declararea transportului se află un strat de reguli care se schimbă și pe care cineva trebuie să-l țină la zi.

A

Declarație v2

Declarația nu e un JSON, ci un XML cu namespace-ul mfp:anaf:dgti:eTransport:declaratie:v2, cu zeci de elemente ordonate și cardinalități stricte. Un câmp lipsă, o ordine greșită, și fișierul e respins.

B

Nomenclatoare

Tipuri de operațiune (transport intern, achiziție/livrare intracomunitară, import, export), coduri tarifare NC pentru bunuri, unități de măsură, puncte de trecere a frontierei și birouri vamale. Liste oficiale, cu valori permise.

C

Zeci de scenarii de transport

Transport intern, AIC și LIC, import și export, tranzit, transfer între gestiuni. Fiecare are propriile reguli despre ce loc de plecare și de sosire apar — locație internă sau punct de frontieră — și ce câmpuri sunt obligatorii.

D

Schematron

Validarea reală nu e doar împotriva schemei XSD, ci și a regulilor de business ANAF, scrise în Schematron. Zeci de aserțiuni despre coerența datelor — bunuri, partener, transport, locații — care trebuie rulate corect.

E

Locații și frontieră

Un loc de plecare sau de sosire e ori o locație internă (județ, localitate, stradă), ori un punct de trecere a frontierei cu birou vamal. Regulile despre care variantă e permisă depind de tipul operațiunii.

F

Reguli care se schimbă

Specificația se revizuiește, nomenclatoarele se completează, aserțiunile se ajustează. Ce era valid anul trecut poate fi respins azi, iar tu afli din refuz, nu din anunț.

Nimic din toate astea nu te diferențiazăClientul tău nu te plătește pentru că știi ordinea elementelor într-o declarație e-Transport sau ce cod NC are marfa transportată. Te plătește pentru produsul tău. Stratul de conformitate e cost pur — de scris o dată și de întreținut pe termen nelimitat — și e exact ce mutăm de partea noastră.
02 Ce face

Patru operațiuni și un nomenclator.

Fiecare e un apel POST independent. Le folosești pe cea de care ai nevoie; nu ești obligat să treci prin toate.

POST /build

Construiește

Trimiți transportul ca JSON de business, primești XML de declarație v2 valid. Ordinea elementelor, namespace-ul, bunurile, partenerul, transportul și locațiile sunt puse corect de noi, din obiectul tău.

POST /validate

Validează

Rulezi un XML existent prin XSD-ul și Schematron-ul oficial local. Primești verdictul, ce s-a verificat (XSD și Schematron), lista de erori și lista de avertismente.

POST /parse

Parsează

Un XML de declarație primit devine un JSON curat, cu câmpurile despachetate — declarant, operațiune, bunuri, partener, transport, locații, documente — ca să-l poți citi fără să atingi XML-ul.

POST /render

Randează

Din declarație sau din XML iese un PDF de sinteză lizibil pentru om, generat local. Vizualizarea pentru șofer sau pentru dosarul transportului, fără un serviciu extern de randare.

GET /codes

Nomenclatoare

Listele oficiale pe care le acceptă declarația — tipuri de operațiune, coduri tarifare NC, unități de măsură, puncte de trecere a frontierei, birouri vamale — servite ca referință, ca să validezi din formular.

03 Zero retenție

Transporturile tale nu ajung nicăieri. Nici la noi, nici la ANAF.

Ăsta e răspunsul la „de ce aș trimite datele transporturilor mele la un terț”. Pentru că, practic, nu le trimiți nicăieri — procesăm și uităm.

01

Procesare în memorie

Payload-ul nu se scrie niciodată pe disc. Intră în request, e transformat în memorie și dispare când răspunsul pleacă. Nu există un fișier al declarației tale la noi.

02

Validare locală

XSD-ul și Schematron-ul oficial rulează la noi, pe serverul care ține răspunsul tău. Nu trimitem declarația la ANAF ca să aflăm dacă e validă — regulile sunt aici, verdictul e local.

03

Loguri fără conținut

Ce reținem e un cod de rezultat și o durată — atât. CUI-ul, marfa, numărul de vehicul, partenerul nu intră în niciun log, nici la noi, nici la un serviciu de observabilitate.

04

Nici măcar XML-ul

Un header opțional îți spune să nu returnăm nici XML-ul, doar verdictul. Pentru integrări unde vrei validarea, dar preferi ca documentul să nu treacă întreg prin răspuns.

De ce contează pentru tineO declarație de transport conține date comerciale sensibile: ce marfă muți, între cine și cine, pe ce rută, la ce valoare. Un serviciu care le stochează devine o țintă și o răspundere. Noi am ales varianta în care nu există ce fura: un instrument fără stare, care transformă și nu ține minte.
04 Validare oficială

Nu-ți spunem doar „invalid”. Îți spunem exact ce și unde.

Rulăm regulile oficiale, complet, local — XSD plus Schematron — și îți dăm diagnosticul pe câmp pe care validatorul ANAF nu ți-l dă înainte de trimitere.

Schemă XSD oficială

Verificăm întâi structura împotriva XSD-ului oficial al declarației v2: elemente, tipuri, ordine, cardinalități. Dacă lipsește un câmp obligatoriu sau un tip nu se potrivește, îl prindem înainte să ajungă vreodată la SPV.

Schematron oficial

Peste XSD rulăm setul complet de reguli de business ANAF, scrise în Schematron, executate local. Coerența dintre operațiune, bunuri, partener, transport și locații e verificată cu aceleași aserțiuni pe care le folosește ANAF.

Diagnostic, nu doar verdict

Răspunsul îți spune ce s-a verificat — XSD și Schematron —, dacă declarația e validă, plus lista de erori și de avertismente cu regula și câmpul implicat. Diferența dintre a ști că e o problemă și a ști unde e.

Fără trimitere în SPV

Validarea e complet locală: implicit, nimic nu pleacă de la noi către ANAF. Obținerea codului UIT prin SPV rămâne la tine, cu credențialele tale — noi îți dăm XML-ul valid și verdictul înainte de acel pas.

05 Cazuri acoperite

De la transport intern la import cu birou vamal.

Scenariile de transport reale, nu doar exemplul din manual. Fiecare cu tipul de operațiune, locațiile și codurile corecte, gata construite.

Transport intern (TTN) Achiziție intracomunitară (AIC) Livrare intracomunitară (LIC) Import Export Tranzit Transfer între gestiuni Mai multe bunuri pe declarație Coduri tarifare NC Loc de plecare intern Punct de trecere a frontierei Birou vamal Partener din UE Documente însoțitoare

Acoperim declarația e-Transport v2 completă, cu locații interne și puncte de frontieră. Dacă întâlnești un scenariu pe care nu-l tratăm corect, scrie-ne — cazurile reale au prioritate în ce construim.

06 Integrare

Un obiect de transport intră. XML-ul valid iese.

Trimiți transportul ca JSON de business, primești verdictul și XML-ul de declarație. Fără SDK obligatoriu — clientul HTTP pe care îl ai deja.

POST/api/anaf/v1/etransport/buildapplication/json
# build: un obiect minim de transport → XML e-Transport v2 valid
curl "https://oneapi.ro/api/anaf/v1/etransport/build" \
  -H "Authorization: Bearer $ONEAPI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "declarant": { "cui": "RO12345678" },
    "operatiune": "30",
    "bunuri": [
      { "scop": "101", "cod_tarifar": "0409", "denumire": "Miere",
        "cantitate": 500, "unitate": "KGM", "greutate_bruta": 520, "valoare": 7500 }
    ],
    "transport": { "nr_vehicul": "B123ABC", "data": "2026-09-01" },
    "loc_start": { "locatie": { "judet": "CJ", "localitate": "Cluj-Napoca" } },
    "loc_final": { "locatie": { "judet": "B", "localitate": "București" } }
  }'

# → 200 OK
{
  "valid": true,
  "xml":   "<eTransport xmlns=…>…</eTransport>",
  "meta":  { "operatiune": "30", "bunuri": 1, "greutate_bruta": 520 }
}
Când validarea pică

Ce s-a verificat, regula și câmpul

Un răspuns de validare nu-ți dă doar „invalid”. Îți spune ce s-a verificat — XSD și Schematron —, dacă e valid, plus erorile și avertismentele cu regula și câmpul implicat. Suficient ca să corectezi din prima, nu să ghicești.

HTTP/1.1 422 Unprocessable Content
{ "valid": false,
  "xsd_checked":        true,
  "schematron_checked": true,
  "errors": [ {
    "regula": "ET-CO-12",
    "mesaj":  "Cod tarifar NC lipsă pentru bun.",
    "camp":   "bunuri[0].cod_tarifar"
} ], "warnings": [] }
07 Întrebări

Înainte să declari primul transport.

Restul, în întrebări frecvente și în documentație.

Nu. Partea grea nu e obținerea UIT-ului, ci construirea unui XML de declarație e-Transport valid și validarea lui înainte de trimitere. Noi acoperim exact stratul de conformitate — build, validare, parse, render. Trimiterea în SPV și obținerea codului UIT rămân la tine, cu credențialele tale de SPV, care sunt deliberat în afara ariei noastre.

Prima declarație conformă durează cât citirea acestei pagini. Un token, un JSON de transport, un XML valid înapoi. Zero retenție, din primul apel.
Generează un token Toate modulele