A build-to-order Odoo optical retail platform that ties patient prescriptions, frame and lens catalogs, lens configuration and lab job orders into a single POS-driven workflow. ECOSIRE scopes, builds, installs and supports it on your Odoo 17/18/19. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $399.00 USD; request a quote for a scoped proposal.

A build-to-order Odoo optical retail platform that ties patient prescriptions, frame and lens catalogs, lens configuration and lab job orders into a single POS-driven workflow. ECOSIRE scopes, builds, installs and supports it on your Odoo 17/18/19.
No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.
Optimized API calls with rate limiting, queue management, and batch processing
Connect and manage multiple stores from a single Odoo instance
Intelligent risk scoring, demand forecasting, and automated decisions
50+ webhook events for instant synchronization
Everything you need to manage your Optical Store & Lab Management (ERP + POS) integration with Odoo
Optical retail is a manufacturing business hiding inside a shop. Every sale starts with a clinical prescription, turns into a made-to-order lens ground to a specific sphere, cylinder and axis, gets edged and fitted into a chosen frame, and often has to be split between a customer co-pay and an insurance claim. Odoo core has the raw ingredients — product.template with variant attributes, pos.order, stock.picking, mrp.production, account.move — but nothing that understands an Rx, a lab job, or a coating add-on. Opticians end up tracking prescriptions in spreadsheets, keying lens parameters into order notes, and reconciling insurance by hand. That is where Odoo native runs out of road.
Patient prescription (`optical.prescription`) model linked to `res.partner`, capturing OD/OS sphere, cylinder, axis, add, prism and PD with dated Rx history
`@api.constrains` validation rejecting out-of-range powers or invalid axis (0–180) at entry, and `@api.depends` computes for distance vs reading breakdown
Frame catalog using `product.attribute`/variants for material, shape, rim type, color and eye/bridge/temple sizing
Lens catalog with configurable options — index (1.5/1.6/1.67/1.74), anti-reflective, blue-light, hard coat, tint and photochromic — priced per variant
POS extension (OWL) to attach the active patient Rx to an order line and configure frame + lens + coatings with combined pricing
Automatic `optical.lab.order` job creation on order confirmation via an automated action, with technician assignment and computed target date
ECOSIRE builds a dedicated optical layer on top of your Odoo. We add a patient prescription model (an optical.prescription record linked to res.partner) that captures OD/OS values — sphere, cylinder, axis, add, prism, PD — with @api.constrains validation so an impossible axis or out-of-range power is caught at entry, and computed @api.depends fields that derive the reading vs distance breakdown. Frames and lenses live in a properly attributed catalog: frame material, shape, color and size as product.attribute variants, and lens options (index, coatings like anti-reflective or blue-light, tint, photochromic) modeled as configurable line options so a single lens SKU generates the right variant and price at point of sale.
The POS is where it comes together. We extend the Odoo POS (OWL frontend + pos.order backend) so a cashier picks the patient, pulls the active Rx onto the order line, configures the lens, and the system prices frame + lens + coatings together. When the order confirms, an optical.lab.order job is created automatically via an automated action, moving through a status pipeline — queued, surfacing/edging, fitting/mounting, QC, ready for collection — with the lab technician assigned and the target date computed. Insurance is handled as a split on the order: an insurer/scheme portion routed to a claim journal and the patient co-pay taken at the till, with a QWeb spectacle-order/collection ticket and the clinical Rx printed for the lab bench. All of it is guarded by ir.model.access.csv plus record rules so front-desk, optometrist and lab roles see only what they should, and the same data is reachable over the XML-RPC/JSON-RPC API if you want to feed a website booking form or an external edger.
Because this is build-to-order, nothing ships blind. We start with a scoping call to map your exact Rx fields, lens catalog, lab stages and insurance schemes, then build against your Odoo edition and version (17.0, 18.0 or 19.0; we flag anything that needs Enterprise such as full MRP or advanced accounting versus what runs on Community). You get the work on a staging instance for UAT first, a documented __manifest__.py-defined module with migration-safe data, and a defined go-live with rollback. Typical delivery is 2–4 weeks from confirmed scope, and the module is yours — handed over as a git repository you own.
Runs a single practice combining eye tests and dispensing. Needs prescriptions, dispensing and lab jobs in one place instead of paper Rx cards and spreadsheet order tracking, without paying for enterprise optical suites.
Operates several stores that share a central lab. Needs consistent Rx capture and a single lab queue across branches, per-store POS and stock, and role separation so head office sees throughput and margins.
Manages surfacing, edging, fitting and QC. Needs a job pipeline with clear stages, technician assignment, target dates and printable bench tickets so nothing stalls between order and collection.
Sells against vision schemes and co-pays. Needs the till to split insurer and patient portions cleanly, route claims to the right journal and reconcile them without manual re-keying.
Buy the license on ecosire.com and download the Optical Store & Lab Management (ERP + POS) module ZIP from your account dashboard.
Extract the ZIP into your Odoo custom addons folder on the server (or upload via Apps > Install from file on Odoo.sh / runbot).
Activate Developer Mode, open Apps, click Update Apps List, search for Optical Store & Lab Management (ERP + POS), and press Install.
Open the new menu, paste your ECOSIRE license key, connect any external credentials (Shopify, Amazon, Stripe, etc.), and save.
Run the built-in connection test, sync your first 10 records, and schedule the recurring cron. Contact support if anything fails.
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Optical-specific fit | Purpose-built for Rx, lenses, lab and optical POS | Whatever you specify and can build | Generic optical features, rarely a full fit | |
| Prescription (Rx) handling | Validated OD/OS model with history and PD/prism | Build from scratch, DIY validation | Basic Rx fields if present | |
| Lens configuration | Sphere/cylinder/axis + coatings priced per variant | Design and build the config logic yourself | Limited preset options | |
| Lab job workflow | Auto-created jobs with staged pipeline and QC | Model and wire the pipeline yourself | Often no lab tracking | |
| Insurance / co-pay split | Scheme split at POS routed to claim journal | Build the split and journals yourself | Rarely supported | |
| Version & edition support | Built for your 17/18/19, Community or Enterprise | Depends on your team | Version support varies, upgrades lag | |
| Ownership & lock-in | Full git repo handover, you own it | You own it (if delivered) | Vendor-licensed, limited source access | |
| Support & delivery | Scoped build, UAT, training, support window | Your own time and risk | Generic vendor support tiers |
No. This is a build-to-order module. ECOSIRE scopes it to your Rx fields, lens catalog, lab stages and insurance schemes, then builds, installs and supports it on your Odoo. There is no instant self-service download.
Typically 2–4 weeks from confirmed scope. After a short scoping call we agree the exact fields, workflows and integrations; that signed-off scope starts the clock. Larger multi-branch or heavy-integration builds can run longer and we tell you upfront.
We build for Odoo 17.0, 18.0 and 19.0, on either Community or Enterprise. During scoping we flag any capability that depends on Enterprise (for example full MRP or advanced accounting) versus what runs on Community, so there are no surprises.
Every build includes a post-go-live support window for defect fixes and adjustments. Because you receive the full git repository, you can maintain it yourself or retain ECOSIRE for version upgrades (e.g. moving from 18.0 to 19.0) and enhancements under a separate agreement.
Yes. The optical models are exposed over Odoo's XML-RPC/JSON-RPC API, so a website Rx-upload or appointment form, an external edger, or another system can read and write orders and prescriptions. We scope the specific integrations you need before building.
You own it. We hand over the complete module source as a git repository with commit history. There is no runtime license lock-in beyond your own Odoo licensing, and you are free to maintain or extend it with any developer.
Access is enforced with Odoo's `ir.model.access.csv` and record rules so front-desk, optometry and lab roles see only what they should. Clinical Rx and insurance splits sit inside your own Odoo database under your existing hosting and security controls — nothing is sent to a third-party service.
A build-to-order Odoo optical retail platform that ties patient prescriptions, frame and lens catalogs, lens configuration and lab job orders into a single POS-driven workflow. ECOSIRE scopes, builds, installs and supports it on your Odoo 17/18/19.