Discover powerful Dolibarr extensions designed to automate your business processes

MES Enterprise turns Dolibarr into a full Manufacturing Execution System (MES), giving industrial companies, factories, workshops and production units real-time control of their shop floor without any external MES software. It targets discrete and process manufacturing: metalworking, plastics, food processing, textile, chemical, pharmaceutical and mechanical industries.
· Production scheduling with an industrial Gantt, workshop / machine / operator load and conflict detection.
· Work order execution and real-time tracking across a seven-state lifecycle.
· Shop floor terminal optimised for tablets, touch screens and industrial terminals.
· Shop floor structure: workshops, production lines, workstations, machines and operators.
· Production declaration with automatic roll-up of quantities, times and costs onto the work order.
· Material consumption tracking with supplier lots and waste.
· Lot and serial number management with automatic generation, QR code and barcode.
· Full upstream and downstream traceability, including the product genealogy view.
· In-process quality control driven by control plans (characteristic, target, tolerances, frequency, sampling).
· Non-conformity management with root cause, corrective action, owner, due date and financial impact.
· Scrap management by defect type, with cost valuation and Pareto analysis.
· Machine downtime management across the seven standard downtime families.
· Integrated maintenance: preventive, corrective and predictive.
· Automatic OEE computation by machine, line, workshop and factory.
· Industrial KPI cockpit across six families.
· Real-time industrial dashboards and a twelve-report decisional reporting suite.
· Local industrial AI: failure prediction, anomaly detection, scrap root-cause Pareto, scheduling optimisation and production forecast.
The module ships 22 business objects, each with a list view, a card view, per-column search, a column selector and status management.
|
Domain |
Objects |
|
Shop floor |
Workshop, Production line, Workstation, Shift |
|
Machines |
Machine / equipment, Downtime, Maintenance |
|
Workforce |
Operator |
|
Production |
Work order, Operation (routing), Schedule slot, Declaration, Material consumption |
|
Traceability |
Lot / serial, Traceability event |
|
Quality |
Control plan, Control, Non-conformity, Scrap, Defect type |
|
Performance |
OEE record, KPI record |
· Production Control Engine - work order lifecycle, routing operations and roll-up of declared quantities, times and costs.
· Shop Floor Monitoring - real-time machine states, running work orders and a merged production event feed.
· Machine Data Collection - run/stop hours, failure counts, IP address and protocol fields ready for machine feeds.
· OEE Engine - availability x performance x quality, computed and aggregated with weighting.
· Quality Control Engine - control plans, measurements, conformity verdicts and automatic non-conformity creation.
· Traceability System - upstream/downstream genealogy from supplier lot to customer shipment.
· Downtime Management - seven downtime families feeding availability, MTBF and MTTR.
· Workforce Management - operators, skills, certifications, shifts, productivity and efficiency.
· Industrial Dashboard - gauges, KPI cards, kanban, workshop map, timeline and alerts.
· AI Manufacturing Analytics - deterministic local rules engine over the module's own data.
· Every object extends CommonObject and uses the standard create / fetch / fetchAll / update / delete lifecycle.
· Module descriptor modMesEnterprise (numero 517300) declares rights, menus, boxes, CSS and JS through module_parts.
· table_element carries no llx_ prefix; the live prefix is resolved through $db->prefix() / MAIN_DB_PREFIX.
· A schema self-heal runs after _load_tables(): Dolibarr only ever runs CREATE TABLE, so missing columns are added with ALTER TABLE on upgrade.
· delete_menus() runs at the top of init() so menus never duplicate on re-activation.
· Every menu URL is module-local, so it cannot collide with another module's identical menu row and abort activation.
· All 456 language keys are namespaced under a Mes prefix: Dolibarr merges every active module's language file into a single translation table, so unprefixed keys would render another module's values.
|
Table |
Purpose |
|
llx_mes_workshop |
Workshops: capacity, calendar, shift model, OEE target, hourly cost |
|
llx_mes_line |
Production lines: capacity, takt time, state, yield |
|
llx_mes_station |
Workstations: type, machine, cycle and setup time, state |
|
llx_mes_machine |
Machines: brand, model, serial, state, run/stop hours, MTBF, MTTR, OEE, IP, protocol |
|
llx_mes_operator |
Operators: badge, skills, certifications, shift, productivity, efficiency |
|
llx_mes_shift |
Shifts: hours, breaks, planned hours, headcount |
|
llx_mes_order |
Work orders: quantities, dates, priority, status, times, costs, lot |
|
llx_mes_operation |
Routing operations attached to a work order |
|
llx_mes_schedule |
Schedule slots with load and conflict detection |
|
llx_mes_declaration |
Production declarations: quantities, times, rate, labour and machine cost |
|
llx_mes_consumption |
Material consumption with supplier lot and waste |
|
llx_mes_lot |
Lots and serial numbers with QR code, barcode and quality status |
|
llx_mes_trace |
Traceability events, upstream and downstream |
|
llx_mes_control_plan |
Control plans: characteristic, target, tolerances, frequency, sampling |
|
llx_mes_control |
Quality controls with measured value and conformity |
|
llx_mes_nonconformity |
Non-conformities with root cause and corrective action |
|
llx_mes_scrap |
Scrap by defect type with cost valuation |
|
llx_mes_defect |
Defect type catalogue |
|
llx_mes_downtime |
Machine downtime by family, with duration and cost |
|
llx_mes_maintenance |
Maintenance interventions: preventive, corrective, predictive |
|
llx_mes_oee |
OEE records per machine and per day |
|
llx_mes_kpi |
Industrial KPI records with target, deviation and trend |
A work order moves through seven states, stored language-independently in mes_order.of_status:
|
State |
Meaning |
|
planned |
Created and scheduled, not yet released to the shop floor |
|
launched |
Released to the shop floor, ready to start |
|
running |
In production; declarations are being recorded |
|
suspended |
Paused, typically after a breakdown or a material shortage |
|
done |
Production finished |
|
closed |
Closed after final checks; consumed by reporting as completed |
|
cancelled |
Cancelled; excluded from performance figures |
· The operator selects the work order, then scans or selects the badge, the machine and the lot.
· Start sets the status to running and stamps the real start date (only once).
· Declare quantity creates a declaration, derives the good quantity and the real rate, then rolls the totals back onto the work order.
· Declare scrap creates a scrap record linked to the work order, defect, machine, operator and lot.
· Declare breakdown opens a downtime record, switches the machine to the breakdown state and suspends the work order.
· Close sets the status to done and stamps the real end date.
· Work orders are placed on the Gantt over a 7 to 60 day horizon.
· Load is computed per workshop, machine and operator and compared to capacity; above 100 percent the resource is flagged as overloaded.
· Conflicting slots are surfaced with their reason, for example a machine already assigned over the same window.
OEE (Overall Equipment Effectiveness), known as TRS in French, is computed as:
OEE = Availability x Performance x Quality
|
Factor |
Formula |
Source data |
|
Availability |
run time / planned time |
mes_oee.time_run, time_planned |
|
Performance |
real rate / theoretical rate |
mes_oee.real_rate, theoretical_rate |
|
Quality |
good quantity / total quantity |
mes_oee.qty_good, qty_total |
· Each factor is clamped to 100 percent: a machine cannot be more than 100 percent available, and running above nominal speed must not inflate OEE beyond its physical ceiling.
· When the real rate was not measured, it is derived from the produced quantity divided by the run time.
· Aggregation is weighted, never a naive average: availability is weighted by planned time, the rates by run time, and quality by quantity. A 30-minute record therefore cannot outweigh an 8-hour shift.
· The same engine serves the dashboard, the OEE page, the KPI cockpit, the reporting suite, the AI analysis and the box widget, so every surface shows the same figure.
· MTBF (Mean Time Between Failures) = cumulated run time / number of breakdowns.
· MTTR (Mean Time To Repair) = cumulated repair time / number of breakdowns.
· Both are computed from the machine's downtime records filtered on the breakdown family.
· A control plan defines the characteristic, the control type, the unit, the target value, the minimum and maximum tolerances, the frequency, the sample size and the method.
· Plans are attached to a product and optionally to a workshop.
· A control records the measured value, the sample size, the conforming and rejected counts, a photo, a comment and the validating user.
· Conformity is evaluated against the plan's tolerance band.
· A failing control automatically opens a non-conformity carrying severity, root cause, affected quantity, corrective action, owner, due date and financial impact.
· Scrap is declared against a defect type from the catalogue, with cause, machine, operator, lot and work order.
· Total cost is valued as quantity x unit cost; a recoverable flag separates reusable scrap from outright loss.
· Pareto analysis with cumulative percentage isolates the vital few defects that carry most of the volume.
· Search accepts a lot number, a serial number, a barcode or a QR code, using an exact match first and then a partial match.
· Upstream: raw materials consumed, supplier lots and parent lots.
· Work order: status, quantities and real start / end dates.
· Operators and machines that touched the lot, with the timestamp of every declaration.
· Quality controls performed, with the measured value and the conformity verdict.
· Downstream: traceability events and the customer shipment reference.
· Traceability events carry a direction (upstream / downstream), an event type, a date, a linked reference and a quantity.
|
Machine state |
Meaning |
|
running |
In production |
|
idle |
Available, not currently producing |
|
setup |
Being set up or changed over |
|
maintenance |
Under maintenance |
|
breakdown |
Failed, production stopped |
|
offline |
Out of service |
Downtime families:
|
Family |
Planned |
Typical cause |
|
breakdown |
No |
Tool failure, spindle stop |
|
maintenance |
Yes |
Scheduled preventive maintenance |
|
setup |
Yes |
Start-of-run setup |
|
changeover |
Yes |
Series or mould changeover |
|
nomaterial |
No |
Material shortage |
|
nooperator |
No |
Waiting for a qualified operator |
|
quality |
No |
Stopped on a quality drift |
The analytics engine is local by default: every insight is derived from the module's own data with deterministic industrial rules, so no production data ever leaves the instance. The setup page can point MESENTERPRISE_AI_PROVIDER at OpenAI or a self-hosted Ollama for free-text generation; the analytics themselves remain local either way.
· A risk score from 0 to 100 combines the three signals a maintenance engineer actually watches: a short MTBF (fails often), a long MTTR (hard to repair) and a high recent breakdown count.
· The MTBF threshold is calibrated against the fleet median, so the rule adapts to the plant rather than to a hard-coded constant.
· A machine currently in the breakdown state and a stop-time ratio above 15 percent both raise the score.
· The last 7 days are compared with the previous 21 on OEE, scrap rate and downtime minutes.
· An OEE drop of 5 points or more is attributed to whichever of the three OEE factors moved the most, which is what turns a number into an actionable finding.
· A scrap rate 40 percent above its baseline, and downtime 50 percent above the weekly average, are reported.
· Scrap root causes: Pareto with cumulative percentage and cost.
· Scheduling optimisation: late work orders, conflicting slots and overloaded resources.
· Production forecast: a 7-day projection from the trailing 28-day daily mean adjusted by the recent trend.
· Natural-language questions are routed by keyword to the matching analysis, for example: Why did line 2 OEE drop this week?
|
Dolibarr module |
Integration |
|
Products |
Manufactured products and raw materials are native Dolibarr products |
|
Third parties |
Work orders carry the customer; demo customers are native Societe records |
|
Stock / Warehouses |
Material consumption references native warehouses |
|
Users |
Managers, technicians and validators are Dolibarr users; operators link to a user account |
|
Projects / Agenda |
Work orders can be reconciled with projects and planning |
|
GMAO / CMMS |
Machines and downtime align with the maintenance module's asset model |
|
QHSE |
Non-conformities and corrective actions feed the quality system |
|
BI / Dashboard Builder |
All MES tables are exposed for cross-module reporting |
|
GED / OCR / e-Signature |
Control reports and maintenance reports can be filed and signed |
· Every machine carries an IP address and a protocol field (OPC-UA, MQTT, Modbus TCP), so a collector can be attached without a schema change.
· The declaration, downtime and OEE tables are the natural write targets for a machine feed: the shop floor terminal and a future collector share the same roll-up logic.
· The real-time page is a wall board that already refreshes on a timer; an MQTT or OPC-UA push can drive it later.
· Lots carry QR codes and barcodes for scanner-based identification.
· Every one of the twelve reports exports to CSV, Excel and Word, and is printable.
· Exports are streamed from the same data structure as the on-screen table, so an export can never disagree with the screen.
· CSV is emitted with a UTF-8 BOM so Excel detects the encoding correctly.
Eight functional right groups produce 23 permissions (read / write / delete per group; reporting is read-only; plus a module administration right). Read and write are granted by default so the module is usable immediately after activation, while delete and admin start closed.
|
Group |
Covers |
|
production |
Work orders, operations, schedule slots, declarations, consumption |
|
shopfloor |
Workshops, lines, workstations, shifts |
|
machine |
Machines, downtime, maintenance |
|
operator |
Operators |
|
quality |
Control plans, controls, non-conformities, scrap, defect types |
|
traceability |
Lots, traceability events |
|
performance |
OEE records, KPI records |
|
reporting |
Industrial reporting (read only) |
· Every page checks its right group before rendering; unauthorised access raises accessforbidden().
· All objects are multi-entity aware (ismultientitymanaged) and filtered through getEntity(), so MultiCompany installations stay isolated.
· All write actions are CSRF-protected with newToken(); the shop floor terminal posts a fresh token per action.
· SQL values are escaped through the Dolibarr database layer, and identifiers are cast to int or float before interpolation.
· Output is escaped with dol_escape_htmltag(); the reporting exports strip tags.
· Creation, modification and author are stamped on every record (date_creation, tms, fk_user_creat, fk_user_modif), giving a native audit trail.
· GDPR: operators hold professional data only (name, badge, job, skills, certifications); no personal or sensitive data is collected. Demo records are tagged and removable in one click.
|
Item |
Value |
|
Technical name |
mesenterprise |
|
Descriptor |
modMesEnterprise |
|
Module numero |
517300 |
|
Version |
1.0.0 |
|
Family |
MES / Industrie 4.0 |
|
Table prefix |
llx_mes_ |
|
Business objects |
22 |
|
Database tables |
22 |
|
Permissions |
23 across 8 right groups |
|
Menu entries |
1 top + 32 left |
|
Language keys |
456 per language |
|
Languages |
French, English, Spanish, Italian, German |
|
Dolibarr |
16.0 and above |
|
PHP |
7.1 and above, PHP 8.x compatible |
|
Database |
MySQL / MariaDB, PostgreSQL compatible |
|
Licence |
GNU GPL v3 |
|
Publisher |
DoliResources - www.doliresources.com |
· Every foreign key column is indexed; index names are kept well under the 64-character limit through short per-table tokens.
· Dashboard and KPI aggregates are computed with SQL SUM / COUNT rather than by loading object collections.
· List queries are paginated through plimit() and sorted through the database layer.
· Computed rates and money values are explicitly rounded, so instances configured with a high decimal precision do not print eight decimals.
· The CSS and JS are served through module_parts with a public cache limiter.
· Industrial charter: industrial blue, technology cyan, performance green, alert orange, breakdown red and factory grey.
· Responsive design: the KPI grid, chart rows and terminal buttons reflow below 900 px; a print stylesheet hides navigation and shadows.
· Charts are rendered with the native Dolibarr DolGraph layer, so they follow the instance's chart engine.
· OEE gauges are pure CSS conic gradients: no JavaScript charting dependency.
· Touch targets on the shop floor terminal are at least 76 px high so they stay usable with gloves.
· Icons are Font Awesome 5 Free names only, matching what Dolibarr 16 to 23 bundles.
· A versioned dataset guard (DATASET_VERSION) re-seeds the demo automatically when the module is upgraded, which a plain boolean guard would never do.
· Every demo record is tagged with the import key MESDEMO; removal deletes only tagged rows and never touches real data.
· The generator is deterministic: a re-seed reproduces the same dataset, so screenshots and documentation stay stable.
· The dataset covers 3 workshops, 6 lines, 12 workstations, 14 machines, 12 operators, 4 shifts, 26 work orders, 108 operations, 71 declarations, 18 lots, 34 controls, 30 downtime records, 338 OEE records and more.
Copyright (C) 2026 DoliResources - www.doliresources.com - Distributed under the GNU GPL v3 licence.