CRMconnect Azuvio · Docs

Workflow: Full Commercial Cycle

Modules involved: Leads · Opportunities · Proposals · Sales Orders (Sales Orders) · Warehouse · Purchase · Invoices · Payments · Innoship
Who uses it: Vânzări · Depozit · Achiziții · Financiar
Durata tipică: Zile – săptămâni (de la lead la livrare și plată)

Overview

Fluxul comercial complet — de la primul contact cu prospectul până la rotația stocului după livrare. Acoperă vânzarea, verificarea stocului, aprovizionarea pentru lipsuri (backorder manual), recepția de la furnizori, livrarea la client cu aviz și factură, și gestionarea stocului rezidual.

Important — limitări de automatizare cunoscute:
CRMConnect automatizează parțial acest ciclu. Trei puncte necesită intervenție manuală: (1) crearea RFQ-ului la stoc insuficient, (2) legătura directă comandă vânzare ↔ comandă achiziție nu există în tabele, (3) reaprovizionarea automată la stoc minim nu este implementată — minimul configurat este informativ.


Diagrama completă a fluxului

[LEAD]
  │ captare: formular / email pipe / Facebook / manual
  │ ↓
[OPORTUNITATE]
  │ calificare, valoare estimată, probabilitate
  │ ↓
[PROPUNERE (Proposal)]
  │ Ciornă → Trimisă → Acceptată
  │ ↓ Convert
[COMANDĂ DE VÂNZARE (Sales Order/Sales Order)]
  │ status: Draft(1) → Sent(2) → Accepted(4) → Invoiced
  │ ↓ Convert to Invoice
[FACTURĂ CLIENT — Draft]
  │
  ├──────────────────────────────────────────────────────────────
  │  VERIFICARE STOC (la crearea avizului de livrare)
  │
  │  inventory_manage.inventory_number ≥ cantitate comandată?
  │
  ├─── DA → stoc suficient ─────────────────────────────────────┐
  │                                                              │
  └─── NU → stoc insuficient ───────────────────────────────────┤
              │                                                  │
              │ [BACKORDER — intervenție manuală]               │
              │  Agent identifică lipsa →                       │
              │                                                  │
              │ [CERERE DE OFERTĂ (RFQ)]                        │
              │  status: Draft(1) → Approved(2)                 │
              │  ↓                                              │
              │ [OFERTĂ FURNIZOR (Quotation)]                   │
              │  status: Pending(1) → Accepted(2)              │
              │  ↓                                              │
              │ [COMANDĂ ACHIZIȚIE (Purchase Order)]            │
              │  trimisă furnizorului                           │
              │  ↓                                              │
              │ [AVIZ RECEPȚIE (Goods Receipt)]                 │
              │  marfă sosită → stoc actualizat                 │
              │  ↓                                              │
              │ [FACTURĂ FURNIZOR (Vendor Invoice)]             │
              │  payment_status: unpaid → paid                  │
              │  ↓                                              │
              └──────────→ STOC DISPONIBIL ────────────────────┘
                                │
                                ↓
              [AVIZ DE LIVRARE (Delivery Note)]
               creat din factură client
               approval: 0=Draft → 1=Approved
               stoc −= cantitate livrată
               ↓
              [PACKING LIST]
               dimensiuni colet + greutate
               ↓
              [AWB INNOSHIP]
               generat prin API curier
               ↓
              [AVIZ ÎNSOȚIRE trimis clientului]
               document PDF cu produsele livrate
               ↓
              [FACTURĂ CLIENT — Trimisă]
               status: Trimisă → Parțial plătită → Plătită
               ↓
              [PLATĂ CLIENT ÎNCASATĂ ✓]
               ↓
              [ROTAȚIE STOC]
               sold actualizat în warehouse_history
               verificare stoc minim (inventory_commodity_min)
               dacă sub minim → agent creează RFQ nou

Pas cu pas detaliat

Faza 1 — Vânzare: Lead → Comandă de vânzare

1.1 Lead

Unde: /admin/leads

Prospectul intră prin orice canal (formular, Facebook Lead Ads, email pipe, import, manual). Agentul SDR îl qualifică și actualizează statusul prin pipeline.

Câmpuri esențiale pentru continuarea fluxului:

  • Companie + persoană de contact
  • Email (pentru trimiterea propunerii)
  • Sursă (pentru raportare ROI)

1.2 Oportunitate

Unde: /admin/leads (filtru Oportunități) sau /admin/opportunities

Din lead → Convertește în Oportunitate. Completezi:

  • Valoarea estimată a tranzacției
  • Data estimată de închidere
  • Probabilitatea de conversie

Oportunitatea alimentează forecast-ul de vânzări și poate fi inclusă în Goals ca target de monitorizat.

1.3 Propunere

Unde: /admin/proposals

Din oportunitate → Crează Propunere. Ciclul:

Status Cod Trigger
Ciornă 6 La creare
Trimisă 4 Buton Trimite → email cu link portal
Analizată 1 Clientul deschide link-ul
Acceptată 3 Client apasă Accept sau agent schimbă manual
Respinsă 2 Client sau agent

La acceptare → disponibil butonul Convertește în Comandă de Vânzare (Sales Order).

1.4 Comandă de Vânzare — Sales Order (Sales Order)

Unde: /admin/estimates

Creată din propunere acceptată — toate liniile de produse/servicii se copiază automat.

Statusuri sales order (tblestimates.status):

Cod Status Descriere
1 Draft Ciornă neconfirmată
2 Sent Trimisă clientului
3 Declined Refuzată
4 Accepted / Invoiced Acceptată și convertită în factură
5 Expired Data expirare depășită

Câmpuri cheie:

  • invoiceid — completat automat după conversie în factură
  • invoiced_date — timestamp-ul conversiei

La acceptarea clientului:
Dacă estimate_auto_convert_to_invoice_on_client_accept = 1 → factura se generează automat.
Altfel → buton manual Convertește în Factură.


Faza 2 — Verificarea stocului

Când: La crearea Avizului de Livrare din factură

Cum funcționează:

Sistemul apelează get_inventory_by_commodity_and_warehouse(commodity_code, warehouse_id) și verifică:

dacă inventory_manage.inventory_number < cantitate_comandată:
    flag_export_warehouse = 0  → avizul de livrare NU se poate aproba

Important — fără rezervare automată:
Stocul NU este rezervat la crearea comenzii de vânzare. Este verificat și scăzut abia la aprobarea avizului de livrare. Între comanda de vânzare și livrare, stocul poate fi consumat de alte ordine.

Stoc minim configurat — referință informativă:

Tabelul inventory_commodity_min stochează:

  • inventory_number_min — pragul de alertă
  • inventory_number_max — nivelul țintă la reaprovizionare

Aceste valori nu declanșează automat nicio acțiune. Agentul trebuie să verifice manual și să creeze RFQ când constată că stocul a coborât sub minim.

Unde verifici stocul: /admin/warehouse/warehouse_history sau din fișa produsului (Commodities) → sold curent per depozit.


Faza 3 — Backorder: Aprovizionare pentru lipsuri (Manual)

Această fază se parcurge doar dacă stocul este insuficient. Dacă stocul există, treci direct la Faza 4.

CRMConnect nu are un mecanism automat de backorder. Fluxul de aprovizionare se inițiază manual de agentul de achiziții.

3.1 Cerere de Ofertă (RFQ)

Unde: /admin/purchase/purchase_request

Agentul creează RFQ specificând produsele și cantitățile lipsă față de comanda de vânzare. Documentul de referință (comanda de vânzare) se notează în câmpul de descriere sau note interne.

Statusuri RFQ:

Cod Status
1 Draft
2 Approved — trimis la furnizori
3 Rejected
4 Canceled

Legătura cu comanda de vânzare: Nu există câmp FK direct în tabele. Convenție recomandată: menționează numărul comenzii de vânzare în titlul sau descrierea RFQ-ului pentru trasabilitate manuală.

3.2 Oferte de la furnizori (Quotations)

Unde: /admin/purchase/myquotations

Furnizorii răspund prin portal sau agentul introduce ofertele primite. Poți compara mai multe oferte pentru același RFQ înainte de selecție.

Cod Status
1 Pending — primit, neevaluat
2 Accepted — oferta câștigătoare

3.3 Comandă Achiziție (Purchase Order)

Unde: /admin/purchase/purchase_order

Creată din oferta acceptată. Trimisă furnizorului cu PDF + link portal.

Statusuri PO:

Câmp Cod Descriere
status 1 Draft
status 2 Approved — confirmat furnizorului
status 3 Rejected
status 4 Canceled
order_status 1 Not Started
order_status 2 In Progress
order_status 3 Completed
delivery_status 0 Nelivrat
delivery_status 1 Livrat

3.4 Aviz Recepție de la furnizor (Goods Receipt Note)

Unde: /admin/warehouse/manage_purchase

Creat automat la aprobarea PO (dacă auto_create_goods_received = 1) sau manual.

La aprobare (approval = 1):

  • Stocul crește: inventory_manage.inventory_number += cantitate_recepționată
  • Tranzacție înregistrată: goods_transaction_detail.status = 1 (Receipt)
  • Tracking lot: lot_number, date_manufacture, expiry_date

Câmpuri critice pentru rotația stocului:

Câmp Note
lot_number Identificator lot — baza FIFO
date_manufacture Data fabricației
expiry_date Data expirare — avertizare stoc perisabil
warehouse_id Depozitul destinație

3.5 Factură Furnizor (Vendor Invoice)

Unde: /admin/purchase/myinvoices

Primită de la furnizor după recepție. payment_status: unpaidpartially_paidpaid.

Plata furnizorului se înregistrează în pur_invoice_payment.


Faza 4 — Livrare la client

4.1 Factură Client (dinaintea livrării)

Unde: /admin/invoices

Convertită din Comanda de Vânzare (Sales Order). La creare:

  • tblestimates.invoiceid = invoice_id
  • tblestimates.status = 4 (Invoiced)
  • Dacă auto_create_goods_delivery = 1 → Avizul de Livrare se creează automat

Statusuri factură:

Cod Status
6 Draft
1 Netrimisă
3 Parțial plătită
2 Plătită
4 Întârziată
5 Anulată

4.2 Aviz de Livrare (Delivery Note — Aviz Însoțire)

Unde: /admin/warehouse/manage_delivery

Creare automată din factură (dacă opțiunea e activă) prin metoda:
auto_create_goods_delivery_with_invoice(invoice_id)

Câmpuri setate automat:

  • invoice_id = ID factura client
  • Liniile de produse copiate din itemele facturii
  • warehouse_id = depozitul configurabil

Verificare stoc la creare:

  • Dacă stoc insuficient → flag_export_warehouse = 0avizul blocat
  • Agentul vede avertizarea și inițiază Faza 3 (backorder)
  • Odată stocul aprovizionat → revenire la aviz → aprobare

Tipuri de livrare:

  • type_of_delivery = 'total' — livrare completă
  • type_of_delivery = 'partial' — livrare parțială (un al doilea aviz ulterior)

La aprobare (approval = 1):

  • Stocul scade: inventory_manage.inventory_number -= cantitate
  • Tranzacție: goods_transaction_detail.status = 2 (Delivery)
  • FIFO: loturile selectate în ordinea intrării (ORDER BY id ASC)

4.3 Packing List + AWB Innoship

Unde: /admin/warehouse/manage_packing_list + /admin/innoship/awb

Din avizul de livrare aprobat:

  1. Packing List — selectezi cantitățile, completezi dimensiuni (lungime, lățime, înălțime, greutate)
  2. AWB generat prin API Innoship — returnează număr tracking
  3. Status packing list: wh_ready_to_deliverwh_in_transitwh_delivered

Avizul Însoțire — documentul PDF care însoțește marfa fizic, trimis și clientului cu:

  • Lista produselor livrate + cantități
  • Numărul AWB pentru tracking
  • Datele expeditorului și destinatarului

4.4 Factură Client — Trimitere și Plată

Factura trimisă clientului (email + PDF + link portal). Clientul poate plăti online (dacă gateway configurat) sau prin virament.

La plată completă:

  • status = 2 (Plătită)
  • Activitate logată în istoricul clientului
  • Dacă cancelled_invoice_reverse_inventory = 1 și factura anulată ulterior → stocul se reface

Faza 5 — Rotația stocului

5.1 Principiul FIFO

CRMConnect aplică FIFO prin tracking de lot:

  • La recepție: fiecare lot primit are lot_number, date_manufacture, expiry_date
  • La livrare: loturile sunt selectate în ordinea înregistrării (ORDER BY id ASC pe goods_receipt_detail)
  • Rezultat: marfa cea mai veche / primul lot intrat → primul livrat

Vizualizare: Fișa produsului → tab Inventory → solduri per lot per depozit.

5.2 Stocul minim — monitorizare manuală

Unde: /admin/warehouse/warehouse_history + Commodities → edit → câmpuri min/max

Tabelul inventory_commodity_min stochează:

Câmp Descriere
inventory_number_min Prag minim alertă
inventory_number_max Nivel target la reaprovizionare

Workflow recomandat pentru reaprovizionare periodică:

  1. Setează inventory_number_min pe fiecare produs activ
  2. Rulează periodic raportul Stoc curent filtrat sub minim
  3. Agentul de achiziții creează RFQ pentru produsele sub prag
  4. Cantitatea comandată = inventory_number_max - inventory_number_curent

Nu există trigger automat. Verificarea se face manual sau poate fi automatizată extern via webhook + Zapier (dacă stocul e sub minim, Zapier creează task de reaprovizionare).

5.3 Produse perisabile — alerte de expirare

Produsele cu expiry_date completat pe avizul de recepție pot fi monitorizate:

  • Filtru în lista de produse după expiry_date < data curentă + N zile
  • Livrarea le selectează în FIFO — cele mai apropiate de expirare, primele ieșite
  • Loturile expirate → Pierderi & Ajustări (/admin/warehouse/loss_adjustment) cu type = 'loss'

5.4 Ajustări de stoc

Discrepanțe constatate la inventarul fizic periodic:

  1. Inventar fizic (/admin/warehouse/physical_inventory) — numărare și reconciliere
  2. Pierderi & Ajustări (/admin/warehouse/loss_adjustment) — corecții punctuale
  3. Retur de la client (/admin/warehouse/manage_order_return_receipt) — marfă returnată reintrată în stoc

Harta documentelor și statusurilor

VÂNZARE:
tblestimates.status:  1=Draft 2=Sent 3=Declined 4=Invoiced 5=Expired
tblinvoices.status:   6=Draft 1=Unpaid 3=Partial 2=Paid 4=Overdue 5=Cancelled
tblproposals.status:  6=Draft 4=Sent 1=Open 3=Accepted 2=Declined 5=Revised

DEPOZIT (ieșiri):
goods_delivery.approval:       0=Draft → 1=Approved
goods_delivery.type_of_delivery: 'total' / 'partial'
goods_transaction_detail.status: 2=Delivery, 3=Issue

ACHIZIȚIE:
pur_request.status:    1=Draft 2=Approved 3=Rejected 4=Canceled
pur_estimates.status:  1=Pending 2=Accepted
pur_orders.status:     1=Draft 2=Approved 3=Rejected 4=Canceled
pur_orders.order_status: 1=NotStarted 2=InProgress 3=Completed
pur_invoices.payment_status: unpaid / partially_paid / paid

DEPOZIT (intrări):
goods_receipt.approval:       0=Draft → 1=Approved
goods_transaction_detail.status: 1=Receipt

CURIER:
wh_packing_lists.delivery_status: wh_ready_to_deliver → wh_in_transit → wh_delivered

Ce se creează automat vs. manual

Pas Automat? Condiție
Lead din formular web ✅ Automat Formular embed activ
Propunere → Factură ✅ Automat (opțional) estimate_auto_convert_to_invoice_on_client_accept = 1
Factură → Aviz Livrare ✅ Automat (opțional) auto_create_goods_delivery = 1
PO → Aviz Recepție ✅ Automat (opțional) auto_create_goods_received = 1
Backorder la stoc insuficient Manual Agent creează RFQ
Comandă achiziție din comandă vânzare Manual Nu există FK direct
Reaprovizionare la stoc minim Manual Trigger automat inexistent
Aviz Livrare → AWB Innoship ✅ Automat Packing list aprobat + API key configurat
Stoc decrementat ✅ Automat La aprobarea avizului de livrare
Stoc incrementat ✅ Automat La aprobarea avizului de recepție

Puncte critice de atenție

Risc Impact Mitigare
Stocul nerezerват la comanda de vânzare Stoc consumat de alt ordin înainte de livrare Procesează livrările în ordinea priorității; verifică disponibil zilnic
Backorder fără legătură FK cu comanda de vânzare Pierdere trasabilitate furnizor ↔ client Notează manual numărul comenzii de vânzare în titlul RFQ
FIFO corect doar cu lot_number completat la recepție Produse expirate livrate dacă loturile nu sunt înregistrate Impune completarea lot_number și expiry_date la toate recepțiile
Stoc minim nemonitorizat Rupturi de stoc nedetectate Verificare săptămânală raport stoc vs minim
Aviz livrare blocat (stock = 0) Livrare întârziată Alert vizibil în UI; procedura de escaladare la achiziții definită
Factură anulată după livrare Stocul nu se reface dacă cancelled_invoice_reverse_inventory = 0 Activează opțiunea SAU crează ajustare manuală de stoc

Trasabilitatea completă a unui ordin

Pornind de la numărul comenzii de vânzare, poți urmări:

Sales Order #EST-001
  └── Invoice #INV-010  (tblestimates.invoiceid = 10)
        └── Delivery Note #XK-005  (goods_delivery.invoice_id = 10)
              └── Packing List #PL-003
                    └── AWB #FAN-123456  (wh_omni_shipments)
        └── Payment #PAY-007  (tblinvoices → tblinvoicepayments)

RFQ #RFQ-002  [creat manual pentru lipsuri din EST-001]
  └── Quotation #Q-004  (pur_estimates)
        └── Purchase Order #PO-006  (pur_orders)
              └── Goods Receipt #NK-008  (goods_receipt, pr_order_id = PO-006)
                    └── Vendor Invoice #VI-009  (pur_invoices)

Rapoarte cheie pentru monitorizare

Raport URL Ce monitorizezi
Comenzi vânzare pending /admin/estimates/list_estimates?status=2 Comenzi trimise, neconfirmate
Facturi neîncasate /admin/invoices/list_invoices?status=1 Cash flow client
Facturi întârziate /admin/invoices/list_invoices?status=4 Colectare creanțe
Comenzi achiziție nelivrate /admin/purchase/purchase_order?delivery_status=0 Furnizori în întârziere
Stoc curent vs minim Commodities + inventory_commodity_min Rupturi iminente
Istoric tranzacții stoc /admin/warehouse/warehouse_history Audit mișcări
Avize livrare pending /admin/warehouse/manage_delivery Livrări blocate
AWB-uri în tranzit /admin/innoship/awb Status curierat

Module implicate — documentație detaliată

Vânzare: Leads · Opportunities · Proposals · Sales Orders / Sales Orders · Invoices · Payments

Depozit: Delivery Notes · Goods Receipt Note · Packing Lists · Inventory History · Loss & Adjustments · Physical Inventory

Achiziție: RFQ · Received Quotations · Purchase Orders · Vendor Invoices

Curier & Integrări: Innoship Couriers · WooCommerce · Webhooks

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

← Înapoi la Workflows

Tip

Fiecare etapă din ciclul comercial complet se completează automat din cea anterioară când se convertește corect — folosiți acțiunile de Conversie în loc să creați documente noi manual pentru a păstra lanțul complet trasabil de la lead la plată.

Note

Ciclul complet funcționează numai când fiecare etapă este completată în ordine. Emiterea unei facturi fără o Comandă de Vânzare confirmată sau crearea unui contract după facturare rupe lanțul de trasabilitate pe care auditorii și reglementatorii se așteaptă să-l vadă.