¿Listo para implementarlo en tu Odoo?
Agenda una demo o habla con un consultor y resuelve tus dudas antes de comprar. Instalación, configuración y soporte incluidos.
Mi ERP Enterprise — Asset Lifecycle Suite
Enterprise Asset Management for Odoo 19. Asset register, CMMS, asset performance, investment planning, ISO 55001, native GIS, HSE and a mobile/IoT REST API — one module, one database, one login. Built for the mid-market companies that need what IBM Maximo, SAP Intelligent Asset Management and IFS Cloud do, at a price a mid-market budget can carry.
What it solves
A plant with two thousand critical assets does not lack software. It has a maintenance spreadsheet, an inspection folder, a separate HSE log, an ISO binder, a consultant's investment model, and an ERP that knows none of them. Nobody can answer which asset should we replace first, and what does that cost us if we wait without a week of reconciliation.
This module puts the whole asset lifecycle in one place, inside the ERP
that already holds the money, the stock and the people. The asset register
is bridged to Odoo's own account.asset
for accounting depreciation, to
maintenance.equipment for the native
maintenance flows, to hr.employee for
technicians and inspectors, and to
product.product for spare parts. A work
order, a risk score and a depreciation line finally talk about the same asset.
And it is honest about the arithmetic: the health index, the Weibull end-of-life curve, the risk priority numbers, the LTIFR and the net present value of an investment scenario are all computed from your own records, on your own server, and every one of them can be opened and traced back to the rows behind it.
Ten disciplines, one module
Not ten apps to buy, integrate and reconcile. Ten menus over one asset table, installed by a single Activate.
Asset master
Multi-level asset hierarchy and functional locations, asset classes with their own dynamic attributes, a multi-axis criticality matrix, QR and NFC tagging, and the bridges to accounting assets and native maintenance equipment.
CMMS
Corrective, preventive, predictive and emergency work orders; preventive plans driven by calendar, meter or condition; work permits for lockout/tagout, hot work and confined space with signatures; inspection templates; failure analysis with RCM and FMEA.
APM — asset performance
Health scoring per asset and per fleet, condition rules that raise events from meter and sensor readings, and the reliability numbers a maintenance manager is asked for: MTBF, MTTR, availability and the bad actors behind them.
AIP — investment planning
Probability × consequence risk assessment, the Strategic Asset Management Plan, competing investment scenarios with their CAPEX, NPV and cumulative risk reduction per fiscal year, total cost of ownership and a value framework.
ISO 55001
The clause catalogue of chapters 4 to 10 preloaded, evidence attached clause by clause, internal audits with PDCA findings and corrective actions, competence management with expiry, and a printable evidence pack for the auditor.
GIS, natively
Leaflet over OpenStreetMap inside the back office — no ArcGIS licence, no external GIS server. Toggleable layers, regulatory zones and watersheds as polygons, linear assets with kilometric segments, and a failure heat map.
HSE / EHS
Incidents, near misses and investigations, hazard identification, a probability × severity risk register with residual risk, corrective actions with due dates, and the eight rolling indicators an HSE lead reports monthly.
Mobile & IoT API
A REST API under /api/eam/v1/: JWT sessions for people, revocable opaque tokens for gateways, per-endpoint scopes, asset scanning, work-order execution, inspections with photos, meter readings, batch telemetry and an idempotent offline-sync endpoint.
LATAM localization
Colombian (DIAN) and Venezuelan (SENIAT) fiscal depreciation schedules out of the box, imported assets carried in their original currency alongside the company one, and the sector report templates for CREG and MPPEE.
AI assistance
Failure probability, remaining-life estimation and IoT anomaly detection computed on your own server. A conversational assistant, photo inspection and narrative reporting that call Claude with your own Anthropic key, under a monthly spend cap you set. Details below.
And the assets that are not machines
Pipelines with risk-based inspection classes under API 580/581 and wells with their daily production; aircraft with life-limited parts counted in hours and cycles; wind turbines with installed capacity and energy produced; rail track and rolling stock; and real-estate assets with their own register. Each vertical has its own dashboard, all of them over the same asset table.
See it running
Thirteen screens captured from the module running on an Odoo 19 database with its own demo data. Nothing below is a mock-up.
Five security profiles, ready to assign
They are hierarchical: each profile grants everything the previous one grants. The profile also decides the API scopes a login receives, so the phone in a technician's hand can do exactly what that technician can do in the back office — no more. Record rules keep every model inside its own company.
| Profile | Typical holder | Can do | API scopes granted |
|---|---|---|---|
| Technician | Field technician | Read the asset register, execute assigned work orders, complete inspections, register meter readings | asset:read, wo:read, wo:execute, inspection:submit, meter:write, sync |
| Planner | Maintenance planner | Create assets, work orders, preventive plans and inspection schedules; assign technicians | + asset:write, wo:write |
| Supervisor | Operations supervisor | Approve work orders and work permits (LOTO, hot work, confined space); operational dashboards | + iot, iot:write |
| Manager | Asset manager | Criticality matrices, risk assessment, SAMP and investment scenarios, ISO audits and findings | — |
| Administrator | System administrator | Full configuration, IoT devices, API tokens, AI settings and integrations | + integration (every scope) |
An API your mobile team can actually build on
Everything lives under /api/eam/v1/.
Two kinds of credential share one Authorization: Bearer
header: a JWT session for a person using an app — HS256, twelve-hour
access token, thirty-day refresh token, revocable from the back office — and an
opaque bearer token for an IoT gateway or a server-to-server
integration, shown once, stored only as a hash, revoked in one click.
curl -X POST https://erp.example.com/api/eam/v1/auth/login \
-H 'Content-Type: application/json' \
-d '{"login":"[email protected]","password":"..."}'
{"access_token": "eyJhbGciOiJIUzI1NiIs...",
"refresh_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "Bearer", "expires_in": 43200, "refresh_expires_in": 2592000,
"scopes": ["asset:read","inspection:submit","meter:write","mobile",
"sync","wo:execute","wo:read"],
"uid": 7, "company_id": 1}
Scopes, and a company wall
Every endpoint declares the scope it needs, so a token issued for a temperature sensor cannot list the asset base — it gets 403 insufficient_scope. Each credential is bound to one company, and a record belonging to another one answers 404, never 403: the API never confirms that a record exists elsewhere in your database.
Field work survives losing the signal
The client queues each action locally with a UUID it generates itself and pushes the queue to POST /sync when connectivity returns. The UUID is claimed before the business record is written, so re-sending a batch whose response was lost creates nothing twice — the replay hands back the identifiers of the first run. Each operation runs in its own savepoint, so one rejected row is reported and the rest of the batch still lands. The module provides this server side; the mobile client itself is yours to build.
Telemetry
Devices that speak REST push straight to the signal endpoint, one reading at a time or in batches of up to 500. Devices that speak MQTT, Modbus or OPC-UA reach the suite through a small external bridge — and the module itself serves a ready-to-run one for Mosquitto or EMQX, with your instance URL already filled in, at /api/eam/v1/mqtt-bridge.py.
It documents itself
/api/eam/v1/docs serves Swagger UI over an OpenAPI 3.0.3 document generated from the live routing map, so the documentation cannot drift from the code. A Postman collection ships in the module with 51 assertions — login failures, token expiry, scope enforcement, pagination caps, ingestion and the sync idempotency guarantee — and runs headless under Newman.
AI assistance, with the bill clearly labelled
Half of what this module calls AI is statistics, and it runs on your own server with nothing leaving it. The other half is a large language model, and it needs an Anthropic API key that you supply and you pay for. We would rather say so on this page than in a support ticket.
Runs locally. No key, no external call.
Failure probability — a classifier trained on your own work-order and failure history, using scikit-learn when it is installed on the server and a built-in logistic regression when it is not, so the feature works either way.
Remaining useful life — a two-parameter Weibull fitted by maximum likelihood to right-censored lifetimes per asset class, then the conditional remaining life of one individual asset given the age it has already reached.
IoT anomaly detection — robust baselines per signal, and a reading that departs from them is flagged as a condition event.
Needs your own Anthropic API key.
The conversational assistant over the asset base, photo inspection of asset images, root-cause help on an incident, preventive-plan suggestions, the searchable knowledge base and narrative executive reports call the Claude Messages API.
You create the key at console.anthropic.com,
paste it into the AI settings, choose which Claude model answers which class of
request, and set a monthly spend cap in USD. When the cap is
reached the whole AI layer pauses instead of billing on. Every call is written
to a cost ledger.
Each capability has its own on/off switch, e-mail addresses, phone numbers and long identity numbers are redacted from prompts before they leave the server, and the assistant never writes to the database on its own: it proposes an action and waits for a human to confirm it.
With no key configured, nothing is fabricated and nothing breaks: the language-model capabilities simply report that they are unavailable, and the statistical ones keep working.
Built on Odoo 19, not bolted onto it
Bridged, not isolated
The asset register links to account.asset, maintenance.equipment, hr.employee and product.product. Every business record carries the chatter, so tracking, followers and activities work exactly as your users already expect.
Nothing loaded from the internet
Dashboards are OWL 2 components drawing with Apache ECharts, maps use Leaflet, and both libraries ship inside the module — no CDN, no third-party JavaScript fetched at runtime. The one outbound request is for map tiles, and the tile URL is a system parameter: point it at your own tile server and the module makes no outbound call at all.
Multi-everything
Multi-company with record rules on every model, multi-currency, and a complete Spanish translation alongside the English source — 4,744 terms, at 100 %. Thirteen PDF reports, twelve scheduled jobs, and it runs on Odoo.sh as well as on your own server.
Requirements and installation
You need
Odoo 19.0, Community or Enterprise
PostgreSQL 15+ and Python 3.11+
No paid third-party library and no external service
Odoo apps it depends on
Maintenance · Accounting Assets · Employees · Products · Units of Measure · Discuss — all installed automatically.
What we measured before releasing it
Plus 51 Newman assertions against the live API, a full Spanish translation of 4,744 terms, and a package under 3 MB with no binary blobs beyond the two bundled JavaScript libraries and the screenshots on this page.
GRUPO MI ERP SAS
Colombia · NIT 901.950.475-9 · Author and maintainer of this module
[email protected] [email protected] www.mi-erp.app
Odoo Proprietary License v1.0 · USD 8,000 per Odoo major version · Implementation, data migration and training quoted separately.