ERP migration
Field-level mapping, validation, and rollback between Tuhund and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Tuhund
Source
Odoo ERP
Destination
Compatibility
11 of 12
objects map 1:1 between Tuhund and Odoo ERP.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Tuhund to Odoo ERP is a structural migration that resolves fundamental differences in how the two platforms organize business entities. Tuhund uses a multi-branch architecture where the same customer, product, or user can exist with different configurations per branch; Odoo uses a multi-company model with separate database records and user access scoping per company. We resolve that gap during scoping by mapping Tuhund branches to Odoo companies or to a single company with branch stored as a custom field, depending on the customer's operational model. Sales quotations, proforma invoices, and commercial invoices carry line-item detail that we preserve as Odoo sale order and account move lines. Service requests and job cards map to Odoo Helpdesk tickets or Project tasks. Approval workflows scoped to Tuhund departments do not migrate; we deliver a written inventory for the customer's Odoo admin to rebuild as approvals and server actions. Tuhund's attachment listing API does not expose all attachment types, so we audit the attachment export during scoping to flag any file types that require manual retrieval.
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 Tuhund 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.
Tuhund
Company / Person
Odoo ERP
Contact
1:1Tuhund maintains separate 'company' and 'person' records for B2B and B2C contacts. We map Tuhund Company records to Odoo Contact with the is_company checkbox enabled and the company_name field populated from Tuhund's company_name. Tuhund Person records map to Odoo Contact with is_company disabled. The Tuhund contact type (B2B vs B2C) is preserved in a custom field tuhund_contact_type__c for segmentation and reporting in Odoo.
Tuhund
Branch
Odoo ERP
Company or Res.partner field
lossyTuhund's multi-branch architecture means customers, products, and users can have different configurations per branch. We map branches to Odoo Company records if the customer needs strict data isolation per entity (separate Chart of Accounts, warehouse, or user access). If the customer runs a single legal entity with branch-level reporting tags, we map branch to a custom tuhund_branch__c picklist field on Contact, Product, and Stock Quant. The choice is made during scoping based on how Tuhund's branch data is currently used.
Tuhund
Department
Odoo ERP
hr.department
1:1Tuhund departments scope approval workflows on expense claims, purchase orders, and service requests. We export department associations on user records and attach them to hr.employee in Odoo. Approval routing tied to Tuhund departments does not migrate because Odoo Approvals operates on document-level rules rather than department-level hierarchies. We deliver a written inventory of every active approval chain with the recommended Odoo Approvals or server action configuration for the customer's admin to rebuild.
Tuhund
Sales Quotation
Odoo ERP
sale.order
1:1Tuhund Sales Quotations map to Odoo sale.order in draft state. Line items transfer with product reference, quantity, unit of measure, and price. The tuhund_quotation_type__c field distinguishes between standard quotation and proforma invoice so that Odoo sale.order records are flagged accordingly. Sales order confirmation in Odoo is gated as a manual action post-migration; we do not auto-confirm migrated quotations.
Tuhund
Commercial Invoice
Odoo ERP
account.move (Customer Invoice)
1:1Tuhund commercial invoices map to Odoo account.move with move_type='out_invoice'. Invoice headers, line items with tax breakdown, and totals transfer directly. Tax calculation logic is Odoo-side; we preserve the base amounts and tax amounts as separate lines so that Odoo's tax engine can recompute totals during first posting. We flag any rounding differences exceeding 0.01 per line for the customer's accounting team to review post-migration.
Tuhund
Inventory / Product
Odoo ERP
product.product
1:1Tuhund product records map to Odoo product.product with categories mapped to product.category. Stock levels per location transfer to stock.quant records as a static snapshot at migration time. Tuhund material allocation data maps to product MPRouting or product.bom if the customer uses Odoo's manufacturing module; otherwise it is preserved in custom fields for reference. We verify that Tuhund product types (stockable, consumable, service) map correctly to Odoo's product.product type field.
Tuhund
Purchase Order
Odoo ERP
purchase.order
1:1Tuhund purchase orders map to Odoo purchase.order with vendor reference, line items, and GRN (Goods Receipt Note) associations preserved as custom fields. PO status (draft, sent, confirmed, done) maps to Odoo state. Goods Receipt Notes in Tuhund map to Odoo stock.picking records with picking_type set to incoming. We resolve vendor records against the Tuhund company/person contacts before PO import so that partner_id is populated on purchase.order.
Tuhund
Service Request
Odoo ERP
helpdesk.ticket
1:1Tuhund service requests map to Odoo helpdesk.ticket. Request status, priority, assigned technician, and linked customer contact transfer directly. Tuhund warranty information maps to a custom tuhund_warranty__c field on the ticket. If the customer uses Odoo Project instead of Helpdesk for service tracking, we map to project.task with the project scoped to a services project created during schema setup.
Tuhund
Job Card
Odoo ERP
project.task
1:1Tuhund job cards map to Odoo project.task records under a services project. Job card status (open, in progress, closed) maps to Odoo task stage. Technician assignment and time logging migrate to Odoo's timesheet grid if the project is configured for timesheets. Job card-to-service-request linkage is preserved as a custom tuhund_jobcard_id__c field for traceability.
Tuhund
Expense Claim
Odoo ERP
hr.expense.sheet
1:1Tuhund expense claims with item-level detail, approval status, and amounts map to Odoo hr.expense.sheet. Expense items migrate as hr.expense.line records with product, quantity, unit price, and tax. Approval status is not migrated as active approval state because Odoo expense approval is destination-side; we set all migrated expense sheets to draft and deliver an approval-chain inventory for the admin to configure in Odoo. Amount totals reconcile against Tuhund totals before import commits.
Tuhund
Project / Task
Odoo ERP
project.project + project.task
1:1Tuhund project and task hierarchies map to Odoo project.project and project.task. Task assignees, milestones, and parent-child relationships transfer directly. Custom fields at the project level require schema inspection before migration; we inspect the Tuhund field schema during discovery and create matching custom fields in Odoo before any project data moves. Task timesheets migrate to Odoo's timesheet model if the project has timesheet tracking enabled.
Tuhund
User
Odoo ERP
res.users
1:1Tuhund user records carry branch and department associations and role assignments. We export users with their organizational assignments and map them to Odoo res.users. Role mappings are destination-dependent because Tuhund's permission model does not map directly to Odoo's access rights and record rules. We deliver a user-role inventory listing each Tuhund role and recommending the corresponding Odoo access group for the customer's admin to configure post-migration.
| Tuhund | Odoo ERP | Compatibility | |
|---|---|---|---|
| Company / Person | Contact1:1 | Fully supported | |
| Branch | Company or Res.partner fieldlossy | Fully supported | |
| Department | hr.department1:1 | Fully supported | |
| Sales Quotation | sale.order1:1 | Fully supported | |
| Commercial Invoice | account.move (Customer Invoice)1:1 | Fully supported | |
| Inventory / Product | product.product1:1 | Fully supported | |
| Purchase Order | purchase.order1:1 | Fully supported | |
| Service Request | helpdesk.ticket1:1 | Fully supported | |
| Job Card | project.task1:1 | Fully supported | |
| Expense Claim | hr.expense.sheet1:1 | Fully supported | |
| Project / Task | project.project + project.task1:1 | Fully supported | |
| User | res.users1: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.
Tuhund gotchas
Per-customer module configuration creates schema drift
No publicly documented developer API
Long implementation cycles imply long extraction cycles
Geographic vendor presence affects support cadence
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 scoping
We audit the source Tuhund instance across all modules in scope. This includes listing all branches and their data isolation patterns, cataloging custom fields at branch and department level, reviewing invoice and PO document types and line-item counts, identifying active approval chains, mapping service request and job card statuses, and inspecting the attachment export capability. We produce a written scoping document with the recommended Odoo structure (single-company with tags vs multi-company), a complete object and field mapping matrix, an approval chain inventory, and a data-cleanse checklist for any duplicates or inconsistent records identified during the audit.
Schema design and Odoo structure decision
We design the destination Odoo schema based on the scoping output. This includes creating product categories matched to Tuhund's inventory categories, configuring the purchase and sales configuration (multi-company or tag-based), creating any custom fields required for Tuhund metadata (branch, document type, original IDs), setting up the chart of accounts, and configuring the appropriate Odoo apps (Sales, Purchase, Inventory, Accounting, Project, Helpdesk) before any data loads. Schema is deployed into a staging Odoo database for validation before production.
Data cleanse and sample validation
We run a sample import of 50-100 records per object type into the staging Odoo database to verify mapping logic, validate foreign key resolution (Account on Contact, Vendor on PO, Product on Invoice Line), and confirm that Odoo's field validation does not reject records. Any records rejected by Odoo's validation rules are cleaned in Tuhund's source data and re-exported. We also deduplicate contacts by email and company name, and flag any products without a valid category or unit of measure for the customer's admin to resolve before production migration.
Sandbox migration and reconciliation
We run a full migration into the staging Odoo database using production-equivalent data volume. The customer's team reconciles record counts (Contacts in, Invoices in, POs in, Products in, Service Requests in) against Tuhund's source reports, spot-checks 25-50 random records for field-level accuracy, and validates totals on a sample of invoices. The customer signs off the sandbox migration before we proceed to production. Any mapping corrections or data corrections identified during sandbox reconciliation are applied to the migration pipeline before production run.
Production migration in dependency order
We run production migration in record-dependency order: product categories first, then products, then contacts (with branch and department metadata), then purchase orders, then sales orders and invoices, then service requests and job cards, then projects and tasks, then expense claims, then attachments. Each phase emits a row-count reconciliation report. Tuhund write access is suspended during the production migration window to prevent new records from entering the source while migration is in progress.
Cutover, validation, and approval inventory handoff
We freeze Tuhund writes, run a final delta migration of any records created or modified during the migration window, then mark Odoo as the system of record. We deliver the approval chain inventory document and the user-role mapping inventory to the customer's Odoo admin. We do not rebuild Tuhund approval chains as Odoo Approvals configurations; that work is scoped separately and handled by the customer's admin or an Odoo partner. We provide a two-week hypercare window for reconciliation issues discovered by the customer's team during initial Odoo use.
Platform deep dives
Tuhund
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 Tuhund 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
Tuhund: Not publicly documented.
Data volume sensitivity
Tuhund 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 Tuhund to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Tuhund 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 Tuhund
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.