CRMconnect Azuvio · Docs

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ă la https://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

Tip

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.

Warning

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.