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.
Roadmap
- 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.
Was this page helpful?
One tap; you can submit again anytime.
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)
This page summarises what happens in the app at critical steps (stock, statuses, corrections). For business terms, see the Business glossary section on this same page.
Document statuses
Reception (REC)
“Created” = published document, still editable where allowed. “In progress” = warehouse work in flight. “Closed” = reception finished administratively; official PO progress uses closed receptions only. Stock increases when the reception is saved/published (not on close). “Cancelled” = document cancelled; if stock had already been posted, cancellation may try to reverse effects.
Return (RET)
Return stock is usually posted when the return is “Closed”, not at creation. “Cancelled” after stock was posted may need explicit confirmation because the stock increase must be reversed.
Purchase order (PO)
“Partially / fully received” reflects quantities from published, non-cancelled receptions. “Cancelled” blocks new receptions; lines remain visible for history.
PO / reception matrix
“Ordered” comes from the PO line. “Received (aggregate)” sums relevant receptions in the same UM3PL. Per-reception columns show what was recorded in each document; line progress compares the aggregate to the ordered quantity.
Reception mistakes — how to fix
- If the reception is still “Created” or “In progress”: open Edit and correct quantities/lines before closing.
- After “Closed”: quantities are no longer edited directly; use your agreed process (internal return, follow-up reception on the PO, or a ticket to an administrator).
- If you must cancel a closed reception, only do so with the right permission; read the confirmation message about stock impact.
Returns and stock
Check the header status and max reception date. On close, items increase stock in the return warehouse. Cancelling after stock posting may reverse that increase; confirm on the dedicated screen.
Drums / handling containers
From a reception you can open container creation prefilled with that reception (and optionally that line’s article) so the physical label matches the line. The container list lives under stock / handling containers.
Exclusive reservation
When active, stock on that container is hidden from generic FIFO picking; it stays available only by scanning the code or via the explicit sales order link. Use when goods are dedicated to a client or SO.
9. Diagramă tranziții de status
Derived from the same rules as status buttons in the app.
| From | To |
|---|---|
draft |
sent cancelled |
sent |
partial_received received cancelled |
partial_received |
received cancelled sent |
received |
Final — no transitions |
cancelled |
Final — no transitions |
| From | To |
|---|---|
CREAT |
IN_LUCRU ANULAT |
IN_LUCRU |
INCHIS ANULAT |
INCHIS |
Final — no transitions |
ANULAT |
Final — no transitions |
| From | To |
|---|---|
CREAT |
IN_LUCRU ANULAT |
IN_LUCRU |
INCARCAT ANULAT |
INCARCAT |
LIVRAT ANULAT |
LIVRAT |
Final — no transitions |
ANULAT |
Final — no transitions |
| From | To |
|---|---|
CREAT |
IN_LUCRU INCHIS ANULAT |
IN_LUCRU |
INCHIS ANULAT |
INCHIS |
Final — no transitions |
ANULAT |
Final — no transitions |
10. Glosar de business
Consistent terms used across the application and help content.
Company (3PL tenant)
The client company whose stock and orders you operate; data does not mix between companies.
Partner
B2B entity (supplier or customer) used on orders and deliveries within the selected company.
Available vs. total
Total = physical on hand; available = what can still be allocated to new orders (after reservations).
Reservation
Quantity held for an in-progress order; reduces available until delivery or release.
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.
Unified documentation: concepts (3PL provider vs 3PL company), roles, TPL and CLI codes, creating a provider, companies and users, estimated billing, audit log, session and context, internal code, UI walkthrough and glossary. The “Page” table links use a sample provider you can access when signed in.
Full guide: 3PL platform and 3PL companies
Guide covering the 3PL provider flow, 3PL companies, modules, cost estimate, and audit.
This workbook walks step by step through how the app connects a logistics 3PL provider, 3PL client companies, billable modules, users, and the audit trail. It is aimed mainly at super administrators and 3PL administrators (admin_3pl role).
Terms used below: “3PL provider” = the record under 3PL Providers (internal TPL… code); “3PL company” = a company served by that 3PL, with its own CLI… internal code and its own modules and users.
1. Core concepts
The platform separates two levels: (A) administering a 3PL provider — settings, users tied to that provider, default modules for new companies; (B) operating inside a 3PL company — stock and orders, company users, modules enabled for that company. Physical depots are catalogued under the 3PL operator, not owned by the 3PL company row.
Modules exist in a catalog (monthly or daily price). When you create a 3PL provider you choose a set of default modules (stored as slug list). They act as a template for new companies under that 3PL; afterwards, a super admin can adjust modules per company where the admin UI allows.
- One 3PL provider can have many 3PL companies.
- Each 3PL company has its own internal code (CLI prefix in practice); it is a different field from the provider’s TPL code, even though both are stored as `internal_code` in different tables.
- Current context (active company / selected 3PL) affects which menus and data you see.
- A 3PL provider is itself a company; a second row (3PL company record) with the same details as the provider is the operational record for that same business—not a mistaken duplicate.
2. Roles and permissions (summary)
Creating, editing, and deleting 3PL provider records is generally reserved for super administrators. Viewing a provider and related pages (getting started, audit) is allowed for users who have access to that provider (e.g. 3PL admins). Billing preview and company module invoicing screens are reserved for super administrators.
- Super admin: can create 3PL providers, change internal codes, manage platform-level module screens where they exist.
- 3PL administrator (admin_3pl): operates on behalf of the provider; sees the provider and linked companies, without necessarily having super-admin rights.
- Company users: tied to one or more 3PL companies; do not necessarily see global 3PL administration.
3. Internal codes: TPL (provider) vs CLI (3PL company)
Internal codes keep entities distinct. The TPL prefix is used for 3PL providers. If you leave the field empty at creation, the system may assign an automatic code like TPL plus digits (e.g. TPL000042). You can also enter a manual code (uppercase letters, digits, hyphens) with uniqueness checks.
Technical note: internal code uniqueness is enforced per table (`three_pl_providers` and `clients_3pl`). There is no cross-table constraint that forbids the same character string in both tables — the database can theoretically store the same text as both a provider code and a 3PL company code. Validation on save only checks duplicates within the same table (e.g. `unique:clients_3pl,internal_code` for companies).
Why TPL and client-company (CC) prefixes anyway: generators and the in-app convention (see the “TPL vs 3PL company code” help when creating a provider) keep the two worlds clearly separate — not as a hard uniqueness rule across tables, but for clarity in reports, messages, support, and integrations: you avoid ambiguity when one code could mean two different entity types.
When editing a 3PL provider, internal code changes respect uniqueness only within the providers table and may be recorded in history / activity log.
What does TPL mean?
In the source code (CodeGeneratorService), the TPL prefix is explicitly tied to third-party logistics: the 3PL provider is the entity that performs logistics for its clients. It is not a long “official” label in the UI — it is a short prefix for provider internal codes (e.g. TPL000042).
What does CLI mean here?
Sequential auto-codes for 3PL companies use a CLI-style prefix in the database (CLI000001, CLI000002, etc.). In forms and ANAF suggestions you will also see a CC segment (3PL company code), e.g. TPL…-CC-… — it is not “command-line interface”. The help modal contrasts TPL (provider) vs 3PL company codes.
Why both TPL and CLI — what is each one for?
The app model has two levels: (1) the 3PL provider — the logistics-side record that holds provider settings, default modules, and admin_3pl users (any formal agreement between platform and provider is a super-admin concern, not something 3PL users “administer” as contracts here); (2) the 3PL company — the client company record for orders, stock, and company users. Depot master data (`warehouses`) belongs to the 3PL provider only (`three_pl_provider_id`), not to a 3PL company. TPL and CLI codes are short identifiers, easy to spot in reports and integrations, each for its own level.
- TPL answers: which logistics provider (3PL organization) is this record about? — you see it in provider administration, default modules for new companies, and (for super administrators only) provider-level billing estimates.
- CLI answers: which client company of that 3PL is running operations? — orders, inbound flows, and operational data are tied to the company with the CLI code. Depot records still sit under the 3PL operator; they do not replace the provider’s TPL code.
4. Creating a 3PL provider — wizard steps
From administration, open the new provider form. It is split into logical steps (data, modules, code, optional template from another provider, 3PL administrator).
New 3PL Provider 3PL Providers
Step A — Main data
Enter legal name (required) and optionally commercial name and tax identifiers where fields exist. Without a valid legal name you cannot proceed correctly.
Step B — Default modules
Select catalog modules that become defaults for new companies under this 3PL. The list may be empty; the super-admin billing preview will then show zero or no lines until modules are added.
Step C — Internal code
Leave empty for automatic TPL… assignment or enter your own. Live checks (available / taken) run after normalization.
Step D — Template from existing provider (optional)
If you pick a template provider and do not select modules manually, default modules may be copied from that provider. Useful for repeatable setups.
Step E — 3PL administrator (optional but recommended)
You can attach a user with admin_3pl immediately: either an existing user (search by name/email) or a new user (name, email, password). Super-admin accounts cannot be chosen as 3PL administrator. For a new user, a welcome email may be sent depending on app configuration.
5. After save — redirect and onboarding
After a successful create, the app redirects to Getting started for that provider, not to the list. You see a snapshot: number of 3PL companies, depots in that provider’s warehouse catalog, distinct users linked to 3PL companies.
From the same page you get shortcuts: new company (with provider pre-filled via parameter), audit log, 3PL users management, and a link to this workbook. Super administrators also see a billing preview shortcut there.
- If there is no 3PL company yet, the first practical step is to create one.
- Once companies exist, open a company’s detail page for operational setup (users, modules, etc.); manage depots from the 3PL warehouse catalog when your role allows.
6. 3PL companies under a 3PL
New companies are created from the companies flow. When you open the form with URL parameter three_pl_provider_id equal to the provider’s id, the “3PL Provider” field is preselected — reducing selection mistakes.
The company receives an internal code in the CLI namespace (per form/generator rules). Active modules for the company may align with the 3PL template or be adjusted later, depending on your platform configuration.
Deep-link example: /companies/create?three_pl_provider_id=5 (replace 5 with the real id).
7. Users tied to the 3PL provider
The 3PL provider users page lets you attach users to that provider and assign allowed roles (including admin_3pl). This is separate from users tied only to a specific 3PL company.
Actions here may write audit log entries so there is a trace of who added or removed someone from the provider.
9. Audit log and CSV export
The log for a 3PL provider aggregates Activity events where the subject is the provider record itself, or where properties include that provider’s id (e.g. actions on users linked to the 3PL).
You can browse a paginated list and export a CSV file (UTF-8 with BOM for Excel) with columns such as time, log name, description, causer email, subject type, subject id, properties JSON.
- Export is useful for internal compliance or external review over a period.
10. Routes and parameters (reference)
| Page | Notes |
|---|---|
| 3PL Workbook (this guide) | This guide (authenticated, verified user). |
| 3PL Providers — list | Provider administration; create/update only where policy allows. |
| Getting started (provider onboarding) — Open the list and pick a provider for direct links. | Onboarding after create or from provider detail. |
| Audit log (CSV export from the page) — Open the list and pick a provider for direct links. | List + CSV export. |
| New 3PL company | New 3PL company with 3PL preselected. |
11. Session: selecting 3PL provider and active company
After login, users with more than one context may use screens such as 3PL selection and active company selection. The chosen context drives which data appears in menus, reports, and day-to-day operations.
Switching 3PL context (where available) updates the session so later actions are interpreted in that provider’s scope. Likewise, the active company scopes operational data and modules.
- If some menus are missing, check that the correct company is selected and that your role includes the relevant module.
What is “context” in this app?
The session mainly stores two values that define “where you are” in the app: current_three_pl_id (selected 3PL provider) and current_company_id (active 3PL company). Sidebar, filters, and many queries use them (SidebarComposer, navbar).
In practice: if I change “context”, am I changing the 3PL?
Not only by hand. Context = the pair (3PL in session + active company). Most often you change the active company (another client company / another CLI code): the app then updates the 3PL in session to match the chosen company, so you do not work in a company that belongs to 3PL A while the session still thinks 3PL B.
You change the 3PL explicitly (without picking a company first) when you use the provider selection flow or quick 3PL switch: that updates current_three_pl_id directly; when selecting from the list, the company may be cleared so you pick a company under the new provider.
In short: you change context either by switching to another company (the 3PL in session updates on its own) or by choosing another 3PL as a filter (you usually then pick the company again).
Difference: changing context vs. changing 3PL provider
They are not two unrelated ideas: changing the 3PL provider is one kind of context change, but not the only one.
- Selecting a provider via /select-three-pl (storeThreePlSelection): sets current_three_pl_id and clears current_company_id so you pick a company under that 3PL again. This is the 3PL “filter” change for super admins (and a similar flow for admin_3pl users with multiple providers).
- Switching active company (switchCompany): sets current_company_id and, if the company has three_pl_provider_id, also updates current_three_pl_id to match — they stay in sync (you do not stay on 3PL B in session while working in a company that belongs to 3PL A).
- Quick 3PL switch (switchThreePl on ThreePlProviderController): only changes current_three_pl_id in session (e.g. from a context UI), without going through the company selection screen.
- Leave context (leaveContext, super admin only): clears both current_company_id and current_three_pl_id — back to a more global view with no active company/3PL in session.
12. Editing a provider and internal code history
When editing a 3PL provider, internal code changes follow the same uniqueness and normalization rules as on create. Changes may be written to a dedicated activity log for code changes (old/new value, user, time).
Use the provider edit screen and any “internal code history” section shown in the UI.
13. UI workflow — steps and button labels
The steps below match the actual screens (Blade views). Labels are those shown through the translation system (English when the app locale is en).
New 3PL Provider
Route: `/three-pl-providers/create` (New 3PL Provider).
Page title: “New 3PL Provider” / subtitle “Add a logistics service provider”.
Top right: “Back to list” (returns to the provider list).
Step bar: ① Main data — ② modules — ③ 3PL administrator — ④ Preview. You can click each step to jump where allowed.
- Step 1 — Main data: card “Provider data”. Optional: “Template from existing provider” (copies default modules). “Internal code” field with placeholder for auto TPL, “Generate code” button, “TPL vs 3PL company code” link (opens the help modal). Enter “Legal name” (required) — without it, optional fields stay gated and the “Next” button on this step may stay disabled. Then “Next” to step 2.
- Step 2 — modules: heading “Default modules for new companies”; “Select all” / “Deselect all”. Footer: “Main data” (back) and “3PL administrator” (forward). The right sidebar shows “Cost estimate” as you toggle modules.
- Step 3 — 3PL administrator: card titled “3PL administrator”. Checkbox “Add 3PL administrator now”. Choose “Existing user” (search) or “New user” (name, email, password, confirmation; optional “Skip welcome tour”). Footer: back to “modules” or “Preview” forward.
- Step 4 — Preview: card “Review and create” with the summary. Buttons: “Back” to step 3 and “Save” (submits the form). On success: redirect to Getting started for that provider.
New company
Route: `/companies/create` (New 3PL company); add `?three_pl_provider_id=ID` to preselect the provider.
Title: “New 3PL company” / intro about adding a 3PL company linked to a 3PL provider.
For super admins, steps are: ① Main data — ② Company administrator — ③ Preview. For other users the wizard has fewer steps — see the progress bar on screen.
- Step 1 — Main data: two cards — “Main data” (left) and “Contact and address” (right). Under “Main data”: required “3PL Provider” dropdown (when shown), required “Cod Intern” label (hard-coded Romanian label in the view), “Legal name”, optional commercial name, CUI/CIF with “Fetch from ANAF”, EORI, registration country. “Contact and address”: email, phone, registered office, description, payment, currency, VAT, “Active company” switch. Footer: “Next”.
- Step 2 — Company administrator (super admin only): “Company administrator” card with “Create admin user” switch. Enable the form for a new user (name, email, password) or leave it off. Then “Preview”.
- Final step — Preview: “Review and create”; button “Create 3PL company” (not “Save”) submits the form.
14. Quick glossary
- 3PL provider
- The logistics organisation between the platform and the companies you serve. In the app it gets a short code that usually starts with the letters TPL so you can spot it quickly in lists and reports.
- 3PL company
- The company that works day to day in the app: orders, warehouse, its own users. It has its own short code (in practice, the CLI family), different from the 3PL provider code — so everyone knows who is the “logistics provider” and who is the “operating client”.
- TPL code / CLI code
- Two kinds of short codes so people and reports don’t mix up the “logistics organisation” with the “company that operates every day”. TPL code (3PL provider): if you leave the field empty at creation, the system may suggest something like TPL followed by digits (e.g. TPL000042). You can also enter your own code using UPPERCASE letters, digits, and hyphens — it must be unique among providers. CLI code (3PL company): when auto-generated it often looks like CLI plus digits (e.g. CLI000001, CLI000002). In forms or documents you may also see variants with a CC segment (3PL company code). For management: the same-looking code does not mean the same thing — TPL = provider level, CLI/CC = 3PL company level.
- Active company (context)
- In plain terms: which company you are “looking at” on screen after sign-in and after you pick the company. All lists, orders, and stock refer to that company until you switch it in the selector. Don’t confuse this with changing the 3PL provider in admin screens — that is a different level of work.
- Module
- A piece of functionality you can turn on for a company — for example a report type or a specific flow. Some modules have a price in the catalogue; what you see in the menu depends on what was enabled for your company.
- Activity / audit
- A history of important events: who changed what, and when. Used for internal control, audit questions, or when you need to reconstruct “who did what”. It can usually be exported to a file for review.
- API
- The “official” way other systems in your business (ERP, finance, BI) can read or send data into the app, with the right permissions for each user. Technical documentation is public on the site at /api-docs — IT teams use it to build integrations.
- Webhook
- A web address you register in the system; when something important happens (for example an order status changes), the app sends an automatic “heads-up” to that address. That helps automation — e.g. updating a table in another tool or triggering a notification — without checking everything by hand.
- 3PL
- Common shorthand for “warehouse management system”. In practice: the part of the app where you track what comes in, what goes out, what is on hand, returns, and warehouse-related reports.
- SKU / article
- The product record in the catalogue: the code warehouse and office use, the name, the unit (pieces, kg…). Without this step you cannot add lines on purchase or sales orders — everything starts from the catalogue.
- PO (Purchase Order)
- The order you place with a supplier — which products and how many. When goods arrive, you record receptions “against” this order until you cover what you ordered (or partially, if that is what you agreed).
- SO (Sales Order)
- The sale to the customer: what you ship and in what quantities. When you mark the delivery as complete in the app (goods have left for the customer), quantities leave stock. If the customer sends something back, the return is linked to this sale so the story stays clear.
- Reception
- The step where you confirm goods have physically entered the warehouse, usually based on a purchase order. After you confirm, “what you have on the shelf” goes up by the received quantities.
- Warehouse
- The place where you track quantities — a building, a location, or an internal name. Every inbound or outbound move must clearly state which warehouse it happens in, otherwise stock cannot be followed correctly.
- Stock / transaction journal
- “How much we have now” for each product and warehouse. Next to that, the history (journal) shows how you got to those figures: receptions, shipments, adjustments. Useful when you need to explain differences or check a delivery.
- Return
- When the customer sends goods back. You record it in the app linked to the original sale; the quantity goes back into the chosen warehouse so stock and history stay correct.