CRM migration
Field-level mapping, validation, and rollback between NeoDeck Holdings and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
NeoDeck Holdings
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between NeoDeck Holdings and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
NeoDeck Holdings operates the NeoMed EHR ecosystem, which stores patient and provider contacts alongside billing and claims workflow data. The platform does not expose a public REST API for bulk record export, so migration requires scoped read access to the NeoMed database or NeoDeck's internal export utilities to extract contacts, organizations, deals, and custom property values. FlitStack AI sequences the extraction to resolve foreign-key dependencies — organizations load first as res.partner records, then contacts attach via partner_id, then deals attach as crm.lead records. Custom properties (specialty, payer relationships, insurance plan identifiers) migrate as custom.char, custom.selection, or custom.many2one fields on the appropriate Odoo model. NeoDeck's internal notes and communication logs map to Odoo mail.message records with original timestamps and author IDs preserved. Workflows, automations, and billing logic do not migrate — those are rebuilt in Odoo's Studio automation tools post-migration. The Odoo XML-RPC API (jsonrpc endpoint) handles record creation; rate limits are respected to avoid throttling during large-volume passes.
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 NeoDeck Holdings object lands in Odoo CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
NeoDeck Holdings
Patient Contact
Odoo CRM
res.partner
1:1NeoDeck patient contact records map to Odoo res.partner entries. Each partner is created as an individual contact with type='contact', preserving the patient's demographic information including name components (firstname, lastname), address details, phone numbers, and email. Any custom clinical properties stored in NeoDeck (such as date of birth, risk tier, or referral source) migrate as x_ prefixed custom fields on the res.partner record, ensuring all patient context carries forward into Odoo without data loss.
NeoDeck Holdings
Provider Organization
Odoo CRM
res.partner
1:1NeoDeck provider organization records (including clinics, hospitals, and group practices) map to Odoo res.partner entries created with type='contact' and is_company=True to designate them as company records. Each organization partner preserves the provider's name, website, and primary contact information. Provider-specific attributes such as NPI number, medical specialty, and billing address are stored as custom fields on the company partner record, maintaining the clinical context of each organization in Odoo's CRM.
NeoDeck Holdings
Insurance Payer Record
Odoo CRM
res.partner
1:1NeoDeck insurance payer entities (insurance companies, plan administrators) map to Odoo res.partner records with a custom partner_type='payer' tag. Odoo does not have a native payer concept, so we create a custom selection field (x_payer_type) to distinguish payers from clinical contacts and sales accounts.
NeoDeck Holdings
Patient-to-Payer Link
Odoo CRM
res.partner (custom relation)
1:1NeoDeck stores the relationship between a patient and their insurance payer (plan name, member ID, group number) as a property on the contact. These map to custom fields on the patient res.partner record: x_insurance_plan (char), x_member_id (char), x_group_number (char), x_payer_partner_id (many2one to the payer partner).
NeoDeck Holdings
Provider Deal / Service Agreement
Odoo CRM
crm.lead
1:1NeoDeck deal records (including service agreements, licensing contracts, and pipeline opportunities) map to Odoo crm.lead records created with type='opportunity' to distinguish them from raw leads. The crm.lead.name field captures the deal title or description from NeoDeck, planned_revenue maps directly from the deal amount field, and date_deadline corresponds to the target close date. Additional deal-level custom properties such as contract type or implementation milestones also migrate to custom fields on the crm.lead record.
NeoDeck Holdings
Deal Stage
Odoo CRM
crm.lead.stage_id
1:1NeoDeck deal status strings (e.g., Prospecting, Proposal, Under Review, Won, Lost) map via value-by-value lookup to Odoo stage_id records. Probability percentages from Odoo's stage configuration are applied per stage. We create the stage records in the target Odoo database before migration runs.
NeoDeck Holdings
Owner / Responsible Provider
Odoo CRM
crm.lead.user_id
1:1NeoDeck owner (sales rep, account manager, or assigned provider) resolves by email match against Odoo res.users. Unmatched owners are flagged before migration; the customer either pre-creates Odoo users or assigns to a fallback user_id. No crm.lead lands without a responsible user.
NeoDeck Holdings
NeoDeck Custom Properties (Contact-level)
Odoo CRM
res.partner custom fields
1:1NeoDeck custom properties on contacts (e.g., clinical specialty, NPI number, referral source, patient risk tier) migrate as x_ prefixed custom fields on res.partner. Odoo Community requires Developer Mode to create fields; Enterprise exposes a Custom Fields UI. FlitStack delivers a field-creation script as part of the migration package.
NeoDeck Holdings
NeoDeck Custom Properties (Deal-level)
Odoo CRM
crm.lead custom fields
1:1NeoDeck deal-level custom properties (such as contract type, license count, implementation milestone flags, and renewal dates) migrate as x_ prefixed custom fields on the crm.lead model. These custom fields preserve the full business context and operational details associated with each opportunity, eliminating the need to reference external systems or maintain separate custom objects in Odoo. The FlitStack migration package includes a custom module manifest that defines all deal-level custom fields before migration execution.
NeoDeck Holdings
Communication Log / Clinical Note
Odoo CRM
mail.message
1:1NeoDeck appointment logs, clinical notes, and internal communication entries map to Odoo mail.message records attached to the relevant res.partner or crm.lead. Original author_id (resolved by email match to res.users), create_date, and body text are preserved. Attachments re-upload to Odoo ir.attachment.
NeoDeck Holdings
NeoDeck Attachments
Odoo CRM
ir.attachment
1:1Documents attached to NeoDeck patient records, provider records, or deals migrate to Odoo ir.attachment linked to the corresponding res.partner or crm.lead record. File content is Base64-encoded and uploaded via xmlrpc. Odoo's default 25MB per-file limit is enforced; files exceeding this are flagged for manual handling.
NeoDeck Holdings
NeoDeck User / Staff Account
Odoo CRM
res.users
1:1NeoDeck user accounts (providers, billing staff, admin) do not map to Odoo res.users in the CRM migration scope. Staff who will use Odoo CRM must be provisioned separately in the target Odoo instance. NeoDeck user IDs are stored on records as x_source_user_id for traceability.
| NeoDeck Holdings | Odoo CRM | Compatibility | |
|---|---|---|---|
| Patient Contact | res.partner1:1 | Fully supported | |
| Provider Organization | res.partner1:1 | Fully supported | |
| Insurance Payer Record | res.partner1:1 | Fully supported | |
| Patient-to-Payer Link | res.partner (custom relation)1:1 | Fully supported | |
| Provider Deal / Service Agreement | crm.lead1:1 | Fully supported | |
| Deal Stage | crm.lead.stage_id1:1 | Fully supported | |
| Owner / Responsible Provider | crm.lead.user_id1:1 | Fully supported | |
| NeoDeck Custom Properties (Contact-level) | res.partner custom fields1:1 | Fully supported | |
| NeoDeck Custom Properties (Deal-level) | crm.lead custom fields1:1 | Fully supported | |
| Communication Log / Clinical Note | mail.message1:1 | Fully supported | |
| NeoDeck Attachments | ir.attachment1:1 | Fully supported | |
| NeoDeck User / Staff Account | 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.
NeoDeck Holdings gotchas
No public API requires coordinated export with customer service
Insurance payer IDs require manual cross-reference mapping
Cloud and client/server deployments have different export paths
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
Extract NeoDeck data with scoped read access
FlitStack AI coordinates with the NeoDeck customer to obtain either a CSV export via NeoDeck's internal export tool or a read-only database connection to the NeoMed instance. We extract patient contacts, provider organizations, insurance payer records, deals, and communication logs in dependency order. Any missing foreign-key IDs are reconstructed by matching on name + email + NPI number. The extraction audit log records every record pulled, its source timestamp, and any deduplication decisions made during the export phase.
Design Odoo custom field schema and stage configuration
Before data lands, the Odoo admin installs a custom module manifest (provided by FlitStack) that defines all x_ prefixed custom fields required: x_npi_number, x_date_of_birth, x_insurance_plan, x_member_id, x_group_number, x_payer_type, x_contract_type, x_original_create_date, and x_source_record_id on the relevant models. FlitStack also creates the crm.lead.stage records matching NeoDeck's deal stage names and assigns probability percentages per stage. This step runs in parallel with the extraction phase so the target Odoo schema is ready before validation.
Resolve owner and contact matches by email
NeoDeck assigned owner emails are matched against Odoo res.users by email. Unmatched owners are flagged with the full email address so the Odoo admin can pre-create the user or assign a fallback user before the migration run. Patient and provider contact emails are matched against res.partner by email address — duplicates are flagged for the admin to specify a merge rule (most recent modification wins by default). Insurance payer names are matched against the payer partner set created in Step 2 to populate x_payer_partner_id on patient records.
Run sample migration with field-level diff
A representative slice of 100–300 records (spanning patient contacts, provider organizations, a payer or two, deals at each stage, and a sample of communication logs) migrates first. FlitStack AI generates a field-level diff comparing every source field value against the destination Odoo field value. The admin reviews the diff to verify custom field mapping, stage assignment, partner linkage, and owner resolution before the full run commits. Any mapping rule corrections are applied to the migration configuration before proceeding.
Execute full migration with delta-pickup cutover window
The full migration runs in sequenced batches: organization partners, then individual contacts, then insurance payers, then deals, then communication logs. A 24–48 hour delta-pickup window opens simultaneously — any NeoDeck record modified or created during the migration window is captured and applied as a final delta pass. The audit log records every operation (create, update, skip, flag). If reconciliation fails, one-click rollback reverts all destination records created during the migration run. The admin receives a post-migration summary report with record counts, error counts, and a list of flagged records requiring manual review.
Platform deep dives
NeoDeck Holdings
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a manual workaround.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across NeoDeck Holdings and Odoo CRM.
Object compatibility
1 of 8 objects need a manual workaround.
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
NeoDeck Holdings: Not publicly documented.
Data volume sensitivity
NeoDeck Holdings 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 NeoDeck Holdings to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your NeoDeck Holdings to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave NeoDeck Holdings
Other ways to arrive at Odoo CRM
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.