Workflow: E-commerce Fulfillment — De la Comandă Online la Livrare

Modules involved: OmniSales · WooCommerce / Shopify · Warehouse · Innoship · Couriers · Invoices · eFactura · Returns · Clients · Price Lists
Who uses it: Operator comenzi, Depozit, Logistică, Financiar, E-commerce Manager
Durata tipică: Ore – 1-2 zile lucratoare (de la plasarea comenzii online la predarea curierului)

Overview

Fluxul e-commerce fulfillment acoperă întregul ciclu de viață al unei comenzi plasate pe un magazin online integrat cu CRMConnect. Comenzile sosesc automat din WooCommerce sau Shopify prin webhook sau sincronizare cron, sunt procesate în OmniSales, depozitul execută picking și packing, curierul primește coletul prin AWB generat automat (via Innoship sau direct Cargus/FanCourier), iar clientul primește factura și notificarea de expediere. Retururile sunt tratate printr-un sub-flux dedicat.

Diferența față de OmniSales Fulfillment — workflow-ul generic de comenzi — este integrarea bidirecțională cu platforma e-commerce: statusurile se actualizează înapoi în WooCommerce/Shopify, clienții sunt sincronizați automat, iar prețurile pe canal sunt controlate prin Price Lists.


Diagrama fluxului (ASCII)

[COMANDĂ ONLINE (WooCommerce / Shopify)]
  │  webhook → OmniSales → Comandă Nouă
  │  sau cron sync (la interval configurat)
  │  sincronizare: client, produse, adresă, metodă plată
  │  status OmniSales: 0 - Draft → 1 - New
  │
  ↓
[VALIDARE COMANDĂ]
  │  status: 2 - Processing
  │  verificare stoc: qty_available vs qty_ordered
  │  verificare client: creat/asociat în Clients
  │  ├── Stoc OK → continuă
  │  └── Stoc insuficient → alertă operator → hold (9) sau comandă parțială
  │
  ↓
[PICKING & PACKING]
  │  Aviz de Livrare (Goods Delivery Note) generat automat
  │  Packing List creat din aviz
  │  operator depozit: confirmă fiecare articol (scanat sau bifat manual)
  │  status depozit: wh_ready_to_deliver
  │
  ↓
[EXPEDIERE — AWB]
  │  AWB generat prin Innoship (recomandat) sau Couriers direct
  │  etichetă printată → lipită pe colet
  │  status OmniSales: 4 - Shipping · status depozit: wh_in_transit
  │  tracking number trimis înapoi la WooCommerce/Shopify (sync automat)
  │
  ↓
[FACTURARE]
  │  factură generată automat la Shipping (dacă create_invoice = on)
  │  email cu factură PDF + număr AWB → client
  │  eFactura → ANAF dacă client B2B cu CIF valid (automat)
  │
  ↓
[LIVRARE CONFIRMATĂ]
  │  tracking Innoship/Curier → status packing list: wh_delivered
  │  status OmniSales: 5 - Delivered/Completed
  │  status actualizat în WooCommerce/Shopify: Completed
  │
  ├── [RETUR (dacă e cazul)]
  │     │  client solicită retur în fereastra permisă
  │     │  operator creează Goods Return Receipt
  │     │  stocul returnat intrat înapoi în depozit (sau carantină)
  │     │  credit note emis sau voucher / rambursare
  │
[COMANDĂ FINALIZATĂ ✓]

Pas cu pas

1. Sincronizarea comenzii din platforma e-commerce

Unde: /admin/omni_sales/order_list · /admin/woocommerce · /admin/myshopify

Comenzile din magazinul online ajung în CRM pe două căi:

Metodă WooCommerce Shopify Frecvență
Webhook (recomandat) La plasarea comenzii — push automat La plasarea comenzii — push automat Real-time
Cron sync (fallback) Rulează periodic; preia comenzile noi Rulează periodic; preia comenzile noi Configurat (ex. 15 min)
Sync manual Buton din /admin/woocommerce/stores Buton din /admin/myshopify La cerere

Ce se sincronizează automat:

Configurare canal: /admin/omni_sales/omni_sales_channel → Editează canalul → setezi:

Câmpuri cheie pe comanda OmniSales:

Câmp Descriere
id_contact Legătura cu fișa clientului din Clients
channel_id Canalul de vânzare (WooCommerce/Shopify/manual)
external_order_id ID-ul comenzii în platforma externă (pentru sync bidirectional)
Produse + cantități + prețuri Copiate din comanda online
Adresă livrare Stocată pe comandă
Metodă plată Card online, ramburs, transfer, etc.

2. Validarea comenzii și verificarea stocului

Unde: /admin/omni_sales/order_list → deschide comanda

Statusurile comenzii OmniSales:

Cod Status Descriere Acțiune necesară
0 Draft Comandă nouă, neconfirmată Review operator
1 New Intrată în sistem, în așteptare procesare
2 Processing În verificare stoc și confirmare Operator validează
3 Confirmed Confirmată, gata pentru depozit Aviz generat automat
4 Shipping Colet preluat de curier AWB emis
5 Delivered Livrată și finalizată
8 Cancelled Anulată Stoc eliberat
9 On Hold Suspendată temporar Intervenție manuală
14 Paid Plătită (util pentru plată în avans)
15 Ready Pregătită pentru livrare Depozit confirmă

Verificare stoc:

Sistemul verifică disponibilul pentru fiecare linie de produs înainte de a crea avizul de livrare:

dacă inventory_manage.inventory_number < cantitate_comandată:
    flag_export_warehouse = 0  → aviz blocat, alertă operator

Dacă stocul e insuficient:

Aprobare comandă (opțional): Dacă activat pe canal: approve_status0 (pending) → 1 (aprobat) → -1 (respins). Util pentru comenzi de valoare mare sau clienți noi fără istoric.


3. Picking și Packing — pregătirea coletului

Unde: /admin/warehouse/manage_delivery · /admin/warehouse/manage_packing_list

3.1 Aviz de Livrare (Goods Delivery Note)

Creare:

Statusuri aviz de livrare:

Status Descriere
ready_for_packing Creat, await picking în depozit
packed Produsele împachetate, packing list creat

Tipuri de livrare:

3.2 Packing List

Creare: Din avizul de livrare → buton Crează Packing List

Operatorul de depozit:

  1. Preia lista produselor de ridicat
  2. Confirmă fizic fiecare articol (scanare cod de bare sau bifat manual)
  3. Ambalează coletul și completează dimensiunile

Câmpuri obligatorii pentru generarea AWB:

Câmp Unde se completează Note
Greutate (kg) Packing List → edit Obligatoriu pentru orice curier
Lungime (cm) Packing List → edit Obligatoriu Innoship/Cargus/FanCourier
Lățime (cm) Packing List → edit Obligatoriu
Înălțime (cm) Packing List → edit Obligatoriu
Serviciu curier Packing List → selectie Standard, Express, Sameday, etc.
Adresă livrare Copiată din comandă Editabilă dacă clientul a comunicat altă adresă

Statusuri packing list:

Status Descriere
wh_ready_to_deliver Creat, în așteptare AWB
wh_in_transit AWB generat, colet preluat de curier
wh_delivered Confirmat livrat de curier

Packing parțial: type_of_packing_list = 'partial' — livrezi ce ai disponibil acum, restul urmează. Clientul primește notificare separată pentru fiecare colet.


4. Generarea AWB-ului de transport

Unde: Buton Generează AWB din packing list aprobat

Opțiunea A — Innoship (agregator)

URL configurare: /admin/innoship/settings

Curierii suportați prin Innoship: Fan Courier, DPD, Cargus, Sameday, GLS, DHL și alții (conform contracte active Innoship).

Condiții prealabile:

Ce se întâmplă la generare AWB:

  1. CRM trimite request la API Innoship cu datele coletului
  2. Innoship returnează: număr AWB + cod tracking
  3. CRM creează înregistrare în wh_omni_shipments
  4. Status packing list → wh_in_transit
  5. Status comandă OmniSales → Shipping (4)
  6. Status actualizat în WooCommerce/Shopify automat (sync bidirectional)
  7. AWB disponibil pentru printare PDF A4 sau termic 100×150mm
  8. Log creat în innoship_audit_log

Opțiunea B — Couriers direct (fără agregator)

URL: /admin/couriers

Curier Condiție
Cargus Contract direct + API key Cargus configurat
Fan Courier Contract direct + credențiale FanCourier API

Avantaj: fără comision agregator. Dezavantaj: mai puțini curierii disponibili, fiecare configurate separat.

Soluție Curierii disponibili Când o folosești
Innoship Fan Courier, DPD, Cargus, Sameday, GLS, DHL + alții Ai contract Innoship, vrei flexibilitate multi-curier
Couriers direct Cargus, Fan Courier Ai contracte directe, nu dorești intermediar

Tracking: Din lista AWB (/admin/innoship/awb sau /admin/couriers/awb) statusul se actualizează automat prin polling periodic.


5. Facturarea — emiterea documentului fiscal

Unde: /admin/invoices

Moduri de generare factură:

Mod Când Configurare
Automată la Shipping Când comanda OmniSales atinge status 4 create_invoice = on pe canal
Automată la confirmare plată La status Paid (14) Util pentru plată card online în avans
Manuală Operator generează din comandă Buton Crează Factură

Conținut factură:

Notificare client: La emiterea facturii: email automat cu PDF factură atașat + numărul AWB pentru tracking.

eFactura (B2B cu CIF)

Dacă clientul este persoană juridică cu CIF valid:

Unde verifici: /admin/invoices → factură → tab eFactura → status transmitere


6. Confirmarea livrării

Tracking automat: Innoship sau curierul direct confirmă livrarea prin API → statusuri actualizate automat:

Document Status anterior Status final
Packing List wh_in_transit wh_delivered
Comandă OmniSales Shipping (4) Delivered (5)
Comandă WooCommerce/Shopify Processing/Shipped Completed

Stocul se scade definitiv din depozit la aprobarea avizului de livrare (nu la livrarea fizică). La confirmarea curier → actualizare doar statusuri, nu stoc.


7. Retururile — sub-fluxul de Goods Return

Unde: /admin/warehouse/manage_order_return_receipt

Fereastra de retur: configurabilă per canal (implicit 30 zile de la livrare).

Pașii fluxului de retur:

Pas Acțiune Cine
1 Client solicită retur (email, telefon, portal) Client
2 Operator verifică eligibilitatea (în termen, produs nefolosit) Operator comenzi
3 Goods Return Receipt creat în CRM (legat la comanda originală) Operator
4 Client trimite coletul înapoi (AWB retur dacă e cazul) Client
5 Depozit recepționează marfa returnată Depozit
6 Stocul returnat intrat în depozit (sau carantină) Automat la aprobare
7 Credit Note emis SAU voucher/rambursare procesată Financiar

Tipuri de retur:

Tip Descriere
fully Comanda returnată integral
partially Parte din produse returnate
manual Ajustare manuală (ex. produs defect fără retur fizic)

Tabel relevant: wh_order_returnsoriginal_order_id (legătura la comanda OmniSales)

Credit Note: Emis automat sau manual din Goods Return Receipt → apare în istoricul financiar al clientului.


Ce se creează automat

Eveniment trigger Document creat automat Condiție
Comandă plasată în WooCommerce/Shopify Comandă OmniSales + Client (dacă nou) Webhook activ sau cron sync
Comandă → status Confirmed (3) Aviz de Livrare cu liniile comenzii Opțiune auto-create activă pe canal
Packing List aprobat + Generează AWB wh_omni_shipments, log Innoship, etichetă AWB API Innoship/Curier configurat
AWB generat Status comandă → Shipping (4), sync în WooCommerce/Shopify
Comandă → status Shipping (4) cu create_invoice = on Factură cu liniile comenzii create_invoice = on pe canal
Factură emisă + client B2B cu CIF eFactura XML trimisă la ANAF Modulul eFactura activ
Curier confirmă livrare Status → Delivered (5); sync în platforma online Tracking Innoship polling
Goods Return Receipt aprobat Stoc recreditat în depozit Aprobare manuală

Puncte unde fluxul poate bloca

Problemă Cauză probabilă Soluție
Comanda nu apare din WooCommerce Webhook neconfigurat sau cron oprit Verifică /admin/woocommerce/stores → webhook URL; restart cron
Comanda nu apare din Shopify API credentials expirate sau Shopify webhook inactiv Reconectează store din /admin/myshopify
Clientul nu e creat automat Email duplicat sau câmp obligatoriu lipsă Verifică maparea câmpurilor în setările canalului
Avizul de livrare nu se generează Opțiunea auto-create dezactivată pe canal Activează din /admin/omni_sales/omni_sales_channel → Edit
Aviz de livrare blocat (stoc 0) Stoc insuficient în depozit Verifică avize de recepție pending; fă ajustare stoc sau livrare parțială
Eroare AWB Innoship — localitate necunoscută Adresă client cu ortografie greșită Editează adresa; verifică dacă localitatea e în baza Innoship
Eroare AWB — dimensiuni lipsesc Câmpurile greutate/lungime/lățime/înălțime necompletate Completează obligatoriu toate 4 câmpuri în packing list
Factura nu se generează automat create_invoice = off pe canal Activează din /admin/omni_sales/omni_sales_channel → Edit canal
eFactura respinsă de ANAF CIF invalid, XML malformat, duplicate Verifică CIF-ul clientului; retrimitere manuală din tab eFactura
Status nu se sincronizează înapoi în WooCommerce Credențiale API WooCommerce expirate sau WordPress actualizat Reconectează store; verifică permisiunile API key-ului WooCommerce
Packing list parțial — al doilea colet uitat Lipsă proces intern pentru livrări în două tranșe Filtrează comenzile cu type_of_packing_list = 'partial' și status wh_ready_to_deliver

Rapoarte relevante

Raport URL Ce monitorizezi
Comenzi OmniSales per canal /admin/omni_sales/report Volumul per WooCommerce/Shopify, statusuri, perioadă
Audit sincronizări /admin/omni_sales/diary_sync Log complet sync WooCommerce/Shopify, erori
AWB-uri în tranzit /admin/innoship/awb Status curierat live; AWB-uri nelivrate
Innoship Audit Log /admin/innoship/audit Toate operațiunile AWB, erori API
Facturi generate din comenzi online /admin/invoices filtrat pe canal Reconciliere financiară e-commerce
Istoric mișcări stoc /admin/warehouse/warehouse_history Mișcări generate de comenzile online
Avize livrare blocate /admin/warehouse/manage_delivery filtru flag_export_warehouse = 0 Comenzi cu stoc insuficient
Retururi /admin/warehouse/manage_order_return_receipt Rate retur pe perioadă, per canal

Module implicate — documentație detaliată

E-commerce & Comenzi: Omni Sales Orders · Sales Channels · WooCommerce · Shopify

Depozit: Delivery Notes · Packing Lists · Delivery Returns · Inventory History

Curierat: Innoship Couriers

Financiar: Invoices · Price Lists

Clienți: Clients

Workflow-uri înrudite: OmniSales Fulfillment · Purchase to Pay · Warehouse Inbound → Outbound

← Înapoi la Workflows