CRMconnect Azuvio · Docs

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 gestionar
  • approval = 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_packingwh_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:

  1. Creezi o sesiune de inventar pentru un depozit / categorie
  2. Introduci cantitățile numărate fizic per produs
  3. Sistemul compară cu stocul scriptic din inventory_manage
  4. Diferențele (plusuri/minusuri) sunt vizibile per produs
  5. 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

  1. Packing List aprobat → buton Generează AWB
  2. Selectezi curierul și serviciul
  3. API returnează: număr AWB + cod tracking
  4. Status Packing List → wh_in_transit
  5. Status comandă → Shipping (4)
  6. Eticheta disponibilă pentru print (A4 sau termic)
  7. 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:

  1. Documentul creat → approval = 0
  2. Notificare trimisă aprobatorilor din wh_approval_setting
  3. Aprobator revizuiește și aprobă/respinge în wh_approval_details
  4. La aprobare: approval = 1 → stocul se modifică
  5. 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ă

← Înapoi la Workflows

Tip

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.

Warning

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.