Workflow: Warehouse Inbound → Outbound
Modules involved: Warehouse (Goods Receipt · Goods Issue · Delivery Notes · Packing Lists · Internal Transfers · Physical Inventory · Loss & Adjustments · Returns) · Innoship · Couriers (Cargus · FanCourier · Palex) · eTransport (ANAF)
Who uses it: Operator Recepție, Operator Picking & Expediere, Operator Inventar, Manager Depozit, Financiar
Durata tipică: Continuu (flux operațional zilnic)
Overview
Toate mișcările de stoc din CRMConnect trec printr-un registru central de tranzacții (goods_transaction_detail) care înregistrează fiecare intrare și ieșire cu cantitățile dinainte și de după. Orice document de depozit (aviz recepție, bon consum, aviz însoțire, transfer intern) modifică stocul doar după aprobare, cu audit trail complet.
Fluxul acoperă ciclul complet: recepție cu scanner de coduri de bare → stocare → picking → ambalare → AWB curierat → eTransport ANAF → livrare → retururi.
Diagrama fluxului
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
INTRĂRI (Inbound)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
│
├── [AVIZ DE RECEPȚIE — NIR]
│ │ surse: Comandă Achiziție / Manual
│ │ ⚡ Scanner coduri de bare: scanezi SKU → cantitate → confirmi linie
│ │ approval: 0=Draft → 1=Approved
│ │ status tranzacție: 1 (Receipt)
│ │ stoc += cantitate recepționată
│ │ lot_number / serial_number / expiry_date înregistrate per linie
│
└── [RETUR LIVRARE — Client Return]
│ produs returnat de client → reintrare în stoc
│ destinație: Stoc Activ (marfă perfectă) sau Carantină (inspecție)
│ status tranzacție: intrare pozitivă
│ → declanșează Notă de Credit în Vânzări
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MIȘCĂRI INTERNE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
│
└── [TRANSFER INTERN]
│ din Depozit A → Depozit B
│ approval: 0=Draft → 1=Approved
│ status tranzacție: 4 (Internal)
│ stoc A -= cantitate / stoc B += cantitate
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IEȘIRI (Outbound)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
│
├── [BON DE CONSUM — Goods Issue Note]
│ │ consum intern (producție, uz propriu)
│ │ status tranzacție: 3 (Issue); stoc -= cantitate consumată
│
├── [AVIZ ÎNSOȚIRE — Delivery Note]
│ │ livrare la client; stoc -= cantitate livrată (cod 2)
│ │ type_of_delivery: total / partial
│ │ → alimentează Packing List
│
├── [PACKING LIST]
│ │ consolideaza 1–N avize de livrare
│ │ câmpuri obligatorii AWB: greutate (kg) + dimensiuni (cm)
│ │ status: ready_for_packing → packed → wh_ready_to_deliver
│ │
│ ├── [AWB — CURIERAT DIRECT]
│ │ │ Cargus / FanCourier / Palex — /admin/couriers
│ │ │ credențiale API per curier + punct de ridicare
│ │ │ număr AWB returnat + etichetă printabilă
│ │ │ tracking în timp real din CRM
│ │ │ status: wh_in_transit → wh_delivered
│ │
│ └── [AWB — INNOSHIP] (230+ curiieri, 35 de țări)
│ │ /admin/innoship — API key + external ID
│ │ selectezi curierul și serviciul din lista completă
│ │ număr AWB + tracking returnat automat
│ │ batch print pentru expedierile zilei
│ │ tracking sync înapoi în WooCommerce/Shopify (dacă OMS)
│ │ status: wh_in_transit → wh_delivered
│
├── [ETRANSPORT — ANAF] ← înainte de plecarea transportului
│ │ /admin/etransport — completat MANUAL înainte de expediere
│ │ câmpuri: tip operațiune, vehicul, rută, bunuri (cod NC, greutate, valoare)
│ │ opțional: referință aviz / factură
│ │ trimitere → UIT (cod unic transport) primit de la ANAF
│ │ status: Netrimisă (3) → În prelucrare (0) → Validată (1) / Eroare (2)
│ │ ⚠ Obligatoriu pentru transporturile care depășesc pragul legal în România
│
└── [RETUR ACHIZIȚIE — Supplier Return]
│ marfă defectă / exces returnată la furnizor
│ stoc -= cantitate returnată (ieșire din depozit sau carantină)
│ → declanșează Notă de Debit în Achiziții
│ furnizorul poate gestiona returul în Portal Furnizori
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CORECȚII
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
│
├── [INVENTAR FIZIC]
│ │ ⚡ Scanner: scanezi SKU → introduci cantitate fizică → comparare automată
│ │ approval: 0=Draft → 1=Approved → ajustări aplicate automat
│
└── [PIERDERI & AJUSTĂRI]
│ deteriorare, furt, expirare, corecții
│ status: 1=Approved / -1=Rejected; status tranzacție: 6 (Loss)
Registrul central de stoc
Toate documentele de depozit înregistrează o linie în goods_transaction_detail la aprobare. Aceasta este sursa de adevăr pentru soldul fiecărui produs în fiecare depozit.
Codurile de tranzacție (status):
| Cod | Tip mișcare | Document sursă | Efect stoc |
|---|---|---|---|
1 |
Goods Receipt | Aviz de Recepție | + intrare |
2 |
Goods Delivery | Aviz Însoțire | − ieșire |
3 |
Goods Issue | Bon de Consum | − ieșire |
4 |
Internal Transfer | Notă Transfer Intern | − din sursă / + în destinație |
6 |
Loss / Adjustment | Pierderi & Ajustări | + sau − |
Câmpuri înregistrate per tranzacție:
| Câmp | Descriere |
|---|---|
commodity_id |
Produsul / marfa |
warehouse_id |
Depozitul afectat |
quantity |
Cantitatea mișcată |
old_quantity |
Soldul înainte de mișcare |
date_add |
Timestamp tranzacție |
lot_number / expiry_date |
Tracking lot și expirare |
serial_number |
Serial number produs (dacă aplicabil) |
from_stock_name / to_stock_name |
Depozitul sursă/destinație (la transferuri) |
Pas cu pas
1. Aviz de Recepție — Intrarea mărfii
Unde: /admin/warehouse/manage_purchase
Creare:
- Automat din Comandă Achiziție aprobată (dacă
auto_create_goods_received = 1în setări) - Manual: buton Adaugă Aviz Recepție
- Din modulul Purchase: buton Crează Aviz Recepție pe PO
Câmpuri cheie:
| Câmp | Note |
|---|---|
goods_receipt_code |
Cod generat automat (prefix NK + număr) |
warehouse_id |
Depozitul destinație |
supplier_code / name |
Furnizorul |
pr_order_id |
Comanda de achiziție asociată |
lot_number |
Număr lot (pentru tracking FIFO) |
date_manufacture / expiry_date |
Dată fabricație / expirare |
Aprobare:
approval = 0(Draft) → revizuire gestionarapproval = 1(Aprobat) → stocul se actualizează automat:inventory_manage.inventory_number += cantitate- Dacă e configurat fluxul de aprobare (
wh_approval_setting): managerul aprobă via notificare - Nu se poate edita după aprobare (protecție integritate stoc)
2. Bon de Consum — Ieșire internă
Unde: /admin/warehouse/goods_issue_note
Când se folosește:
Consumul de materiale în scopuri interne: producție (legat de MO), uz propriu, departamente.
Câmpuri cheie:
| Câmp | Note |
|---|---|
goods_delivery_code |
Cod generat (prefix XK + număr) |
warehouse_id |
Depozitul sursă |
rel_type / rel_document |
Documentul de origine (Ordin Producție, etc.) |
project / department |
Contextul consumului |
Efect: La aprobare → stocul scade: inventory_number -= cantitate (tranzacție cod 3)
3. Aviz Însoțire — Livrare la client
Unde: /admin/warehouse/manage_delivery
Creare:
- Din factură sau comandă OmniSales (automat dacă
auto_create_goods_delivery = 1) - Manual din modulul Warehouse
Tipuri de livrare:
type_of_delivery = 'total'— livrare completătype_of_delivery = 'partial'— livrare parțială (restul va fi livrat ulterior)
Câmpuri cheie:
| Câmp | Note |
|---|---|
goods_delivery_code |
Cod automat |
customer_code / name |
Clientul destinatar |
rel_type |
1=factură, 2=comandă vânzare, 3=manual |
rel_document |
ID-ul documentului de origine |
invoice_id |
Factura asociată |
delivery_status |
ready_for_packing → wh_ready_to_deliver (după Packing List) |
shipping_fee |
Cost transport inclus în document |
Aprobare → Packing List → AWB:
Avizul aprobat alimentează fluxul de packing și livrare (vezi Workflow 3 — OmniSales Fulfillment).
Efect: La aprobare → stocul scade (tranzacție cod 2)
4. Transfer Intern — Mutare între depozite
Unde: /admin/warehouse/manage_internal_delivery
Când se folosește:
Mutarea stocului din depozitul A în depozitul B (ex: de la depozit central la punct de lucru, de la WIP la finished goods).
Câmpuri cheie:
| Câmp | Note |
|---|---|
internal_delivery_code |
Prefix ID + număr |
from_stock_name |
Depozitul sursă (ID) |
to_stock_name |
Depozitul destinație (ID) |
available_quantity |
Stoc disponibil în sursă |
quantities |
Cantitatea transferată |
Efect: La aprobare → două tranzacții cod 4:
- Depozit sursă:
inventory_number -= cantitate - Depozit destinație:
inventory_number += cantitate
5. Inventar Fizic — Reconcilierea stocului
Unde: /admin/warehouse/physical_inventory
Procesul:
- Creezi o sesiune de inventar pentru un depozit / categorie
- Introduci cantitățile numărate fizic per produs
- Sistemul compară cu stocul scriptic din
inventory_manage - Diferențele (plusuri/minusuri) sunt vizibile per produs
- La aprobare (
approval = 1) → ajustările se aplică automat pe stoc
Câmpuri sesiune:
| Câmp | Note |
|---|---|
stock_take_code |
Cod document |
warehouse_id |
Depozitul inventariat |
date_stock_take |
Data inventarului |
Detalii: current_number |
Stocul scriptic la momentul inventarului |
Detalii: updates_number |
Cantitatea numărată fizic |
6. Pierderi & Ajustări — Corecții punctuale
Unde: /admin/warehouse/loss_adjustment
Tipuri:
type |
Descriere | Exemple |
|---|---|---|
loss |
Pierdere / degradare | Produse expirate, sparte, furate |
adjustment |
Ajustare scriptic | Corecție eroare înregistrare anterioară |
Statusuri:
status |
Descriere |
|---|---|
1 |
Aprobat — ajustarea aplicată pe stoc |
-1 |
Respins — nicio modificare de stoc |
Câmpuri:
| Câmp | Note |
|---|---|
type |
loss sau adjustment |
reason |
Motivul ajustării (obligatoriu) |
warehouses |
Depozitul afectat |
current_number |
Stoc înainte de ajustare |
updates_number |
Stoc după ajustare |
Tracking lot și serie
CRMConnect suportă tracking avansat:
| Feature | Câmp | Unde se setează |
|---|---|---|
| Lot number | lot_number |
La recepție; urmărit per livrare (FIFO) |
| Dată fabricație | date_manufacture |
La recepție |
| Data expirare | expiry_date |
La recepție; alertă configurabilă |
| Serial number | serial_number |
Per unitate; tabel separat wh_inventory_serial_numbers |
Livrarea selectează loturile automat în ordine FIFO (primul intrat, primul ieșit) când lot_number e completat.
Scanner coduri de bare — unde și cum
CRMConnect suportă scanere barcode (USB HID sau Bluetooth) în orice modul WMS cu câmp de articol:
| Modul | Cum se folosește |
|---|---|
| Aviz de Recepție (NIR) | Focusezi câmpul SKU → scanezi eticheta coletului → platforma identifică articolul automat → introduci cantitatea |
| Picking (Aviz Însoțire) | Scanezi articolul de pe raft → sistemul confirmă că e articolul corect din comandă |
| Verificare la ambalare | Scanezi fiecare articol înainte de sigilare → confirmi că conținutul corespunde Packing List-ului |
| Inventar Fizic | Scanezi SKU-ul de pe raft → introduci cantitatea numărată → fără erori de tastare |
Beneficiu principal: Elimină erorile de SKU la toate punctele critice — recepție greșită = stoc greșit = livrare greșită.
AWB & Curierat — Generare document de transport
Pasul 1 — Finalizare Packing List
Înainte de generarea AWB, Packing List-ul trebuie să conțină:
| Câmp obligatoriu | De ce |
|---|---|
| Greutate (kg) | Calculul costului și restricțiile curierului |
| Lungime × Lățime × Înălțime (cm) | Dimensiunile coletului |
| Adresă livrare completă | Validată de API-ul curierului |
| Serviciu curier ales | Standard, express, weekend etc. |
Pasul 2 — Alege modalitatea de curierat
Opțiunea A — Curierat Direct (/admin/couriers)
Integrare directă cu curierul, fără intermediar:
| Curier | Configurare |
|---|---|
| Cargus | URL API + cheie abonament + utilizator/parolă + punct ridicare |
| FanCourier | URL API + utilizator/parolă + ID client → workpointuri sincronizate automat |
| Palex | Credențiale API Palex + punct ridicare |
Recomandată dacă: ai contract direct cu un curier, livrezi exclusiv în România, volum mediu.
Opțiunea B — Innoship (/admin/innoship) — 230+ curiieri în 35 de țări
| Avantaj | Detaliu |
|---|---|
| Acoperire internațională | DPD, GLS, DHL, TNT, FedEx + curierii naționali |
| Comparare tarife | Selectezi cel mai avantajos serviciu per comandă |
| Batch print | Printezi toate AWB-urile zilei dintr-un singur click |
| Sync WooCommerce/Shopify | Tracking number trimis automat înapoi pe canal |
Recomandată dacă: livrezi internațional, ai volum mare, vrei un singur punct de integrare.
Pasul 3 — Generare AWB
- Packing List aprobat → buton Generează AWB
- Selectezi curierul și serviciul
- API returnează: număr AWB + cod tracking
- Status Packing List →
wh_in_transit - Status comandă →
Shipping (4) - Eticheta disponibilă pentru print (A4 sau termic)
- Eticheta se lipește pe colet → coletul se predă curierului
eTransport ANAF — Declarare transport (România)
Obligatoriu pentru transporturile de mărfuri care depășesc pragul legal în România. Se completează manual, înainte de plecarea transportului.
Unde: /admin/etransport → Add Declaration
| Câmp | Ce completezi |
|---|---|
| Tip operațiune | Intern / Import / Export / Intracomunitar / Tranzit |
| Partener | Clientul (livrare) sau furnizorul (achiziție) |
| Vehicul | Număr înmatriculare + remorcă (opțional) |
| Data transportului | Data plecării |
| Bunuri | Cod NC tarifar, UM, cantitate, greutate, valoare |
| Rută | Punct start (județ + adresă) + punct final |
| Referință | Avizul de livrare sau factura (opțional) |
Statusuri:
| Status | Cod | Semnificație |
|---|---|---|
| Netrimisă | 3 | Creată local |
| În prelucrare | 0 | Trimisă, ANAF procesează |
| Validată | 1 | UIT primit — transportul poate pleca |
| Eroare | 2 | Câmp incorect — corectezi și retrimiți |
UIT (Unique Identifier Transport) = codul emis de ANAF. Șoferul trebuie să îl aibă la el pe durata transportului.
Retururi — Fluxul complet
Retur de la Client
Client anunță returul (portal, telefon, email)
↓
Customer Support aprobă și comunică depozitului
↓
Marfa sosește fizic la depozit → inspecție
↓
Depozit → Retururi Livrare → Adaugă
→ Asociezi avizul de livrare original
→ Introduci articolele și cantitățile returnate
→ Selectezi destinație:
├─ Stoc Activ (marfă perfect) → disponibil imediat
└─ Carantină (necesită inspecție) → decide managerul
↓
Stocul crește automat în depozitul selectat
↓
[Vânzări] Sales Admin emite Notă de Credit → soldul clientului scade
↓
[Financiar] Procesează rambursarea dacă e cazul
↓
[Carantină → decizie manager]:
├─ Marfă OK → Transfer Intern la stoc activ
└─ Marfă defectă → Ajustări & Pierderi (casare) sau Retur Furnizor
Retur la Furnizor
Identifici: marfă defectă / exces / neconformă la recepție sau ulterior
↓
Izolezi fizic în Carantină (Transfer Intern dacă e necesar)
↓
Contactezi furnizorul → confirmare retur
↓
Depozit → Retururi Achiziție → Adaugă
→ Asociezi Comanda de Achiziție / NIR original
→ Introduci articolele și cantitățile de returnat
→ Selectezi depozitul sursă
↓
Stocul scade automat
↓
[Achiziții] Emite Notă de Debit → reduce suma de plătit furnizorului
↓
Pregătești fizic coletul → AWB retur (furnizorul trimite eticheta)
↓
Furnizorul confirmă primirea în Portal Furnizori
Impactul financiar al retururilor
| Scenariu | Document emis | Efect |
|---|---|---|
| Client returnează marfă conformă | Notă de Credit | Reduce venituri, stoc crește |
| Client returnează marfă defectă (vina furnizorului) | Notă de Credit + Notă de Debit | Recuperezi costul de la furnizor |
| Returnezi marfă la furnizor | Notă de Debit | Reduce suma de plătit |
| Marfă nereturnabilă, casată | Ajustări & Pierderi | Scade stocul, cost în P&L |
Fluxul de aprobare (configurable)
Orice document de depozit poate trece printr-un flux de aprobare multi-nivel:
- Documentul creat →
approval = 0 - Notificare trimisă aprobatorilor din
wh_approval_setting - Aprobator revizuiește și aprobă/respinge în
wh_approval_details - La aprobare:
approval = 1→ stocul se modifică - La respingere: documentul rămâne în
approval = 0, poate fi editat și retrimis
Document types cu aprobare configurabilă:
goods_receipt · goods_delivery · internal_delivery_note · stock_take
Ce se creează automat
| Eveniment | Se creează automat |
|---|---|
| Comandă Achiziție aprobată (dacă activat) | Aviz de Recepție draft |
| Factură OmniSales generată (dacă activat) | Aviz Însoțire draft |
| Aviz Recepție aprobat | Tranzacție cod 1 în goods_transaction_detail |
| Aviz Însoțire aprobat | Tranzacție cod 2; stoc scăzut |
| Bon Consum aprobat | Tranzacție cod 3; stoc scăzut |
| Transfer Intern aprobat | Două tranzacții cod 4 (sursă − / destinație +) |
| Inventar Fizic aprobat | Ajustări aplicate automat per produs |
Ordin Producție → done |
Produs finit adăugat în depozit; tranzacție stoc |
Puncte unde fluxul poate bloca
| Problemă | Cauză probabilă | Soluție |
|---|---|---|
| Stocul nu se actualizează după recepție | Avizul e în approval = 0 (draft) |
Aprobă documentul |
| Nu se poate edita avizul aprobat | Protecție integritate — approval = 1 blochează editarea |
Creează un aviz de ajustare/corecție separat |
| Stocul scade sub 0 la livrare | Lipsă în stoc sau lot greșit | Verifică disponibilul per lot în Warehouse History |
| Transferul intern nu apare în destinație | Documentul neaprobat | Aprobă nota de transfer |
| Inventarul arată diferențe mari față de fizic | Tranzacții neaprobate pending | Verifică toate documentele în approval = 0 înainte de inventar |
Rapoarte relevante
- Istoric Inventar —
/admin/warehouse/warehouse_history— toate tranzacțiile per produs/depozit - Rapoarte Depozit —
/admin/warehouse/manage_report— stocuri curente, mișcări pe perioadă - Inventar curent — solduri în timp real per depozit și produs
Module implicate — documentație detaliată
- Warehouses · Warehouse Settings
- Commodities
- Goods Receipt Note
- Goods Issue Note
- Delivery Notes
- Internal Transfers
- Physical Inventory
- Loss & Adjustments
- Inventory History
Creați Recepția de Marfă în aceeași zi cu sosirea mărfii — o recepție întârziată înseamnă că stocul este fizic prezent dar nu în sistem, ducând la date incorecte de disponibilitate pentru cotații de vânzări și declanșatoare de reaprovizionare.
Nu expediați niciodată mărfuri fără un Aviz de Livrare finalizat. Stocul nu se decrementează în sistem fără un aviz confirmat — un colet care pleacă fără unul creează stoc fantomă care apare ca discrepanță la următorul inventar fizic.