Workflow: eTransport + eFactura — Conformitate ANAF
Module implicate: eTransport · Billing (eFactura) · Invoices · Warehouse (Goods Delivery — referință opțională)
Cine îl folosește: Financiar · Contabilitate · Logistică
Durata tipică: eTransport = înainte de plecare transport · eFactura = ziua emiterii sau automat la N zile
Overview
CRMConnect acoperă ambele obligații ANAF pentru firme din România:
| Obligație | Modul | Declanșator |
|---|---|---|
| e-Transport (RO-e-Transport) | etransport |
Manual — completat de utilizator înainte de plecare |
| e-Factura (RO e-Factura) | billing → controller Efactura |
Manual (buton pe factură) sau automat via cron |
Important arhitectural: Ambele sisteme comunică prin intermediarul CRMConnect (
https://einvoice.crmconnect.ro/api/e-factura/), nu direct cu ANAF. Token-ul OAuth ANAF este stocat pe serverul CRMConnect, nu local. Autentificarea se face o singură dată lahttps://einvoice.crmconnect.ro/e-factura/auth.
eTransport nu se generează automat la crearea unui aviz de livrare sau sales order. Utilizatorul completează manual declarația, cu posibilitatea de a selecta avize/facturi existente ca referință.
Diagrama fluxului
[SETUP INIȚIAL — admin, o singură dată]
│
├── Settings → General: company_vat (CIF firmă), instance_id (cont CRMConnect)
├── Settings → default_country = Romania (142) ← condiție pentru meniu eFactura
├── Autorizare token ANAF: https://einvoice.crmconnect.ro/e-factura/auth
│ (login SPV ANAF, token stocat pe proxy CRMConnect)
└── Banking: cel puțin un cont bancar (IBAN) configurat în Billing → Banks
│
↓
════════════════════════════════════════════
E-TRANSPORT (înainte de plecare)
════════════════════════════════════════════
│
├── [Opțional] Creare aviz de livrare în Warehouse sau Sales Order
│
├── eTransport → Documents → Add Declaration
│ ├── Tip operațiune (din tabel tipuri_operatii)
│ ├── Partener comercial (client sau furnizor)
│ ├── Vehicul: număr înmatriculare (+ remorcă 1/2 opțional)
│ ├── Dată transport (open_till)
│ ├── Bunuri transportate: cod NC tarifar, UM, cantitate, greutate, valoare
│ ├── Rută: start (județ+adresă / birou vamal / PTF) + final
│ └── Documente transport: aviz/factură (tip, serie, număr, dată) ← referință opțională
│
├── Status inițial: Netrimisă (3)
├── Butonul "Trimite la eTransport" → POST la einvoice.crmconnect.ro/generate-xml
│ → Răspuns: indexIncarcare (upload_index) + uit (UIT cod)
│ → Status devine: In prelucrare (0)
├── Polling status: Get Status → transport-status endpoint
│ → Status devine: Validată (1) sau Eroare (2)
│
├── La nevoie: Modificare vehicul (send_modif_vehicul → type:'modifVehicul')
└── La nevoie: Ștergere declarație (type:'stergere' cu UIT existent)
│
↓
════════════════════════════════════════════
E-FACTURA (la emitere sau automat)
════════════════════════════════════════════
│
├── Factură creată → verificare automată eligibilitate:
│ ✓ Monedă = RON (currency_id = 3)
│ ✓ Țara clientului = România (cod_tara_client = 'RO')
│ ✓ Status factură ≠ anulată, ≠ draft
│
├── CAlea A — Manual: buton "Trimite eFactura" pe factură
│ → POST /billing/efactura/send_invoice/{id}
│ → estatus = 'trimis'
│
└── Calea B — Automat (cron): autosend_efactura = 1
→ selectează facturi: estatus IS NULL AND eindex IS NULL
AND date = azi - autosend_efactura_days (implicit 3 zile)
→ limit 1 per rulare cron
│
↓
[PROCESARE ANAF]
│
├── estatus = 'in prelucrare' (ANAF procesează)
├── Cron sync: polls până la 10 facturi per rulare
│ → estatus = 'ok' (acceptat) sau 'nok' (respins)
└── La 'nok': descărcare arhivă ZIP cu erori (download-invoice endpoint)
│
↓
[IMPORT FACTURI PRIMITE — opțional]
│
├── Cron: sync_efactura_invoices() la fiecare autoimport_efactura_interval ore
├── Polls company-messages endpoint (filtre P și R)
└── Importă automat facturi furnizori în Purchase → Vendor Invoices
[DECLARAȚII COMPLETE ✓ · FACTURI ACCEPTATE ANAF ✓]
Pas cu pas
1. Setup inițial (admin)
1a. Setări generale
Unde: /admin/settings → General Settings
| Câmp | Descriere |
|---|---|
company_vat |
CIF-ul firmei (cu sau fără prefix RO — codul îl elimină automat la trimitere) |
instance_id |
UUID-ul contului CRMConnect (generat la înregistrare) |
customer_default_country |
Trebuie setat la 142 (România) — fără aceasta, toate paginile eFactura returnează 404 |
1b. Autorizare token ANAF
Navigați la:
https://einvoice.crmconnect.ro/e-factura/auth?company_id={instance_id}&fiscal_code={CIF}&partner_id=2
Veți fi redirectați la SPV ANAF pentru autentificare cu certificat digital sau user+parolă SPV. Token-ul rezultat este stocat pe serverul CRMConnect — nu necesită reînnoire manuală dacă conexiunea rămâne activă.
Puteți verifica starea token-ului din: Billing → eFactura → Settings → Check ANAF Token.
1c. Cont bancar (pentru eFactura)
Unde: /admin/billing → Banks → Add Bank Account
IBAN-ul apare în XML-ul e-Factura. Fără cel puțin un cont configurat, XML-ul generat nu include datele bancare.
1d. Mod test vs producție
Unde: /admin/billing → eFactura → Settings → einvoice_test_mode
1= utilizeazăhttps://deveinvoice.crmconnect.ro/api/e-factura/(sandbox)0= producție (implicit după finalizarea setup-ului)
2. Declarație eTransport
Unde: /admin/etransport → Documents → Add
2a. Tipuri de operațiuni
Tipul operațiunii determină câmpurile obligatorii și dacă sunt necesare notificări anterioare (previous_notifications = true → câmpul notificareAnterioara devine obligatoriu).
Câmpuri obligatorii:
| Câmp | Descriere |
|---|---|
operation_type |
Cod operațiune (din tbletransport_tipuri_operatii) |
id_client / id_provider |
Partenerul comercial (client sau furnizor) |
vehicle_registration_number |
Număr înmatriculare vehicul |
open_till |
Data transportului |
Bunuri transportate (cel puțin unul):
| Câmp | Descriere |
|---|---|
tariff_code |
Cod NC tarifar (din tbletransport_cod_tarifar_nc) |
operation_purpose |
Cod scop operațiune (din etransport_documente_scopuri_operatii) |
unit_of_measure |
Cod unitate de măsură ANAF |
quantity |
Cantitate |
total_net_weight / total_gross_weight |
Greutăți (kg) |
unit_price_without_vat |
Preț unitar fără TVA |
currency |
Codul monedei (ex: RON) |
Rută (obligatoriu start + final):
Fiecare punct de rută este unul din: adresă (județ + localitate + stradă) / birou vamal (cod din tbletransport_list_birou_vamal) / punct de trecere frontieră (cod din tbletransport_list_ptf).
Documente transport (cel puțin unul):
| Câmp | Descriere |
|---|---|
type_document |
Cod tip document (din tbletransport_list_tip_document) |
document_series_and_number |
Serie și număr |
date_document |
Data documentului |
2b. Statusuri declarație eTransport
status |
Eticheta | Semnificație |
|---|---|---|
3 |
Netrimisă | Creată local, netrimisă la ANAF |
0 |
În prelucrare | Trimisă, ANAF procesează |
1 |
Validată | Acceptată de ANAF (UIT activ) |
2 |
Eroare | Respinsă de ANAF |
Validitate UIT (uit_valability — afișaj):
| Valoare | Semnificație |
|---|---|
2 |
Activ |
0 |
Expiră astăzi |
3 |
Expirat |
1 |
Inactiv |
2c. Modificare vehicul după trimitere
Dacă vehiculul se schimbă după ce UIT-ul a fost emis, folosiți butonul Modificare Vehicul — trimite type: 'modifVehicul' cu noul număr de înmatriculare și UIT-ul existent.
3. Trimitere eFactura
Unde: factură → buton Trimite eFactura SAU automat prin cron
3a. Condiții de eligibilitate (verificate la trimitere)
| Condiție | Detaliu |
|---|---|
| Monedă RON | invoices.currency = 3 — facturile în altă monedă nu pot fi trimise |
| Client din România | cod_tara_client = 'RO' — clienții din alte țări sunt excluși |
| Status valid | Factura nu este anulată sau draft |
| Token activ | Token-ul ANAF trebuie să fie valid pe proxy |
3b. Statusuri eFactura
estatus |
Semnificație |
|---|---|
NULL |
Netrimisă |
'trimis' |
Trimisă, așteptare confirmare |
'in prelucrare' |
ANAF procesează |
'ok' |
Acceptată de ANAF |
'nok' |
Respinsă de ANAF — descărcați arhiva de erori |
3c. Autotrimitere prin cron
Unde: /admin/billing → eFactura → Settings
| Opțiune | Descriere |
|---|---|
autosend_efactura |
1 = activează autotrimitere |
autosend_efactura_days |
Zile după emitere până la trimitere automată (implicit: 3) |
Cron-ul trimite maxim 1 factură per rulare în modul automat. Facturile respinse (nok) nu sunt retrimise automat — intervenție manuală necesară.
3d. Import facturi furnizori din SPV
Unde: /admin/billing → eFactura → Settings → autoimport_efactura_interval (ore)
Cron-ul interoghează inbox-ul SPV și importă automat facturile primite de la furnizori în Purchase → Vendor Invoices. Funcționează independent de trimiterea eFactura.
Permisiuni necesare
| Acțiune | Condiție |
|---|---|
| eTransport — vizualizare/creare/editare | Permisiuni modul etransport |
| eFactura — trimitere manuală | Acces la modul billing + factură editabilă |
| eFactura — settings (autosend, interval) | is_admin() |
| Verificare token ANAF | is_admin() |
customer_default_country setting |
is_admin() |
Gotchas
| Problemă | Cauză | Soluție |
|---|---|---|
| Meniu eFactura nu apare | customer_default_country ≠ 142 |
Setați țara implicită la România în Settings → General |
| Token ANAF expirat | OAuth token neînnoit pe proxy | Re-autorizați la https://einvoice.crmconnect.ro/e-factura/auth |
| Factură refuzată la trimitere (monedă) | Factura nu e în RON | Emiteți factura în RON sau convertiți manual |
| UIT Expirat înainte de transport | Declarația nu a fost trimisă/validată la timp | Creați o nouă declarație cu UIT nou |
eFactura nok de la ANAF |
Erori de validare XML (TVA incorect, CIF lipsă etc.) | Descărcați arhiva ZIP de erori → corectați factura → retrimiteți manual |
| Autosend nu trimite | Cron inactiv sau autosend_efactura_days neajuns |
Verificați cron job + setarea zilelor |
| Facturi furnizori nu se importă | autoimport_efactura_interval = 0 sau token invalid |
Setați intervalul > 0 și verificați token-ul |
Referințe module
- Invoices — facturi standard
- Warehouse — Goods Delivery — avize de livrare (referință opțională în eTransport)
- Purchase — Vendor Invoices — facturi furnizori importate din SPV
- Integrations — eFactura — setări integrare
Generați și depuneți declarația eTransport înainte ca mărfurile să plece fizic — numărul UIT de confirmare trebuie să însoțească expedierea și mărfurile nu pot pleca legal fără el. Includeți depunerea în lista de verificare a expedierii, nu ca un afterthought.
Token-ul de autentificare ANAF pentru e-facturare expiră periodic. Un token expirat blochează silențios toate depunerile de e-facturi B2B fără o eroare evidentă pe factura în sine — monitorizați statusul token-ului în setările e-Factură și reînnoiți proactiv înainte de expirare.