Trimiterea în RO e-Factura
Un apel trimite factura; ANAF răspunde în câteva minute, iar tu afli printr-un eveniment.
Cum pleacă o factură
O factură emisă ajunge în SPV pe unul din trei drumuri:
- La cererea ta:
POST …/documents/{document_id}/submit, sau"submit": truela creare. - Automat, după emitere, dacă firma are în aplicație trimiterea imediată.
- Programat, la câteva ore după emitere, dacă firma are trimiterea amânată (rămâne timp de corecturi).
efactura.scheduled_atspune când.
Modul firmei îl vezi în efactura.submit_mode al firmei și îl schimbi din aplicație. Proformele, persoanele fizice neînscrise în registrul RO e-Factura și firmele din afara României nu trimit nimic (efactura.applies este false).
Stările
efactura.status | Ce înseamnă | Eveniment |
|---|---|---|
not_sent | Emisă, netrimisă. | |
scheduled | Programată; pleacă la scheduled_at. | |
queued | Pe drum spre ANAF. | |
processing | ANAF a primit XML-ul (upload_index) și îl verifică. | efactura.submitted |
accepted | Validată de ANAF. Factura este transmisă. | efactura.accepted |
rejected | Respinsă; erorile sunt în errors. Factura nu se consideră transmisă. | efactura.rejected |
not_applicable | Documentul nu se trimite. |
ANAF răspunde de obicei în câteva minute, uneori în câteva ore. Noi verificăm răspunsul periodic și îți trimitem evenimentul; nu e nevoie să întrebi în buclă.
O factură respinsă
O factură respinsă se corectează cu PATCH (de exemplu județul clientului) și se trimite din nou cu /submit, cu același număr. Dacă firma trimite automat, după corectare intră singură în programul de trimitere. Fiecare încercare rămâne în efactura.history.
Termenul legal este de 5 zile lucrătoare de la emitere, în efactura.deadline.
Înainte de trimitere
POST …/validate construiește XML-ul și îl trece prin validatorul ANAF, fără să-l trimită. Merge și pe ciorne. checked_by_anaf este false când validatorul ANAF nu a răspuns și s-a făcut doar verificarea noastră.
XML-ul și răspunsul ANAF
GET …/xml: XML-ul UBL 2.1, CIUS-RO, cum pleacă (sau a plecat) spre ANAF.GET …/efactura/zip: arhiva descărcată din SPV după procesare, cu XML-ul și semnătura electronică a Ministerului Finanțelor, sau cu erorile. Este dovada transmiterii.
Firma și ANAF
Trimiterea merge prin conexiunea ANAF a firmei, făcută o dată în aplicație de cine are certificatul digital cu drepturi SPV pe firmă (sau de contabil, printr-un link). Fără ea, /submit răspunde:
409 company_not_verified: firma nu a fost încă verificată (nimeni nu a conectat-o la ANAF);409 anaf_not_connected: firma e verificată, dar conexiunea a expirat sau a fost revocată; o reface cineva din aplicație;409 efactura_not_applicable: firma nu trimite în RO e-Factura.
efactura.connected din GET /companies/{company_id} îți spune dinainte dacă trimiterea va merge.
Facturi trimise din alte programe
Dacă firma trimite facturi în SPV și din alt program, le preluăm din SPV ca documente ("source": "spv"), cu numărul lor, liniile, totalurile și plata la emitere. Le citești, le descarci în PDF și XML și le înregistrezi încasările, dar nu le modifici și nu le trimiți. Cele noi vin cu evenimentul document.imported.
Referința
Trimite în RO e-Factura
POST /api/v1/companies/{company_id}/documents/{document_id}/submit
Permisiune: documents:submit.
Încarcă XML-ul facturii emise în SPV, prin conexiunea ANAF a firmei. Răspunsul vine de la ANAF în câteva minute: urmărește efactura.status sau așteaptă evenimentul efactura.accepted / efactura.rejected. O factură respinsă se corectează și se retrimite cu același număr.
| Parametru | Tip | Ce este |
|---|---|---|
company_id în adresă | integer | Id-ul firmei. |
document_id în adresă | integer | Id-ul documentului. |
Răspuns 200: Document.
Validează fără să trimiți
POST /api/v1/companies/{company_id}/documents/{document_id}/validate
Permisiune: documents:read.
Construiește XML-ul și îl trece prin validatorul ANAF, fără să-l trimită.
| Parametru | Tip | Ce este |
|---|---|---|
company_id în adresă | integer | Id-ul firmei. |
document_id în adresă | integer | Id-ul documentului. |
Răspuns 200: Validation.
{ "object": "validation", "valid": false, "checked_by_anaf": true, "errors": ["[BR-RO-100] Localitatea cumpărătorului este obligatorie."] }XML-ul UBL (CIUS-RO)
GET /api/v1/companies/{company_id}/documents/{document_id}/xml
Permisiune: documents:read.
XML-ul RO e-Factura al documentului; la cele trimise din alte programe, XML-ul validat de ANAF.
| Parametru | Tip | Ce este |
|---|---|---|
company_id în adresă | integer | Id-ul firmei. |
document_id în adresă | integer | Id-ul documentului. |
Răspuns 200: un fișier XML (application/xml).
Răspunsul semnat al ANAF
GET /api/v1/companies/{company_id}/documents/{document_id}/efactura/zip
Permisiune: documents:read.
Arhiva ZIP descărcată din SPV după procesare: XML-ul și semnătura Ministerului Finanțelor (sau erorile).
| Parametru | Tip | Ce este |
|---|---|---|
company_id în adresă | integer | Id-ul firmei. |
document_id în adresă | integer | Id-ul documentului. |
Răspuns 200: o arhivă ZIP (application/zip).
Obiectul EfacturaState
Unde e documentul în RO e-Factura.
| Câmp | Tip | Ce este |
|---|---|---|
applies | boolean | Documentul se trimite (nu: proforme, persoane fizice neînscrise, firme străine). |
status | not_applicable | not_sent | scheduled | queued | processing | accepted | rejected | Starea: netrimis, programat, în coadă, la ANAF, validat, respins. |
upload_index | string sau null | Indexul de încărcare dat de ANAF. |
errors | listă de string sau null | Erorile ANAF, la rejected. |
scheduled_at | date-time sau null | Când pleacă, la scheduled. |
deadline | date sau null | Termenul legal: 5 zile lucrătoare de la emitere. |
anaf_id | string sau null | Mesajul SPV din care a fost preluat, la documentele trimise din alt program. |
history | listă de object | Trimiterile, în ordine (doar la un document): status, upload_index, errors, at. |
Obiectul Validation
Verificarea XML-ului înainte de trimitere.
| Câmp | Tip | Ce este |
|---|---|---|
object | validation | Mereu validation. |
valid | boolean | XML-ul trece validarea. |
checked_by_anaf | boolean | Verificat de validatorul ANAF (false: ANAF nu a răspuns, doar verificarea noastră). |
errors | listă de string | Erorile, dacă sunt. |