Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. Planning
  3. Deltatech Advanced Planner v 19.0
  4. Sales Conditions FAQ

Deltatech Advanced Planner

by Deltatech https://www.terrabit.ro
Odoo

$ 1392.84

v 19.0 Third Party
This module requires Odoo Enterprise Edition.
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Discuss (mail)
• Inventory (stock)
• Manufacturing (mrp)
• Purchase (purchase)
• Sales (sale_management)
• Invoicing (account)
Lines of code 8564
Technical Name deltatech_advanced_planner
LicenseOPL-1
Websitehttps://www.terrabit.ro
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Discuss (mail)
• Inventory (stock)
• Manufacturing (mrp)
• Purchase (purchase)
• Sales (sale_management)
• Invoicing (account)
Lines of code 8564
Technical Name deltatech_advanced_planner
LicenseOPL-1
Websitehttps://www.terrabit.ro
  • Description
  • License
Odoo Partner  •  Terrabit

Deltatech Advanced Planner

Planificator avansat de stoc cu backward scheduling și validare dată livrare

Odoo 19.0 Online • Odoo.sh • On-premise Dedicated support 1200 EUR

Planificator avansat de stoc cu backward scheduling și validare automată a datei de livrare, integrat cu modulele native de vânzări, producție și achiziții din Odoo 19.

Problema rezolvată

Planificarea nativă Odoo răspunde reactiv (reorder rules, MTO/MTS) și nu răspunde la întrebările esențiale ale vânzătorului sau operatorului logistic:

“Data de livrare promisă clientului este realizabilă, ținând cont de stocul disponibil, lead time-urile furnizorilor și durata producției?”
“La ce dată va intra stocul în roșu și din ce cauză — inclusiv pentru mișcările de ieșire independente de comenzile de vânzare?”

Poziționare față de APS standard

Odoo nativ acoperă MRP de bază (explozie BOM, netting brut, reorder rules) dar nu are APS cu capacitate finită — planificarea Odoo standard nu știe cât durează o comandă, dacă un workcenter este supraîncărcat sau dacă data de livrare promisă este fizic realizabilă.

Modulul Deltatech Advanced Planner adaugă capabilități APS selectate, direct în Odoo, fără integrări externe:

Capabilitate APS Odoo standard Deltatech Advanced Planner
Planificare backward de la data livrării ❌ ✅ Backward scheduling cu commitment_date
Verificare capacitate reală workcenter (RCCP) ❌ ✅ RCCP cu formula bottleneck + qty_factor
Planificare cu capacitate finită (CRP leveling) ❌ ✅ Greedy leveling cu cascadă BOM recursivă
Filtrare PO incoming pe dată livrare ❌ ✅ Netting cu date_cutoff = commitment_date
Alocare stoc fără supraplanificare în batch ❌ ✅ Dict alocare globală per rulare
Vizibilitate stoc proiectat cronologic (MRP board) ❌ ✅ Situație Material + Stoc Proiectat Agregat
Detecție dată livrare imposibilă + dată alternativă ❌ ✅ Verdict OK / Warning / Blocked + ap_effective_date
Forward scheduling când data lipsește ❌ ✅ Propune automat cea mai devreme dată realizabilă
Protecție rulare concurentă planificare globală ❌ ✅ PostgreSQL advisory lock per tranzacție
Sincronizare dată livrare picking ↔ plan ❌ ✅ scheduled_date picking = ap_effective_date
Planificare în ofertă (pre-confirmare) ❌ ✅ Simulare în stare draft cu AP-uri nedifuzate

Ce NU acoperă modulul (necesită APS4MFG / frePPLe pentru cerințe avansate):

  • ✓Optimizare secvență producție (setup-uri dependente de secvență, campanii)
  • ✓Scenarii what-if cu comparare KPI
  • ✓Reprogramare complet automată la avarii, absențe, urgențe
  • ✓Constrângeri complexe simultane (competențe operator, unelte, jig-uri)

Ciclu de viață — SO și comenzi planificate

Stare SO Stare AP Efect planificare
draft (ofertă) draft Simulare — calculează ap_planning_expected_date pe liniile SO. Nu rezervă stoc, nu generează PO/MO.
sent (ofertă trimisă) planned ← automat Planificarea devine activă — AP contribuie la netting (Situație Material).
draft (ofertă retrasă) draft ← automat AP nefixate revin în simulare.
sale (confirmat) planned Odoo generează livrările; PO/MO se lansează manual din AP.
PO/MO generat din AP done AP realizat — exclus din recalculări.
Anulat manual cancelled Exclus din recalculări.

Tranzițiile draft ↔ planned se fac automat când SO-ul este trimis sau retras. Comenzile fixate (is_fixed=True) sunt excluse din tranzițiile automate.

Ce face modulul

Planificare bazată pe comenzi de vânzare

La confirmarea unei comenzi de vânzare, modulul execută automat:

  1. Netting produs finit (proiecție cronologică) — înainte de orice calcul, verifică dacă stocul proiectat la commitment_date acoperă cantitatea din SO:

    projected_qty = qty_on_hand
                  + intrări confirmate cu dată ≤ commitment_date   (PO receipts, MO)
                  − ieșiri confirmate cu dată ≤ commitment_date    (alte SO-uri, mișcări independente)
                  − cerere AP planned ale altor SO-uri `sent`      (fără stock.moves încă)
    
    • SO draft / sale / done: dacă projected_qty ≥ qty_needed → marcat ok, AP sărit.
      • draft: simulare — AP-urile draft nu afectează netting-ul.
      • sale/done: stock.moves deja create de Odoo → cererea vizibilă în Situație Material fără AP suplimentar.
    • SO sent: AP se generează întotdeauna (planned), indiferent de stoc, pentru că Odoo nu creează stock.moves la trimitere (ci doar la confirmare). AP-ul planned face cererea vizibilă în Situație Material și este scăzut din projected_qty al SO-urilor ulterioare via _compute_sent_ap_demand(). Ieșirile după commitment_date nu reduc disponibilul calculat — corect cronologic.
  2. Explozie BOM recursivă — descompune produsul finit pe toate nivelurile (subansamblu → componentă → materie primă), colectând necesarul brut per componentă.

  3. Netting componente — scade din necesarul brut stocul disponibil și cantitățile așteptate din comenzi de achiziție cu dată recepție ≤ commitment_date (intrările după termenul dorit nu reduc necesarul calculat — corect cronologic), obținând necesarul net de aprovizionat per componentă. La planificarea globală (batch), netting-ul componentelor folosește un dict de alocare globală partajat între toate SO-urile din rulare: SO/002 vede stocul redus cu cantitățile deja consumate de SO/001, prevenind supraplanificarea aceluiași stoc pentru cereri multiple.

  4. Backward scheduling cu RCCP — pornind de la commitment_date, calculează înapoi pe calendar de lucru:

    • ✓data finalizare producție (date_planned_production_end)
    • ✓data start producție / disponibilitate materiale (date_planned_production_start)
    • ✓data lansare comenzi de achiziție (date_planned_launch)
    • ✓data recepție componentă (date_po_reception) — garantată ≤ start producție

    ``production_lead_time`` este calculat prin RCCP (Rough-Cut Capacity Planning): operațiile BOM sunt grupate pe workcenter, iar lead time-ul este determinat de workcenter-ul critic (bottleneck):

    qty_factor       = ceil(qty_comandata / bom.product_qty)
    ore_necesare_WC = (setup + Σ time_cycle_manual × qty_factor + cleanup) / 60
    ore_efective_zi = ore_calendar_WC × (time_efficiency / 100)
    zile_WC         = ceil(ore_necesare_WC / ore_efective_zi)
    
    production_lead_time = max(zile_WC)   ← workcenter-ul bottleneck
    

    setup / cleanup (time_start, time_stop) sunt overhead fix per WC și nu se scalează cu cantitatea. time_cycle_manual (min/unitate) se înmulțește cu qty_factor — o comandă de 100 buc durează proporțional mai mult decât una de 1 buc. Dacă produsul are ap_production_lead_time setat manual, RCCP este ignorat.

    Dacă datele ar fi în trecut, planificatorul comută automat pe forward scheduling de la data curentă, marcând comanda ca blocked și propunând cea mai devreme dată realizabilă.

  5. SO fără commitment_date — planificatorul calculează forward și propune automat cea mai devreme dată de livrare posibilă (forward + safety buffer), fără să marcheze ca blocat.

  6. Validare plauzibilitate — verdict automat în trei stări:

    • OK
      — marjă suficientă față de safety buffer configurat
    • Avertisment
      — marjă sub safety buffer, dar realizabil
    • Blocat
      — data de livrare este imposibilă; se propune cea mai devreme dată realizabilă
  7. Comenzi planificate — creează înregistrări advanced.planned.order de tip producție (cu ierarhie BOM) și de tip achiziție (per componentă cu shortage), cu toate datele calculate. Comenzile de achiziție (RFQ) și de producție (MO) nu sunt generate automat — se lansează manual din formularul comenzii planificate, după revizuire.

  8. Replanificare automată la modificarea SO — când commitment_date se schimbă pe un SO confirmat (state == 'sale') și opțiunea ap_auto_replan_on_so_change este activată, planificatorul re-rulează automat, fără intervenție manuală. Un guard de context (ap_skip_replan) previne recursivitatea cu scrierile interne ale motorului.

  9. Detecție abateri zilnică (Cron) — un job programat zilnic detectează automat abaterile față de planul inițial:

    • PO nelansat
      date_planned_launch a trecut și AP-ul nu are PO asociat (→ warning / blocked după 2 zile)
    • PO întârziat
      un PO confirmat asociat unui AP copil are date_planned > date_po_reception (→ warning / blocked după 5 zile)
    • MO blocat
      MO confirmat cu date_start în trecut și producție neîncepută (→ blocked)
    • Avertizare preventivă
      lansare PO iminentă (< 2 zile) fără RFQ generat (→ warning)

    La detectare: actualizează planning_status, setează ap_deviation_reason, postează notă în chatter SO, creează activitate Odoo atribuită responsabilului SO. Câmpul ap_blocked_since înregistrează prima dată a tranziției în blocked.

  10. Escaladare automată a activităților — dacă un AP rămâne în starea blocked mai mult de N zile (configurabil din Setări — Escalation threshold), planificatorul actualizează scadența activităților expirate la azi și postează o notă de escaladare în chatter-ul SO. Dezactivat când pragul = 0.

  11. Consolidare automată RFQ-uri — la generarea unui RFQ dintr-un AP de tip achiziție, dacă există deja un draft PO pentru același furnizor cu date_order în fereastra ±ap_rfq_consolidation_window_days față de date_planned_launch, se adaugă o linie nouă la PO existent în loc să se creeze un PO separat. Relația AP ↔ PO este Many2many (ap_purchase_order_rel), permițând unui PO consolidat să fie legat de multiple AP-uri. Fereastra se configurează din Setări; valoarea 0 dezactivează consolidarea.

  12. Sincronizare mișcări de livrare — pentru comenzile de vânzare confirmate, planificatorul actualizează automat mișcările de stoc de tip livrare (outgoing):

    • ✓stock.move.advanced_planned_order_id ← legătura directă la comanda planificată AP
    • ✓stock.move.date ← data efectivă de livrare calculată (ap_effective_date)
    • ✓stock.picking.scheduled_date ← sincronizată cu data efectivă de livrare Astfel, data promisă clientului reflectă imediat rezultatul planificatorului în documentele operaționale de stoc, iar traseul SO → AP → livrare este complet vizibil în Situație Material.
  13. Log execuție — fiecare rulare generează înregistrări detaliate în advanced.planner.log, cu pas, severitate și detalii tehnice, accesibile din formularul comenzii planificate.

Reaprovizionare independentă (mișcări fără SO)

Planificatorul global analizează și mișcările de stoc de ieșire care nu sunt legate de o comandă de vânzare (ex: transferuri, consum intern, ajustări planificate). Dacă stocul proiectat devine negativ, se generează automat AP-uri de reaprovizionare.

Algoritmul:

pentru fiecare produs cu mișcări outgoing confirmate fără SO:
    running_stock = qty_on_hand + intrări_confirmate_PO_MO
    pentru fiecare mișcare în ordine cronologică:
        running_stock -= move.product_uom_qty
        dacă running_stock < 0:
            generează AP pentru shortage_qty = -running_stock
            running_stock = 0   (AP-ul acoperă deficitul)

AP-urile de reaprovizionare:

  • ✓is_replenishment = True — distinse de AP-urile SO-based
  • ✓sale_order_id = False — nu sunt legate de nicio comandă de vânzare
  • ✓replenishment_picking_id — picking-ul care cauzează primul deficit
  • ✓Tip manufacture dacă produsul are BOM, purchase dacă nu
  • ✓Backward scheduling de la data mișcării deficitare; forward fallback dacă data e în trecut
  • ✓state = draft — necesită revizie manuală înainte de conversie în PO/MO
  • ✓Regenerate complet la fiecare rulare (cele nefixate sunt șterse și recreate)

Planificare înainte de confirmarea comenzii (simulare)

Planificatorul poate fi rulat din faza de ofertare (SO în stare draft), prin wizardul de recalculare manuală disponibil direct pe formularul comenzii de vânzare.

În modul simulare, planificatorul:

  • ✓calculează backward/forward și scrie rezultatul în ap_planning_expected_date pe liniile SO (câmpul forecast_expected_date al liniei este actualizat cu data calculată)
  • ✓creează comenzile planificate AP în starea ``draft`` — nu rezervă stoc, nu generează PO/MO, nu afectează netting-ul celorlalte comenzi
  • ✓afișează statusul (ok / warning / blocked) și data efectivă direct pe SO

Fluxul tipic în ofertare:

  1. Se creează SO în stare draft cu produsul și cantitatea cerută
  2. Se rulează planificatorul manual (buton „Recalculează planificarea” sau wizard)
  3. Sistemul calculează și afișează statusul + data efectivă; AP-urile sunt create în draft
  4. SO este trimis clientului (sent) → AP-urile trec automat în planned (planificare activă)
  5. Vânzătorul confirmă SO → planificatorul rulează din nou automat pe SO confirmat

Funcționalități principale

  • Netting cronologic
    — stocul proiectat la data livrării, nu stocul brut curent: ieșirile după commitment_date nu reduc disponibilul calculat
  • Reaprovizionare independentă
    — AP-uri generate pentru mișcări de stoc fără SO, prevenind stocul negativ din mișcări independente de comenzile de vânzare
  • Generare manuală RFQ / MO
    — butoane dedicate pe formularul comenzii planificate, cu verificare duplicat înainte de creare
  • Consolidare automată RFQ-uri
    — la generarea unui RFQ, dacă există un draft PO pentru același furnizor cu dată în fereastra ±N zile, se adaugă o linie la PO existent; relație Many2many AP ↔ PO; fereastră configurabilă, 0 = dezactivat
  • Replanificare automată la schimbare dată SO
    — retrigerează planificatorul când commitment_date se modifică pe un SO confirmat; activabil din Setări
  • Ciclu de viață SAP-style
    — comenzile planificate trec prin stările draft → planned → done, cu tranziții automate la trimiterea/retragerea ofertei și excludere după conversie în PO/MO
  • Fixare comenzi planificate
    (SAP-style firming) — o comandă fixată este exclusă din recalculările automate și contribuie la netting ca stoc virtual
  • Sincronizare livrări
    — la planificarea unui SO confirmat, mișcările de livrare primesc automat legătura AP și data efectivă de livrare calculată (scheduled_date pe picking)
  • Situație Material
    — echivalentul SAP Situație Material: stoc proiectat cronologic per produs, cu trasabilitate completă SO → AP → PO/MO → mișcare de stoc (coloana Origine / pegging)
  • Stoc Proiectat Agregat (tip SAP MRP)
    — ecran agregat cross-SO per produs cu pegging FIFO complet: toate elementele MRP (CustOrd, PurchOrd, PlOrd/P, PlOrd/M, ProdOrd, StIn) sortate cronologic, stoc proiectat cumulativ, ATP (Available to Promise) și detecție shortage cu banner roșu; export Excel cu 11 coloane inclusiv pegging
  • Sincronizare bidirecțională PO/MO ↔ AP
    — modificarea datei pe o linie PO (date_planned) propagă automat noua dată de recepție în AP-urile asociate și cascadează upstream prin ierarhia BOM (componentă → AP parent → AP bunic) actualizând planning_status la warning/blocked dacă componenta ajunge după startul producției; similar, modificarea date_start/date_finished pe un MO actualizează AP-ul asociat și alertează SO-ul dacă finalizarea depășește ap_effective_date
  • Export rapoarte PDF / Excel
    — wizard cu filtre per perioadă, companie și status: PDF „Plan Livrări” (AP-uri root colorate per status, deviere inline, sumar contori), Excel AP-uri (20 coloane, toate nivelele BOM, celule colorate per status, AutoFilter), Excel Workcenter Load (10 coloane, colorate per load%)
  • Planificare globală
    — wizard pentru rularea planificatorului pe toate SO-urile active, sortate după commitment_date ASC (comenzile urgente au prioritate la stoc); netting-ul componentelor folosește un dict de alocare globală partajat — SO/002 vede stocul redus cu ce a consumat deja SO/001, eliminând supraplanificarea în batch-uri mari; protecție la rulări concurente prin lock tranzacțional PostgreSQL (pg_advisory_xact_lock) — o a doua rulare simultană primește UserError prietenos (wizard) sau este sărită silențios (cron nocturn); urmat de analiza mișcărilor independente
  • Capacitate producție — RCCP
    — lead time-ul de producție se calculează din operațiile BOM grupate per workcenter: workcenter-ul cel mai lent (bottleneck) determină durata totală; eficiența (time_efficiency) și orele din calendarul WC sunt luate în calcul automat
  • Încărcare posturi de lucru
    — raport Workcenter Load cu vizualizare pivot (WC × săptămână), grafic bar și liste colorate (roșu >100%, galben 80–100%, verde ≤80%); generat automat la fiecare planificare, cu filtre rapide pentru supraîncărcat / critic / blocat
  • CRP complet (Capacity Requirements Planning)
    — agregare a încărcării reale a tuturor workcenter-elor din AP-urile de producție planificate; sloturi per (workcenter × săptămână × companie) cu hours_demanded (suma orelor din toate AP-urile), hours_capacity (capacitate nominală), load_percent și crp_status (ok ≤80% / warning 80–100% / overloaded >100%); vizualizare graph (ore cerute vs. capacitate pe săptămâni) și pivot (workcenter × săptămână); algoritm de nivelare greedy (load leveling): mută automat AP-urile cu cel mai mult slack (margin_days desc) din sloturile supraîncărcate cu +7 zile, cascadează automat +7 zile recursiv pe toate AP-urile copil neFixate (toate nivelele ierarhiei BOM rămân sincronizate după nivelare), protejând AP-urile fixate (is_fixed=True); wizard cu opțiune dry_run pentru previzualizare supraîncărcări fără modificarea AP-urilor; log de nivelare stocat per slot în câmpul leveling_note
  • Gantt cu dependențe
    — vizualizare ierarhică producție → achiziții componente
  • Low Level Code (LLC)
    — calculul adâncimii fiecărui produs în BOM
  • Banner status pe SO
    — verde / galben / roșu direct pe formularul comenzii de vânzare
  • Detecție abateri zilnică
    — cron detectează PO nelansat, PO întârziat, MO blocat; actualizează statusul AP și creează activități Odoo
  • Escaladare automată
    — dacă un AP rămâne blocked > N zile, activitățile expirate sunt escalate automat (configurabil)
  • Notificare email
    — alertă automată către managerul de logistică la starea blocked
  • Wizard recalculare manuală
    — recalculare la cerere, fără reconfirmarea SO
  • MOQ automat
    — cantitatea de comandat este ajustată la cantitatea minimă a furnizorului
  • Planificare bulk din lista SO
    — acțiune de server pe selecție multiplă de comenzi de vânzare; procesează doar SO-urile cu BOM, sortate după commitment_date ASC; SO-urile fără BOM sunt marcate automat not_applicable
  • Acces rapid la comenzi blocate
    — buton „Vezi blocate” în wizardul de planificare globală, filtrând direct AP-urile în stare blocked după rularea globală

Parametri configurabili (Setări → Inventar)

Parametru Descriere Default
Safety buffer (zile) Marjă minimă acceptabilă între data calculată și cea dorită 3
Lead time achiziție implicit Folosit când furnizorul nu are delay configurat 30 zile
Lead time producție implicit Folosit când BOM nu are timp de producție definit 5 zile
Zile expediere operator → client Timp rezervat pentru pregătirea și expedierea comenzii 1 zi
Adâncime maximă BOM Protecție la cicluri în BOM recursiv 10 niveluri
Comportament la dată imposibilă Doar avertizare sau blocare confirmare SO Avertizare
Retenție log-uri Câte zile se păstrează log-urile de execuție 90 zile
Replanificare automată la schimbare dată Retrigerează planificatorul când commitment_date se modifică pe SO confirmat Dezactivat
Fereastră consolidare RFQ (zile) RFQ-uri pentru același furnizor cu dată în ±N zile sunt consolidate; 0 = dezactivat 3 zile
Detecție abateri zilnică (cron) Activează cronul care detectează PO nelansat, PO întârziat, MO blocat Dezactivat
Prag escaladare (zile blocked) Dacă AP rămâne blocked mai mult de N zile → activitățile expirate sunt escalate; 0 = dezactivat 3 zile

Usage

Ghid de utilizare — Deltatech Advanced Planner

Acest ghid descrie fluxurile practice de lucru cu modulul, pas cu pas. Pentru descrierea tehnică a algoritmilor și modelelor, consultați DESCRIPTION.md și spec_tehnica_advanced_planner.md.


Ce rezolvă față de Odoo standard

Odoo standard face MRP reactiv: generează propuneri de aprovizionare și producție pornind de la stocul curent, dar nu știe dacă data de livrare promisă clientului este fizic realizabilă.

Modulul adaugă planificare APS selectivă nativ în Odoo:

Probleme rezolvate față de planificarea Odoo nativă

Problemă cu Odoo standard Soluție în modul
„Nu știu dacă pot livra la data promisă” Backward scheduling: calculează dacă data e posibilă și ce alternativă există
„Lead time de producție e fix, nu ține cont de cantitate” RCCP cu qty_factor: 100 buc durează mai mult decât 1 buc, calculat per workcenter
„Nu știu care workcenter este supraîncărcat” Workcenter Load + CRP: ore cerute vs. capacitate, cu nivelare automată
„Am planificat stoc pentru două SO-uri dar acoperă doar unul” Alocare globală în batch: SO/002 vede stocul redus de SO/001
„PO-ul sosește după data de livrare dar netting-ul îl contorizează oricum” Filtrare PO incoming pe commitment_date: recepțiile viitoare nu reduc necesarul curent
„Nu văd ce se întâmplă cu stocul proiectat al unui produs” Situație Material + Stoc Proiectat Agregat: vizualizare cronologică cross-SO
„Doi utilizatori rulează planificarea în același timp” Lock PostgreSQL: a doua rulare primește eroare clară
„Data din picking nu reflectă planificarea reală” Sincronizare automată scheduled_date picking = ap_effective_date calculat

Fluxul de bază în 4 pași

SO confirmat
    ↓
Backward scheduling (commitment_date → date_start, date_launch)
    ↓
Netting componente (cu filtrare pe dată și alocare globală)
    ↓
Verdict: OK / Warning / BLOCKED + data alternativă dacă e blocată

Ce rămâne în afara modulului

Modulul nu face optimizare de secvență (setup-uri, campanii, penalizări, JIT) și nu are motor de simulare what-if. Pentru aceste cerințe sunt necesare soluții dedicate APS (APS4MFG, frePPLe). Modulul este complementar acestora, nu concurent.


Cuprins

  1. Configurare inițială
  2. Pregătirea produselor
  3. Simulare înainte de confirmare (ofertă draft)
  4. Planificare la confirmarea comenzii
  5. Planificare globală (toate SO-urile active)
  6. Interpretarea statusului și a datei calculate
  7. Comenzile planificate — ciclu de viață
  8. Conversie în PO / MO
  9. Situație Material
  10. Stoc Proiectat Agregat
  11. Rapoarte & Export (PDF / Excel)
  12. Sincronizare bidirecțională PO/MO ↔ AP
  13. Workcenter Load vs. CRP — Ghid de orientare rapidă
    • Încărcare posturi de lucru (RCCP) — Workcenter Load
  14. CRP — Capacity Requirements Planning
  15. Reaprovizionare independentă
  16. Detecție abateri zilnică și escaladare automată
  17. Acces și permisiuni

1. Configurare inițială

Înainte de prima utilizare, setați parametrii globali:

Inventar → Configurare → Setări → secțiunea Advanced Planner

Parametru Valoare recomandată Efect
Safety buffer (zile) 3 Marjă minimă acceptabilă; sub această valoare → WARNING
Lead time achiziție implicit 30 Folosit când furnizorul nu are Delivery Lead Time configurat
Lead time producție implicit 5 Folosit când BOM nu are operații și produsul nu are lead time manual
Zile expediere 1 Timp rezervat pentru picking/packing/expediere după finalizarea producției
Adâncime maximă BOM 10 Protecție la cicluri în BOM recursiv; rar necesar mai mult de 5
Comportament dată imposibilă Avertizare Blocare previne confirmarea SO când statusul e BLOCKED
Retenție log-uri 90 Câte zile se păstrează jurnalul de execuție al planificatorului
Replanificare la schimbare dată SO Dezactivat Dacă activat, modificarea commitment_date pe SO confirmat retrigerează automat planificatorul
Fereastră consolidare RFQ (zile) 3 RFQ-uri pentru același furnizor cu dată în ±N zile sunt consolidate într-un singur PO; 0 = dezactivat

2. Pregătirea produselor

2.1 Activarea planificării per produs

Pe fiecare produs care trebuie inclus în analiză:

Produs → tab Planificare Advanced Planner

  • Inclus în planificare
    (ap_include_in_planning): bifat → produsul apare în Situația Material și este luat în calcul la netting
  • Lead time producție manual
    (ap_production_lead_time): completați doar dacă doriți să suprascrieți RCCP calculat din operațiile BOM; lăsați 0 pentru calcul automat
  • Note planificare
    text liber vizibil în comenzile planificate generate

2.2 Lead time furnizori (MOQ și delay)

Pe fiecare materie primă/componentă cumpărată:

Produs → tab Achiziție → Prețuri furnizori

Câmp Importanță
Vendor Lead Time (zile) Folosit direct în backward scheduling pentru calculul date_planned_launch
Min. Qty (MOQ) Cantitatea de comandat este rotunjită la MOQ la generarea AP de achiziție
Dacă un produs cumpărat nu are furnizor configurat cu Vendor Lead Time, planificatorul folosește parametrul global „Lead time achiziție implicit”.

2.3 Structuri de produs (BOM) cu operații RCCP

Pentru calculul automat al lead time-ului de producție prin RCCP:

Producție → Produse → Structuri de produs → tab Operații

Adăugați câte o operație per post de lucru (workcenter) implicat:

Câmp Valoare
Workcenter Postul de lucru (cu eficiență și ore calendar configurate)
Mod calcul timp Manual
Timp ciclu manual Durata operației în minute per unitate de produs

RCCP determină production_lead_time = cel mai lent workcenter (bottleneck):

qty_factor = ceil(qty_comandata / bom.product_qty)
ore_WC = (wc.time_start + op.time_cycle_manual × qty_factor + wc.time_stop) / 60
zile_WC = ceil(ore_WC / (ore_calendar_zi × eficienta%))
production_lead_time = max(zile_WC pentru toate WC-urile)
time_start / time_stop (setup/cleanup) sunt overhead fix per WC — nu se scalează cu cantitatea. time_cycle_manual (min/unitate) se înmulțește cu qty_factor — o comandă de 100 buc durează mult mai mult decât una de 1 buc; ignorarea acestui factor ducea la subestimarea lead time-ului.

3. Simulare înainte de confirmare (ofertă draft)

Modulul permite testarea planificării înainte de a confirma comanda, direct din faza de ofertare.

Flux

  1. Creați o comandă de vânzare (draft) cu produsul și cantitatea dorită
  2. Setați Data livrare dorită (commitment_date) — dacă este lăsată goală, planificatorul calculează cea mai devreme dată posibilă (forward scheduling)
  3. Pe formularul SO, apăsați butonul „Recalculează planificarea” (sau deschideți wizardul din acțiunile SO)
  4. Planificatorul calculează și afișează:
    • Statusul (OK / WARNING / BLOCKED) pe bannerul colorat din header-ul SO
    • Data efectivă calculată (ap_effective_date) — data la care produsul poate fi livrat
    • Comenzile planificate generate în starea draft (nu afectează netting-ul celorlalte comenzi)

Ce se întâmplă la trimiterea ofertei (SO → sent)

Când trimiteți oferta clientului, planificatorul comută automat AP-urile din draft → planned. Din acel moment, cererea acestui SO intră în netting și este vizibilă în Situație Material pentru celelalte comenzi.

Dacă retrageți oferta (SO → înapoi în draft), AP-urile nefixate revin automat în draft.

AP-urile fixate (is_fixed = True) sunt excluse din tranzițiile automate — rămân în starea curentă indiferent de starea SO.

4. Planificare la confirmarea comenzii

La confirmarea unui SO (Confirmați comanda), planificatorul rulează automat și execută:

  1. Netting produs finit — verifică dacă stocul proiectat la commitment_date acoperă cererea (ținând cont de intrările și ieșirile confirmate cu dată ≤ commitment_date)

  2. Explozie BOM recursivă — descompune produsul pe toate nivelurile până la materiile prime

  3. Netting componente — calculează necesarul net per componentă:

    net = max(0, necesar_brut
                 − stoc_disponibil
                 − PO_incoming cu data_receptie ≤ commitment_date
                 − cantitati_fixate_in_AP_planned
                 + rezervari_SO_anterioare)
    

    PO-urile cu data recepție după commitment_date nu reduc necesarul — o recepție planificată în 6 luni nu ajută la o livrare promisă săptămâna viitoare.

  4. Backward scheduling — calculează înapoi de la commitment_date:

    commitment_date
      − zile_expediere       → data_finalizare_productie
      − production_lead_time → data_start_productie
      − 1 zi                 → data_receptie_componente
      − purchase_lead_time   → data_lansare_comanda_achizitie  ← dacă < azi → BLOCKED
    
  5. Creare comenzi planificate — AP manufacture (produs finit) + AP purchase (componente cu deficit)

  6. Sincronizare livrări — mișcările de picking ale SO primesc automat scheduled_date = ap_effective_date

Recalculare manuală după confirmare

Dacă s-au schimbat stocurile sau termenul clientului, recalculați fără a reconfirma comanda:

SO → buton „Recalculează planificarea” (sau din lista SO: Acțiune → Recalculează planificarea)

Replanificare automată la modificarea datei

Dacă opțiunea „Replanificare la schimbare dată SO” este activată în Setări, modificarea câmpului Data livrare dorită pe un SO confirmat declanșează automat recalcularea planificatorului — fără a apăsa niciun buton. Statusul și comenzile planificate se actualizează imediat.


5. Planificare globală (toate SO-urile active)

Pentru a planifica toate comenzile active dintr-o singură rulare:

Advanced Planning → Global Planning → buton „Rulează planificarea globală”

Wizardul procesează:

  1. Toate SO-urile în stare sale sau sent, sortate după commitment_date ASC (comenzile cu termen mai apropiat au prioritate la stoc). Netting-ul componentelor folosește un dict de alocare globală partajat între toate SO-urile din aceeași rulare: SO/002 vede stocul redus cu cantitățile deja alocate de SO/001, prevenind situația în care două SO-uri sunt marcate OK deși stocul total nu acoperă cererea combinată.
  2. SO-urile fără BOM sunt marcate automat not_applicable și sărite
  3. După SO-uri, rulează analiza mișcărilor independente (fără SO) — generează AP-uri de reaprovizionare

Opțiuni wizard:

  • Forțează recalculare AP fixate — include în recalculare și AP-urile cu is_fixed = True (implicit excluse)
  • Șterge AP-urile nefixate existente — curăță comenzile planificate vechi înainte de recalculare

După rulare, butonul „Vezi comenzile blocate” filtrează direct AP-urile în stare blocked pentru acțiune imediată.

Protecție la rulări concurente: Dacă un alt utilizator sau cronul nocturn rulează deja planificarea globală, wizardul afișează un mesaj de eroare și oprește pornirea unei a doua rulări. Lock-ul tranzacțional PostgreSQL (pg_advisory_xact_lock) este eliberat automat la finalizarea planificării — nu necesită nicio acțiune manuală.

6. Interpretarea statusului și a datei calculate

Bannerul de status pe SO

Culoare Status Semnificație
Verde OK Data de livrare este realizabilă; marjă ≥ safety buffer (implicit 3 zile)
Galben WARNING Livrarea este posibilă, dar PO-ul trebuie lansat urgent (marjă < 3 zile)
Roșu BLOCKED Data de livrare este imposibilă; planificatorul propune cea mai devreme dată realizabilă
Gri Not applicable Produsul nu are BOM; nu necesită planificare de producție

Câmpuri cheie pe SO (header)

Câmp Descriere
ap_effective_date Data la care produsul poate fi livrat conform planificatorului
ap_planning_status Statusul planificării (ok / warning / blocked / not_applicable)
ap_earliest_date Cea mai devreme dată realizabilă (completat doar la BLOCKED)

Câmpuri cheie pe liniile SO

Câmp Descriere
ap_planning_expected_date Data calculată per linie produs (util când SO are mai multe produse)

Logica marjei

margine = (data_lansare_comanda_achizitie - azi).zile

margine ≥ safety_buffer  → OK
0 ≤ margine < safety_buffer → WARNING
margine < 0              → BLOCKED (data_lansare_comanda deja în trecut)

7. Comenzile planificate — ciclu de viață

Comenzile planificate (Advanced Planning → Planned Orders) sunt înregistrările centrale ale modulului.

Stări posibile

Stare Semnificație
draft Simulare — nu intră în netting; generate din SO draft sau din recalculare manuală
planned Activ — contribuie la netting; generate din SO sent/sale
done Realizat — AP convertit în PO sau MO; exclus din recalculări
cancelled Anulat manual; exclus din recalculări

Tipuri de comenzi planificate

Tip Cod Descriere
Manufacture manufacture Produs fabricat intern; se convertește în Manufacturing Order
Purchase purchase Componentă cu deficit; se convertește în Request for Quotation

Ierarhia AP

Un AP de producție (produs finit) are copii (sub-AP) pentru fiecare componentă în deficit:

AP/00007 — Manufacture PF-001 × 5         (produs finit)
  ├── AP/00008 — Purchase MP-02 × 10      (sticlă, 28 zile lead time — critică)
  ├── AP/00009 — Purchase MP-01 × 108     (celule, 10 zile lead time)
  └── AP/00010 — Purchase MP-03 × 12      (profil aluminiu, 10 zile lead time)

Ierarhia este vizibilă în vizualizarea Gantt (Advanced Planning → Production Plan — Gantt).

Fixarea comenzilor planificate

Bifați „Fixat” (is_fixed) pe un AP pentru a-l proteja de recalculări automate ulterioare. AP-urile fixate:

  • ✓Nu sunt șterse la recalculare globală
  • ✓Nu schimbă starea la modificarea SO-ului (nu urmăresc draft ↔ planned)
  • ✓Contribuie la netting ca stoc virtual (cantitatea lor este scăzută din necesarul net)

8. Conversie în PO / MO

Din formularul unui AP, după revizuire:

AP Purchase → Request for Quotation

Buton „Creează RFQ”

  • Consolidare automată
    — înainte de a crea un PO nou, planificatorul caută un draft PO existent pentru același furnizor cu date_order în fereastra ±N zile (configurabil în Setări, implicit 3).
    • Dacă găsit: adaugă o linie nouă la PO existent; AP-ul e legat la acel PO prin relația Many2many
    • Dacă nu găsit: creează PO nou ca de obicei
  • ✓AP trece în starea done în ambele cazuri
  • ✓Mesajul din chatter AP indică dacă s-a creat un PO nou sau s-a consolidat într-unul existent
  • ✓Setați fereastra la 0 în Setări pentru a dezactiva consolidarea și a crea mereu PO-uri separate

AP Manufacture → Manufacturing Order

Buton „Creează MO”

  • ✓Creează un mrp.production cu produsul, cantitatea și data start din AP
  • ✓Verifică duplicatele similare
  • ✓AP trece în starea done după confirmare MO
Atenție: Generarea PO/MO este intenționat manuală — planificatorul nu lansează automat comenzi. Revizuiți AP-urile înainte de conversie, mai ales cele în stare WARNING sau BLOCKED.

9. Situație Material

Echivalentul SAP MD04 simplificat — afișează cronologic toate intrările și ieșirile planificate pentru un produs, cu stocul proiectat la fiecare pas.

Deschidere

Opțiunea 1 — Din meniu: Advanced Planning → Material Situation → selectați produsul → „Reîmprospătează”

Opțiunea 2 — Din comanda planificată: Pe formularul AP → buton „Situație Material (Situație Material)” → se deschide direct filtrat pe produsul AP

Cum se citește Situație Material

Liniile sunt sortate cronologic. Fiecare linie arată:

Coloană Descriere
Data Data mișcării (mișcările din trecut → aduse la azi)
Tip MRP Tipul documentului (SO, AP, PO, MO, mișcare stoc)
Document Numărul documentului sursă
Origine Documentul care a generat această mișcare (trasabilitate SO → AP → PO/MO)
Intrare / Ieșire Cantitatea care crește / scade stocul
Stoc proiectat Stocul cumulativ după această mișcare; roșu = deficit

Cod culoare rânduri

  • Verde
    — intrare în stoc (PO, MO, AP, recepție)
  • Roșu
    — ieșire din stoc (SO, livrare)
  • Rând roșu
    — stocul proiectat a intrat în negativ (deficit)
  • Rând portocaliu
    — stocul proiectat este exact zero

10. Stoc Proiectat Agregat

Echivalentul SAP MRP — vizualizare agregată cross-SO a tuturor elementelor MRP pentru un produs, cu pegging FIFO complet și detecție shortage.

Deschidere

Opțiunea 1 — Din meniu: Advanced Planning → Stoc Proiectat → selectați produsul → „Reîmprospătează”

Opțiunea 2 — Din comanda planificată: Pe formularul AP → buton „Stoc Proiectat” → se deschide direct pentru produsul AP

Coduri Element MRP

Cod Semnificație
Stock Stoc disponibil curent
CustOrd Comandă client (SO confirmat)
IndReq Cerere independentă (mișcare fără SO)
PurRqs Cerere de aprovizionare (draft/sent PO)
PurchOrd Comandă achiziție confirmată
PlOrd/P AP Achiziție (planned order purchase)
PlOrd/M AP Producție (planned order manufacture)
ProdOrd Ordin de producție (MO)
StIn Intrare stoc (mișcare de recepție)

Coloane principale

Coloană Descriere
Dată Data evenimentului MRP
Element MRP Codul tipului de document
Document Referința documentului sursă
Intrare (+) Cantitatea care crește stocul
Ieșire (−) Cantitatea care scade stocul
Stoc proiectat Running total cumulativ; roșu = sub zero
ATP Available to Promise = max(0, stoc proiectat)
Shortage Cerere neacoperită de nicio ofertă; banner roșu dacă > 0
Pegging Documentul care acoperă / este acoperit de această linie

Algoritm Pegging FIFO

Fiecare cerere (sortată cronologic) este acoperită mai întâi din stocul disponibil, apoi din prima ofertă disponibilă cronologic. Rezultatul apare în coloana Pegging:

  • pe cerere: „acoperit de PO/00003, Stoc”
  • pe ofertă: „pentru SO/00012, SO/00015”

Export Excel

Butonul „Export Excel” (vizibil când există linii) descarcă un fișier .xlsx cu 11 coloane inclusiv pegging, ATP, shortage, coduri element MRP — gata de analiză.


11. Rapoarte & Export (PDF / Excel)

Wizard centralizat pentru exportul rapoartelor planificatorului.

Advanced Planning → Rapoarte & Export

Filtre disponibile

Filtru Efect
De la / Până la Filtrează AP-urile după ap_effective_date în intervalul ales
Companie Limitează la o singură companie (implicit: compania curentă)
Filtrare status Toate / OK / Avertisment / Blocat
Include done/cancelled Dacă bifat, include și AP-urile finalizate sau anulate

Rapoarte disponibile

PDF — Plan Livrări

Buton „PDF Plan Livrări”

Generează un PDF cu AP-urile root (nivel BOM = 0) sortate pe data efectivă:

  • ✓Tabel colorat per status (verde / portocaliu / roșu)
  • ✓Rând inline de deviere pentru AP-urile cu motiv de blocare
  • ✓Sumar contori în header (total, OK, warning, blocked)
  • ✓Legendă coduri culori la final

Excel — Planned Orders (toate nivelele)

Buton „Excel — AP-uri”

Export cu toate nivelele BOM, 20 coloane: referință, SO, client, produs, cantitate, UoM, tip, status, stare, nivel BOM, start, end, livrare efectivă, dată așteptată, marjă, # RFQ, # MO, fix, blocat din, motiv deviere. Celule colorate per status. AutoFilter activat.

Excel — Workcenter Load

Buton „Excel — Workcenter Load”

Export RCCP cu 10 coloane per înregistrare: workcenter, săptămână, date, produs, SO, ore planificate, capacitate, load%. Celule colorate: verde ≤ 80%, portocaliu 80–100%, roșu > 100%. AutoFilter activat.


12. Sincronizare bidirecțională PO/MO ↔ AP

Modificările de dată pe documentele operaționale (PO, MO) se propagă automat înapoi în comenzile planificate asociate, fără intervenție manuală.

PO → AP (linie comandă achiziție)

Când data de recepție planificată (date_planned) se modifică pe o linie de PO:

  1. Planificatorul actualizează date_po_reception pe AP-urile asociate aceluiași produs
  2. Postează o notă automată în chatter-ul AP cu vechea și noua dată
  3. Dacă noua dată de recepție depășește date_planned_production_start al AP-ului parent:
    • AP parent → planning_status = warning (întârziere ≤ 2 zile) sau blocked (> 2 zile)
    • Se salvează motivul în ap_deviation_reason
    • Se postează notă în chatter AP și în chatter SO (dacă AP e root)
  4. Cascada continuă recursiv upstream: componentă → parent → bunic → rădăcină BOM

MO → AP (ordin de producție)

Când data de start sau finalizare (date_start / date_finished) se modifică pe un MO:

  1. Planificatorul actualizează date_planned_production_start / date_planned_production_end pe AP-ul asociat
  2. Postează notă în chatter AP cu detaliile modificării
  3. Dacă date_finished depășește ap_effective_date (data livrare planificată):
    • AP → warning (întârziere ≤ 2 zile) sau blocked (> 2 zile)
    • Se postează notă și în chatter-ul SO

Protecții

  • AP fixat (is_fixed = True): exclus din sincronizare — nu este modificat automat
  • Guard anti-recursie: cheia de context ap_skip_sync previne bucle infinite între hook-uri

13. Workcenter Load vs. CRP — Ghid de orientare rapidă

Modulul expune două rapoarte de capacitate distincte, cu scopuri complementare. Înțelegerea diferenței dintre ele este esențială pentru utilizarea corectă.

Comparație directă

Criteriu Workcenter Load CRP — Capacitate Workcenter
Model advanced.workcenter.load advanced.crp.slot
Granularitate O înregistrare per AP × workcenter Un slot per workcenter × săptămână
Generat de Engine de planificare — automat la fiecare rulare _run_crp() — manual, prin wizard „Nivelare CRP”
Conținut Detaliu brut: AP, produs, SO, ore planificate, interval date Agregat: suma ore cerute, capacitate nominală, load%, status, log nivelare
Capacitate calculată Da, per înregistrare (referință pentru load%) Da, per slot (calendar de lucru × eficiență%)
Nivelare supraîncărcări Nu Da — algoritmul greedy mută AP-uri cu +7 zile
Drilldown AP-uri Înregistrările sunt AP-urile Din formularul unui slot CRP → tab „AP-uri în slot”
Când să-l deschizi „Care AP-uri consumă capacitate pe WC-ul X?” „Ce săptămâni au supraîncărcare și cu câte ore?”

Fluxul de date

Planificare globală (Global Planning)
       │
       │ generează automat
       ▼
advanced.workcenter.load   ← date brute, una per AP per WC
       │
       │ Wizard „Nivelare CRP" → Actualizează CRP → _run_crp()
       │ agregă per (workcenter × săptămână × companie)
       ▼
advanced.crp.slot          ← agregat, cu capacitate și status
       │
       │ Wizard „Nivelare CRP" → Actualizează + Nivelează
       ▼
AP-uri mutate cu +7 zile (doar cele neFixate)

Când să folosești fiecare raport

Workcenter Load — răspunde la întrebări de tip drilldown:

  • ✓„Ce AP-uri exacte generează supraîncărcarea pe WC-ul X în săptămâna 20?”
  • ✓„Câte ore planifică SO/00042 pe WC-ul de sudură?”
  • ✓„Care sunt AP-urile blocate asociate cu WC-ul de asamblare?”

CRP — Capacitate — răspunde la întrebări de tip management:

  • ✓„Avem supraîncărcare undeva în orizont de 8 săptămâni?”
  • ✓„Pe WC-ul de vopsire, care săptămâni depășesc 100% din capacitate?”
  • ✓„Dacă nivelăm supraîncărcările, câte AP-uri trebuie reprogramate?”

Ordinea corectă de utilizare:

  1. Rulați Global Planning (generează / actualizează Workcenter Load)
  2. Deschideți Nivelare CRP → apăsați „Actualizează CRP” (creează/actualizează sloturile CRP)
  3. Vizualizați CRP — Capacitate pentru overview și nivelați dacă e necesar
  4. Reveniți la Workcenter Load pentru drilldown pe AP-urile specifice

13. Încărcare posturi de lucru (RCCP) — Workcenter Load

Raportul Workcenter Load conține datele brute de capacitate: câte ore planifică fiecare AP pe fiecare post de lucru. Este sursa primară de date, generată automat la fiecare rulare a planificatorului.

Advanced Planning → Workcenter Load

Ce reprezintă o înregistrare

Fiecare rând din Workcenter Load este o pereche (AP × workcenter):

  • AP/00007 — producție produs X — utilizează WC Sudură → 12h planificate săptămâna 20
  • AP/00007 — producție produs X — utilizează WC Vopsire → 8h planificate săptămâna 21

Același AP generează atâtea înregistrări câte workcenter-e folosesc operațiile din BOM-ul său.

Vizualizări disponibile

Vizualizare Utilizare
Pivot (implicit) Matrice WC × Săptămână, cu ore planificate / disponibile / load%
Graph (Bar) Grafic vizual al încărcării pe săptămâni
List Detaliu per AP, cu filtrare și colorare automată

Cod culoare load%

Culoare Prag Semnificație
Roșu > 100% Supraîncărcare — capacitate depășită; planificarea nu este realizabilă fără redistribuire
Galben 80–100% Critic — capacitate aproape epuizată; risc la orice întârziere
Verde ≤ 80% Normal

Filtre rapide

  • „Supraîncărcat”
    — afișează doar înregistrările cu load% > 100%
  • „Critic”
    — afișează load% > 80%
  • „Blocat”
    — afișează doar AP-urile cu status blocked
Datele de Workcenter Load sunt regenerate automat la fiecare rulare a planificatorului. Nu editați manual înregistrările — ele vor fi suprascrise la următoarea planificare.

14. CRP — Capacity Requirements Planning

CRP este vizualizarea managerială agregată a acelorași date din Workcenter Load. În loc de câte o linie per AP, CRP afișează câte un slot per (workcenter × săptămână), cu suma tuturor orelor cerute, capacitatea nominală calculată pe calendarul de lucru și statusul de supraîncărcare — plus instrumentul de nivelare automată (load leveling).

Deschidere

Advanced Planning → CRP — Capacitate

Lista afișează câte un rând per (workcenter × săptămână), cu colorare automată:

  • Roșu
    — load > 100% (supraîncărcat)
  • Galben
    — load 80–100% (critic)
  • Verde
    — load ≤ 80% (normal)

Ce arată un slot CRP

Câmp Descriere
Workcenter Postul de lucru analizat
Săptămână Format ISO: YYYY-Wnn (ex: 2026-W20)
Ore Cerute Suma orelor planificate din toate AP-urile care utilizează WC-ul în săptămâna respectivă
Capacitate (h) Capacitate nominală a WC-ului (zile_lucru_săptămână × ore_efective/zi × eficiență%)
Ore Disponibile Capacitate − Cerute (negativ = supraîncărcare)
Supraîncărcare (h) max(0, Cerute − Capacitate)
Load % Cerute / Capacitate × 100
Status CRP OK / Avertisment / Supraîncărcat
AP-uri Numărul de AP-uri care contribuie la slot

Formularul fiecărui slot afișează lista AP-urilor individuale cu orele respective.

Vizualizări disponibile

Vizualizare Utilizare
List (implicit) Groupby workcenter; filtrare rapidă per status; colorare per load%
Graph (Bar) Grafic ore cerute vs. capacitate per săptămână — evidențiază vizual supraîncărcările
Pivot Matrice workcenter × săptămână; măsuri: ore cerute / capacitate / supraîncărcare (h) / load%

Acțiunile disponibile din CRP și impactul lor

Există trei acțiuni distincte, cu efecte și consecințe diferite asupra replanificării.


Acțiunea 1 — „Actualizează CRP”

De unde: Wizard „Nivelare CRP” → buton „Actualizează CRP” sau din formularul unui slot CRP → buton „Actualizează CRP” din header.

Ce face:

Agregă toate înregistrările advanced.workcenter.load existente în sloturi CRP per (workcenter × săptămână × companie). Creează sloturi noi, actualizează sloturile existente și șterge sloturile orfane (cele care nu mai au AP-uri asociate).

Ce modifică în baza de date:

Model Câmpuri scrise
advanced.crp.slot hours_demanded, hours_capacity, date_start, date_end, refreshed_at
advanced.workcenter.load crp_slot_id (legătura la slotul său)

Ce NU face:

  • ✓Nu modifică niciun AP (advanced.planned.order) — datele, statusul, cantitățile rămân neschimbate
  • ✓Nu modifică statusul SO-urilor
  • ✓Nu recalculează netting-ul sau backward scheduling-ul
  • ✓Nu creează/modifică PO-uri sau MO-uri

Când să o rulezi: Oricând vrei să actualizezi vizualizarea CRP după o nouă planificare globală sau după ce ai adăugat/modificat SO-uri. Aceasta este întotdeauna primul pas înainte de orice analiză de capacitate.


Acțiunea 2 — „Actualizează + Nivelează” cu „Doar vizualizare” bifat (Dry Run)

De unde: Wizard „Nivelare CRP” → debifați „Doar vizualizare” = fals → buton „Actualizează + Nivelează”.

Ce face:

  1. Rulează mai întâi agregarea CRP (identic cu Acțiunea 1)
  2. Identifică sloturile cu load% > 100% și simulează mutarea AP-urilor
  3. Afișează statisticile (sloturi supraîncărcate, câte ar putea fi rezolvate, câte AP-uri ar fi mutate)

Ce modifică în baza de date: Doar ce face Acțiunea 1 (sloturile CRP). Niciun AP nu este modificat.

Când să o rulezi: Înainte de orice nivelare efectivă — pentru a evalua impactul fără a comite nicio modificare. Răspunde la întrebarea: „Dacă nivelăm, ce se întâmplă?”


Acțiunea 3 — „Actualizează + Nivelează” cu „Doar vizualizare” debifat (Nivelare efectivă)

De unde: Wizard „Nivelare CRP” → debifați „Doar vizualizare” → buton „Actualizează + Nivelează”.

Ce face (algoritmul greedy):

  1. Rulează agregarea CRP (Acțiunea 1)
  2. Procesează sloturile cu load% > 100% în ordine cronologică (urgențele primele)
  3. Per slot supraîncărcat:
    • Exclude AP-urile cu is_fixed = True sau stare done/cancelled
    • Sortează AP-urile eligibile descrescător după margin_days (cele cu cel mai mult slack primele)
    • Mută AP-urile unul câte unul cu +7 zile până când load% ≤ 100% sau se epuizează AP-urile eligibile
  4. Cascadează automat +7 zile recursiv pe toate AP-urile copil (child_planned_order_ids) ale fiecărui AP mutat, filtrate după is_fixed=False și state not in ('done', 'cancelled'). Actualizează și înregistrările advanced.workcenter.load ale fiecărui copil.
  5. Dacă slotul rămâne supraîncărcat după epuizarea AP-urilor → înregistrat ca „irezolvabil” în leveling_note

Ce modifică exact în baza de date:

Model Câmpuri scrise Valoare nouă
advanced.planned.order (AP mutat) date_start date_start + 7 zile
advanced.planned.order (AP mutat) date_end date_end + 7 zile
advanced.planned.order (AP mutat) ap_effective_date ap_effective_date + 7 zile
advanced.planned.order (AP-uri copil neFixate) date_start, date_end, ap_effective_date + 7 zile (recursiv, toate nivelele BOM)
advanced.workcenter.load (AP mutat + copii) date_start, date_end + 7 zile
advanced.crp.slot hours_demanded Scăzut local (orele AP-ului mutat)
advanced.crp.slot leveling_note Log cu AP-urile mutate, copiii cascadați și datele vechi/noi

Ce NU face nivelarea — limitări rămase:

Ce nu se întâmplă Consecință practică
Netting-ul nu se recalculează Stocul proiectat și eventualele deficit/surplus nu se actualizează automat
Statusul SO nu se recalculează Dacă AP mutat depășește commitment_date → SO rămâne „OK” în interfață, deși livrarea nu mai este realizabilă la termen
Datele de picking (livrare) nu se actualizează scheduled_date pe mișcările de stoc rămâne nemodificat
Sloturile CRP nu se re-agregă după mutare Slotul afișează hours_demanded estimat local (scăzut manual); pentru valori exacte trebuie rulată Acțiunea 1 din nou
PO-urile și MO-urile deja create nu sunt modificate Sincronizarea inversă (PO/MO → AP) nu se declanșează din nivelare

Fluxul complet recomandat după nivelarea efectivă

1. [Dry Run]       Actualizează + Nivelează (Doar vizualizare bifat)
                   → verificați statisticile: câte AP-uri vor fi mutate, câte sloturi irezolvabile

2. [Revizuire]     Deschideți Workcenter Load sau Planned Orders
                   → identificați AP-urile cu margin_days redus care ar urma să fie mutate
                   → fixați (is_fixed = True) cele pe care NU vreți să le mutați automat

3. [Nivelare]      Actualizează + Nivelează (Doar vizualizare debifat)
                   → AP-urile eligibile primesc date_start/date_end/ap_effective_date + 7 zile
                   → AP-urile copil neFixate primesc automat același +7 zile (cascadă recursivă)

4. [Verificare]    Planned Orders → filtrați după SO-urile afectate
                   → verificați că noile date_end nu depășesc commitment_date al SO
                   → AP-urile al căror ap_effective_date a depășit commitment_date trebuie
                     analizate manual (comunicare cu clientul sau redistribuire manuală)

5. [Replanificare completă]  Global Planning (rulare completă) — recomandat după nivelare
                   → reface backward scheduling pentru toate SO-urile
                   → recalculează netting-ul cu noile date (stoc proiectat, deficit/surplus)
                   → actualizează statusul SO-urilor (OK / WARNING / BLOCKED)
                   → actualizează scheduled_date pe mișcările de picking

6. [Re-actualizare CRP]   Actualizează CRP (Acțiunea 1)
                   → sloturile CRP reflectă starea exactă după replanificare
                   → verificați că supraîncărcările au dispărut sau s-au redus
Regula de aur: Nivelarea CRP deplasează AP-urile (inclusiv copiii BOM) dar nu recalculează netting-ul și nu actualizează statusul SO. Urmați întotdeauna nivelarea cu o rulare de Global Planning pentru a reface coerența completă a planului (netting, status SO, date livrare).

Raport statistici post-nivelare (wizard)

Câmp Descriere
Sloturi analizate Total sloturi CRP în intervalul selectat
Sloturi supraîncărcate Numărul inițial de sloturi cu load% > 100%
Sloturi rezolvate Sloturi aduse la load% ≤ 100% prin nivelare
AP-uri mutate Numărul total de AP-uri deplasate cu +7 zile
Sloturi irezolvabile Sloturi rămase supraîncărcate (toate AP-urile fixed sau done)

Protecții nivelare

  • AP fixat
    (is_fixed = True): niciodată mutat — marcat explicit de utilizator ca imuabil
  • AP done / cancelled
    exclus din nivelare indiferent de load%
  • Dry run
    niciun AP nu este modificat; statisticile sunt pur informative

15. Reaprovizionare independentă

Planificatorul global detectează automat produsele cu mișcări de stoc de ieșire care nu sunt legate de nicio comandă de vânzare (transferuri interne, consum, ajustări planificate) și generează AP-uri de reaprovizionare.

Când se activează

Rulați Global Planning → planificatorul analizează, după procesarea SO-urilor, toate mișcările outgoing confirmate fără SO sursă.

Cum să identificați AP-urile de reaprovizionare

Advanced Planning → Planned Orders → filtru „Reaprovizionare”

Caracteristici:

  • ✓Câmpul „Reaprovizionare” (is_replenishment) = bifat
  • Comandă de vânzare
    = gol (nu sunt legate de niciun SO)
  • Picking sursă
    (replenishment_picking_id) = transferul care a generat primul deficit
  • ✓Stare: draft — necesită revizie înainte de conversie în PO/MO

16. Detecție abateri zilnică și escaladare automată

Activare

Inventar → Configurare → Setări → Advanced Planner → „Detecție abateri zilnică” → bifați

La activare, cronul Planificator avansat — detecție abateri zilnică devine activ și rulează zilnic.

Ce verifică cronul

Abatere Trigger Status AP
PO nelansat date_planned_launch trecut, fără PO asociat warning (< 2 zile) / blocked (≥ 2 zile)
PO întârziat PO confirmat cu date_planned > date_po_reception warning (< 5 zile) / blocked (≥ 5 zile)
MO blocat MO confirmat, date_start în trecut, producție neîncepută blocked
Lansare PO iminentă Lansare PO în < 2 zile, fără RFQ generat warning (preventiv)

Ce face la detectare

  1. Actualizează planning_status → warning sau blocked pe AP și pe SO
  2. Salvează motivul abaterii în câmpul Deviation Reason (vizibil pe formularul AP, banner portocaliu)
  3. Înregistrează data primei tranziții blocked în câmpul Blocked Since
  4. Postează o notă automată în chatter-ul SO: ⚠️ sau 🔴 + detalii abatere
  5. Creează o activitate Odoo pe SO, atribuită responsabilului SO (user_id):
    • Scadență 1 zi dacă status = blocked
    • Scadență 3 zile dacă status = warning
    • Nu creează duplicate dacă există deja o activitate cu același AP

Escaladare automată

Dacă un AP rămâne în starea blocked mai mult de N zile (configurabil în Setări — „Prag escaladare”, implicit 3 zile):

  • Scadența activităților expirate (nerezolvate) pe SO este actualizată la data de azi
  • Se postează o notă 🚨 de escaladare în chatter-ul SO cu numărul de zile blocate

Pentru a dezactiva escaladarea, setați pragul la 0.

Câmpuri noi pe AP

Câmp Descriere
Blocked Since Data primei treceri în blocked (calculat automat)
Deviation Reason Motivul ultimei abateri detectate de cron

17. Acces și permisiuni

Grupuri disponibile

Grup Acces
Advanced Planner / User Vizualizare comenzi planificate, Situație Material, Workcenter Load; rulare wizard de recalculare manuală per SO
Advanced Planner / Manager Acces complet: planificare globală, creare PO/MO din AP, configurare setări, ștergere AP

Configurare utilizatori

Setări → Utilizatori → utilizatorul dorit → secțiunea Advanced Planner

Selectați User sau Manager din dropdown.

Acțiuni disponibile per rol

Acțiune User Manager
Vizualizare comenzi planificate ✓ ✓
Rulare planificare manuală per SO ✓ ✓
Vizualizare Situație Material ✓ ✓
Vizualizare Stoc Proiectat Agregat ✓ ✓
Export rapoarte PDF / Excel ✓ ✓
Vizualizare Workcenter Load ✓ ✓
Vizualizare CRP — Capacitate (sloturi) ✓ ✓
Rulare planificare globală — ✓
Creare RFQ din AP — ✓
Creare MO din AP — ✓
Fixare / ștergere AP — ✓
Ștergere Stoc Proiectat / Snapshot — ✓
Actualizare CRP + Nivelare supraîncărcări — ✓
Configurare parametri (Setări) — ✓

Bug Tracker

Bugs are tracked on Terrabit Issues. In case of trouble, please check there if your issue has already been reported.

Do not contact contributors directly about support or help with technical issues.

Credits

Authors

  • Deltatech

Maintainers

This module is part of the terrabit-ro/bitshop_ent project on GitHub.

You are welcome to contribute.

Need help getting started?

We are an Odoo partner building apps for the Romanian market (SAGA & WinMentor export; Romanian accounting localization in progress). Direct support from the team that built the module.

Contact Terrabit →
TERRABIT
© Terrabit Solutions SRL  •  terrabit.ro  •  Odoo apps for Romania, Ireland & Moldova
Odoo Proprietary License v1.0

This software and associated files (the "Software") may only be used (executed,
modified, executed after modifications) if you have purchased a valid license
from the authors, typically via Odoo Apps, or if you have received a written
agreement from the authors of the Software (see the COPYRIGHT file).

You may develop Odoo modules that use the Software as a library (typically
by depending on it, importing it and using its resources), but without copying
any source code or material from the Software. You may distribute those
modules under the license of your choice, provided that this license is
compatible with the terms of the Odoo Proprietary License (For example:
LGPL, MIT, or proprietary licenses similar to this one).

It is forbidden to publish, distribute, sublicense, or sell copies of the Software
or modified copies of the Software.

The above copyright notice and this permission notice must be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author or have a question related to your purchase, please use the support page.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with