Ajutor – Ghid complet 3PL
Aici găsiți, pe o singură pagină, tot ce trebuie să știți ca să folosiți platforma: autentificare și context companie, interfața (meniu, bară de sus), fluxul operațional de la catalog la retur, regulile depozitului (workflow, statusuri, corecții), diagrama tranzițiilor, glosarul de termeni, descrierea fiecărui modul, un scenariu numerotat cu calcule de stoc și, la final, documentația 3PL (furnizori, coduri, facturare estimată, audit, sesiune). Nu este nevoie să căutați în altă parte — conținutul este integral mai jos.
Foaie de parcurs
- lansat Automatizări: webhook înregistrat, stock.low, preview — Condiții partner/depozit, dead-letter webhooks, delivery logs.
- lansat parțial GraphQL: stock, salesOrders, mutations articol — Mutations per companie (graphql_mutations_enabled); paginare query.
- lansat parțial Picking SO: pick list PDF, scanner, timeline, blocare INCARCAT — Partial pick pe linie; foto proof — planificat.
- lansat API v2 skeleton — GET /api/v2/meta, articles, stock — evoluție fără breaking v1.
- lansat Comparare documente (PO / SO / recepții / retururi) — Un singur ecran /compare — selector tip + două ID-uri; linkuri vechi redirecționează.
- lansat parțial Istoric cantități pe linie (activity) — Jurnal pe linii PO; extinderi pentru alte documente.
- lansat Integrări: panou sănătate în setări — Ultimul apel transport 3PL și ANAF.
- lansat Onboarding primii pași — Banner pe dashboard până la confirmare.
Această pagină v-a fost utilă?
O atingere; puteți trimite din nou oricând.
1. Introducere
3PL este o aplicație web pentru gestiunea depozitului și a relației cu clienții logistică (model 3PL). Lucrați în modul „companie”: datele (articole, comenzi, stoc) aparțin companiei selectate în sesiune. Rolul dvs. (ex. administrator companie, operator depozit) determină ce meniuri și acțiuni sunt disponibile.
Acest ghid este structurat în ordinea în care un utilizator nou înțelege de obicei sistemul: mai întâi cum intrați și ce înseamnă contextul companiei, apoi unde găsiți funcțiile în ecran, apoi cum curg operațiunile de la intrarea mărfii până la livrare și retur, regulile depozitului (workflow, statusuri, corecții), glosarul de termeni, apoi ce face fiecare modul, un exemplu numeric complet, iar la final documentația administrativă 3PL (furnizori, coduri interne, facturare estimată, audit etc.), aceeași informație ca în Workbook 3PL din aplicația autentificată.
Utilizatorii autentificați pot deschide și Workbook 3PL din meniu (aceeași documentație administrativă, în layout-ul aplicației). Pe această pagină publică de ajutor, tot conținutul operațional și administrativ este reprodus integral mai jos.
3. Autentificare, selecție companie și context
Cum vă autentificați
Deschideți pagina principală a site-ului și accesați Autentificare (sau echivalentul din meniul public). Introduceți adresa de e-mail și parola primite de la administratorul organizației. După trimiterea formularului, serverul verifică credențialele și creează o sesiune securizată. Dacă autentificarea eșuează, verificați tastarea parolei, starea contului și faptul că folosiți URL-ul corect al instanței.
Mai multe companii
Dacă utilizatorul are drepturi în mai multe companii client, sistemul poate afișa un pas de Selectare companie înainte de a intra în dashboard. Compania aleasă devine contextul activ: listele, comenzile, stocul și rapoartele se referă la acea companie până când schimbați compania din bara de sus (vezi secțiunea 5).
După autentificare
Ecranul principal este Dashboard: rezumate, indicatori și acces rapid. Navigarea către module se face prin meniul lateral. Dacă nu vedeți un modul, fie compania nu are acel modul în abonament, fie rolul dvs. nu include permisiunea — în ambele cazuri trebuie solicitată ajustarea la administratorul 3PL sau la administratorul companiei.
4. Meniul lateral (sidebar)
Meniul se află în partea stângă. Grupurile se pot extinde sau restrânge; subferestrele duc la liste (ex. listă comenzi) sau la acțiuni de creare. Etichetele de mai jos sunt cele folosite în interfață (în engleză); rolul lor în procesul de business este explicat pe scurt.
- Dashboard — Punct de plecare: indicatori, scurtături, uneori grafice. Nu înlocuiește rapoartele detaliate din modulul Reports.
- Drafts — Documente salvate ca ciornă (articole, PO, recepții, SO, retururi), vizibile când lucrați într-o companie selectată; stocul nu se schimbă până publicați documentul.
- Client 3PL — Companiile client 3PL deservite în contextul curent (date operaționale, module, utilizatori legați de firmă).
- Partners — Parteneri comerciali: furnizori (de la care cumpărați) și clienți (cărora le vindeți), inclusiv puncte de lucru și date de contact pentru documente și livrări.
- Articles — Catalogul de articole (SKU): cod unic, descriere, unitate de măsură, atribute fizice, coduri de bare. Fără articol în catalog nu puteți adăuga linii valide pe PO sau SO.
- Inbound — Intrări: Purchase Orders (PO) și Receptions; submeniuri pentru liste, creare și ciorne PO/recepții. Recepția publicată crește stocul.
- Stock — View stock, Stock journal, Units of Measure, containere de manipulare (Handling containers), după permisiuni.
- Outbound — Ieșiri: Sales Orders (SO), ciorne SO și, dacă aveți drepturi, Automation rules. Livrarea scade stocul din depozitul sursă.
- Returns — Retururi de la client legate de un SO; ciorne de retur unde este cazul.
- Stock options — Inventar, transformări UM, verificări CTC etc.; în mod obișnuit doar pentru super-admin, dacă modulul este activ.
- Warehouses — Depozite fizice sau logice; fiecare mișcare de stoc se raportează la un depozit.
- Reports — Rapoarte operaționale: stoc, comparații de perioadă, urmărire lot, după rol și modul.
- Administration — API, webhooks, module companie, roluri, backup, Export / Import, setări firmă, consolă platformă (super-admin), după drepturi.
- 3PL Providers — Furnizori 3PL la nivel de platformă (listă, creare, director platformă) — vizibil în principal super-adminilor.
- Comparare documente — Ecran
/comparesau link din documentele PO/SO/recepție/retur: puneți două documente alături (acces din paleta de comenzi sau din ecranul documentului, dacă modulul este activ).
5. Bara de sus
Selector companie — Dacă aveți acces la mai multe companii, un control în partea superioară permite comutarea contextului. Toate ecranele care depind de companie (liste, formulare, stoc) vor reflecta noua selecție după schimbare. Nu confundați compania cu „furnizorul 3PL” din documentația administrativă: compania este entitatea operațională curentă.
Meniu utilizator — Zona din dreapta sus conține de obicei profil, setări personale și deconectare. O pictogramă de ajutor poate deschide această pagină.
Consecințe operaționale — Înainte de a crea documente, verificați vizual compania selectată, pentru a evita înregistrarea comenzilor sau recepțiilor sub altă companie decât cea dorită.
6. Flux operațional (de la date de bază la retur)
Pe scurt, pas cu pas: regulile detaliate de depozit (stoc, statusuri, anulări) sunt în secțiunea 7 — Workflow în depozit; corecțiile operaționale în secțiunea 8.
În 3PL, ordinea recomandată respectă dependențele dintre date: mai întâi definiți ce vindeți/stocați (articole), unde (depozite) și cu cine (parteneri), apoi creați documente care mișcă cantitățile. Stocul este actualizat de regulă la recepție (intrare), la livrare SO (ieșire) și la retur (intrare). Sistemul înregistrează mișcările astfel încât să puteți urmări istoricul în jurnalul de stoc.
Scop. Fiecare SKU folosit în comenzi trebuie să existe o singură dată în catalog, cu identificator clar, pentru a evita dublurile și confuziile la recepție și inventar.
Ce introduceți. Cod articol (unic în contextul permis de regulile sistemului), denumire / descriere, unitate de măsură pentru operațiuni (ex. BUC, KG), și opțional dimensiuni, greutate, cod de bare — utile la logistică și scanare.
Câmpuri tipice obligatorii: referință client acolo unde este cerută de formular, cod articol, descriere, unitate de măsură (UM).
Rezultat. Articolul poate fi selectat pe liniile de PO și SO; fără acest pas, fluxul se oprește aici.
Scop. Înregistrați intenția de a achiziționa mărfuri de la un furnizor: ce articole, în ce cantități, la ce termene sau condiții rezonabile reflectate în document.
Legături. Partenerul trebuie să fie definit ca furnizor. Liniile fac referire la articole din catalog. Statusul PO poate evolua (ex. draft → trimis → parțial recepționat → închis), în funcție de modul în care lucrați operațional.
Rezultat. Puteți crea o recepție care consumă cantități din acest PO, până la concurența totală comandată.
Scop. Confirmați fizic intrarea mărfii: cantitățile primite pot fi egale sau mai mici decât cele comandate pe PO (recepție parțială). Depozitul ales este locul unde se adună stocul disponibil pentru SO.
Mecanism. La validarea recepției, aplicația creează mișcări de stoc pozitive pentru combinația articol + depozit (+ lot, dacă modulul impune loturi).
Rezultat. Stocul disponibil crește imediat; jurnalul de tranzacții reflectă intrarea, ceea ce permite audit și reconciliere ulterioară.
Scop. Înregistrați vânzarea către un client: articole și cantități, depozitul sursă din care se alocă stocul. Până la livrare, cantitățile pot fi rezervate sau tratate conform regulilor platformei.
Livrare. Trecerea comenzii în starea LIVRAT (sau echivalent) declanșează scăderea stocului din depozitul ales. Este important ca statusul să reflecte realitatea fizică, pentru ca stocul și rapoartele să rămână corecte.
Rezultat. Stocul scade; retururile ulterioare se leagă de acest SO pentru trasabilitate.
Scop. Când clientul returnează mărfuri, documentul de retur înregistrează ce intră înapoi în depozit, în legătură cu SO-ul inițial.
Rezultat. Stocul crește din nou; lanțul PO → recepție → SO → retur rămâne urmăribil pentru audit.
7. Workflow în depozit
Ghid pentru depozit și logistică: înțelegeți de ce se schimbă stocul când salvați un document și ce înseamnă fiecare status, fără termeni de programare. Pentru pașii în interfață, vedeți secțiunea 6.
Acest ghid explică cum curg lucrurile în sistem din perspectiva operațională: ce înseamnă fiecare document, când se schimbă cantitățile din depozit și ce se întâmplă când anulați sau închideți ceva. Nu este nevoie să înțelegeți programare — doar cum se reflectă acțiunile voastre în stoc și în statusuri.
Unde e diferența față de Ajutor? Pagina Ajutor descrie ecranul (unde găsiți meniurile, cum vă autentificați). Aici descriem regulile depozitului: ordinea logică a documentelor, consecințele pe inventar și limitele sistemului (de exemplu: nu puteți sări anumite statusuri).
Ce tratează fiecare parte
- Companie, furnizor și client — ce înseamnă fiecare termen și cum nu se amestecă (detalii).
- Stoc: două idei simple — diferența între „cât aveți fizic” și „cât mai puteți aloca la comenzi noi”.
- Intrări — legătura comandă furnizor ↔ recepție; când intră marfa în depozit; ciornă; anulare recepție și efect pe raft.
- Ieșiri — comandă de vânzare: rezervare, livrare, anulare înainte de livrare.
- Retururi — când se adaugă marfa înapoi în stoc; anulare retur.
- Anulări — tabel pe tip de document (comandă cumpărare, recepție, vânzare, retur).
- Din fiecare status — ce variante aveți în continuare (workflow permis).
- Tranziții — de ce uneori un pas nu este permis.
- Istoric mișcări și integrări — trasabilitate internă și notificări către alte sisteme, dacă le folosiți.
- Ordinea recomandată — ce pregătiți înainte de comenzi (detalii).
- Greșeli frecvente — situații uzuale și ce verificați (detalii).
- Scenariu complet — de la pregătire la livrare și retur opțional (detalii).
- Întrebări suplimentare — FAQ extins (detalii).
- Coduri în mediul demonstrativ (
seeder:scmc) — structură TPL… +CodeGeneratorService(fără prefix vechiSCMC-în coduri) (detalii).
Dacă căutați cum se apasă butoanele pas cu pas, folosiți Ajutor; dacă vreți să înțelegeți regulile, rămâneți aici.
Onboarding furnizor 3PL (super-admin)
- Wizard 3PL — creare furnizor, alegere module implicite pentru companii noi și trial la facturare (14 sau 30 zile, aceleași praguri ca la pagina Module pe companie). Fără trial implicit = module active fără perioadă de evaluare la facturare.
- Finalizare wizard — în jurnalul aplicației apare evenimentul structurat
product.three_pl_wizard_completed(ID furnizor, trial implicit, număr de companii incluse în wizard), util pentru audit și metrici interne. - Sănătate infrastructură — endpoint-ul
GET /health(și variantele/up,/api/health) verifică printre altele baza de date, cache-ul, coada, spațiulstorageși discul public (upload-uri servite prin/storage, ex. contracte PDF).
Cum vă ajută acest document
| Întrebare | Răspuns pe scurt |
|---|---|
| Când intră mărfă în depozit? | La Intrări: după ce înregistrați o recepție reală (nu un ciornă). |
| Ce e ciornă (draft) la recepție sau retur? | Puteți salva incomplet; stocul nu se schimbă până publicați documentul. |
| În ce ordine e bine să lucrez la început? | Mai întâi date de bază (ce vindeți, unde, cu cine), apoi comenzi care mișcă marfa — vezi Ordinea recomandată. |
| De ce comanda de cumpărare nu e „completă” deși am recepționat? | Progresul spre „complet recepționat” se calculează în mare parte din recepțiile închise, nu din cele doar „în lucru”. |
| Când „se ține” marfa pentru o comandă de vânzare? | Depinde de tipul comenzii: la unele comenzi sistemul blochează cantitatea din „disponibil” încă de la creare. |
| Când iese marfa din depozit la livrare? | Când marcați comanda ca Livrată. |
| Ce se întâmplă la retur? | Marfa reintră în depozit când returul este salvat definitiv (nu neapărat când îl marcați „închis”). Detalii mai jos. |
| Ce se întâmplă dacă anulez? | Vezi secțiunea Anulări — pe scurt: la recepție și retur se scoate din stoc ce intrase; la comandă de vânzare se eliberează rezervarea dacă era cazul. |
| Unde văd ce s-a mișcat? | În istoricul / jurnalul de stoc (mișcări legate de recepții, comenzi, retururi). |
| Avem integrări (ERP, alt sistem)? | Sistemul poate trimite notificări automate la anumite evenimente — vezi Integrări. |
| Companie, furnizor și client — ce e diferit? | Vezi secțiunea Companie, furnizor și client. |
| Ceva „nu merge” sau nu văd documentul | Vezi Greșeli frecvente (companie greșită, recepție neînchisă, stoc rezervat). |
| Cum arată un flux întreg, de la capăt la capăt? | Scenariu complet (pregătire → intrare marfă → vânzare → livrare → retur). |
| Alte întrebări frecvente | FAQ suplimentar. |
Cum se formează codurile la seeder:scmc? |
Coduri demonstrative — aceleași reguli ca în aplicație prin CodeGeneratorService: companii generate (…-CC-…), articole/parteneri cu prefix cod furnizor (TPL000001-…), documente PO/REC/SO cu numerotare per furnizor. |
| Numele companiei sau un cod (articole, depozit) e foarte lung — ce se întâmplă exact? | Nume mare: ce se întâmplă exact — la nume firmă până la 255 caractere salvate integral (afișare cu „…”); la coduri plafon 30 caractere, cu exemplu R… dacă depășiți. |
Structură: 3PL, companie client și depozite
Furnizorul 3PL (ThreePlProvider) este organizația logistică care operează platforma (three_pl_providers; sesiune current_three_pl_id). Compania pe care o selectați în bară este compania 3PL (Client3pl / clients_3pl; sesiune current_company_id). Depozitele (warehouses.three_pl_provider_id) sunt ale furnizorului 3PL și sunt folosite în comun de companiile de sub același furnizor.
În fluxul zilei, compania (context) și partenerii (furnizor de marfă / client pe documente) stau pe aceeași planșă operațională: compania filtrează tot ce vedeți; partenerul apare pe PO, recepție, SO. În baza de date, fiecare partener este legat de o companie (partners.client_3pl_id) — nu e un al doilea tenant, ci contrapartida pe document. Detalii și mapare pe meniuri: glosar (documentație internă).
flowchart TB
subgraph tpl ["Furnizor 3PL · three_pl_providers"]
TPP["ThreePlProvider ex. ECC TPL000001"]
WH["Warehouse WH-001 · three_pl_provider_id"]
TPP --> WH
end
subgraph ops ["Planșă operațională · current_company_id"]
direction LR
C3["Client3pl — context tenant"]
PAR["Partner — pe PO REC SO"]
end
OPS["Articole stoc documente · client_3pl_id"]
TPP -->|"clients_3pl.three_pl_provider_id"| C3
C3 --> OPS
PAR -.->|"partners.client_3pl_id"| C3
WH -.->|același depozit fizic pentru companiile de sub acest 3PL| C3
Articolele nu sunt partajate între companii: fiecare companie 3PL are propriul catalog (articles.client_3pl_id). Partajat este doar depozitul logistic (înregistrare warehouses la 3PL) — aceeași locație poate fi folosită în operațiuni pentru ACME, Global etc., dar stocul și documentele rămân separate pe compania selectată. Partenerii nu partajează catalogul între companii: fiecare rând partners aparține unei singure companii, dar îi selectați alături de contextul companiei când completați documente.
Două tabele, fără dublură: furnizorul logistic stă în three_pl_providers (ex. Quehenberger); firmele client deservite în clients_3pl (ex. SELGROS). Nu trebuie același CUI în ambele — rândurile „oglindă” (companie = același CUI ca furnizorul) sunt legacy; se elimină cu three-pl:audit-mirror-tenants → migrare → purge → delete-mirror-rows. Stocul și comenzile rămân legate de compania client, nu de furnizor.
Exemplu din seeder:scmc (ScmcDiagramSeeder): 3PL ECC Logistics SA (TPL000001, CUI RO90001001); companii 3PL ACME Logistics SRL (RO90001101), Global Distribution SA (RO90001102), Fast Logistics SRL (RO90001103) — cod intern generat cu CodeGeneratorService (șablon …-CC-90001101 etc.); depozite create de WarehouseSeeder: WH-001 (depozit central), WH-002 (retururi), denumiri gen „ECC - Depozit Central”; parteneri demo cu cod TPL000001-P-SUP1 / P-CUST1 etc.
În ce ordine lucrați (recomandare practică)
Fără aceste date, comenzile nu au ce să „agățe” sau veți primi erori de validare.
- Companie corectă selectată în bara de sus (dacă lucrați cu mai multe).
- Depozitul (locația fizică sau logistică unde țineți stocul).
- Articolele în catalog (SKU / coduri) — fără articol nu puteți pune linii valide pe comenzi.
- Partenerii — furnizori de la care cumpărați, clienți către care vindeți (cu puncte de livrare unde e nevoie).
- Apoi Intrări: comandă de cumpărare → recepție (crește stocul).
- Apoi Ieșiri: comandă de vânzare → livrare (scade stocul).
- Retururi după ce există o livrare de referință (flux tipic).
Nu trebuie să fie mereu strict secvențial în timp (puteți avea deja articole și parteneri), dar în logica sistemului comenzile depind de articole, depozit și parteneri definiți.
Companie, furnizor și client — pe scurt
În logistică și în aplicație apar des aceste trei cuvinte; sensul lor nu este același.
Companie (compania selectată)
Depozitul (spațiul fizic) este al 3PL-ului — organizația de logistică care operează hala. Compania selectată este contextul în care lucrați acum în acel depozit: articolele, stocul, comenzile și recepțiile din ecran aparțin acestei companii 3PL (Client3pl). Dacă aveți drepturi în mai multe companii, le schimbați din selectorul de companie (de obicei în bara de sus): altă companie înseamnă alt set de date — nu amestecați fluxurile între ele.
Pe scurt: compania = contextul în care lucrați; „lumea” în care se mișcă marfa și documentele pe care le vedeți pentru acel client, în depozitul 3PL.
Exemplu: dacă aveți acces la ACME Logistics și Global Distribution (sau Fast Logistics), selectați compania potrivită când lucrați recepții sau comenzi în contextul acelei companii; dacă comutați la altă companie din același mediu demonstrativ, veți vedea alt stoc și alte comenzi — nu sunt amestecate.
Furnizor — două sensuri utile
-
Furnizor de servicii 3PL — organizația care vă pune la dispoziție platforma și contractul de logistică (3PL). Este un rol administrativ / contractual, nu apare ca linie pe o recepție ca și cum ar fi „furnizorul de marfă”.
-
Furnizor de marfă (pe comenzi) — firma de la care cumpărați produsele care intră în depozit. Apare pe comanda de cumpărare și pe recepție. În sistem este înregistrată ca partener cu rol de furnizor pentru acel flux.
Nu confundați: cumpărați de la furnizorul de marfă (partener); marfa intră și iese din depozitul 3PL, iar înregistrările din ecran sunt mereu în contextul companiei selectate.
Client (în sens de vânzare)
Este destinatarul mărfii când vindeți sau expediați: apare pe comanda de vânzare și la livrare. De regulă este o altă firmă (sau punct de lucru) definită ca partener cu rol de client — adică cumpărătorul dumneavoastră.
Nu confundați: „Client” pe documentul de vânzare ≠ compania selectată în bară. Compania selectată este compania 3PL pentru care lucrați acum (stocul și documentele pentru această firmă); clientul de pe comandă este partenerul către care merge marfa la acea vânzare (de regulă altă entitate decât compania din selector).
Cum se leagă pe scurt
| Rol | Cine este | Unde îl întâlniți cel mai des |
|---|---|---|
| Companie | Compania 3PL în contextul căreia lucrați (stoc și documente pentru acea firmă); depozitul fizic e al 3PL | Selector companie; tot ce e „în firmă” (stoc, articole) |
| Partener (pe document) | Contrapartidă pe comandă: furnizor de marfă sau client la vânzare (Partner), mereu în cadrul companiei selectate |
PO, recepție, SO, livrare |
| Furnizor (marfă) | Rol de partener: de la cine cumpărați | Comandă de cumpărare, recepție |
| Client (vânzare) | Rol de partener: către cine vindeți / livrați | Comandă de vânzare, livrare |
Compania și partenerul de pe document sunt pe aceeași linie în operațiuni (vezi diagrama la Structură: 3PL, companie client și depozite); în meniu, partenerii se administrează separat, dar pe document nu înlocuiesc compania din bară.
Dacă în meniu vedeți și „Clienți” ca listă separată, acolo sunt de obicei entitățile (firme) pe care le deserviți ca 3PL — tot în cadrul aceluiași model, dar la nivel de administrare; pe documente, „clientul” comenzii de vânzare este în continuare partenerul către care se face livrarea.
Stoc: două idei simple
În depozit, pentru fiecare articol și locație, veți vedea de obicei:
- Cantitate totală — câtă marfă este fizic în acel depozit (în unitatea folosită la documente).
- Cantitate disponibilă — câtă marfă mai poate fi folosită pentru comenzi noi. Poate fi mai mică decât totalul dacă o parte este deja „ținută” pentru comenzi în lucru (rezervare).
Recepție și retur măresc, în mod normal, ambele (marfa intră fizic și devine disponibilă).
Comandă de vânzare: la tipul de comandă în care sistemul verifică strict stocul, la creare se scade din disponibil (marfa rămâne în depozit, dar nu mai e liberă pentru alte comenzi). La livrare, cantitatea iese din total (marfa a plecat). La anulare înainte de livrare, ce era „ținut” revine la disponibil.
Dacă lucrați cu loturi sau serii, sistemul poate ține evidență și pe lot/serie, nu doar pe total.
Exemplu numeric (înțeles)
| Situație | Total în depozit | Disponibil pentru comenzi noi |
|---|---|---|
| Aveți 100 bucăți pe raft, nimic rezervat | 100 | 100 |
| O comandă de vânzare „ține” 30 bucăți (tip cu verificare stoc) | 100 | 70 |
| După livrare a acelor 30 bucăți | 70 | 70 |
Disponibilul vă spune cât mai puteți promite altor clienți; totalul spune câtă marfă fizică evidențiați în acel loc (până la livrare, la unele tipuri de comenzi, cele două nu coincid).
Scenariu complet: de la zero la livrare (și retur opțional)
Poveste unică, fără nume de ecrane obligatorii — ideea este să vedeți lanțul de cauze și efecte. Dacă lucrați pe datele demonstrative încărcate cu php artisan seeder:scmc (training, scenariu ECC / ACME / Global / Fast), puteți recunoaște denumirile și codurile de mai jos direct în aplicație. Prefixul SCMC- nu mai apare în codurile interne ale acestui set; codurile urmează convențiile din CodeGeneratorService (ex. TPL000001, TPL000001-CC-…, TPL000001-ACM-001). Cifrele din tabelul numeric rămân un exemplu rotunjit doar pentru înțeles; cantitățile reale pe documentele de probă pot fi altele (inclusiv stoc inițial variabil pe articol).
Exemplu demonstrativ: cine este cine (denumiri uzuale)
| Element | Ce reprezintă în demo |
|---|---|
| 3PL (hală) | ECC Logistics SA, în listă de obicei ca ECC |
| Companie (acest scenariu) | ACME Logistics (ACME Logistics SRL) |
| Alte companii în același demo | Global Distribution, Fast Logistics |
| Depozit stoc bun | ECC - Depozit Central (depozit principal de marfă „în regulă” pentru ECC) |
| Parteneri pe ACME | Supplier One SRL, Supplier Two SA |
| Articol exemplu (ACME) | TPL000001-ACM-001 — „Scanner coduri 2D industrial”, cod bare 590TPLACM00001, UM BUC |
| Coduri pe comenzi / recepții / livrări | Aceeași numerotare ca în producție: PO-{id_furnizor_3PL}-{nr}, REC-…, SO-… (din CodeGeneratorService / contoare per furnizor) |
| Conturi de probă | Adrese @scmc-demo.ro; parola comunicată echipei la pregătirea mediului (de ex. parola123 dacă așa vi s-a transmis) |
Date pe documente (planificări, „emise acum X zile”): în mediul de probă sunt calculate automat la momentul încărcării datelor — servesc la exercițiu, nu sunt un calendar fix „de produs”.
Context (ACME + ECC, exemplu pentru training)
Lucrați pentru ACME Logistics (selectată în bară). Depozitul fizic este al 3PL ECC; în ecran folosiți depozitul stoc OK „ECC - Depozit Central”. Articolul folosit ca „SKU” în exemplul numeric: TPL000001-ACM-001 (scanner, BUC). Pe fluxul de achiziție din mediul demonstrativ, primul partener folosit este de obicei Supplier One SRL; pe comenzile de vânzare din același exemplu se alternează Supplier One SRL și Supplier Two SA (ambele înregistrate la ACME Logistics).
Faza 1 — Pregătire (încă fără mișcare de stoc pe acest articol)
| Pas | Ce faceți | Rezultat |
|---|---|---|
| 1 | Verificați compania corectă. | Toate pașii următori se leagă de ACME Logistics. |
| 2 | Aveți depozitul și articolul în sistem. | Puteți lega comenzi de ECC - Depozit Central și TPL000001-ACM-001. |
| 3 | Aveți Supplier One SRL și Supplier Two SA înregistrați. | Îi puteți alege pe comenzi (ca în mediul demonstrativ). |
Faza 2 — Intrare marfă (crește stocul)
| Pas | Ce faceți | Ce se întâmplă cu stocul (exemplu 500 buc comandate) |
|---|---|---|
| 4 | Creați comandă de cumpărare către Supplier One SRL: 500 buc TPL000001-ACM-001. | Document PO; încă nu a intrat marfa în depozit doar din simpla creare (depinde cum lucrați cu statusul „trimis”). |
| 5 | Ajunge camionul; faceți recepție pe 500 buc în ECC - Depozit Central și salvați definitiv (sau publicați ciornă). | Stoc: total +500, disponibil +500 (în absența altor comenzi). |
| 6 | Închideți recepția dacă fluxul vostru cere asta pentru raportare. | Comanda de cumpărare poate trece la complet recepționată când regulile din sistem sunt îndeplinite (inclusiv recepție închisă). |
Faza 3 — Vânzare fără livrare încă (disponibil poate scădea)
| Pas | Ce faceți | Ce se întâmplă (tip de comandă cu rezervare) |
|---|---|---|
| 7 | Creați comandă de vânzare către Supplier Two SA: 120 buc TPL000001-ACM-001 din același depozit. | Disponibil scade la 380; total rămâne 500 până la livrare. |
| 8 | Avansați statusurile operaționale (ex. În lucru → Încărcată) după cum lucrați fizic. | Marfa încă e considerată în depozit până la livrare. |
Faza 4 — Livrare (iese marfa din depozit)
| Pas | Ce faceți | Ce se întâmplă |
|---|---|---|
| 9 | Marcați comanda Livrată. | Total scade cu 120 → 380; disponibil se aliniază (ex. 380 și 380 dacă nu mai sunt alte rezervări). |
Faza 5 — Retur opțional (marfa înapoi)
| Pas | Ce faceți | Ce se întâmplă |
|---|---|---|
| 10 | Clientul returnează 20 buc; creați retur legat de comanda livrată, depozit ales, salvare definitivă. | Total +20 → 400; disponibil +20 → 400 (exemplu simplu). |
| 11 | Anulați returul din greșeală. | Cantitățile adăugate la retur se scot din stoc înapoi. |
Tabel recap (exemplu numeric simplificat — articol TPL000001-ACM-001)
| Moment | Total TPL000001-ACM-001 | Disponibil (exemplu) |
|---|---|---|
| După recepție 500 | 500 | 500 |
| După comandă vânzare 120 (rezervare) | 500 | 380 |
| După livrare | 380 | 380 |
| După retur 20 | 400 | 400 |
Checklist „înainte de livrare” (operator)
- Compania selectată este cea corectă.
- Depozitul și articolele de pe comandă există și sunt cele așteptate.
- Cantitatea livrată nu depășește ce puteți confirma fizic.
- Statusul Livrat îl puneți doar când marfa a plecat (nu „doar pentru probă”).
Variații utile (aceeași logică, alte cifre)
- Recepție parțială: comanda de cumpărare poate rămâne „în curs” până primiți restul; fiecare recepție salvată crește stocul cu cantitatea ei (vezi și Intrări).
- Mai multe comenzi de vânzare pe același articol: fiecare comandă care rezervă scade din disponibil; totalul scade la fiecare livrare în parte.
- Livrări eșalonate: dacă livrați din aceeași comandă în mai multe tranșe (unde fluxul permite), urmăriți cum se actualizează cantitățile livrate vs. rămase — principiul rămâne: iese din depozit când confirmați livrarea pentru acea tranșă.
1. Intrări: comandă de cumpărare → recepție → stoc
Comanda de cumpărare (PO) spune ce ați comandat de la furnizor. Recepția spune ce a intrat efectiv în depozit — poate fi mai puțin sau împărțit în mai multe recepții.
Comandă furnizor → Recepție în depozit → Stocul crește
(PO) (recepție)
Ce vezi într-un mediu demonstrativ (intrări)
Pe companiile exemplu (ACME Logistics, Global Distribution, Fast Logistics) apar de regulă două comenzi de cumpărare: una trimisă, cu recepție asociată în lucru și cantități primite mai mici decât pe comandă (recepție parțială); alta complet recepționată, cu recepție închisă și cantități aliniate comenzii. Codurile PO / REC urmează formatul aplicației (PO-{id_furnizor}-{nr} etc.); pe linii pot apărea loturi de forma LOT-{id_companie}-{id_articol}. La ACME, furnizorul folosit pe primul flux este de obicei Supplier One SRL (cu punct de lucru „Sediu …”). Depozitul de intrare este în mod tipic ECC - Depozit Central.
Pas cu pas (flux tipic)
- Creați comanda de cumpărare cu furnizorul și cantitățile comandate (linii pe articole).
- O trimiteți în fluxul „trimisă” când e cazul în organizația dumneavoastră.
- Când marfa fizică ajunge, deschideți o recepție legată de acea comandă, alegeți depozitul unde intră marfa și introduceți cantitățile efectiv primite (pot fi mai mici decât pe comandă).
- Salvați recepția ca document definitiv sau publicați ciornă — abia atunci cantitățile se adaugă la stoc.
- Dacă recepția nu e încă „închisă”, dar a fost deja salvată definitiv, stocul poate fi deja actualizat; închiderea recepției ajută la raportare și la calculul „cât s-a luat din comandă” pentru comanda de cumpărare (parțial / complet).
- Puteți face mai multe recepții pe aceeași comandă până acoperiți cantitățile sau până închideți subiectul.
Exemplu: recepție parțială
- Pe comandă: 200 bucăți.
- Prima recepție (închisă): 80 bucăți → stocul crește cu 80; comanda poate apărea parțial recepționată.
- A doua recepție: 120 bucăți → după închidere, total recepționat = 200 → comanda poate deveni complet recepționată (conform regulilor din sistem).
Cum evoluează comanda de cumpărare (statusuri)
| Status | Ce înseamnă pentru echipă |
|---|---|
| Ciornă | Comanda nu e încă „oficială” în fluxul de trimis. |
| Trimisă | Ați lansat comanda; așteptați livrări. |
| Parțial recepționată | A intrat ceva, dar nu tot ce era pe comandă. |
| Complet recepționată | Cantitățile recepționate acoperă comanda (după regulile din sistem). |
| Anulată | Comanda nu mai este urmărită ca deschisă; nu veți mai face recepții noi pe ea. |
Multe schimbări la „parțial” și „complet” vin automat din recepțiile închise (vezi mai jos), nu doar din setare manuală.
Cum evoluează recepția (statusuri)
| Status | Ce înseamnă |
|---|---|
| Creată | Document înregistrat; puteți trece la „în lucru” sau anula. |
| În lucru | Pregătiți/recepționați; apoi puteți închide sau anula. |
| Închisă | Recepția este considerată finalizată pentru raportare și pentru calculul „cât s-a luat din comandă”. |
| Anulată | Recepția nu mai este valabilă; dacă marfa intrase deja în stoc la salvarea recepției, sistemul scoate acele cantități înapoi la anulare. |
Important: nu puteți sări direct de la „Creată” la „Închisă” — trebuie fie În lucru, fie Anulată (conform regulilor din interfață).
Când crește stocul la recepție?
- Nu crește dacă aveți doar o ciornă nesalvată definitiv.
- Crește când salvați recepția finală sau când publicați o ciornă (devine document definitiv).
- Dacă modificați o recepție încă deschisă la editare, sistemul ajustează stocul la noile cantități (scoate vechiul, pune noul).
Legătura cu comanda de cumpărare
Sistemul recalculează starea comenzii de cumpărare (trimisă / parțial / complet) pe baza recepțiilor închise: se adună cantitățile din recepțiile marcate Închise și se compară cu ce era comandat.
Recepțiile doar create sau în lucru (dar neînchise) nu mută singure comanda la „complet recepționată” — contează în special momentul închiderii recepției pentru acest calcul.
De reținut explicit: stocul (marfa în depozit) se actualizează în momentul salvării / publicării recepției, iar progresul comenzii de cumpărare (parțial / complet) ține cont de recepțiile închise. Dacă aveți marfa în stoc dar comanda încă „nu arată complet”, verificați dacă recepțiile sunt închise și dacă cantitățile acoperă tot ce era pe comandă.
Recepții „ciornă” (draft)
- Puteți salva progres fără să mișcați stocul.
- La publicare, documentul primește cod final și abia atunci intră marfa în stoc.
- Puteți șterge o ciornă fără efect pe inventar.
2. Ieșiri: comandă de vânzare → rezervare / livrare
Comanda de vânzare este documentul prin care cereți ieșirea mărfii către client.
Ce vezi într-un mediu demonstrativ (ieșiri)
Apare adesea câte o comandă de vânzare pentru fiecare status tipic (Creată, În lucru, Încărcată, Livrată) — ca să puteți compara cum arată listele și detaliile. Codurile SO urmează același model numerotat ca PO (SO-{id_furnizor}-{nr}). Partenerul de livrare variază între înregistrările companiei: pe ACME veți recunoaște furnizorii exemplu (Supplier One / Supplier Two), pe Global Distribution clienții exemplu (Customer One / Customer Two). Cantitățile pe linii sunt mici, de exercițiu. Depozitul sursă este același tip ca la intrări (ECC - Depozit Central).
Pas cu pas (flux tipic)
- Verificați că articolul există în catalog și că stocul este suficient în depozitul sursă ales pe comandă.
- Creați comanda de vânzare cu clientul (partenerul), liniile și cantitățile.
- La tipul de comandă cu verificare strictă a stocului, la salvare disponibilul scade cu cantitatea comenzii — altă comandă nu mai poate „folosi” aceeași marfă până eliberați rezervarea.
- Parcurgeți statusurile operaționale (Creată → În lucru → Încărcată), în funcție de cum lucrați în depozit.
- Când marfa a plecat efectiv, marcați Livrată — totalul din depozit scade (marfa nu mai e la voi).
- Dacă anulați înainte de livrare, ce era blocat în disponibil revine (la tipul de comandă cu rezervare).
Tip de comandă și „disponibil”
La comenzile pentru care sistemul ține cont strict de stoc disponibil, la creare se blochează cantitatea din „disponibil” (alte comenzi nu mai pot folosi aceeași marfă). Fizic, marfa încă e în depozit până la livrare.
La livrare (status Livrat), cantitatea iese din depozit (nu mai este nici total, nici disponibil pentru acea linie).
La anulare înainte de livrare, ce era blocat pentru acea comandă revine la disponibil (unde se aplică acest mod de lucru).
La tipuri de comandă care nu blochează disponibilul la creare, verificarea de stoc se poate face altfel (ex. la livrare sau conform politicii); dacă nu sunteți siguri, întrebați administratorul companiei ce tip folosiți.
Statusuri uzuale la comandă de vânzare
| Status | Sens pentru operator |
|---|---|
| Creată | Comandă înregistrată; urmează pregătire sau anulare. |
| În lucru | Se pick-uiește / se pregătește. |
| Încărcată | Pregătită de expediere. |
| Livrată | Marfa a plecat — stoc scăzut corespunzător. |
| Anulată | Comandă oprită; rezervările se eliberează unde e cazul. |
După Livrat sau Anulat, în mod normal nu mai schimbați statusul (sunt stări finale).
3. Retururi: marfă înapoi dinspre client
Returul leagă o comandă de vânzare deja livrată (sau context permis de formular) de reintrarea mărfii în depozit.
Pas cu pas (flux tipic)
- Identificați comanda de vânzare originală (livrată) și clientul.
- Alegeți depozitul unde reintră marfa (poate fi același sau altul, după regulile voastre).
- Introduceți articolele și cantitățile returnate.
- Salvați returul definitiv sau publicați ciornă — abia atunci cantitățile se adaugă la stoc.
- Puteți închide în continuare documentul din punct de vedere administrativ; închiderea nu adaugă încă o dată aceeași cantitate în stoc dacă marfa intrase deja la salvarea de la pasul 4.
Când intră marfa din retur în stoc?
În practică, imediat ce salvați returul ca document definitiv (creare directă sau publicare după ciornă). Nu așteptați neapărat statusul „Închis” ca să apară marfa — „Închis” înseamnă de obicei că procesul de retur este încheiat la nivel de document, nu o a doua intrare de marfă.
La anulare retur
Dacă marcați returul Anulat, sistemul scoate din stoc cantitățile pe care le adusese la intrare (marfa nu mai este considerată reintrată prin acel document).
Statusuri
| Status | Sens |
|---|---|
| Creată / În lucru | Puteți edita; la salvare, stocul se aliniază cu liniile. |
| Închisă | Flux încheiat din punct de vedere operațional. |
| Anulată | Intrarea de marfă din acel retur este anulată în stoc. |
Ciornă la retur: până publicați, nu se schimbă stocul; după publicare, la fel ca la creare directă.
Anulări — ce se întâmplă „în spate”, pe înțeles
Rezumat rapid
| Ce anulați | Efect principal asupra stocului |
|---|---|
| Comandă de cumpărare | Nu scoate marfa din depozit singură; stocul s-a schimbat doar prin recepții / retururi. |
| Recepție | Dacă marfa intrase la salvare, la anulare se scoate acea cantitate din stoc. |
| Comandă de vânzare (înainte de livrare) | Se eliberează ce era ținut în „disponibil” (unde se folosește rezervarea). |
| Comandă de vânzare (după livrare) | Nu se „anulează livrarea” prin același flux simplu — comanda livrată e încheiată. |
| Retur | Se scoate din stoc ce intrase prin acel retur. |
Comandă de cumpărare anulată
- Nu mișcă direct marfa din depozit; marfa s-a mișcat doar prin recepții și retururi.
- Comanda devine închisă ca subiect; nu veți mai continua recepții pe ea conform regulilor din sistem.
Recepție anulată
- Documentul este marcat Anulat.
- Dacă marfa intrase deja în stoc la salvare/publicare, la anulare acele cantități sunt scoase înapoi, ca să rămână inventarul corect.
Comandă de vânzare anulată
- Înainte de livrare: ce era ținut pentru comandă (disponibil blocat) se eliberează unde se folosește acest mecanism.
- După Livrat: nu puteți „anula livrarea” prin același flux — comanda livrată este finală din perspectiva acestui workflow.
Retur anulat
- Cantitățile care intraseră în stoc prin acel retur sunt scăse înapoi la anulare.
Din fiecare status — ce aveți voie să faceți (pe scurt)
Comandă de cumpărare
| Sunteți în… | În general puteți merge la… |
|---|---|
| Ciornă | Trimisă sau Anulată |
| Trimisă | Parțial recepționată, Complet recepționată sau Anulată (și variații afișate în interfață) |
| Parțial recepționată | Complet recepționată sau Anulată |
| Complet recepționată / Anulată | Nu mai urmează pași (final) |
Stocul se mișcă prin recepții, nu prin simpla schimbare a numelui statusului pe PO.
Recepție
| Sunteți în… | În general puteți merge la… |
|---|---|
| Creată | În lucru sau Anulată |
| În lucru | Închisă sau Anulată |
| Închisă / Anulată | Final |
Din „Creată” nu merge direct la „Închisă” — treceți prin „În lucru” sau anulați.
Comandă de vânzare
| Sunteți în… | În general puteți merge la… |
|---|---|
| Creată | În lucru sau Anulată |
| În lucru | Încărcată sau Anulată |
| Încărcată | Livrată sau Anulată |
| Livrată / Anulată | Final |
Retur
| Sunteți în… | În general puteți merge la… |
|---|---|
| Creată | În lucru sau Anulată |
| În lucru | Închisă sau Anulată |
| Închisă / Anulată | Final |
Tranziții: de ce uneori butonul nu merge
Tranziția = trecerea de la un status la altul. Sistemul permite doar anumite combinații (ca să nu existe pași lipsă sau ilegale). Dacă o acțiune este refuzată, de obicei nu este permisă trecerea directă — verificați statusul curent și pașii din tabelele de mai sus.
Exemple concrete
- Recepție: din Creată nu merge direct la Închisă — trebuie mai întâi În lucru (sau Anulată).
- Comandă de vânzare: din Livrată nu puteți merge la Anulată — livrarea este considerată finală.
- Comandă de vânzare: din Creată nu săriți la Livrată fără pașii intermediari permisi de sistem (ex. În lucru → Încărcată → Livrată), dacă interfața impune această ordine.
Dacă mesajul spune „tranziție nepermisă”, nu e neapărat o eroare de date — înseamnă că trebuie alt pas următor decât cel ales.
Greșeli frecvente și clarificări
| Situație | Explicație |
|---|---|
| „Am recepționat, dar comanda de cumpărare nu e completă” | Verificați dacă recepțiile sunt închise și dacă suma cantităților acoperă comanda. |
| „Am marfă în stoc, dar nu pot promite la alt client” | Posibil ca disponibilul să fie deja blocat de comenzi în lucru; verificați comenzile de vânzare deschise. |
| „Am închis returul dar nu văd dublarea” | Marfa intră de obicei la salvare / publicare, nu la a doua închidere; verificați dacă returul a fost salvat definitiv. |
| „Am schimbat compania din bară și nu mai văd comanda” | Comenzile aparțin companiei selectate; altă companie = alt set de documente. |
| „Am pus Livrat dar marfa încă e în depozit” | Livrat trebuie să reflecte plecarea reală; dacă a fost o greșeală, corectați conform procedurilor interne (retur, ajustare) — nu folosiți statusul ca „probă”. |
| „Disponibilul și totalul nu se potrivesc cu ce număr pe raft” | Verificați recepții parțiale, comenzi în lucru (rezervare), retururi și dacă același articol e în mai multe depozite — stocul e pe combinație articol + depozit. |
| „Am anulat recepția dar văd încă mișcarea în istoric” | Anularea inversează stocul; în jurnal poate rămâne trasabilitatea evenimentului (ce s-a întâmplat și ce s-a corectat). |
| „Numele companiei e foarte lung sau conține multe cuvinte / un URL” | Vezi Nume mare: ce se întâmplă exact — două situații: nume firmă (până la 255 caractere, afișare eventual cu „…”) vs coduri (plafon 30 caractere, rezervă R… dacă depășiți). |
Nume mare: ce se întâmplă exact {#nume-mare-ce-se-intampla}
În aplicație, „nume mare” poate însemna fie denumirea (firmă, produs), fie un cod (articole, depozite, parteneri). Regulile sunt diferite; nu trebuie confundate.
1) Denumire legală / comercială a companiei (numele afișat al firmei)
- La salvare: textul este acceptat până la 255 de caractere și este memorat integral (nu este înlocuit cu litere aleatorii și nu este tăiat la baza de date doar pentru că e lung).
- În interfață: pe bară sau în liste, același nume poate apărea scurtat cu „…” — este doar modul de afișare, nu ștergerea numelui. La selectorul de companie, trecerea cu mouse-ul peste rând sau peste buton poate arăta tooltip cu numele complet (depinde de navigator).
- Important: numele lung al firmei nu se transformă în codul rezervă R…; formatul R… este folosit numai pentru anumite câmpuri de cod (vezi punctul 2).
2) Cod articol, cod depozit, cod intern partener, coduri similare la import
- Plafon: 30 de caractere pentru valoarea salvată ca cod (formulare, API, import, seed-uri care trec prin același mecanism).
- Serviciu central: regulile (inclusiv normalizarea la plafon și codurile de rezervă R…) sunt aplicate prin
CodeGeneratorService. Implementarea de nivel jos (InsertableCode) este folosită prin acest serviciu în fluxurile curente ale aplicației, nu direct din controllere. - Seedere: orice seeder care creează sau normalizează coduri de business (articole, depozite, parteneri, fluxuri demo/complete etc.) trebuie să treacă prin
CodeGeneratorService(același lucru ca la formulare și import). Există și seedere care nu emit astfel de coduri (ex. roluri, module) sau care folosesc valori fixe scurte doar ca date de catalog vechi (ex.CLI-001în seed genericDatabaseSeeder) — acolo nu intră în joc generarea automată, dar codurile rămân scurte și valide. - Dacă introduceți sau importați un cod mai lung de 30 de caractere: sistemul nu păstrează acel șir ca atare în câmpul de cod. Îl înlocuiește cu un cod de rezervă de exact 30 de caractere: litera
Rurmată de 29 de caractere hexadecimale (cifre 0–9 și litere A–F), obținute din amprenta (hash) a textului original. Același cod lung introdus de două ori produce mereu același cod scurt (util când reîncărcați același fișier de import). - Cum recunoașteți produsul: după descriere și cod de bare (sau alte câmpuri descriptive), nu după codul R…, care e doar etichetă tehnică de rezervă.
Exemplu concret (cod articol, nu nume firmă): presupuneți că în import puneți la coloana „cod articol” exact 40 de litere A unul după altul (AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA). Acest șir are 40 de caractere, deci depășește plafonul de 30. Codul salvat în baza de date pentru acel articol nu va fi cele 40 de A, ci rezerva de 30 de caractere calculată automat, de forma:
RF0A2FB80AC0699075FB6C7B0EE2BC
(începe cu R, are exact 30 caractere; valoarea exactă depinde de algoritmul de hash din aplicație — exemplul de mai sus corespunde acelui șir de 40 de A în versiunea curentă a codului.) Coloanele descriere și cod de bare din același rând de import rămân ce le-ați trecut dumneavoastră, dacă sunt valide.
3) Ciorne de documente
- Comenzi, recepții, retururi etc.: la salvare ca ciornă se pot folosi coduri temporare
DRAFT-PO-,DRAFT-REC-, … (scurtate la max. 30 caractere). La publicare, dacă codul e recunoscut ca temporar, sistemul alocă codul final (PO-{id_furnizor}-{nr},REC-…, la fel ca documentele normale). - Articole (produse): ciorna folosește deja același tip de cod ca articolul publicat —
PRODUS-{id_furnizor_3PL}-{număr}(ex.PRODUS-3-00042). Nu se mai genereazăDRAFT-ART-*la salvare; puteți modifica codul manual în formular. Ciorne foarte vechi cuDRAFT-ARTsunt actualizate automat la cod PRODUS la încărcare sau salvare. - Detalii tehnice complete:
docs/internal-codes.md.
Întrebări suplimentare (FAQ)
| Întrebare | Răspuns scurt |
|---|---|
| Pot avea aceeași firmă ca furnizor și ca client? | În practică da (firme care vă și vând și cumpără); în sistem apar ca roluri diferite pe documente — important e să alegeți rolul corect pe fiecare comandă. |
| De ce nu pot sări de la „Creată” la „Închisă” la recepție? | Pentru control operațional: se înregistrează că ați preluat munca (În lucru) sau că renunțați (Anulat), nu doar „salt” final. |
| Comanda de cumpărare anulată scoate marfa din depozit? | Nu direct; marfa a intrat prin recepții. Dacă recepțiile erau deja făcute, ele rămân subiect separat (corectare prin recepție anulată sau ajustare, după caz). |
| Ce fac dacă am recepționat pe depozitul greșit? | Depinde de procedura voastră: de obicei corecție (documente/anulări) astfel încât stocul să reflecte locul real — nu există „mutare invizibilă” fără înregistrare. |
| Returul trebuie neapărat „închis” ca să intre marfa? | În fluxul descris aici, cantitatea reintră la salvare definitivă a returului; închis poate fi pentru închidere administrativă — verificați în aplicație dacă mai există pași obligatorii. |
| Unde văd întregul flux într-un exemplu? | Secțiunea Scenariu complet — același lanț, cu denumiri din mediul demonstrativ (seeder:scmc). |
| De ce la PO / REC / SO văd un număr după tipul documentului? | În aplicație codurile operaționale sunt per furnizor 3PL, de forma PO-{id_furnizor}-{număr} (și similar pentru REC, SO). Nu e versiune de document, ci secvență alocată automat. |
| De ce am patru comenzi de vânzare cu statusuri diferite? | În datele de probă sunt puse adesea patru comenzi ca să vedeți fiecare status în parte, de la creat la livrat. |
| Pe Global Distribution, un „client” apare și la achiziție? | În exemplul de probă, primul partener din listă poate fi folosit și pe comandă de cumpărare — e doar pentru demonstrație, nu o regulă comercială. |
| Unde sunt articolele TPL000001-ACM / TPL000001-GLB / TPL000001-FST? | Secțiunea Coduri demonstrative (structură + tabele). În aplicație: catalogul companiei demo respective. |
| Cine poate descărca backup-ul unei companii client? | Administratorul firmei (rol admin pe acea companie) vede doar backup-urile firmei sale. Echipa furnizorului 3PL (rol admin la furnizor) poate accesa backup-urile tuturor companiilor client de sub același furnizor — pentru suport operațional. Nu se folosește accesul generic „orice companie de sub furnizor” pentru utilizatori doar pe o firmă client. |
Coduri în mediul demonstrativ (seeder:scmc) — o structură pentru tot
În logistică e util ca toate codurile „să se citească la fel”: cine e 3PL-ul (sau contextul logistic) → ce fel de entitate e → detaliul (firmă, depozit, număr de articol, partener etc.). În codul sursă, același mecanism ca în formulare și import (CodeGeneratorService) este folosit și la încărcarea datelor demo, astfel încât nu primiti un set de reguli „doar pentru seed” separat de producție.
Centralizare: CodeGeneratorService
- În aplicație: generare / normalizare pentru coduri interne relevante (ex. companie client CC, partener P…, documente PO/REC/SO/RET per furnizor, ciorne DRAFT-…, plafon 30 caractere, rezervă R…).
- În seedere: orice seeder care produce coduri de business merge prin același serviciu acolo unde se scriu aceste câmpuri; seedere fără coduri operaționale (permisiuni, module etc.) nu îl apelează — este normal.
- Nume de scenariu: comanda Artisan se numește în continuare
seeder:scmc(comod pentru echipă); asta nu înseamnă că codurile din baza de date trebuie să înceapă cuSCMC-.
Verificare față de codul sursă (seeder:scmc)
- Comanda
php artisan seeder:scmc(clasaApp\Console\Commands\SeederScmc) ruleazămigrate:freshcu--seeder=Database\Seeders\SeederScmcRunner, apoicache:clear. SeederScmcRunnerapeleazăScmcDiagramSeeder, care: creează furnizorii 3PL (inclusiv ECC / codTPL000001, CUI RO90001001), cele trei companii 3PL (ACME, Global Distribution, Fast Logistics cu CUI RO90001101–03), partenerii dinseedPartners,WarehouseSeeder, module,ScmcOperationalUsersSeeder(parolaparola123pentru conturile@scmc-demo.ro) șiScmcActiveTenantSeeder(articole TPL000001-ACM-* / GLB / FST, stoc, două PO + recepții, patru SO pe statusuri, jurnal, activity log).- Codurile interne ale companiilor (
…-CC-90001101etc.) urmeazăCodeGeneratorService::generateClientCode(CUI fără litere). Articolele și barele din tabelele de mai jos coincid cuScmcActiveTenantSeeder::seedArticles(inclusiv sufixul-Cla UM secundară). - Codurile PO / REC / SO allocate în seed folosesc
InvoiceNumberService::allocateNextDocumentCodeForThreePl: formăPO-{id_numeric_three_pl_providers}-{număr}(separator din config), nu șirulTPL000001— acela e codul intern al furnizorului, alt câmp decât cheia primară numerică din codul documentului. - Cantitățile pe stoc și pe unele linii de document sunt
random_intîn seeder; tabelul numeric din Scenariu complet rămâne ilustrativ, nu trebuie să reproducă bit cu bit baza după fiecare rulare. - Retururile (RET) nu sunt create de
ScmcActiveTenantSeeder; explicațiile despre retur din ghid descriu regulile aplicației, nu neapărat rânduri RET imediat după seed.
Regula simplă (cum vă gândiți la coduri)
Forma logică (aceeași peste tot):
COD3PL - TIP - DETALIU ( eventual - SUFIX )
| Părți | Ce înseamnă în cuvinte simple |
|---|---|
| COD3PL | Codul intern al furnizorului 3PL din baza de date — în aplicație adesea seria TPL + 6 cifre (ex. TPL000001). Denumirea afișată poate fi ECC; nu trebuie să coincidă cu literele codului. |
| TIP | Ce fel de lucru e: la companii client folosiți în practică segmentul CC din generateClientCode (ex. TPL000001-CC-90001101); P = partener; PO / REC / SO = documente; ACM / GLB / FST = segment scurt de catalog în demo, etc. |
| DETALIU | Numele scurt al firmei, număr de articol, cod depozit scurt, rol (SUP1, CUST1)… |
Exemple „ca în manual” (model de citire, aliniat la baza de date și la CodeGeneratorService):
- Companie client (3PL):
TPL000001-CC-90001101— cod furnizor TPL000001, segment CC, apoi CUI fără litere (ex. din RO90001101). - Depozit (cod tehnic):
WH-001— generat pe 3PL; numele afișat poate fi tot „ECC - Depozit Central”. - Articol:
TPL000001-ACM-001— cod furnizor + segment scurt de catalog (ACM = exemplu ACME) + număr.
Codul furnizorului în demo: TPL000001 (ECC)
În datele de probă, furnizorul 3PL din poveste se numește „ECC” în denumiri afișate (depozit „ECC - Depozit Central” etc.), dar codul intern al acelui furnizor în baza de date este TPL000001 — aceeași serie TPL + 6 cifre ca la crearea automată din aplicație.
- Companie client (3PL): cod generat ca în producție —
TPL000001-CC-{CUI_fără_litere}(ex. TPL000001-CC-90001101 pentru ACME cu CUI RO90001101), prinCodeGeneratorService::generateClientCode. - Articole:
TPL000001-ACM-001… — prefix cod furnizor + segment catalog (ACM / GLB / FST) + număr. - Parteneri:
TPL000001-P-SUP1etc. — același prefix de furnizor, apoi P și un sufix scurt de rol demo.
Depozitele: codul tehnic poate rămâne tip WH… pe 3PL; numele afișat rămâne ECC - ….
Articole în setul demonstrativ — legătura cu structura de mai sus
Fiecărei companii demo îi sunt pregătite cinci articole cu coduri fixe (tabelele de mai jos), cu descriere și cod de bare. Unitatea principală la exemple este Bucată (BUC).
| Cod intern companie (demo, exemplu) | Cum se citește | Prefix articol | Articole (5 buc.) |
|---|---|---|---|
| TPL000001-CC-90001101 (ACME) | furnizor TPL000001 + CC + CUI | TPL000001-ACM | TPL000001-ACM-001 … 005 |
| TPL000001-CC-90001102 (Global) | idem | TPL000001-GLB | TPL000001-GLB-001 … 005 |
| TPL000001-CC-90001103 (Fast) | idem | TPL000001-FST | TPL000001-FST-001 … 005 |
Forma articolului: cod furnizor + - + prescurtare catalog (ACM / GLB / FST) + - + trei cifre. Denumirea lungă a firmei nu intră în cod; rămâne la fișa companiei sau în descrierea articolului.
Dacă ați vrea litere foarte multe în fiecare parte: codul întreg devine impractic și, la salvare/import, depășește plafonul de 30 de caractere pentru câmpurile de cod — vezi Nume mare: ce se întâmplă exact.
Dacă în loc de prefixul furnizorului sau „ACM” ați avea text foarte lung (ex. 249 caractere fiecare)
Da, ar deveni prea lung pentru un cod de articol folosit zilnic: întregul șir (toate părțile + -001 … -005) depășește clar plafonul de 30 de caractere folosit la salvare / import pentru astfel de coduri. Două blocuri de câte 249 caractere, plus cratime și sufixul -001, nu mai trec validarea obișnuită — trebuie cod scurt sau lăsăm aplicația să înlocuiască automat (vezi mai jos).
La inserare (formulare, API, import din fișier, seed-uri): regulile sunt aplicate prin serviciul CodeGeneratorService (normalizare unică). Dacă textul depășește 30 de caractere, nu se păstrează șirul întreg; se folosește un cod de rezervă foarte scurt care începe cu R și continuă cu o amprentă (din același text lung), astfel încât același cod lung din fișier produce mereu același cod scurt la reimport. În catalog recunoaște articolul după descriere și cod de bare. Codurile DRAFT-… pentru ciorne rămân recunoscute (prefix special), tot sub aceeași lungime maximă.
Chiar când matematic „încape” un singur bloc uriaș + -001: codurile kilometrice sunt greu de citit, de scanat și de căutat în liste. De aceea în demo prefixul de furnizor (TPL000001), segmentul (ACM / GLB / FST) și seria 001…005 rămân scurte la nivel de exemplu; detaliile lungi despre produs stau în descriere, nu în cod.
Exemplu: companie 249 caractere și „produs” 249 caractere
În practică, denumiri foarte lungi la firmă sau la descrierea produsului sunt acceptate până la plafonul obișnuit (255 caractere pe astfel de câmpuri), deci și 249 caractere sunt posibile acolo.
1) Companie — denumire de 249 caractere
- Exemplu concret (249 caractere într-un singur șir): prefix fix SOCIETATE- (10 caractere), apoi litera B repetată de 239 ori (10 + 239 = 249).
- În datele încărcate cu
seeder:scmc, codul intern al companiei este cel generat (ex. TPL000001-CC-90001101), nu denumirea lungă. Prefixul articolelor (TPL000001-ACM) se construiește din codul furnizorului + segmentul de catalog, nu din cele 249 de caractere de la firmă. - Rezultat: articolele demo rămân TPL000001-ACM-001 … 005. Textul de 249 caractere apare la datele firmei, nu în codul articolului.
2) Produs — descriere de 249 caractere
- Exemplu concret: propoziția fixă Articol logistic pentru demonstrație — (urmată de un spațiu la final, astfel încât întregul prefix să fie 39 de caractere), plus 210 de litere X → 249 caractere în total în câmpul de descriere.
- Codul articolului în demo rămâne TPL000001-ACM-001 — textul lung stă în descriere, separat de cod.
3) Cod articol propriu, foarte lung
- Un cod de 249 caractere nu respectă plafonul de 30 caractere folosit la inserare pentru coduri; aplicația îl înlocuiește cu rezerva R… (vezi mai sus). Nu este cazul valorilor din tabelele demo de mai jos.
- Recomandare: cod scurt + descriere detaliată.
| Situație | Unde merge textul lung | Cod articol demo (ACME) |
|---|---|---|
| Denumire foarte lungă la firmă | Fișă companie, liste | TPL000001-ACM-001 (neschimbat) |
| Descriere lungă la produs | Catalog / articol | TPL000001-ACM-001 (neschimbat) |
| Ați vrea și codul articolului la fel de lung | Plafon 30 caractere la salvare/import; peste limită → cod rezervă R… (vezi paragraful de mai sus) | În tabelele de mai jos: mereu TPL000001-ACM-001 … 005 |
ACME (TPL000001-ACM-*)
| Cod articol | Descriere | Cod de bare (UM principală) |
|---|---|---|
| TPL000001-ACM-001 | Scanner coduri 2D industrial | 590TPLACM00001 |
| TPL000001-ACM-002 | Etichete termice 100x150mm | 590TPLACM00002 |
| TPL000001-ACM-003 | Transpalet manual 2500 kg | 590TPLACM00003 |
| TPL000001-ACM-004 | Folie stretch 23 µm | 590TPLACM00004 |
| TPL000001-ACM-005 | Mănuși nitril M cutie 100 | 590TPLACM00005 |
Global (TPL000001-GLB-*)
| Cod articol | Descriere | Cod de bare |
|---|---|---|
| TPL000001-GLB-001 | Bax apă minerală 6×1,5L | 590TPLGLB00001 |
| TPL000001-GLB-002 | Snack mix sărat 150g | 590TPLGLB00002 |
| TPL000001-GLB-003 | Cafea boabe 1 kg | 590TPLGLB00003 |
| TPL000001-GLB-004 | Lapte UHT 3,5% 1L | 590TPLGLB00004 |
| TPL000001-GLB-005 | Hârtie igienică 10 role | 590TPLGLB00005 |
Fast (TPL000001-FST-*)
| Cod articol | Descriere | Cod de bare |
|---|---|---|
| TPL000001-FST-001 | Cutie carton triplu strat | 590TPLFST00001 |
| TPL000001-FST-002 | Bandă adezivă PP 48mm | 590TPLFST00002 |
| TPL000001-FST-003 | Pungi courier biodegradabile | 590TPLFST00003 |
| TPL000001-FST-004 | Document pouch A4 | 590TPLFST00004 |
| TPL000001-FST-005 | Role termice 80mm | 590TPLFST00005 |
Unitate secundară „Cutie”
La fiecare articol de mai sus există și o unitate secundară „Cutie”: codul de bare al acesteia este codul de bare principal, la care se adaugă sufixul -C (ex. 590TPLACM00001-C pentru articolul TPL000001-ACM-001).
Istoricul mișcărilor de stoc
Fiecare mișcare importantă (intrare la recepție/retur, ieșire la livrare, rezervare, anulare rezervare) poate lăsa o înregistrare pe care o puteți folosi pentru trasabilitate și reconciliere. Detaliile exacte (tip mișcare, document sursă, cod intern) apar în ecranul de jurnal / rapoarte din aplicație.
La ce vă ajută în practică: să demonstrați când s-a schimbat cantitatea, de ce document provine (recepție, comandă livrată, retur anulat etc.) și să verificați diferențele la inventar sau reclamații.
Integrări (notificări către alte sisteme)
Dacă organizația folosește integrări (ex. către ERP sau un alt serviciu), sistemul poate trimite notificări când se întâmplă evenimente importante: comenzi create sau modificate, recepții, schimbări de status la comenzi de vânzare sau retururi, modificări de stoc. Ciornele de recepție nu generează în general aceleași evenimente ca documentele finale.
Lista exactă de evenimente și configurarea se fac împreună cu administratorul tehnic sau din documentația de integrare.
8. Ghid flux operațional (recepții, PO, retururi, tamburi)
Acest ghid rezumă ce se întâmplă în aplicație la pașii critici (stoc, statusuri, corecții). Pentru termeni de business, vezi secțiunea Glosar de business din aceeași pagină.
Statusuri documente
Recepție (REC)
„Creat” = document publicat, încă editabil. „În lucru” = lucru în depozit. „Închis” = recepția e finalizată administrativ; progresul oficial al PO folosește doar recepțiile închise. Stocul crește la publicare/salvare a recepției (nu la închidere). „Anulat” = document anulat; dacă existase deja stoc postat din această recepție, anularea încearcă să inverseze efectele.
Retur (RET)
Stocul pentru retur se postează de obicei la „Închis”, nu la creare. „Anulat” după ce stocul a fost postat poate cere confirmare explicită, deoarece trebuie inversată creșterea de stoc.
Comandă furnizor (PO)
„Parțial recepționat / Recepționat” reflectă cantitățile din recepțiile publicate și neanulate. „Anulată” oprește recepțiile noi; liniile rămân vizibile pentru istoric.
Matricea PO / recepții
Coloana „Comandat” vine din linia PO. „Recepționat (agregat)” = suma cantităților din recepțiile relevante, în aceeași UM3PL. Coloanele per recepție arată cât s-a înregistrat în fiecare document; progresul pe linie compară agregatul cu cantitatea comandată.
Greșeli la recepție — cum le corectezi
- Dacă recepția e încă „Creat” sau „În lucru”: deschide Editare și corectează cantitățile / liniile înainte de închidere.
- După „Închis”: nu mai edita cantitățile direct; folosește fluxul agreat (retur intern, recepție suplimentară pe PO, sau tichet către administrator) — depinde de politica depozitului.
- Dacă trebuie să anulezi o recepție închisă, folosește schimbarea de status doar dacă ai dreptul; citește mesajul de confirmare despre efectul asupra stocului.
Retururi și stoc
Verifică în antet statusul și data maximă de recepție. La închidere, articolele intră în stoc în depozitul returului. Anularea după postarea stocului poate inversa creșterea; confirmă în ecranul dedicat.
Tamburi / containere (HU)
De pe recepție poți deschide crearea unui container deja filtrată pe recepție (și opțional pe articol) ca să etichetezi fizic tamburul corespunzător liniei. Lista containere este în meniul de stoc / handling containers.
Rezervare exclusivă pe container
Când e activă, stocul de pe acel container nu mai apare în selecțiile FIFO generice; rămâne disponibil doar prin scanarea codului sau prin legătura explicită la comanda de vânzare setată. Folosește când marfa e dedicată unui client sau unui SO.
9. Diagramă tranziții de status
Derivat din aceleași reguli ca butoanele de status din aplicație.
| De la | Până la |
|---|---|
draft |
sent cancelled |
sent |
partial_received received cancelled |
partial_received |
received cancelled sent |
received |
Final — fără tranziții |
cancelled |
Final — fără tranziții |
| De la | Până la |
|---|---|
CREAT |
IN_LUCRU ANULAT |
IN_LUCRU |
INCHIS ANULAT |
INCHIS |
Final — fără tranziții |
ANULAT |
Final — fără tranziții |
| De la | Până la |
|---|---|
CREAT |
IN_LUCRU ANULAT |
IN_LUCRU |
INCARCAT ANULAT |
INCARCAT |
LIVRAT ANULAT |
LIVRAT |
Final — fără tranziții |
ANULAT |
Final — fără tranziții |
| De la | Până la |
|---|---|
CREAT |
IN_LUCRU INCHIS ANULAT |
IN_LUCRU |
INCHIS ANULAT |
INCHIS |
Final — fără tranziții |
ANULAT |
Final — fără tranziții |
10. Glosar de business
Termeni folosiți consecvent în aplicație și în conținutul de ajutor.
Companie (3PL)
Firma client în a cărei nume lucrați (stoc, comenzi); datele nu se amestecă între companii.
EN
Company (3PL tenant) — The client company whose stock and orders you operate; data does not mix between companies.
Partener
Entitate B2B (furnizor sau client) folosită pe comenzi și livrări, în cadrul companiei selectate.
EN
Partner — B2B entity (supplier or customer) used on orders and deliveries within the selected company.
Disponibil vs. total
Total = fizic în depozit; disponibil = ce mai poate fi alocat la comenzi noi (scăzând rezervările).
EN
Available vs. total — Total = physical on hand; available = what can still be allocated to new orders (after reservations).
Rezervare
Cantitate ținută pentru o comandă în lucru; scade din disponibil până la livrare sau eliberare.
EN
Reservation — Quantity held for an in-progress order; reduces available until delivery or release.
Ciornă (draft)
Document salvat incomplet; până la publicare nu produce efecte de stoc (unde e cazul).
EN
Draft — Saved incomplete document; until published it does not affect stock (where applicable).
11. Module și acces
Fiecare modul de mai jos poate fi ascuns dacă nu face parte din pachetul companiei sau dacă rolul dvs. nu include permisiunea. Textul descrie de ce există modulul și ce veți face în mod tipic acolo.
Client 3PL
Companiile client 3PL pentru care operați logistic: date de identificare, module activate, utilizatori. Fără o companie client configurată corect, fluxurile operaționale pot fi incomplete.
- Vizualizare și editare conform drepturilor
- Context pentru raportare per companie client
Partners
Agenda partenerilor: furnizori și clienți operaționali, cu puncte de lucru (adrese de livrare/preluare, contacte). PO-urile se leagă de furnizori; SO-urile de clienți.
- Evită introducerea manuală repetată a adreselor
- Uniformizează denumirile pe documente
Articles
Sursa unică de adevăr pentru SKU-uri: cod, descriere, UM, atribute fizice. Toate liniile de comandă referă aceste înregistrări.
- Menține consistența între recepții și livrări
- Permite căutare și filtrare rapidă în liste mari
Inbound
Tot ce intră în depozit din achiziții: comenzi către furnizor (PO) și recepții care confirmă marfa primită. Aici începe creșterea de stoc din fluxul de aprovizionare.
- Urmărire cantități comandate vs recepționate
- Legătură clară furnizor – articol – depozit
Stock
Vizibilitate cantitativă: cât există, unde, și istoricul mișcărilor (intrări/ieșiri/ajustări după caz). Esențial pentru reconciliere și pentru a evita livrări fără acoperire.
- Verificare înainte de promisiuni către client
- Audit după recepții și livrări
Outbound
Comenzi de vânzare și livrări. Fluxul se încheie operațional cu marfă ieșită din depozit și status corespunzător pe document.
- Alocare depozit sursă
- Control cantități livrabile
Returns
Gestionați retururile post-livrare, păstrând legătura cu SO-ul inițial pentru a explica creșterile de stoc și pentru rapoarte.
- Trasabilitate end-to-end
- Suport pentru dispute și garanții
Warehouses
Definiți locațiile între care se împarte stocul. O recepție și o livrare trebuie să știe mereu „în care depozit” se întâmplă.
- Structură minimă înainte de prima recepție
- Poate reflecta clădiri, zone sau logica dvs. internă
Stock options
Inventar SKU, transformări UM, verificări CTC, etichetare — de regulă rezervat super-adminului când modulul este activ.
Export / Import
Încărcare și export în masă (Excel/CSV) din meniul Administration, pentru migrări sau actualizări periodice. Respectați șabloanele acceptate de platformă.
Comparare documente
Comparați două PO, SO, recepții sau retururi pe același ecran (/compare): util pentru reconciliere cantități și verificare înainte de închidere.
Reports
Ieșiri structurate pentru management: stoc la zi, urmărire lot, istoric mișcări, uneori indicatori agregați. Folosiți rapoartele pentru decizii, nu doar ecranul de listă simplă.
Administration
Control acces utilizatori, roluri, integrări (webhooks), uneori setări de firmă. De obicei rezervat administratorilor; modificările aici afectează întreaga companie selectată.
12. Scenariu practic complet (exemplu numeric)
Următorul scenariu pornește de la zero și arată cum se calculează stocul după achiziție, livrare și retur. Fiecare pas include de ce este necesar și ce verificați după execuție.
Ipoteză. Achiziționați 100 BUC de „Produs A” de la „Furnizor X”, le recepționați integral în „Depozit principal”, vindeți 30 BUC către „Client Y”, marcați livrarea, apoi clientul returnează 10 BUC. Stocul final așteptat: 100 − 30 + 10 = 80 BUC în depozitul unde ați înregistrat returul.
- Pas 1 — Articol în catalog. Creați articolul cu cod unic (ex. ART-001), descriere și UM BUC. Fără acest pas, liniile de comandă nu au la ce să se lege.
- Pas 2 — Depozit. Definiți „Depozit principal” (sau numele ales). Fără depozit nu puteți preciza unde crește stocul la recepție.
- Pas 3 — Parteneri. Creați „Furnizor X” ca furnizor și „Client Y” ca client. Veți selecta aceste înregistrări pe PO, respectiv SO.
- Pas 4 — PO 100 BUC. Comandă de cumpărare către Furnizor X pentru 100 BUC Produs A. Verificați totalul liniilor înainte de salvare.
- Pas 5 — Recepție. Înregistrați recepția pe PO, 100 BUC în depozitul ales. După salvare, în Stock ar trebui să vedeți +100 pentru combinația articol + depozit.
- Pas 6 — SO 30 BUC. Comandă de vânzare către Client Y, 30 BUC, depozit sursă = depozitul unde aveți cele 100 BUC. Până la livrare, stocul disponibil poate fi tratat conform regulilor de rezervare ale sistemului.
- Pas 7 — Livrare. Deschideți SO-ul și setați status LIVRAT (sau echivalent). Stocul scade cu 30 BUC. Verificați în jurnalul de stoc mișcarea de ieșire.
- Pas 8 — Retur 10 BUC. Creați returul legat de SO, 10 BUC înapoi în depozit. Stocul crește cu 10. Rezultat final: 100 − 30 + 10 = 80 BUC.
Verificare finală. În modulul Stock, confirmați că pentru „Produs A” în depozitul folosit aveți 80 BUC și că jurnalul conține intrările/ieșirile corespunzătoare recepției, livrării și returului.
13. Ghid 3PL și platformă (documentație extinsă)
Secțiunea următoare este identică ca substanță cu Workbook 3PL din aplicația autentificată. Acoperă: concepte (3PL, mai multe companii pe aceeași platformă), roluri în platformă, coduri interne TPL și CLI, pașii de creare furnizor și legare companii, utilizatori, facturare estimată, jurnal de audit, sesiune și context (selectare furnizor vs companie), cod intern de furnizor, parcurgerea ecranelor în UI pentru creare furnizor și companie, glosar și tabel cu rute utile. Linkurile către pagini administrative (ex. listă furnizori, audit, facturare) funcționează după autentificare și depind de drepturile contului dvs.; dacă nu aveți acces, contactați administratorul.
Documentație unificată: concepte (furnizor 3PL vs companie 3PL), roluri, coduri TPL și CLI, crearea unui furnizor, companii 3PL și utilizatori, facturare estimată, jurnal de audit, sesiune și context, cod intern, parcurgerea ecranelor în UI și glosar. Linkurile din tabelul „Pagină” folosesc drept exemplu un furnizor la care aveți acces după autentificare.
Ghid complet: platformă 3PL și companii 3PL
Ghid actualizat pentru fluxul furnizor 3PL, companii 3PL, module, estimare costuri și audit.
Acest workbook explică, pas cu pas, cum funcționează în aplicație legătura dintre un furnizor logistice 3PL (nivel „furnizor”), companiile 3PL (tenanți operaționali: stoc, comenzi — depozitele fizice sunt în catalogul 3PL), modulele facturate, utilizatorii și jurnalul de audit. Este destinat în principal super administratorilor și administratorilor 3PL (rolul admin_3pl).
Termeni folosiți în continuare: „furnizor 3PL” = înregistrarea din lista Furnizori 3PL (cod intern TPL…); „companie 3PL” = firmă deservită de acel 3PL, cu cod intern CLI… și propriul set de module și utilizatori.
1. Concepte de bază
Platforma separă două niveluri: (A) administrarea unui furnizor 3PL — setări, utilizatori legați de acel furnizor, module implicite pentru companii noi; (B) operarea în cadrul unei companii 3PL — stoc, comenzi, utilizatori de companie, module activate pentru acea companie. Înregistrările de depozit (`warehouses`) aparțin doar operatorului 3PL, nu companiei 3PL.
Modulele pot exista în catalog (preț lunar sau zilnic). La crearea furnizorului 3PL alegi un set de module implicite (salvat ca listă de identificatori / slug-uri). Acestea servesc ca șablon pentru companii noi create sub acel 3PL; în continuare, super adminul poate ajusta modulele per companie din zona de administrare module-companii, conform drepturilor.
- Un furnizor 3PL poate avea mai multe companii 3PL.
- Fiecare companie 3PL are propriul cod intern (în practică prefix CLI); este un alt câmp decât codul TPL al furnizorului, chiar dacă ambele sunt stocate ca `internal_code` în tabele diferite.
- Contextul curent (companie activă / 3PL selectat) influențează ce meniuri și date vezi în interfață.
- Furnizorul 3PL este în sine o companie; un al doilea rând (înregistrare companie 3PL) cu aceleași date ca furnizorul este înregistrarea operațională pentru aceeași firmă — nu o dublare greșită.
2. Roluri și permisiuni (rezumat)
Crearea, editarea și ștergerea înregistrărilor de tip furnizor 3PL este în general rezervată super administratorilor. Vizualizarea unui furnizor și a paginilor asociate (primii pași, audit) este permisă utilizatorilor care au acces la acel furnizor (de exemplu administratori 3PL). Previzualizarea facturării și ecranele de facturi/module companii sunt rezervate super administratorilor.
- Super admin: poate crea furnizori 3PL, modifica coduri interne, gestiona module la nivel de platformă acolo unde există astfel de ecrane.
- Administrator 3PL (admin_3pl): operează în numele furnizorului; vede furnizorul și companiile asociate, fără a avea neapărat drepturi de super admin.
- Utilizatori de companie: legați de una sau mai multe companii 3PL; nu văd neapărat administrarea globală a 3PL.
3. Coduri interne: TPL (furnizor) vs CLI (companie 3PL)
Codurile interne evită confuzia între entități. Prefixul TPL este folosit pentru furnizorii 3PL. Dacă la creare lași câmpul gol, sistemul poate aloca automat un cod de forma TPL urmat de cifre (ex.: TPL000042). Poți și introduce manual un cod (litere mari, cifre, cratime), cu verificare de unicitate.
Clarificare tehnică: unicitatea codului intern este impusă separat pe fiecare tabel (`three_pl_providers` și `clients_3pl`). Nu există o constrângere care să interzică același șir de caractere în ambele tabele — baza de date poate accepta teoretic același text atât ca furnizor, cât și ca companie 3PL. La salvare, validarea verifică duplicatele doar în interiorul aceluiași tabel (ex.: `unique:clients_3pl,internal_code` pentru companii).
De ce totuși prefixe TPL și cod companie 3PL (CC): generatorii și convenția din interfață (ajutorul „TPL vs cod companie 3PL” la creare furnizor) separă clar cele două tipuri de entități — nu ca obligație tehnică de unicitate între tabele, ci pentru claritate în rapoarte, mesaje, suport și integrări: eviți ambiguitatea când același cod ar putea desemna două lucruri diferite.
La editarea unui furnizor 3PL, schimbarea codului intern respectă unicitatea doar în tabelul furnizorilor și poate fi înregistrată în istoric / jurnal de activitate.
Ce înseamnă TPL?
În codul sursă (CodeGeneratorService), prefixul TPL este explicit legat de „third-party logistics” (logistică terță parte): furnizorul 3PL este entitatea care oferă servicii logistice în numele clienților. Nu este un acronim afișat în UI ca text lung — este un prefix scurt pentru codurile interne ale furnizorilor (ex. TPL000042).
Ce înseamnă CLI aici?
Codurile auto secvențiale pentru companii 3PL folosesc în baza de date un prefix de tip CLI (CLI000001, CLI000002 etc.). În formulare și sugestii ANAF veți vedea și segmentul CC (cod companie 3PL), ex. TPL…-CC-… — nu are legătură cu „command-line interface”. Fereastra de ajutor contrastează TPL (furnizor) cu codurile de companie 3PL.
De ce avem TPL și CLI și la ce folosesc ambele?
Modelul aplicației are două niveluri: (1) furnizorul 3PL — înregistrarea logistică care agregă setări la nivel furnizor, module implicite și utilizatori admin_3pl (orice acord formal între platformă și furnizor este în sarcina super-adminului, nu un „contract” pe care utilizatorii 3PL îl editează aici); (2) compania 3PL — înregistrarea clientului pentru comenzi, stoc și utilizatori de companie. Rândurile din `warehouses` au `three_pl_provider_id` (3PL), nu `client_3pl_id`. Codurile TPL și CLI sunt două identificatoare scurte, ușor de recunoscut în rapoarte și în integrări, fiecare pentru nivelul lui.
- TPL răspunde la întrebarea: care furnizor logistic (organizație 3PL) este această înregistrare? — apare în administrarea furnizorilor, legătura cu modulele implicite pentru companii noi și (doar pentru super administratori) estimarea de facturare la nivel de furnizor.
- CLI răspunde la: care companie 3PL a acelui 3PL rulează operațiunile? — comenzi, recepții și date operaționale sunt legate de compania cu cod CLI. Depozitele fizice sunt înregistrate la furnizorul 3PL; nu înlocuiesc codul TPL al furnizorului.
4. Creare furnizor 3PL — pașii din formular (wizard)
Din meniul de administrare accesezi crearea unui furnizor nou. Formularul este împărțit în pași logici (date, module, cod, opțional șablon de la alt furnizor, administrator 3PL).
Pas A — Date principale
Completezi denumirea legală (obligatoriu) și, opțional, denumire comercială, date de identificare fiscală unde există câmpuri. Fără denumire legală validă nu poți continua corect.
Pas B — Module implicite
Bifezi modulele din catalog care vor deveni implicite pentru companiile noi create sub acest 3PL. Lista poate fi goală; în acest caz previzualizarea facturării (super admin) va arăta zero sau fără linii, până când adaugi module.
Pas C — Cod intern
Poți lăsa gol pentru generare automată TPL… sau introduce un cod propriu. Există verificare în timp real (disponibil / indisponibil) după normalizare.
Pas D — Șablon de la furnizor existent (opțional)
Dacă alegi un furnizor șablon și nu bifezi manual module, se pot copia modulele implicite de la acel furnizor. Utile pentru configurări repetitive.
Pas E — Administrator 3PL (opțional dar recomandat)
Poți atașa imediat un utilizator cu rol admin_3pl: fie un utilizator existent (căutare după nume/email), fie un utilizator nou (nume, email, parolă). Utilizatorii super admin nu pot fi selectați ca administrator 3PL. La utilizator nou se poate trimite email de bun venit, conform configurării aplicației.
5. După salvare — redirecționare și onboarding
După crearea cu succes a furnizorului, aplicația nu te trimite la listă, ci la pagina „Primii pași” pentru acel furnizor. Acolo vezi un rezumat: număr de companii 3PL, depozite în catalogul acelui 3PL, utilizatori distincți legați de aceste companii 3PL.
Din aceeași pagină ai scurtături: creare companie nouă (cu furnizorul deja indicat prin parametru), jurnal audit, gestionare utilizatori 3PL, plus legătura către acest workbook. Super administratorii mai au acolo scurtătura spre previzualizarea facturării.
- Dacă nu există încă nicio companie 3PL, primul pas practic este crearea uneia.
- După ce există companii, poți intra în detaliul unei companii pentru configurări operaționale (utilizatori, module etc.); depozitele se gestionează din catalogul 3PL, după drepturi.
6. Companii 3PL sub un 3PL
Crearea unei companii noi se face din fluxul dedicat companiilor. Când deschizi formularul cu parametrul din URL three_pl_provider_id egal cu ID-ul furnizorului, câmpul „Furnizor 3PL” este precompletat — evită greșelile de selectare.
Compania primește cod intern în spațiul CLI (conform regulilor din formular / generator). Modulele active pentru companie pot fi aliniate la șablonul 3PL sau ajustate ulterior, în funcție de cum este configurată platforma ta.
Exemplu de legătură profundă: /companies/create?three_pl_provider_id=5 (înlocuiește 5 cu ID-ul real).
7. Utilizatori legați de furnizorul 3PL
Pagina de utilizatori a furnizorului 3PL permite atașarea utilizatorilor la acel furnizor și atribuirea rolurilor permise (inclusiv admin_3pl). Acest lucru este separat de utilizatorii legați strict de o anumită companie 3PL.
Operațiunile aici pot genera înregistrări în jurnalul de audit, astfel încât să existe urmă a cine a adăugat sau scos pe cineva de la furnizor.
9. Jurnal de audit și export CSV
Jurnalul pentru un furnizor 3PL agregă evenimente din modelul de jurnal Activity unde subiectul este chiar înregistrarea furnizorului sau unde în proprietăți apare identificatorul acelui furnizor (de exemplu la acțiuni pe utilizatori legați de 3PL).
Poți parcurge lista paginat și exporta un fișier CSV (UTF-8 cu marcaj BOM pentru Excel) cu coloane precum dată, tip jurnal, descriere, email autor, tip subiect, ID subiect, JSON proprietăți.
- Exportul este util pentru conformitate internă sau revizii externe pe o perioadă.
10. Rute și parametri (referință)
| Pagina | Observații |
|---|---|
| Workbook 3PL (acest ghid) | Acest ghid (utilizator autentificat și verificat). |
| Furnizori 3PL — listă | Administrare furnizori; create și update doar pentru conturi cu drepturi. |
| Primii pași (onboarding furnizor) — Deschide lista și alege un furnizor pentru linkuri directe. | Onboarding după creare sau din detaliu furnizor. |
| Jurnal audit (și export CSV din pagină) — Deschide lista și alege un furnizor pentru linkuri directe. | Listă + export CSV. |
| Companie 3PL nouă | Companie 3PL nouă cu 3PL preselectat. |
11. Sesiune: selectare furnizor 3PL și companie activă
După autentificare, utilizatorii cu acces la mai multe contexte pot trece prin ecrane precum selectarea furnizorului 3PL și selectarea companiei active. Contextul ales determină ce date apar în meniuri, rapoarte și operațiuni curente.
Comutarea contextului 3PL (unde este disponibilă) actualizează sesiunea astfel încât acțiunile ulterioare să fie interpretate în raport cu acel furnizor. Similar, compania activă limitează sau focalizează modulele și datele operaționale.
- Dacă nu vezi anumite meniuri, verifică dacă ai selectat compania corectă sau dacă rolul tău include acel modul.
Ce este „contextul” în această aplicație?
În sesiune sunt stocate în principal două valori care împreună definesc „cine ești acum” în platformă: current_three_pl_id (furnizorul 3PL ales) și current_company_id (compania 3PL activă). Sidebar-ul, filtrele și multe interogări țin cont de ele (SidebarComposer, navbar).
În practică: când schimb „contextul”, schimb 3PL-ul?
Nu neapărat doar manual. Contextul = perechea (3PL din sesiune + companie activă). Cel mai frecvent schimbi compania activă (altă companie client / alt cod CLI): atunci aplicația îți aliniază automat și furnizorul 3PL din sesiune cu compania aleasă, ca să nu lucrezi într-o companie aparținând unui 3PL în timp ce în sesiune ar fi încă selectat alt furnizor.
Schimbi explicit furnizorul 3PL (fără să alegi mai întâi o companie) când folosești fluxul de selectare furnizor sau comutarea rapidă 3PL: acolo se modifică direct current_three_pl_id; la selectarea din listă se poate reseta și compania, ca să alegi o firmă din noul 3PL.
Pe scurt: poți schimba contextul fie trecând la altă companie (3PL-ul din sesiune se actualizează singur), fie alegând alt 3PL ca filtru (atunci refaci de obicei și alegerea companiei).
Diferența: schimbare context vs. schimbare furnizor 3PL
Nu sunt două lucruri complet separate: schimbarea furnizorului 3PL este un tip de schimbare de context, dar nu singurul.
- Selectare furnizor din fluxul /select-three-pl (salvare storeThreePlSelection): setează current_three_pl_id și șterge current_company_id, ca să alegi din nou o companie din acel 3PL. Este schimbarea de „filtru” 3PL pentru super admin (și flux similar pentru admini 3PL cu mai mulți furnizori).
- Schimbare companie activă (switchCompany): setează current_company_id și, dacă compania are three_pl_provider_id, actualizează și current_three_pl_id la acel furnizor — rămân sincronizate (nu lucrezi într-o companie din 3PL A cu sesiunea încă pe 3PL B).
- Comutare rapidă 3PL (switchThreePl în ThreePlProviderController): schimbă doar current_three_pl_id în sesiune (ex. din UI-ul de context), fără a trece prin ecranul de selectare companie.
- Părăsire context (leaveContext, doar super admin): golește ambele current_company_id și current_three_pl_id — revii la o vedere mai globală, fără companie/3PL activ în sesiune.
Deschide selectarea furnizorului 3PL Deschide selectarea companiei
12. Editare furnizor și istoric cod intern
La editarea unui furnizor 3PL, schimbarea codului intern este supusă acelorași reguli de unicitate și normalizare ca la creare. Modificările pot fi înregistrate în jurnalul de activitate dedicat schimbărilor de cod, astfel încât să existe o urmă clară (valoare veche / valoare nouă, utilizator, moment).
Consultă ecranul de editare furnizor și secțiunea de istoric asociată codului intern, dacă este afișată în interfață.
13. Flux în interfață — pași și etichete de butoane
Pașii de mai jos reflectă ecranele reale (resurse Blade). Etichetele sunt cele afișate prin sistemul de traduceri (în română, conform locale-ului aplicației).
Furnizor 3PL Nou
Rută: `/three-pl-providers/create` (Furnizor 3PL nou).
Titlu pagină: „Furnizor 3PL nou” / subtitlu „Adaugă un furnizor de servicii logistice”.
Sus dreapta: buton „Înapoi la listă” (întoarcere la lista furnizorilor).
Bara de pași (sus): ① Date principale — ② module — ③ Administrator 3PL — ④ Previzualizare. Poți face clic pe fiecare pas pentru a sări (unde este permis).
- Pas 1 — Date principale: card „Date furnizor”. Opțional: listă „Șablon de la furnizor existent” (copiază module implicite). Câmp „Cod intern” cu placeholder pentru cod auto TPL, buton „Generează cod”, link „TPL vs cod companie 3PL” (deschide fereastra explicativă). Completezi „Denumire legală” (obligatoriu) — fără ea, câmpurile opționale rămân blocate și butonul „Următorul” din acest pas poate fi dezactivat. După completare: „Următorul” spre pasul 2.
- Pas 2 — module: titlu „Module implicite pentru companii noi”; butoane „Selectează tot” / „Deselectează tot”. Jos: „Date principale” (înapoi) și „Administrator 3PL” (înainte). În lateral apare estimarea de cost („Estimare cost”) pe măsură ce bifezi modulele.
- Pas 3 — Administrator 3PL: card cu titlul „Administrator 3PL”. Bifă „Adaugă administrator 3PL acum”. Alege „Utilizator existent” (căutare după nume/email) sau „Utilizator nou” (nume, email, parolă, confirmare; opțional „Sari peste turul de bun venit”). Jos: înapoi la „module” sau „Previzualizare” înainte.
- Pas 4 — Previzualizare: card „Revizuire și creare” cu rezumatul ales. Butoane: „Înapoi” spre pasul 3 și „Salvează” (trimite formularul). După succes: redirecționare la pagina „Primii pași” pentru acel furnizor.
Companie nouă
Rută: `/companies/create` (Companie 3PL nouă); poți adăuga `?three_pl_provider_id=ID` pentru a preselecta furnizorul.
Titlu: „Companie 3PL nouă” / text intro despre adăugarea unei companii 3PL legate de un furnizor 3PL.
Pentru super admin, pașii sunt: ① Date principale — ② Administrator companie — ③ Previzualizare. Pentru alți utilizatori, pașii 1 și 2 (fără pas dedicat administratorului companiei) se combină diferit în interfață — vezi bara de progres de pe ecran.
- Pas 1 — Date principale: două carduri — „Date principale” (stânga) și „Contact și adresă” (dreapta). În „Date principale”: listă obligatorie „Furnizor 3PL” (dacă există opțiuni), câmp obligatoriu „Cod Intern” (etichetă fixă în view), „Denumire legală”, opțional denumire comercială, CUI/CIF cu buton „Preia de la ANAF”, EORI, țară înregistrare. În „Contact și adresă”: e-mail, telefon, adresă sediu, descriere, plată, monedă, TVA, comutator „Companie activă”. Jos: „Următorul”.
- Pas 2 — Administrator companie (doar super admin): card „Administrator companie” cu comutator „Creare utilizator admin” (eticheta din interfață pentru acel switch). Poți activa formularul pentru utilizator nou (nume, email, parolă) sau îl poți lăsa dezactivat. Apoi „Previzualizare”.
- Pas final — Previzualizare: „Revizuire și creare”; buton „Creează companie 3PL” (nu „Salvează”) trimite formularul.
14. Glosar rapid
- Furnizor 3PL
- Organizația de logistică care stă între platformă și firmele pe care le deserviți. În sistem primește un cod scurt care, de obicei, începe cu literele TPL — ca să o recunoașteți ușor în liste și rapoarte.
- Companie 3PL
- Firma care lucrează zi de zi în aplicație: comenzi, depozit, utilizatori proprii. Are propriul cod scurt (în practică, familia CLI), diferit de codul furnizorului 3PL — așa se știe cine e „logistul” și cine e „clientul operațional”.
- Cod TPL / Cod CLI
- Două tipuri de coduri scurte ca să nu se amestece „organizația logistică” cu „firma care operează zilnic”. Cod TPL (furnizor 3PL): dacă la creare lăsați câmpul gol, sistemul poate propune singur ceva de forma TPL urmat de cifre (ex.: TPL000042). Puteți și introduce manual un cod din litere MARI, cifre și cratimă — trebuie să fie unic printre furnizori. Cod CLI (companie 3PL): la generare automată apare adesea ca CLI urmat de cifre (ex.: CLI000001, CLI000002). În formulare sau în documente puteți vedea și variante cu segmentul CC (cod companie 3PL). Ideea pentru management: același tip de cod nu înseamnă același lucru — TPL = nivel furnizor, CLI/CC = nivel companie 3PL.
- Companie activă (context)
- Pe scurt: ce firmă „vedeți” acum pe ecran după autentificare și după ce ați ales compania. Toate listele, comenzile și stocul se referă la acea firmă până o schimbați din selector. Nu confundați cu schimbarea furnizorului 3PL în ecranele administrative — acolo e alt nivel de lucru.
- Modul
- O bucată de funcționalitate pe care o puteți activa pentru o firmă — de exemplu un tip de raport sau un flux anume. Unele module au preț în catalog; ce vedeți în meniu depinde de ce s-a activat pentru compania dumneavoastră.
- Jurnal de activitate (audit)
- Istoricul evenimentelor importante: cine a făcut o modificare, când. Folosit la control intern, la întrebări din audit sau când trebuie să reconstruiți „cine a schimbat ce”. Se poate exporta de obicei în fișier pentru analiză.
- API
- Legătura „oficială” prin care alte sisteme din firmă (ERP, contabilitate, BI) pot citi sau trimite date în aplicație, cu drepturile potrivite pentru fiecare utilizator. Documentația tehnică este publică pe site la adresa /api-docs — echipele IT o folosesc ca să construiască integrări.
- Webhook
- O adresă web (link) pe care o înregistrați în sistem; când se întâmplă ceva important (de exemplu se schimbă starea unei comenzi), aplicația trimite singură o „vește” către acel link. Asta ajută la automatizări — de pildă să actualizați un tabel în alt program sau să porniți o notificare — fără să verificați manual tot timpul.
- 3PL
- Prescurtare uzuală pentru „sistem de gestiune depozit”. În practică: zona din aplicație unde urmăriți ce intră, ce iese, ce mai este pe stoc, retururile și rapoartele legate de depozit.
- SKU / articol
- Fișa produsului în catalog: codul pe care îl folosesc depozitul și biroul, denumirea, unitatea (bucăți, kilograme…). Fără acest pas nu puteți adăuga linii pe comenzi de cumpărare sau vânzare — totul pleacă de la catalog.
- PO (Purchase Order)
- Comanda pe care o faceți către furnizor — ce produse și în ce cantități. Când marfa sosește, înregistrați recepțiile „pe” această comandă, până acoperiți tot ce ați comandat (sau parțial, dacă așa ați convenit).
- SO (Sales Order)
- Vânzarea către client: ce trimiteți și în ce cantități. Când închideți livrarea în sistem (marfa a plecat spre client), cantitățile ies din stoc. Dacă clientul returnează ceva, returul se leagă de această vânzare ca să rămână clar șirul evenimentelor.
- Recepție
- Pasul în care confirmați că marfa a intrat fizic în depozit, de obicei pe baza unei comenzi de cumpărare. După confirmare, „ce aveți pe raft” crește cu cantitățile recepționate.
- Depozit
- Locul unde țineți evidența cantităților — poate fi o hală, o locație sau o denumire internă. Fiecare intrare sau ieșire trebuie să precizeze clar în ce depozit are loc, altfel stocul nu poate fi urmărit corect.
- Stoc / jurnal tranzacții
- „Cât avem acum” pe fiecare produs și depozit. Lângă aceasta, istoricul (jurnalul) arată cum s-a ajuns la aceste cifre: recepții, livrări, ajustări. Util când trebuie să explicați diferențe sau să verificați o livrare.
- Retur
- Situația în care clientul trimite înapoi marfă. O înregistrați în sistem legată de vânzarea originală; cantitatea reintră în depozitul ales, astfel încât stocul și istoricul să rămână corecte.