Workflow: Purchase to Pay
Modules involved: Purchase (RFQ · Quotations · Purchase Orders · Vendor Invoices) · Warehouse (Goods Receipt) · Payments
Who uses it: Responsabil achiziții, Manager depozit, Financiar, Furnizori
Durata tipică: 1 zi – 4 săptămâni (depinde de termenele furnizorului)
Overview
Fluxul complet de aprovizionare: de la nevoia identificată intern (cerere de ofertă) până la plata facturii furnizorului și intrarea mărfii în stoc. Gestionat în principal de echipa de achiziții și depozit.
Diagrama fluxului
[CERERE DE OFERTĂ (RFQ)]
│ status: Draft (1) → Approved (2) → Rejected (3) / Canceled (4)
│ ↓ Aprobare internă → trimitere la furnizori
│
[OFERTE PRIMITE (Quotations)]
│ furnizorul răspunde prin portal sau manual
│ status: Draft (1) → Accepted (2)
│ ↓ Selectezi oferta câștigătoare → crezi Comandă Achiziție
│
[COMANDĂ ACHIZIȚIE (Purchase Order)]
│ status: Draft (1) → Approved (2) → Rejected (3) / Canceled (4)
│ order_status: Not Started (1) → In Progress (2) → Completed (3)
│ delivery_status: 0 = nelivrat / 1 = livrat
│ ↓ Marfă sosește în depozit → Aviz de Recepție
│
[AVIZ DE RECEPȚIE (Goods Receipt Note)]
│ creat automat sau manual din PO
│ stocul se actualizează în depozit
│ ↓ Factură primită de la furnizor
│
[FACTURĂ FURNIZOR (Vendor Invoice)]
│ payment_status: unpaid → partially_paid → paid
│ ↓ Înregistrezi plata
│
[PLATĂ FURNIZOR]
│
[CICLU ÎNCHIS ✓]
Pas cu pas
1. Cerere de Ofertă (RFQ) — Identificarea nevoii
Unde: /admin/purchase/purchase_request
Cum se creează:
- Manual: buton Adaugă RFQ — completezi ce produse sunt necesare, cantități, termen
- Automat: din Ordinul de Producție când materialele lipsesc din stoc (
purchase_request_idsetat pe MO)
Câmpuri cheie:
| Câmp | Note |
|---|---|
| Denumire RFQ | Titlu intern descriptiv |
| Departament | Departamentul solicitant |
| Responsabil | Staff-ul care face cererea |
| Data solicitată | Termenul de nevoie |
| Articole | Produse + cantități necesare |
Statusurile RFQ:
| Cod | Status | Descriere |
|---|---|---|
| 1 | Draft | Creat, nesupus aprobării |
| 2 | Approved | Aprobat intern — se trimite la furnizori |
| 3 | Rejected | Respins |
| 4 | Canceled | Anulat |
La trecerea în status Approved, sistemul apelează
update_item_pur_request()pentru a sincroniza articolele cu catalogul de achiziții și loghează tranziția automat.
2. Ofertă Primită (Quotation) — Răspunsul furnizorului
Unde: /admin/purchase/myquotations
Cum intră oferta:
- Portal furnizor: furnizorul primește link și completează oferta online
- Manual: operatorul introduce oferta primit pe email/telefon
- Upload: document PDF atașat cu prețuri completate manual
Câmpuri cheie pe ofertă:
| Câmp | Note |
|---|---|
| Furnizor | Legătura cu fișa furnizorului |
| RFQ asociat | Cererea de origine |
| Data expirare | Valabilitatea ofertei |
| Articole + prețuri | Ce oferă furnizorul și la ce preț |
| Termeni plată | Zile credit comercial |
Statusuri ofertă:
| Cod | Status | Descriere |
|---|---|---|
| 1 | Draft / Pending | Ofertă primită, neacceptată |
| 2 | Accepted | Oferta selectată câștigătoare |
Comparare oferte:
Poți primi multiple oferte pentru același RFQ și le poți compara pe coloane înainte de a selecta furnizorul.
3. Comandă Achiziție (Purchase Order) — Angajamentul legal
Unde: /admin/purchase/purchase_order
Creare:
- Din oferta acceptată: buton Crează Comandă — preia furnizorul și articolele automat
- Direct:
/admin/purchase/pur_order→ completezi manual
Statusurile PO:
| Câmp | Cod | Descriere |
|---|---|---|
status |
1 | Draft — neconfirmat |
status |
2 | Approved — confirmat și trimis furnizorului |
status |
3 | Rejected |
status |
4 | Canceled |
order_status |
1 | Not Started — livrarea nu a început |
order_status |
2 | In Progress — livrare parțială sau în curs |
order_status |
3 | Completed — toate articolele recepționate |
delivery_status |
0 | Nelivrat |
delivery_status |
1 | Livrat complet |
Câmpuri importante:
| Câmp | Note |
|---|---|
Termen de plată (days_owed) |
Zile de credit comercial de la livrare |
| Data livrare estimată | Termenul promis de furnizor |
| Contract asociat | Dacă există contract cadru cu furnizorul |
| Depozit destinație | Unde vor intra mărfurile |
Trimitere la furnizor:
Buton Trimite → email automat cu PDF-ul comenzii și link portal. Furnizorul confirmă recepția și poate actualiza statusul de livrare.
4. Aviz de Recepție (Goods Receipt Note) — Intrarea mărfii
Unde: /admin/warehouse/manage_purchase
Creare:
- Automată: la aprobarea PO sau la schimbarea
order_status→ sistemul creează avizul via hookcreate_goods_receipt - Manuală: din PO confirmat → buton Crează Aviz Recepție
La recepție — cu sau fără scanner de coduri de bare:
Cu scanner (recomandat):
- Focusezi câmpul SKU din aviz → scanezi eticheta coletului/produsului
- Platforma identifică automat articolul — elimini erorile de SKU
- Introduci cantitatea recepționată → confirmi linia
- Scanezi toate liniile → salvezi — stocul se actualizează automat
Fără scanner:
- Verifici fizic marfa față de PO
- Completezi manual SKU + cantitățile recepționate (pot fi parțiale)
- Notezi discrepanțele (lipsuri, deteriorări)
- Salvezi — stocul se actualizează automat în depozitul configurat
Câmpuri cheie:
| Câmp | Note |
|---|---|
| Cod aviz recepție | Generat automat cu prefix configurabil |
| PO asociat | Legătura cu comanda de origine |
| Articole + cantități | Ce s-a primit efectiv |
| Depozit | Locația în care intră marfa |
| Data recepției | Data fizică a intrării |
Dacă recepția este parțială,
delivery_statusrămâne 0 și se poate crea un al doilea aviz la livrarea restului.
5. Factură Furnizor (Vendor Invoice) — Cererea de plată
Unde: /admin/purchase/myinvoices
Creare:
- Automată din PO sau Contract: dacă opțiunea
create_invoice_byeste configurată - Manual: buton Adaugă Factură Furnizor — introduci datele de pe factura primită
- Upload vendor: furnizorul încarcă factura prin portal
Statusurile facturii furnizor:
payment_status |
Descriere |
|---|---|
unpaid |
Neachitată — nicio plată înregistrată |
partially_paid |
Parțial achitată — suma plătită < total |
paid |
Achitată integral |
Statusul se calculează automat: dacă suma tuturor plăților înregistrate în
pur_invoice_payment= totalul facturii →paid. Dacă 0 < plătit < total →partially_paid.
Câmpuri cheie:
| Câmp | Note |
|---|---|
| Număr factură furnizor | Numărul de pe factura primită |
| Furnizor | Fișa furnizorului |
| PO asociat | Comanda de origine |
| Data scadență | Calculată din invoice_date + days_owed |
| Total | Suma din factură |
6. Plată Furnizor — Stingerea datoriei
Unde: Din factura furnizorului → buton Înregistrează Plată
Câmpuri plată:
- Suma
- Data plății
- Mod de plată (virament, cash, etc.)
- Referință tranzacție (număr OP / extras bancă)
- Status aprobare plată (dacă e activ fluxul de aprobare)
Plăți multiple:
Se pot înregistra plăți parțiale succesive — fiecare e logată în pur_invoice_payment. Factura trece în partially_paid și ulterior în paid când totalul e acoperit.
Ce se creează automat
| Eveniment | Se creează automat |
|---|---|
| RFQ aprobat | Email notificare furnizori; sync articole în catalog |
| Ofertă acceptată | Link pur_orders.sales order → oferta câștigătoare |
| PO aprobat | Hook create_goods_receipt → aviz de recepție inițiat |
| Aviz recepție salvat | Stoc actualizat în depozit; delivery_status actualizat pe PO |
PO order_status → 2 |
delivery_status setat la 1 cu data curentă |
| Plăți cumulate = total factură | payment_status → paid automat |
Retururi la Furnizor — Sub-flux
Când marfa primită este defectă, în exces sau neconformă, returnezi furnizorului și recuperezi valoarea prin Notă de Debit.
Problemă identificată la recepție sau ulterior
↓
Izolezi fizic marfa în depozitul de Carantină
(Transfer Intern dacă e necesar)
↓
Contactezi furnizorul → confirmare retur (RMA / email)
↓
Depozit → Retururi Achiziție → Adaugă
→ Asociezi PO-ul sau NIR-ul original
→ Articolele și cantitățile de returnat
→ Depozitul sursă
↓
Confirmi → stocul scade automat din Carantină
↓
Dacă furnizorul are Portal Furnizori:
→ Vede returul în secțiunea Comenzi Retur
→ Poate actualiza status: Primit / Aprobat / Respins
→ Monitorizezi din Retururi Achiziție fără apeluri telefonice
↓
[Achiziții] Contabil AP emite Notă de Debit
→ Reduce suma de plătit furnizorului
→ Sau generează credit pentru comanda viitoare
↓
Pregătești fizic coletul → AWB de retur
(furnizorul trimite eticheta sau plătești tu transportul)
↓
Predai curierului → furnizorul confirmă primirea
Cazuri speciale:
| Situație | Acțiune |
|---|---|
| Marfă defectă la recepție, 5 buc. din 100 | NIR pentru 95 buc. conforme + Retur pentru 5 buc. |
| Tot lotul neconform | NU finalizezi NIR → returnezi tot |
| Furnizorul contestă returul | Documentezi în sistem cu fotografii + motivul notei de debit |
| Furnizorul refuză să primească returul | Escaladare Manager Achiziții + Juridic |
Puncte unde fluxul poate bloca
| Problemă | Cauză probabilă | Soluție |
|---|---|---|
| Furnizorul nu vede portalul | Contul de furnizor nu e creat sau nu are acces | Verifică /admin/purchase/vendors → email acces portal |
| Avizul de recepție nu se generează | Hook dezactivat sau PO neaprobat | Aprobă PO mai întâi; verifică setări modul |
| Stocul nu se actualizează | Depozit neasociat pe aviz | Completează câmpul depozit pe avizul de recepție |
Factura furnizorului rămâne unpaid |
Plata nu a fost înregistrată în CRM | Adaugă înregistrarea plății manual din factură |
| Două avize pentru același PO | Livrare parțială neîncadrată corect | Normal — avizele parțiale se sumează; verifică delivery_status |
Rapoarte relevante
- Rapoarte Achiziții —
/admin/purchase/myreports— cheltuieli pe furnizor, perioadă, categorie - Lista Comenzi Achiziție — filtre pe
delivery_statuspentru comenzile nelivrate - Istoric Inventar —
/admin/warehouse/warehouse_history— intrări de stoc per furnizor
Module implicate — documentație detaliată
- Purchase Items · Vendors
- RFQ · Received Quotations
- Purchase Orders · Purchase Contracts
- Goods Receipt Note
- Vendor Invoices · Debit Notes
Completați verificarea în trei pași (Comandă de Achiziție + Recepție Marfă + Factură Furnizor) înainte de aprobarea oricărei facturi de furnizor pentru plată — aceasta este controlul principal care previne plata pentru mărfuri care nu au fost livrate niciodată.
Nu aprobați o factură de furnizor înainte ca Recepția de Marfă să fie confirmată în depozit. Aprobarea fără GRN confirmat plătește pentru mărfuri a căror livrare nu o puteți verifica încă — un vector comun de fraudă și eroare.