CRM migration
Field-level mapping, validation, and rollback between Quanum Practice Management and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Quanum Practice Management
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Quanum Practice Management and Odoo CRM.
Complexity
BStandard
Timeline
3–7 days
Overview
Quanum Practice Management is a Quest Diagnostics healthcare platform serving physician practices with patient scheduling, insurance billing, and EHR integration. Quest announced the discontinuation of Quanum Practice Solutions in 2023; the system entered read-only mode January 1, 2024. Customers face a forced migration deadline with limited export options: Quanum delivers data as a Microsoft Access database file, CCDAs (patient summaries per 21st Century CURES Act), or QRDA 1 files for quality reporting. No live API is publicly documented, making this migration a file-based extraction project. Odoo CRM stores leads and contacts in crm.lead (for opportunities) and res.partner (for contacts and companies). The platform uses snake_case field naming with no __c suffix convention. Custom fields are created via Settings > Technical > Models in developer mode. The external API uses XML-RPC with free access for Custom Plan customers; no per-request billing exists. Pipeline stages are configured per sales team using Odoo's kanban view. We map Quanum patient demographics to res.partner, appointment records to crm.lead with custom fields for appointment-specific attributes, insurance carriers to res.partner as company-type records, and providers to res.partner as contact-type records. The main manual rebuild work is Odoo's own pipeline stage configuration and any custom CRM views your team needs. We do not migrate billing logic, EHR integration settings, or insurance claim workflows — those are destination-side configuration. The migration runs against Odoo's XML-RPC API after extracting from the Access file or CSV conversion.
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 Quanum Practice Management 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.
Quanum Practice Management
Patient
Odoo CRM
res.partner
1:1Quanum patient records migrate to Odoo res.partner as contact-type records. Fields including first_name, last_name, date_of_birth, social_security_number, address, email, and phone map directly to Odoo's standard partner fields. We preserve the Quanum patient_id as external_identifier on res.partner for traceability and delta-run de-duplication. The Access database treats patient as the central entity with foreign-key links to appointments, insurance records, and providers.
Quanum Practice Management
Patient Insurance
Odoo CRM
res.partner (company) + custom fields on res.partner (contact)
1:1Insurance records attach to a patient as a one-to-many relationship in Quanum. Each insurance carrier (Carrier Name, Member ID, Group Number, Plan Type, Subscriber Relationship) is stored as a custom field on the patient's res.partner record in Odoo. The carrier itself can optionally be created as a separate res.partner (company type) and linked via a many2one field if the practice wants to track carrier contact information separately.
Quanum Practice Management
Appointment
Odoo CRM
crm.lead
1:1Quanum appointments become Odoo CRM leads (opportunities). The appointment_id is stored as a custom field (x_quanum_appointment_id) on crm.lead. Appointment type (New Patient, Follow-up, Procedure, etc.) maps to a custom selection field. Scheduled datetime becomes the expected_closing_date on the lead or a custom scheduled_date field. Appointment status (Scheduled, Completed, No-Show, Cancelled) is mapped to Odoo pipeline stages — teams configure the stage names to match their workflow. Provider is assigned to the lead's user_id by email match against Odoo users.
Quanum Practice Management
Provider
Odoo CRM
res.partner (contact)
1:1Providers (physicians, nurse practitioners, referring doctors) migrate to res.partner as contact-type records. The provider's name maps to partner name, NPI number to a custom NPI field (x_npi), and specialty to a custom specialty field. Referring doctors are flagged with a custom is_referring_doctor boolean field so the practice can filter contacts by role. Provider-user assignments in Quanum map to Odoo user accounts by email match.
Quanum Practice Management
Insurance Carrier
Odoo CRM
res.partner (company)
1:1Insurance carriers appear as distinct objects in Quanum's billing module. We map them to res.partner (company type) in Odoo so the practice can maintain carrier contact information, addresses, and plan details separate from patient records. Carrier records can then be linked to patient insurance custom fields via a many2one relationship.
Quanum Practice Management
Appointment Note / Clinical Note
Odoo CRM
crm.lead.description or ir.attachment
1:1Clinical notes attached to an appointment in Quanum are stored as text in the appointment note field. We map these to crm.lead.description for short notes or attach them as ir.attachment records linked to the lead for longer structured content. Odoo does not have a native clinical note equivalent — this is a field-level migration choice the practice confirms before migration.
Quanum Practice Management
Procedure Code
Odoo CRM
Custom field on crm.lead (x_procedure_codes)
1:1Quanum stores CPT and HCPCS procedure codes on appointments. Odoo CRM has no native procedure code field. We create a custom Char or Text field (x_procedure_codes) on crm.lead and populate it with the pipe-delimited list of codes from the Quanum appointment record. If the practice needs structured code tracking, a separate product or custom crm.tag can be configured post-migration.
Quanum Practice Management
Diagnosis Code
Odoo CRM
Custom field on crm.lead (x_diagnosis_codes)
1:1ICD-10 diagnosis codes stored in Quanum appointments map to a custom field (x_diagnosis_codes) on crm.lead in Odoo. The field is created as Char type to accommodate multi-code entries. If the practice wants to filter leads by diagnosis category, a custom selection field with the most common ICD chapters can be added to crm.lead after migration.
Quanum Practice Management
Allergies and Conditions
Odoo CRM
Custom fields on res.partner (x_allergies, x_conditions)
1:1Quanum patient records include structured allergy and condition fields. Odoo res.partner has no native equivalent. We create x_allergies (Text) and x_conditions (Text) custom fields on res.partner and populate them from the Quanum patient record. The practice may want to expand this to a one2many health_record model in Odoo if the data volume is high.
Quanum Practice Management
Appointment Attachment / Document
Odoo CRM
ir.attachment
1:1Documents attached to Quanum appointments (lab results, referral letters, imaging) are exported as files. We re-upload them to Odoo as ir.attachment records linked to the corresponding crm.lead. File size limits in Odoo's file store apply; large files may require Odoo configuration adjustment before migration.
Quanum Practice Management
Lab Order Result
Odoo CRM
ir.attachment + custom fields on crm.lead
1:1Lab order results in Quanum are clinical documents with structured data. Odoo CRM has no native lab result object. We attach lab result PDFs to the corresponding crm.lead as ir.attachment and store key result metadata (order date, result status, ordering provider) in custom fields on the lead. Full lab result interpretation requires Odoo's optional Inventory or Manufacturing modules, which are separate from CRM and require additional configuration.
Quanum Practice Management
Primary Care Provider Link
Odoo CRM
Custom field on res.partner (x_primary_care_provider_id)
1:1Quanum links each patient to a primary care provider via a foreign key. We store the linked provider's Quanum ID in a custom field (x_primary_care_provider_id) on the patient's res.partner. Once the provider records are also migrated to res.partner, this ID can be used to create a many2one link between the patient and their assigned provider in Odoo.
| Quanum Practice Management | Odoo CRM | Compatibility | |
|---|---|---|---|
| Patient | res.partner1:1 | Fully supported | |
| Patient Insurance | res.partner (company) + custom fields on res.partner (contact)1:1 | Fully supported | |
| Appointment | crm.lead1:1 | Fully supported | |
| Provider | res.partner (contact)1:1 | Fully supported | |
| Insurance Carrier | res.partner (company)1:1 | Fully supported | |
| Appointment Note / Clinical Note | crm.lead.description or ir.attachment1:1 | Fully supported | |
| Procedure Code | Custom field on crm.lead (x_procedure_codes)1:1 | Fully supported | |
| Diagnosis Code | Custom field on crm.lead (x_diagnosis_codes)1:1 | Fully supported | |
| Allergies and Conditions | Custom fields on res.partner (x_allergies, x_conditions)1:1 | Fully supported | |
| Appointment Attachment / Document | ir.attachment1:1 | Fully supported | |
| Lab Order Result | ir.attachment + custom fields on crm.lead1:1 | Fully supported | |
| Primary Care Provider Link | Custom field on res.partner (x_primary_care_provider_id)1: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.
Quanum Practice Management gotchas
Product discontinuation creates mandatory migration with no vendor transition support
Access database export requires technical knowledge to interpret
CCDA export scope is limited to clinical summaries, not full records
QRDA I export is specialised and may not map directly to new quality reporting modules
Lab Services Manager is separate and not discontinued—requires coordinated but independent migration
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 data from Quanum Access database or alternative export
We begin by connecting to your Quanum Access database file (or CDCA/QRDA exports if you prefer) and mapping the relational schema — patients, appointments, providers, insurance carriers, and their foreign-key relationships. If the Access file is password-protected or corrupted, we coordinate with your IT team to unlock or repair it. We extract each object to CSV with its foreign keys preserved so the migration tool can resolve relationships during the Odoo load. This step also flags any records with missing required fields (e.g., patients with no last name or appointments with no scheduled date) so you can decide how to handle them before migration.
Configure Odoo CRM custom fields and pipeline stages
Before data loads into Odoo, we create all required custom fields on res.partner and crm.lead via the Odoo interface or directly in the PostgreSQL database. We follow your stage mapping plan to configure pipeline stages that match your appointment workflow. If you have multiple sales teams in Odoo, we confirm which team owns the migrated leads. We also create the carrier and provider res.partner records as company-type and contact-type entries respectively so patient records can link to them via many2one fields. This step requires an Odoo admin account with developer mode access.
Resolve owner and provider assignments by email
Quanum provider and staff assignments map to Odoo user accounts. We match each provider name in the Access database against Odoo users by email address. Unmatched providers are flagged before migration — your team either creates Odoo user accounts for them or assigns their records to a fallback Odoo user. No lead or contact lands in Odoo without an assigned user, ensuring accountability is preserved from the Quanum schedule. For insurance carriers, we match against the res.partner records created in the previous step using the carrier name and payer_id.
Run a sample migration with field-level validation
A representative slice — typically 100–500 records across patients, appointments, carriers, and providers — migrates first. We generate a field-level diff report comparing source values against the Odoo records created, so you can verify custom field population, stage mapping accuracy, and carrier/patient link resolution before the full run. Any mapping corrections (field name errors, stage misassignments, carrier link breaks) are fixed in the migration tool before the full dataset is processed. This step is the last checkpoint before your live data enters Odoo.
Execute full migration with delta-pickup window and rollback capability
The full dataset migrates through Odoo's XML-RPC external API using batched writes to respect any applicable API limits. A delta-pickup window (24–48 hours) captures any records modified in the Access database during the cutover period. An audit log records every insert and update operation. If reconciliation fails — for example, if patient-to-appointment links break or stage assignments are wrong across more than 5% of records — FlitStack AI provides a one-click rollback that reverts the Odoo database to its pre-migration state. You then decide whether to fix the mapping and re-run or accept the partial migration and handle remaining records manually.
Platform deep dives
Quanum Practice Management
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM 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 Quanum Practice Management and Odoo CRM.
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
Quanum Practice Management: Not publicly documented.
Data volume sensitivity
Quanum Practice Management 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 Quanum Practice Management to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Quanum Practice Management 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 Quanum Practice Management
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.