Declarații ANAF (bază)

Modulul Romania - ANAF Declarations Base (l10n_ro_declaration) este cadrul comun al declarațiilor fiscale din România depuse la ANAF. Fiecare declarație are propriul modul, care calculează declarația din înregistrările contabile postate ale perioadei, construiește fișierul XML oficial și îl verifică înainte de depunere. Modulul de bază furnizează ceea ce au în comun toate: gestionarea perioadelor și a termenelor, fluxul stărilor, mesajele de validare, datele declarantului, validarea XML-ului față de schema oficială și conexiunea la validatorul ANAF DUKIntegrator.

Declarație

Conținut

Temei legal

Modul

D300

Decontul de TVA (Decont de TVA), lunar, trimestrial, semestrial sau anual, cu reconcilierea cu decontul precompletat ANAF e-TVA.

OPANAF 174/2026, perioade începând cu ianuarie 2026.

l10n_ro_d300

D390

Declarația recapitulativă a operațiunilor intracomunitare (Declarația recapitulativă, VIES), lunară.

OPANAF 705/2020.

l10n_ro_d390

D394

Declarația informativă privind livrările și achizițiile interne (Declarația informativă).

OPANAF 3769/2015, înlocuit prin OPANAF 2194/2025, operațiuni începând cu august 2025.

l10n_ro_d394

D406

Fișier SAF-T (Fișierul Standard de Control Fiscal).

Consultați pagina SAF-T.

l10n_ro_d406

D101

Declarația anuală privind impozitul pe profit și ajutor pentru impozitul trimestrial pe veniturile microîntreprinderilor.

OPANAF 206/2025, anul de raportare 2025.

l10n_ro_d101

S1002 – S1005, S1027

Situațiile financiare anuale și raportările contabile anuale, precum și raportarea semestrială.

OMF 2036/2025 (exercițiul financiar 2025), OMF 1194/2025 (raportare semestrială).

l10n_ro_financial_statements

Declarațiile se instalează din meniul Aplicații; instalați modulul fiecărei declarații. Modulul de bază se instalează automat ca dependență. Modulele D390 și D394 necesită modulul D300 (își verifică totalurile față de decontul de TVA din aceeași perioadă), iar modulul D101 necesită modulul situațiilor financiare.

Important

  • Declarațiile sunt disponibile numai pentru companiile a căror țară fiscală este România și a căror monedă este RON. O declarație nu poate fi creată pentru o altă companie, iar calculul este refuzat dacă moneda companiei nu este RON.

  • Sumele declarațiilor sunt rotunjite la lei întregi (în sus de la jumătate), conform cerințelor formularelor ANAF.

  • Declarațiile sunt pregătite în Odoo, dar depunerea lor la ANAF este o etapă manuală în afara Odoo, consultați Depunerea la ANAF.

Configurare

Datele companiei

Accesați Contabilitate ‣ Configurare ‣ Setări și derulați până la secțiunea Declarații ANAF România, afișată pentru companiile din România. Valorile sunt stocate pe companie și propuse la fiecare declarație nouă.

Setare

Câmpuri

Folosit pentru

Declarant

Nume declarant, Prenume declarant, Funcție declarant, CNP/CUI declarant, Telefon declarant, E-mail declarant

Persoana care semnează declarațiile (nume, prenume, funcție). Numele, prenumele și funcția sunt obligatorii: validarea eșuează dacă una dintre ele este goală. Telefonul și e-mailul sunt implicit cele ale companiei.

Activitate și perioadă fiscală TVA

Cod CAEN principal, Perioadă fiscală TVA, Cont bancar pentru declarații

Codul CAEN al activității principale efectiv desfășurate (exact 4 cifre); perioada fiscală TVA (Lunar, Trimestrial, Semestrial sau Anual), care este propusă ca tip de perioadă al declarațiilor noi; și contul bancar tipărit pe declarații (implicit, primul cont bancar al companiei).

Reprezentant fiscal / împuternicit

Denumire/nume reprezentant, CUI/CNP împuternicit, Domiciliul fiscal al reprezentantului

Opțional. Împuternicitul (împuternicit) care depune declarațiile în numele companiei.

Validare DUKIntegrator

URL serviciu validare DUK, Token serviciu validare DUK, Solicită PDF DUK

Conexiunea la validatorul ANAF, consultați Validarea cu DUKIntegrator.

Modulele declarațiilor adaugă propriile setări în această secțiune; de exemplu, modulul D394 adaugă datele persoanei care întocmește declarația.

Compania are nevoie de un CUI valid în câmpul său CIF: validarea verifică cifra sa de control. O companie al cărei CIF nu începe cu RO nu este înregistrată în scopuri de TVA, iar declarațiile de TVA afișează un avertisment.

Drepturi de acces

Meniul Contabilitate ‣ România (ANAF) este afișat utilizatorilor care au acces la o companie a cărei țară fiscală este România și care au un drept de acces contabil. Contabilii pot crea și modifica declarațiile, utilizatorii cu acces contabil doar în citire le pot doar citi, iar consilierii contabili (managerii) le pot și șterge și pot edita configurarea. Un utilizator vede numai declarațiile companiilor selectate în comutatorul de companii.

Coduri de taxă și reguli de corespondență

Declarațiile nu citesc direct taxele. Fiecare taxă din planul de conturi din România este legată de un cod de taxă românesc, care indică fiecărei declarații unde este raportată operațiunea: rândurile D300, tipul operațiunii D390 etc. Legătura este câmpul Cod de taxă românesc al taxei (Contabilitate ‣ Configurare ‣ Taxe), care este completat automat pentru taxele din planul de conturi din România.

Consilierii contabili pot verifica și completa catalogul în Contabilitate ‣ România (ANAF) ‣ Configurare (acest meniu le este rezervat):

  • Coduri de taxă românești: codurile, cu cota TVA, genul operațiunii și tratamentul D300, D390 și D394 al fiecărui cod. Acestea sunt date de bază globale, partajate de toate companiile.

  • Reguli de corespondență taxe: reguli care atribuie un cod de taxă unei operațiuni în funcție de taxă, tipul documentului, poziția fiscală, locația partenerului (România, UE, non-UE), categoria produsului sau un interval de date. Sunt utilizate, de exemplu, pentru taxele istorice de 19%, 9% și 5% și pentru taxele de TVA la încasare.

Notă

Dacă o taxă utilizată în perioadă nu are cod de taxă și nici regulă, declarația afișează un mesaj de eroare, iar operațiunea este omisă. Legați taxa de un cod sau creați o regulă și calculați din nou declarația.

Pregătirea unei declarații

Toate declarațiile funcționează în același mod. Deschideți declarația din Contabilitate ‣ România (ANAF) ‣ Declarații și faceți clic pe Nou.

  1. Alegeți perioada. Tip perioadă este propus din Perioadă fiscală TVA a companiei, iar anul și numărul perioadei din ultima perioadă încheiată. Formularul afișează datele perioadei (Perioadă) și Termen de depunere legal. Datele declarantului sunt copiate din companie și pot fi modificate în declarație.

  2. Faceți clic pe Calculează. Rândurile declarației sunt completate din înregistrările contabile postate ale perioadei, iar declarația trece în starea Calculată. Verificările locale rulează în același timp, iar constatările lor sunt listate în fila Validare.

  3. Verificați rândurile și completați datele care nu pot fi calculate din contabilitate. Valorile editate sunt păstrate atunci când declarația este recalculată cu Recalculează.

  4. Faceți clic pe Validează. Odoo rulează din nou verificările locale, construiește XML-ul, îl verifică față de schema XSD oficială și, dacă validatorul DUK este configurat, îl validează cu DUKIntegrator. Dacă nicio constatare nu este o eroare, declarația trece în starea Validat; în caz contrar rămâne Calculată.

  5. Faceți clic pe Exportă XML. Fișierul XML este atașat la declarație și descărcat, iar declarația trece în starea Exportată.

  6. Depuneți declarația la ANAF (consultați Depunerea la ANAF), apoi faceți clic pe Marchează ca depusă.

Fișierul XML se numește <form>_<CUI>_<period>_v<version>.xml, de exemplu D300_12345678_2026-01_v1.xml (2026-T1 pentru un trimestru, 2026-S1 pentru un semestru, 2026 pentru un an).

Stări și butoane

Stare

Semnificație

Ciornă

Declarația este creată, dar nu este calculată. Perioada poate fi încă modificată.

Calculată

Rândurile sunt calculate. Faceți clic pe Recalculează după corectarea contabilității sau pe Validează pentru a verifica declarația.

Validat

Validarea nu a găsit nicio eroare. Revalidează o rulează din nou.

Exportată

Fișierul XML este generat. Exportă din nou XML înlocuiește fișierul atașat.

Depusă

Ați marcat declarația ca depusă. Data depunerii este setată la data de astăzi, cu excepția cazului în care ați completat-o, iar Număr de înregistrare primit de la ANAF poate fi introdus în fila Validare.

Arhivată

O declarație înlocuită de o versiune ulterioară sau arhivată cu Arhivează.

Readu la ciornă este disponibil în stările Calculată, Validat și Exportată și șterge conținutul calculat și mesajele. Pot fi șterse numai declarațiile care nu au fost încă exportate. O declarație a aceleiași companii, cu același tip de perioadă, perioadă, tip de declarație și versiune nu poate exista de două ori.

Termene

Termen de depunere este calculat de la sfârșitul perioadei. Dacă cade într-un weekend sau într-o sărbătoare legală din România (calendarul bazei localizării), este mutat în următoarea zi lucrătoare.

  • D300 și D390: data de 25 a lunii următoare perioadei.

  • D394: data de 30 a lunii următoare perioadei.

  • D101: data de 25 iunie a anului următor.

  • Situații financiare anuale: 150 de zile după sfârșitul anului; raportare semestrială: 45 de zile.

Corecții

O declarație exportată, depusă sau arhivată nu mai poate fi modificată. Pentru a o corecta, faceți clic pe Creează rectificativă (Creează declarația corectată în D394). Odoo copiază declarația ca versiune nouă a aceleiași perioade (Tip declarație Rectificativă, Versiune + 1), legată de declarația pe care o corectează, iar dumneavoastră o calculați, validați, exportați și depuneți ca pe prima. Când versiunea corectată este marcată ca depusă, versiunile anterioare sunt arhivate. Conținutul exact al unei rectificative depinde de declarație: consultați pagina acesteia.

Mesaje de validare

Constatările verificărilor sunt salvate ca mesaje de validare. Butoanele Erori și Avertismente din partea de sus a declarației le deschid, iar Contabilitate ‣ România (ANAF) ‣ Mesaje de validare listează mesajele tuturor declarațiilor, cu filtre după severitate și după sursa mesajului (XSD, DUKIntegrator sau verificările locale). Fiecare mesaj are un cod, rândul în cauză și, când este cazul, nota contabilă și partenerul, pentru a le deschide direct.

O eroare blochează validarea. Un avertisment nu o blochează: citiți-l și corectați contabilitatea sau declarația dacă este justificat.

Validarea cu DUKIntegrator

DUKIntegrator este programul Java cu care ANAF verifică declarațiile înainte de depunere; acesta conține regulile oficiale de validare ale fiecărui formular. Odoo verifică singur fiecare XML față de schema XSD inclusă în modul, dar regulile ANAF sunt mai stricte. De aceea, Odoo trimite XML-ul către un mic serviciu de validare DUK, care rulează DUKIntegrator și returnează rezultatul. Serviciul este livrat cu modulul în addons/l10n_ro_declaration/tools/duk_service și se instalează separat de Odoo, pe un server care poate accesa static.anaf.ro.

Notă

Programele ANAF (fișiere jar) nu fac parte din modul și nu sunt redistribuite: sunt descărcate de pe site-ul ANAF cu scriptul furnizat.

Ce verifică validarea

Când faceți clic pe Validează, Odoo rulează trei verificări în această ordine și înregistrează rezultatul în fila Validare:

  1. Verificările locale ale declarației (datele companiei, declarantul, regulile formularului, verificări încrucișate cu alte declarații).

  2. Verificarea XSD (Verificare XSD): Valid, Invalid sau Schemă lipsă.

  3. Verificarea DUKIntegrator (Validare DUK).

Validare DUK

Semnificație

Valid

DUKIntegrator a răspuns ok: nu a găsit nicio eroare și niciun avertisment. Acesta este rezultatul care trebuie obținut înainte de depunere.

Valid cu avertismente

DUKIntegrator a raportat doar avertismente (linii W:, A: sau I:). Avertismentele sunt listate în mesaje și nu blochează validarea.

Erori

DUKIntegrator a raportat cel puțin o eroare (linii E: sau F: ori un rezultat ilizibil). Erorile sunt listate în mesaje și blochează validarea: corectați-le și faceți clic pe Revalidează.

Neconfigurat

Nu este configurat niciun URL de serviciu. Pasul este omis, fără niciun mesaj, iar declarația poate ajunge în starea Validat fără să fi fost verificată cu regulile ANAF.

Serviciu indisponibil

Serviciul nu a răspuns, a răspuns cu o eroare (de exemplu, tokenul este greșit) sau DUKIntegrator nu a putut rula (de exemplu, validatorul formularului nu este instalat). Odoo înregistrează un avertisment, care nu blochează validarea.

Atenționare

Validat înseamnă doar că Odoo nu a găsit nicio eroare. Dacă Validare DUK este Neconfigurat sau Serviciu indisponibil, declarația nu a fost validată de DUKIntegrator. Instalați serviciul și asigurați-vă că starea este Valid înainte de depunere.

Când Solicită PDF DUK este bifat (implicit), serviciul returnează și PDF-ul oficial produs de programul ANAF, cu XML-ul atașat, dacă validarea reușește. Acesta este atașat la declarație ca PDF DUK. D101 și situațiile financiare sunt validate fără PDF: PDF-ul ANAF al acestor formulare conține anexele declarației (note, rapoarte), care sunt asamblate cu programul de asistență ANAF.

Instalarea serviciului de validare DUK

Serviciul necesită Java (OpenJDK 21 a fost utilizat pentru verificare) și Python 3 și este pornit cu fișierele ANAF într-un singur folder (DUK_HOME). Modulul oferă un Dockerfile care conține Java și Python.

  1. Descărcați programele ANAF. Pe un computer care poate accesa static.anaf.ro, rulați scriptul download_duk.sh din folderul serviciului, cu folderul de destinație și formularele de validat:

    $ ./download_duk.sh /srv/duk D300 D390 D394 D406
    

    Scriptul descarcă DUKIntegrator.jar, bibliotecile sale, configurația, precum și fișierele jar de validare și de PDF ale fiecărui formular solicitat (D300Validator.jar, D300Pdf.jar…) din fluxul de actualizări ANAF (versiuni.xml). Solicitați toate formularele pe care le utilizați; de exemplu, adăugați D101, S1002, S1003, S1004 și S1005 pentru declarația privind impozitul pe profit și situațiile financiare. Când se solicită D406, scriptul instalează și DUKIntegrator_AnLunaUI.jar, validatorul sensibil la perioadă utilizat pentru fișierul SAF-T (consultați SAF-T D406 (România)). Rulați din nou scriptul când ANAF publică versiuni noi ale validatoarelor.

  2. Alegeți un token. Serviciul refuză să pornească fără un token (DUK_TOKEN), pe care Odoo îl trimite ca token bearer. Utilizați un secret aleatoriu lung. Opțiunea --insecure pornește serviciul fără token și este destinată numai computerelor de test private.

  3. Porniți serviciul. De exemplu, cu Docker:

    $ docker build -t eyssen/duk-service .
    $ docker run -d --name duk -p 127.0.0.1:8080:8080 -e DUK_TOKEN=<secret> \
          -v /srv/duk:/opt/duk:ro eyssen/duk-service
    

    Sau direct pe server: DUK_HOME=/srv/duk DUK_PORT=8080 DUK_TOKEN=<secret> python3 duk_service.py. Implicit, serviciul ascultă numai pe 127.0.0.1.

  4. Verificați-l. curl http://localhost:8080/health răspunde {"status": "ok"}, iar curl -H "Authorization: Bearer <secret>" http://localhost:8080/info listează validatoarele instalate.

Important

Nu expuneți serviciul pe Internet. Publicați portul pe o interfață privată sau o rețea privată la care are acces numai serverul Odoo și păstrați tokenul secret.

Serviciul se configurează cu variabile de mediu:

Variabilă

Implicit

Semnificație

DUK_HOME

/opt/duk

Folder cu DUKIntegrator.jar, lib/ și config/.

DUK_TOKEN

niciuna

Token bearer, obligatoriu dacă serviciul nu este pornit cu --insecure.

DUK_BIND, DUK_PORT

127.0.0.1, 8080

Adresa și portul serviciului (0.0.0.0 în imaginea Docker).

DUK_TIMEOUT

120

Secunde permise pentru o validare. Măriți valoarea pentru fișiere SAF-T mari.

DUK_MAX_CONCURRENT

2

Numărul de validări care rulează simultan. O cerere care așteaptă mai mult de DUK_QUEUE_TIMEOUT secunde (implicit 60) primește un răspuns HTTP 503.

DUK_MAX_BYTES

400 MB

Dimensiunea maximă a fișierului XML.

DUK_JAVA, DUK_JAVA_OPTS

java

Executabilul Java și opțiuni suplimentare, de exemplu -Xmx4g pentru fișiere SAF-T mari.

Conectarea Odoo la serviciu

Accesați Contabilitate ‣ Configurare ‣ Setări, secțiunea Declarații ANAF România, setarea Validare DUKIntegrator, și completați:

  • URL serviciu validare DUK: URL-ul de bază al serviciului, de exemplu http://duk:8080. Lăsați-l gol pentru a omite validarea ANAF.

  • Token serviciu validare DUK: DUK_TOKEN al serviciului. Numai administratorii văd acest câmp.

  • Solicită PDF DUK: bifați-l pentru a primi PDF-ul oficial.

În loc să configurați fiecare companie, serviciul poate fi setat o singură dată pentru baza de date cu parametrii de sistem l10n_ro_declaration.duk_service_url și l10n_ro_declaration.duk_service_token (modul dezvoltator, Setări ‣ Tehnic ‣ Parametri ‣ Parametri sistem). O companie care are propriul URL utilizează propriul token; tokenul parametrului de sistem este trimis numai către URL-ul parametrului de sistem, niciodată către un URL introdus pe o companie. Pot fi setați și parametrii l10n_ro_declaration.duk_service_timeout (secunde, implicit 120) și l10n_ro_declaration.duk_raw_threshold (octeți, implicit 20 MB; fișierele mai mari sunt transmise în flux către serviciu).

Depunerea la ANAF

Odoo pregătește și verifică declarațiile, dar nu le trimite la ANAF: modulele declarațiilor nu au nicio conexiune la serviciile de depunere ale ANAF. După validare:

  1. Faceți clic pe Exportă XML și, dacă a fost solicitat, deschideți PDF DUK în fila Validare.

  2. Depuneți singuri declarația la ANAF, de exemplu prin SPV (Spațiul Privat Virtual, spațiul virtual privat al contribuabilului pe portalul ANAF), cu fișierul pe care portalul îl cere pentru formular.

  3. Reveniți în Odoo și faceți clic pe Marchează ca depusă. Opțional, introduceți Data depunerii și Număr de înregistrare (număr de înregistrare) atribuit declarației de ANAF. Aceste două câmpuri sunt informative: Odoo nu le verifică.

Notă

Integrarea e-Factura, care trimite facturi către SPV, este o funcționalitate separată și nu depune declarațiile.