ERP migration
Field-level mapping, validation, and rollback between Flectra and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Flectra
Source
Odoo ERP
Destination
Compatibility
10 of 10
objects map 1:1 between Flectra and Odoo ERP.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Flectra to Odoo ERP is the most structurally direct migration in the open-source ERP space because Flectra is a fork of Odoo and both platforms share the same ORM model names, field conventions, and two-level product architecture. The principal technical complexity is not schema translation but API protocol translation: Flectra exposes only an XML-RPC External API while Odoo supports both XML-RPC and JSON-RPC. We implement a discovery script that introspects the Flectra database via ir.model.fields to enumerate every standard and custom field before any data moves, ensuring that no x_ prefixed extension fields are silently dropped during export. We do not migrate Workflows, Automation Rules, or Report definitions; these are Odoo-specific and require a separate admin rebuild. Custom Flectra modules without Odoo equivalents are flagged during discovery and scoped as a post-migration cleanup item.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Flectra object lands in Odoo ERP, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Flectra
res.partner (individual)
Odoo ERP
res.partner
1:1Flectra and Odoo share the same res.partner model for individual contacts. The name, email, phone, street, city, country_id, and parent_id fields map 1:1. The is_company boolean distinguishes companies from individuals. We resolve the parent_id lookup (linking a contact to its company) before inserting child contact records so that the Many2one constraint is satisfied at ORM insert time rather than causing a foreign-key violation.
Flectra
res.partner (company subtype)
Odoo ERP
res.partner
1:1Companies are a subtype of res.partner flagged by is_company = True. The website, vat, street, city, country_id, and email fields map directly. The child_ids relation linking individual contacts to their parent company migrates after the company records are inserted. Flectra's industry codes and category_id (tags) map to Odoo's same fields using the same ir.model.data external IDs where possible.
Flectra
sale.order
Odoo ERP
sale.order
1:1Flectra's sale.order and sale.order.line map directly to Odoo equivalents with identical field names for order reference, partner_id, date_order, state, and currency_id. The order line product_id, product_uom_qty, price_unit, and discount transfer directly. We sequence sale.order inserts before sale.order.line inserts so that the order_id Many2one constraint is satisfied upfront.
Flectra
account.move (customer invoice)
Odoo ERP
account.move
1:1Flectra account.move records with move_type='out_invoice' map to Odoo account.move of the same type. Flectra's invoice_date, partner_id, invoice_line_ids, amount_total, and payment_state transfer directly. We explicitly map Flectra's payment_state values (state_posted, state_pending) to Odoo's payment_state enumeration during the transform phase. Journal ID resolution is required since Odoo journals are organisation-specific.
Flectra
product.template
Odoo ERP
product.template
1:1Both Flectra and Odoo use product.template as the product master record with name, type (service vs consumble vs stockable), list_price, standard_price, categ_id, and taxes fields. The template-level fields migrate first. We preserve the product.template-to-product.product variant relationship by extracting the variant attribute values from Flectra's product.attribute.line and creating matching product.attribute and product.attribute.value records in Odoo before variant creation.
Flectra
product.product (variants)
Odoo ERP
product.product
1:1Flectra's product.product records (stock-keeping variants) map directly to Odoo product.product. The product_tmpl_id links each variant to its template. We insert variants after template creation and before any stock valuation or BOM records are migrated, ensuring the product_tmpl_id Many2one is resolvable at insert time.
Flectra
purchase.order
Odoo ERP
purchase.order
1:1Flectra purchase.order and purchase.order.line map to Odoo equivalents with the same field names for vendor (partner_id), order date, state, and line-level product_uom_qty and price_unit. Flectra's receipt status flags are mapped to Odoo's picking_ids state values. We insert purchase orders before the related incoming pickings are created so that the picking_ids relation resolves correctly.
Flectra
project.project
Odoo ERP
project.project
1:1Flectra project.project maps directly to Odoo project.project with name, partner_id, active, and privacy_visibility fields. We insert project records before task migration so that the project_id Many2one on project.task is satisfied. Flectra's analytic_account_id maps to Odoo's analytic_distribution field on projects with analytic plans migrated in parallel.
Flectra
project.task
Odoo ERP
project.task
1:1Flectra project.task migrates to Odoo project.task with stage_id, user_id (assignee), planned_hours, effective_hours, date_deadline, and priority preserved. Sub-tasks are nested via the parent_id relation, which requires parent task insertion to precede child task insertion. We sequence parent tasks first, then child tasks, then grandchildren, to satisfy the recursive Many2one chain.
Flectra
hr.employee
Odoo ERP
hr.employee
1:1Flectra hr.employee maps to Odoo hr.employee with department_id, job_id, work_email, work_phone, and bank_account_id fields preserved. We insert departments and job positions before employees so that the Many2one foreign keys resolve at insert time. Salary and payroll history residing in Flectra's payroll module (typically Odoo Enterprise on the source) is not migrated because it requires a separate payroll configuration on the destination Odoo instance.
| Flectra | Odoo ERP | Compatibility | |
|---|---|---|---|
| res.partner (individual) | res.partner1:1 | Fully supported | |
| res.partner (company subtype) | res.partner1:1 | Fully supported | |
| sale.order | sale.order1:1 | Fully supported | |
| account.move (customer invoice) | account.move1:1 | Fully supported | |
| product.template | product.template1:1 | Fully supported | |
| product.product (variants) | product.product1:1 | Fully supported | |
| purchase.order | purchase.order1:1 | Fully supported | |
| project.project | project.project1:1 | Fully supported | |
| project.task | project.task1:1 | Fully supported | |
| hr.employee | hr.employee1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
Flectra gotchas
XML-RPC API format requires non-standard serialization
No official migration utility or dedicated export tooling
Community edition lacks functional support and hosting
Large imports can trigger timeouts without batching
Odoo ERP gotchas
No rollback for CSV imports
External ID conflicts on re-import
Many2many field encoding in CSV imports
Large export timeouts require batching
Version schema drift between Odoo releases
Pair-specific challenges
Migration approach
Discovery and schema introspection
We connect to the customer's Flectra instance via XML-RPC using database credentials and uid authentication. We run a discovery script that calls ir.model.fields and ir.model across all installed modules, enumerating every standard and custom field (x_ prefixed), their types, required flags, and the ir.model.relation table for relational metadata. This produces a complete field map and object dependency graph for the migration. We also capture the installed Flectra version (Community vs Professional) to adjust scope for any Enterprise-only features.
Custom XML-RPC adapter development
We implement a Flectra XML-RPC client adapter in the migration engine that handles session authentication (common/authenticate), method calls (execute_kw), and XML response parsing. The adapter exposes a record-batch extraction interface that the migration engine calls with model name, domain filter, and offset-limit pagination. The adapter is instance-specific because Flectra Community edition API behaviour may vary by version and installed module set.
Schema alignment and destination field map
We compare the Flectra field map against the target Odoo ERP instance's ir.model.fields to identify field names that differ, field types that require casting (e.g., Flectra selection fields mapped to Odoo many2one), and any Flectra fields with no Odoo equivalent. Custom x_ fields are marked for Odoo custom field creation before migration begins. We design the insert dependency order using the relational graph so that parent records are created before any child record that references them.
Sandbox migration and reconciliation
We run a full migration into the customer's Odoo Sandbox (or a clean Odoo instance if no sandbox is available) using production-like data volume. The customer's administrator reviews record counts, spot-checks 20-30 records across each object for data integrity, and validates that the Odoo decimal precision, currency rounding, and date formats match the source. Any mapping corrections, field type adjustments, or custom field additions are applied before production migration begins.
Production migration in dependency order
We run production migration in insert dependency order: res.partner companies first (to satisfy parent_id lookups), then individual contacts; product.template before product.product variants; sale.order before sale.order.line; account.move invoices before invoice lines; project.project before project.task with recursive parent-child ordering; hr.employee after department and job positions. Each phase emits a row-count reconciliation report before the next phase begins. Large phases (invoices, order lines) use chunked XML-RPC batches with checkpoint logging.
Cutover, validation, and module rebuild handoff
We freeze Flectra writes during the cutover window, run a final delta migration of any records modified during the migration period, then enable Odoo ERP as the system of record. We deliver a written inventory of any Flectra-specific custom modules that require porting or replacement, the full automation rule list requiring Odoo server action rebuild, and a custom field index mapping every Flectra x_ field to its Odoo equivalent. We support a one-week hypercare window for reconciliation issues. Workflows, automation rules, and scheduled server actions do not migrate as code; these are handed off for the customer's Odoo administrator or a certified Odoo partner to rebuild.
Platform deep dives
Flectra
Source
Strengths
Weaknesses
Odoo ERP
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Flectra and Odoo ERP.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Flectra: Not publicly documented.
Data volume sensitivity
Flectra doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Flectra to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Flectra to Odoo ERP migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Flectra
Other ways to arrive at Odoo ERP
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.