| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Purchase (purchase)
• Invoicing (account) • Discuss (mail) • Inventory (stock) |
| Lines of code | 1084 |
| Technical Name |
suite_serial_trace |
| License | OPL-1 |
| Website | https://suitestate.com |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Purchase (purchase)
• Invoicing (account) • Discuss (mail) • Inventory (stock) |
| Lines of code | 1084 |
| Technical Name |
suite_serial_trace |
| License | OPL-1 |
| Website | https://suitestate.com |
Serial / IMEI Trace
Two-point check-in: record serials at receipt and delivery, zero overhead in between
The Problem
Odoo native serial tracking forces 1 serial = 1 lot = 1 qty. Receiving 3,000 phones means creating 3,000 lots — each carried through every stock operation (transfers, counts, valuations), adding massive overhead to your entire warehouse workflow.
The alternative — one lot with qty 3,000 — loses individual unit tracking entirely. You should not have to choose between operational efficiency and unit-level traceability.
The Solution: Two-Point Check-In
Record serial numbers only at two checkpoints — receipt and delivery — with zero tracking overhead in between. No lot-per-unit. No workflow disruption. A lightweight registry stores one record per serial code, globally unique, with current status and full PO-to-SO traceability.
Everything in between is completely free. Internal transfers, inventory adjustments, stock counts, warehouse replenishment, manufacturing orders, inter-warehouse moves, valuations — all operate at the lot or product level as usual, with no per-serial overhead. The serial registry is a pure data layer that does not interfere with any standard Odoo operation.
Step 1 — Record Serials on Receipt
Click "Record Serials" on any receipt picking. Paste serial codes directly or upload a CSV / Excel file. Product, lot, and package are assigned automatically. Each serial is created in the registry with status "In Stock".
Step 2 — Record Serials on Delivery
Click "Record Serials" on any delivery order. Three input methods are available, each suited to a different business scenario:
| Method | Best For | How It Works |
|---|---|---|
| Batch Load | Full-batch shipments where an entire lot, package, or PO receipt is shipped as a whole | Select a product, filter by lot / package / PO / receipt picking, then click Load to pull all matching in-stock serials at once. Best when the delivery quantity matches the filtered batch exactly. If the quantities do not match, the system pulls serials automatically — which may not correspond to the exact units being shipped. |
| Paste | Small shipments or ad-hoc picks where you know the exact codes | Paste serial codes directly into the text area (one per line). Each code is auto-matched against the registry. Quick and precise for a handful of serials. |
| File Import (CSV / Excel) | Large shipments with exact serial-level accuracy | Upload a CSV or Excel file containing the precise list of serial codes being shipped. Supports multi-sheet Excel with a sheet picker. Ideal for high-volume deliveries (hundreds or thousands of units) where every serial must match the actual outgoing goods. |
All three methods validate against the registry: serials must exist and be marked "In Stock" (when Strict Registry Mode is enabled). Status changes to "Out" upon import. Conflict detection prevents shipping a serial that is already marked Out.
Global Serial Registry
One record per serial, globally unique. See current status (In Stock / Out), linked Purchase Order, Sales Order, lot, package, receipt date, and delivery date — all in one view. Filter by status, product, lot, PO, or SO. Group by month for reporting.
Read-only by design. The registry form only allows editing the serial code itself (to fix a typo). All other fields — status, PO, SO, picking links, dates, lot, package — are read-only, written exclusively by the import wizard from a picking context. To correct data, use Clear Serials on the picking to remove associations, then re-record. This ensures every change is made in a clear operational context rather than by editing raw data.
Two Operating Modes
Configurable in Inventory Settings under Traceability. Choose the mode that fits your business:
| Mode | Receipt | Delivery | Best For |
|---|---|---|---|
| Strict Registry (default) | Record serials at receipt — register into the system | Outgoing serials must exist in the registry. Unknown codes are blocked. | Full lifecycle tracking: receipt → delivery. Businesses that need complete PO-to-SO traceability. |
| Flexible Mode | Receipt recording is optional | If a serial already exists in the registry, it is matched automatically. If not, a new registry record is created on the spot. | Delivery-only tracking. Businesses that only need to record which serials went to which customer, without requiring prior receipt registration. |
How It Works
| Step | What Happens | Serial Status |
|---|---|---|
| Receipt | Click "Record Serials" on receipt picking. Paste or upload codes. Linked to PO, lot, and package automatically. | In Stock |
| Storage | Nothing to do. Serials sit in the registry. No lot overhead during internal operations. | In Stock (unchanged) |
| Delivery | Click "Record Serials" on delivery order. Direct scan or batch mode. Linked to SO automatically. | Out |
| Customer Return | Direction follows picking type. Serial is recorded back into the registry. | In Stock |
| Supplier Return | Direction follows picking type. Serial is recorded as shipped back to supplier. | Out |
Import Wizard Features
- Paste or upload — paste serial codes from any source, or upload CSV / Excel files
- Multi-sheet Excel — sheet picker for files with multiple worksheets
- Direct scan mode — paste codes, auto-matched against existing registry
- Batch mode (outgoing) — select product, filter by lot / PO / receipt date / package, load matching in-stock serials
- Conflict detection — cannot import a serial already marked Out (incoming) or already marked In Stock (outgoing, if already on the picking)
- Quantity validation — imported serial count checked against picking line demand
- Clear Serials — one-click reset removes all serial associations from a picking
Registry Fields
| Field | Description | Written At |
|---|---|---|
| Serial / IMEI | The unique code (IMEI, SN, VIN, UDI, MAC, etc.) | First import |
| Product | Product variant linked to this serial | First import |
| Lot | Native Odoo lot (optional) | Receipt import |
| Status | In Stock or Out | Each import |
| Purchase Order | Source PO from receipt | Receipt import |
| Receipt Picking | The receipt transfer | Receipt import |
| Package | Package assigned at receipt | Receipt import |
| Receipt Date | When goods were received | Receipt import |
| Sales Order | Destination SO from delivery | Delivery import |
| Delivery Picking | The delivery transfer | Delivery import |
| Delivery Date | When goods were shipped | Delivery import |
Audit History
A minimal history table records every in/out event per serial. Each entry stores: serial, picking, direction (in/out), done date, and product. This provides a complete audit trail for returns and multi-cycle scenarios (received → delivered → returned → re-delivered) while keeping storage to a minimum.
Performance and Storage
| Monthly Volume | Annual Storage | 5-Year Outlook |
|---|---|---|
| 10,000 serials | ~120 MB | ~600 MB, no issues |
| 50,000 serials | ~600 MB | ~3 GB, indexed queries remain fast |
| 100,000 serials | ~1.2 GB | ~6 GB, consider archiving old records |
Direct ORM batch writes. No intermediate sync layer. No mail.thread. No _log_access. 3,000 serials imported end-to-end in under 0.3 seconds.
Key Features
- Global registry — one record per code, database-level UNIQUE constraint
- Two-point check-in — record at receipt and delivery only, zero overhead in between
- Bulk import — paste text, CSV, or multi-sheet Excel with thousands of codes
- Dual import mode — direct scan or batch mode with product/lot/PO/package filters
- Two operating modes — Strict Registry (receipt + delivery) or Flexible Mode (delivery-only, auto-create unknown serials)
- Full traceability — each serial links back to supplier PO and forward to customer SO
- Return support — customer and supplier returns tracked automatically by picking type
- Read-only registry — form fields locked except serial code; all data written from picking context only
- Clear and redo — one-click reset of all serials on a picking; the standard way to correct data
- Cancel hook — picking cancellation clears serial associations automatically
- Conflict detection — cannot ship a serial already marked Out
- Audit history — minimal 5-field event log for compliance and return tracking
- No lot dependency — works with or without native Odoo lot tracking
Technical Notes
- Does not create lots, stock moves, or accounting entries — pure data layer.
- Does not require native lot/serial tracking on products.
- No
mail.thread, no_log_access— zero message and audit overhead. - Dependencies:
sale_stock,purchase_stock(native Odoo only). - Compatible with Odoo 19.0 Community and Enterprise.
License and Support
Licensed under OPL-1 (Odoo Proprietary License v1).
Maintained by SuiteState (ElectroState FZCO).
For questions, bug reports, or feature requests, visit
suitestate.com or contact
hello@suitestate.com.
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