CRM migration
Field-level mapping, validation, and rollback between Criminal Case Management and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Criminal Case Management
Source
Odoo CRM
Destination
Compatibility
11 of 11
objects map 1:1 between Criminal Case Management and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Criminal Case Management systems organize data around matters, parties, and court proceedings — a fundamentally different structure from Odoo CRM's opportunity-centric pipeline model. The source data model typically includes: Cases or Matters (case number, court name, filing date, case status, assigned judge, presiding authority), Parties (client name, opposing counsel, co-defendants, victim/witness records), Party Contacts (addresses, phone numbers, email addresses), Attorneys (assigned counsel, bar numbers, contact details), Documents (pleadings, evidence files, court orders), Notes and Activities (case notes, hearing summaries, attorney communications), and Billing (hourly rates, time entries, total case costs). Some platforms also store custom fields for case type classification, bond amounts, sentencing details, and probation information. Odoo CRM models its core CRM around crm.lead (for leads and opportunities), res.partner (for contacts and companies), crm.opportunity (for deal pipeline stages), and ir.attachment (for documents). Odoo stores custom fields on these models using Odoo Studio — fields use the x_ prefix in database column names. The platform has no native concept of case numbers, court names, or legal party roles. These must be migrated as custom fields on crm.lead, with party roles managed via partner tags or dedicated partner categories. Attorney-to-case relationships require resolving attorney contacts and linking them to the opportunity via a custom many2many field or a dedicated Team Member model. FlitStack AI sequences the migration by first extracting all case records and their associated parties, mapping case metadata to crm.lead custom fields, then resolving attorney contacts to Odoo user records by email match. Documents re-upload to Odoo's ir.attachment with original filenames preserved. We surface all custom fields, document templates, and court-e-filing integrations as items requiring post-migration manual rebuild — and we document them explicitly so nothing falls through the cutover gap.
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 Criminal Case 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.
Criminal Case Management
Case / Matter
Odoo CRM
crm.lead (as Opportunity)
1:1Case records map to crm.lead with type='opportunity'. Case title becomes the opportunity name, case status maps to Odoo stage_id via value mapping, and case number, court name, filing date, and judge name migrate as custom fields (x_case_number, x_court_name, x_filing_date, x_judge_name) on the crm.lead record.
Criminal Case Management
Client Party
Odoo CRM
res.partner
1:1Client party records map directly to res.partner with partner_type='contact'. Client name maps to partner name fields. Address, phone, and email fields migrate directly. The party's role in the case (Plaintiff, Defendant, Victim) is preserved as a custom x_party_role field on the partner record or via res.partner.category assignment.
Criminal Case Management
Opposing Counsel / Co-Counsel
Odoo CRM
res.partner
1:1Attorney and opposing counsel party records map to res.partner with x_bar_number stored as a custom field and x_counsel_role storing the role value (Opposing Counsel, Co-Counsel, Bonding Company). Where available, attorney email resolves to an Odoo user_id via email match so the attorney appears as a team member on the related opportunity.
Criminal Case Management
Witness / Victim Record
Odoo CRM
res.partner
1:1Witness and victim party records map to res.partner with x_party_role set to 'Witness' or 'Victim'. Contact information (address, phone, email) migrates directly. Witness statements or special notes attached to the witness record migrate as notes on the partner or as custom fields if the source stores structured witness data.
Criminal Case Management
Attorney Assignment
Odoo CRM
crm.lead — Team Member / user_id
1:1Attorney-to-case assignments map to the crm.lead record via a custom many2many field (x_attorney_ids) linking to res.partner records of attorney type. If the attorney has an Odoo user account, their user_id is also linked so their name appears in the opportunity's Salesperson field. Multi-attorney assignments require splitting to multiple linked records in the many2many field.
Criminal Case Management
Document / Attachment
Odoo CRM
ir.attachment
1:1Case documents (pleadings, evidence files, court orders, correspondence) re-upload to Odoo ir.attachment with res_model='crm.lead' and res_id pointing to the migrated opportunity record. Original filenames and MIME types are preserved. File size limits from the source platform are handled by chunking large files during the migration run.
Criminal Case Management
Case Note / Activity Log
Odoo CRM
crm.lead — Notes / mail.message
1:1Case notes and hearing summaries map to crm.lead notes (mail.message with subtype 'comment'). Each note retains its original create_date and author information. If the source platform records note type (internal memo vs. court filing note), the type is preserved as a custom x_note_type field on the message record.
Criminal Case Management
Court Date / Calendar Event
Odoo CRM
calendar.event
1:1Scheduled court dates map to calendar.event records linked to the crm.lead via x_case_id custom field. The event name uses the case number and hearing type. Start and stop times come from the source court date fields. If the source includes court room or virtual hearing link, those migrate as x_court_room and x_hearing_link custom fields on the event.
Criminal Case Management
Billing / Time Entry
Odoo CRM
crm.lead — Custom Financial Fields
1:1Billable hours, hourly rates, and total case costs migrate as custom monetary fields (x_hourly_rate, x_total_hours, x_total_case_cost) on crm.lead. Odoo Invoicing handles actual billing post-migration. Trust account balances are not migrated — those require separate Odoo Accounting configuration. Time entries are preserved as a reference dataset for rebuilding in Odoo.
Criminal Case Management
Custom Case Type Field
Odoo CRM
crm.lead — x_case_type
1:1Source-specific case type pick-list values (Felony, Misdemeanor, DUI, Drug, Violent Crime, etc.) map to corresponding values in a custom x_case_type pick-list on crm.lead. Values with no direct Odoo equivalent are preserved as-is and flagged for admin review — often used for filtering and reporting by case classification in Odoo views.
Criminal Case Management
Probation / Sentencing Data
Odoo CRM
crm.lead — Custom Fields
1:1Probation start/end dates, sentencing details, and supervision level migrate as custom datetime and selection fields (x_probation_start, x_probation_end, x_supervision_level) on crm.lead. These require Odoo Studio setup before migration. Where the source stores compliance check dates, those map to scheduled activities on the opportunity record in Odoo.
| Criminal Case Management | Odoo CRM | Compatibility | |
|---|---|---|---|
| Case / Matter | crm.lead (as Opportunity)1:1 | Fully supported | |
| Client Party | res.partner1:1 | Fully supported | |
| Opposing Counsel / Co-Counsel | res.partner1:1 | Fully supported | |
| Witness / Victim Record | res.partner1:1 | Fully supported | |
| Attorney Assignment | crm.lead — Team Member / user_id1:1 | Fully supported | |
| Document / Attachment | ir.attachment1:1 | Fully supported | |
| Case Note / Activity Log | crm.lead — Notes / mail.message1:1 | Fully supported | |
| Court Date / Calendar Event | calendar.event1:1 | Fully supported | |
| Billing / Time Entry | crm.lead — Custom Financial Fields1:1 | Fully supported | |
| Custom Case Type Field | crm.lead — x_case_type1:1 | Fully supported | |
| Probation / Sentencing Data | crm.lead — Custom Fields1: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.
Criminal Case Management gotchas
Limited export options for bulk data extraction
Annual subscription billing with prorated cancellation
Custom field schemas vary by account and plan
Document blob extraction may require manual intervention
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
Audit source data model and export case-party relationship graph
FlitStack begins every Criminal Case Management migration with a structured data audit. We extract a full export of case records, party records, attorney assignments, document metadata, and activity logs from the source platform. For platforms with limited API access, we use the best available export method — direct database query, CSV export, or XML dump — and document the extraction approach. The audit report identifies custom fields, pick-list value sets, party-role taxonomies, and document attachment paths that will require Odoo-side configuration before the migration run.
Design Odoo CRM schema — custom fields, stage pipelines, and partner categories
Before any data moves, FlitStack delivers an Odoo configuration plan based on the source audit. This plan specifies every custom field to create via Odoo Studio (x_case_number, x_court_name, x_filing_date, x_judge_name, x_party_role, x_bar_number, x_case_type, x_bond_amount, x_probation_end, etc.), the stage pipeline structure per case type, and the res.partner.category entries for party-role taxonomy. Custom many2many fields for attorney-to-opportunity linking are also specified at this stage. Your Odoo admin (or FlitStack) creates these before the migration run.
Resolve attorney contacts to Odoo users and map parties to res.partner
Attorney records from the source are matched to Odoo users by email address — if an attorney has an Odoo user account, their user_id is linked to the migrated opportunity so they appear as the assigned salesperson. Unmatched attorneys are flagged in a pre-migration report; your team either creates their Odoo accounts before the run or assigns them to a fallback user. Party records (clients, witnesses, opposing counsel) are resolved to res.partner, with duplicate detection by email to prevent redundant contact creation.
Run a sample migration with field-level diff for case records and party links
A representative slice — typically 50–200 case records spanning multiple case types, party roles, and document attachment counts — migrates first. FlitStack generates a field-level diff showing every mapped value in the source versus what landed in Odoo: case number, court name, filing date, stage mapping, attorney links, party role assignments, and document filenames. You verify the diff before the full run commits. Any incorrect mappings are corrected in the migration plan before the bulk load begins.
Execute full migration with delta-pickup window and audit log
The full migration loads all case records, party contacts, attorney assignments, documents, and activities into Odoo CRM. A delta-pickup window (24–48 hours after the primary load) captures any records modified or created in the source system during cutover. Every migration operation is logged — source record ID, destination record ID, field mappings applied, and any records that failed validation. One-click rollback is available within the delta window if reconciliation uncovers unexpected data quality issues.
Post-migration: rebuild workflows, automation rules, and Odoo Accounting configuration
After data lands in Odoo CRM, FlitStack delivers a rebuild reference document listing every source workflow, automation rule, document template, and court-e-filing integration that requires manual reconstruction in Odoo. This includes: Odoo automation rules for case-stage reminders, document template mappings for standard pleadings, calendar event rules for court date notifications, and trust accounting setup guidance for Odoo Accounting. Your Odoo admin or FlitStack's post-migration team completes these items as a separate engagement.
Platform deep dives
Criminal Case 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 Criminal Case 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
Criminal Case Management: Not publicly documented.
Data volume sensitivity
Criminal Case 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 Criminal Case Management to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Criminal Case 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 Criminal Case 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.