CRM migration
Field-level mapping, validation, and rollback between DGL Practice Manager and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
DGL Practice Manager
Source
Odoo CRM
Destination
Compatibility
10 of 10
objects map 1:1 between DGL Practice Manager and Odoo CRM.
Complexity
BStandard
Timeline
7–14 days
Overview
DGL Practice Manager is a specialist medical practice management suite used by UK and Irish consultants, practice managers, and medical secretaries. It stores patient demographics, appointment bookings, practitioner schedules, clinical document metadata, EDI insurance claims, and UK/NHS billing codes in a tightly coupled medical-workflow model. Odoo CRM is a general-purpose open-source ERP whose CRM module is built around crm.lead, crm.lead, and res.partner — it has no native concept of appointment slots, EDI claims, NHS billing codes, or insurer policy references. These healthcare-specific structures require custom field creation in Odoo before any data can land correctly. We map patient demographics directly to Odoo res.partner (with address fields on res.partner.address), appointment slots to calendar.event with custom fields for practitioner and slot type, practitioner records to res.users, and invoices to account.move. EDI insurance submissions and NHS billing codes have no native Odoo equivalent — we preserve them as a custom object (x_dgl_edi_claim) with XML reference data exported for your Odoo developer to rebuild EDI automation. DGL workflows, EDI triggers, and billing automation do not migrate and must be rebuilt in Odoo's studio.workflow or ir.actions.server. Our migration uses sequenced API reads against DGL, type-aware field mapping, custom field pre-creation in Odoo, and a 24–48 hour delta-pickup window after cutover to capture in-flight appointments and invoice submissions. An audit log tracks every record migrated, and one-click rollback is available if reconciliation surfaces unexpected gaps.
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 DGL Practice Manager 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.
DGL Practice Manager
Patient
Odoo CRM
res.partner
1:1DGL patient demographics (name, date of birth, contact details, address) map directly to Odoo res.partner. We store the patient's NHS number or private health membership as a custom Char field since Odoo has no native NHS reference field. DGL's patient photo, if stored, is re-uploaded as an ir.attachment linked to the partner record.
DGL Practice Manager
Appointment / Slot
Odoo CRM
calendar.event
1:1DGL appointment slots have a practitioner, patient, slot type (initial, follow-up, procedure), start/end time, and booked/free status. We map to Odoo calendar.event with user_id = practitioner (resolved by email), partner_ids = patient, start/datetime from DGL slot times, and custom fields for slot_type and appointment_status. Odoo's kanban stage for calendar events is not used — the event records carry all slot metadata in custom fields.
DGL Practice Manager
Practitioner / User
Odoo CRM
res.users
1:1DGL practitioners (consultants, secretaries, admin staff) map to Odoo res.users. Name, email, role, and specialty migrate. DGL's practitioner diary configuration is noted as a setup reference for Odoo calendar access rights — your Odoo admin assigns calendar visibility per user based on this mapping. Inactive practitioners become inactive Odoo users.
DGL Practice Manager
Invoice
Odoo CRM
account.move
1:1DGL invoices (patient invoices, insurer bills, NHS submissions) map to Odoo account.move with type='out_invoice'. Invoice number, date, amount, tax, and line items migrate. DGL's EDI submission reference attaches as a custom Char field on the account.move record. Status mapping: DGL submitted → Odoo posted; DGL paid → Odoo paid; DGL rejected → Odoo open with a note.
DGL Practice Manager
Insurer / Payer
Odoo CRM
res.partner (company)
1:1DGL insurer records map to Odoo res.partner with partner_type='company' and a custom insurer_reference field. The insurer's billing contact (email, address) migrates to the partner's contact records. Multiple insurer contacts per company map to multiple res.partner.contact records linked to the same parent company partner.
DGL Practice Manager
Document / Letter
Odoo CRM
documents.document + ir.attachment
1:1DGL clinical letters, reports, and dictated documents store file metadata (filename, author, date, patient link) but not the actual file binary in most DGL API exports. We migrate the metadata as documents.document records in Odoo with the original filename and author preserved. Your team re-uploads the actual document files to Odoo Documents post-migration using the metadata list as a reference guide.
DGL Practice Manager
EDI Claim / Submission
Odoo CRM
Custom Object (x_dgl_edi_claim)
1:1DGL EDI insurance submissions (insurer ID, policy number, claim amount, status, submission date) have no Odoo native equivalent. We create x_dgl_edi_claim as a custom model in Odoo with fields mirroring DGL's EDI record: insurer_id, policy_number, claim_amount, claim_status, submission_date, and original_xml (stored as text for reference). Odoo's ir.actions.server can be configured to regenerate EDI submissions from this data.
DGL Practice Manager
NHS / Billing Code
Odoo CRM
Custom Char / Selection field
1:1DGL stores NHS service codes and billing codes per appointment or invoice. Odoo has no native NHS code field. We create a custom Char field (nhs_billing_code) on calendar.event and a selection field on account.move.line (billing_code_type) with the relevant code values. Your Odoo admin populates the pick-list values based on the NHS code set used in your DGL configuration.
DGL Practice Manager
Clinical Note / Dictation Reference
Odoo CRM
mail.message / Note
1:1DGL clinical notes and dictation references (author, date, patient, content snippet) migrate as Odoo mail.message records linked to the patient res.partner for audit trail continuity. The full dictated content, if exportable, stores as plain text in the message body. DGL's Microsoft Word letter template outputs are not portable — we provide a document mapping guide for your admin to recreate them in Odoo's report designer.
DGL Practice Manager
Insurance Policy
Odoo CRM
Custom Object (x_dgl_insurance_policy)
1:1DGL stores insurer policy details per patient (policy number, coverage type, expiry, excess amount). Odoo has no native insurance policy object. We create x_dgl_insurance_policy as a custom model linked to res.partner (patient) with fields: policy_number, insurer_id, coverage_type, excess_amount, renewal_date, and status. This provides the audit trail for insurance billing even though EDI submissions are rebuilt separately.
| DGL Practice Manager | Odoo CRM | Compatibility | |
|---|---|---|---|
| Patient | res.partner1:1 | Fully supported | |
| Appointment / Slot | calendar.event1:1 | Fully supported | |
| Practitioner / User | res.users1:1 | Fully supported | |
| Invoice | account.move1:1 | Fully supported | |
| Insurer / Payer | res.partner (company)1:1 | Fully supported | |
| Document / Letter | documents.document + ir.attachment1:1 | Fully supported | |
| EDI Claim / Submission | Custom Object (x_dgl_edi_claim)1:1 | Fully supported | |
| NHS / Billing Code | Custom Char / Selection field1:1 | Fully supported | |
| Clinical Note / Dictation Reference | mail.message / Note1:1 | Fully supported | |
| Insurance Policy | Custom Object (x_dgl_insurance_policy)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.
DGL Practice Manager gotchas
Per-invoice insurer submission charges inflate costs silently
Extortionate data extraction fee creates lock-in barrier
No public API means migration relies on DGL's goodwill
SQL infrastructure update in progress may alter the schema
Document generation depends on Microsoft Word on the local machine
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
Map DGL objects and pre-create Odoo custom fields
We audit every DGL object that will migrate — patient records, appointment slots, practitioners, invoices, insurers, insurance policies, EDI claims, and document metadata. For each object, we identify the Odoo destination model and flag any custom fields Odoo needs before data can land: x_nhs_number on res.partner, x_slot_type on calendar.event, x_edi_reference on account.move, and the x_dgl_edi_claim and x_dgl_insurance_policy custom models. We deliver a custom field setup checklist your Odoo admin runs before migration begins. We also extract DGL's EDI code list and NHS billing code values for populating Odoo Selection field options.
Resolve practitioners by email and set up Odoo user accounts
DGL practitioner records map to Odoo res.users. We match each DGL practitioner by email address against existing Odoo users. Unmatched practitioners are flagged — your team creates Odoo user accounts for them or assigns their calendar.events to a fallback practitioner before the appointment migration phase. Practitioner specialties and GMC numbers are stored as custom fields on res.users for scheduling reference. Inactive DGL practitioners become inactive Odoo users.
Migrate in dependency order: patients → practitioners → appointments → invoices → EDI
We sequence the migration so foreign keys resolve correctly: res.partner records (patients and insurers) are created first, res.users (practitioners) second, then calendar.event records with practitioner user_id and patient partner_ids resolved from the first two phases. account.move invoices land next with the patient res.partner linked. x_dgl_edi_claim and x_dgl_insurance_policy records are created last since they reference both patients and invoices. DGL document metadata migrates as documents.document records throughout this sequence.
Run sample migration with field-level diff and appointment slot validation
A representative slice — typically 50–200 records across patients, appointments, practitioners, invoices, and EDI claims — migrates first. We generate a field-level diff comparing source values against destination field values so you can verify practitioner email resolution, NHS billing code mapping, appointment slot time accuracy, and EDI reference attachment to account.move records. Appointment slot validation is the highest-priority check for medical practices: we confirm that each calendar.event start/stop time and x_slot_type value matches the source DGL slot.
Execute full migration with delta-pickup window and audit log
The full migration runs against your Odoo instance with every record operation logged. A delta-pickup window of 24–48 hours after cutover captures any appointments booked, invoices raised, or patient records modified in DGL during the migration run. Audit log records every migrated record with source ID and destination ID for full traceability. One-click rollback reverts all migrated records if reconciliation surfaces unexpected gaps — particularly important for EDI claim continuity where partial data could disrupt insurer submissions.
Platform deep dives
DGL Practice Manager
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 DGL Practice Manager 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
DGL Practice Manager: Not publicly documented.
Data volume sensitivity
DGL Practice Manager 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 DGL Practice Manager to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your DGL Practice Manager 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 DGL Practice Manager
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.