FacturareIntră în aplicație
API pentru firma taRO e-Factura · pagina 4 din 9

Trimiterea în RO e-Factura

Un apel trimite factura; ANAF răspunde în câteva minute, iar tu afli printr-un eveniment.

Actualizat la

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": true la 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_at spune 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.statusCe înseamnăEveniment
not_sentEmisă, netrimisă.
scheduledProgramată; pleacă la scheduled_at.
queuedPe drum spre ANAF.
processingANAF a primit XML-ul (upload_index) și îl verifică.efactura.submitted
acceptedValidată de ANAF. Factura este transmisă.efactura.accepted
rejectedRespinsă; erorile sunt în errors. Factura nu se consideră transmisă.efactura.rejected
not_applicableDocumentul 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.

ParametruTipCe este
company_id în adresăintegerId-ul firmei.
document_id în adresăintegerId-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ă.

ParametruTipCe este
company_id în adresăintegerId-ul firmei.
document_id în adresăintegerId-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.

ParametruTipCe este
company_id în adresăintegerId-ul firmei.
document_id în adresăintegerId-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).

ParametruTipCe este
company_id în adresăintegerId-ul firmei.
document_id în adresăintegerId-ul documentului.

Răspuns 200: o arhivă ZIP (application/zip).

Obiectul EfacturaState

Unde e documentul în RO e-Factura.

CâmpTipCe este
appliesbooleanDocumentul se trimite (nu: proforme, persoane fizice neînscrise, firme străine).
statusnot_applicable | not_sent | scheduled | queued | processing | accepted | rejectedStarea: netrimis, programat, în coadă, la ANAF, validat, respins.
upload_indexstring sau nullIndexul de încărcare dat de ANAF.
errorslistă de string sau nullErorile ANAF, la rejected.
scheduled_atdate-time sau nullCând pleacă, la scheduled.
deadlinedate sau nullTermenul legal: 5 zile lucrătoare de la emitere.
anaf_idstring sau nullMesajul SPV din care a fost preluat, la documentele trimise din alt program.
historylistă de objectTrimiterile, în ordine (doar la un document): status, upload_index, errors, at.

Obiectul Validation

Verificarea XML-ului înainte de trimitere.

CâmpTipCe este
objectvalidationMereu validation.
validbooleanXML-ul trece validarea.
checked_by_anafbooleanVerificat de validatorul ANAF (false: ANAF nu a răspuns, doar verificarea noastră).
errorslistă de stringErorile, dacă sunt.