CRM migration
Field-level mapping, validation, and rollback between Jubilee and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Jubilee
Source
Odoo CRM
Destination
Compatibility
16 of 16
objects map 1:1 between Jubilee and Odoo CRM.
Complexity
BStandard
Timeline
48–96 hours
Overview
Jubilee is bankruptcy and practice management software that stores client contacts, bankruptcy case records, document attachments, and court-specific case data. The platform tracks case status across chapters 7, 11, 13, and 15, maintains trustee and court assignments, and logs attorney activities against each case. Odoo CRM models legal data using res.partner for contacts, crm.lead for pre-conversion leads, and crm.lead (opportunity) for active cases. The migration carries every Jubilee client record, case field, and attachment into Odoo's partner and opportunity objects, creating custom fields on the opportunity model for bankruptcy-specific data that Odoo does not natively store — including x_bankruptcy_chapter, x_case_status, x_trustee_name, and x_court_district. We surface the workflow definitions as a rebuild reference for Odoo Studio and the Odoo workflow engine. The migration runs via Odoo's XML-RPC API with batched writes to handle large case volumes without triggering Odoo's request throttling thresholds. Prior to data movement, the FlitStack AI engine audits Jubilee’s field definitions and creates the required custom fields on Odoo’s res.partner and crm.lead models, including x_bankruptcy_chapter, x_case_status, x_trustee_name, x_court_district, x_case_number, and x_remaining_balance. A pre‑migration validation script checks for missing required fields, duplicate emails, and orphaned attorney assignments. Attachments are re‑uploaded via Odoo’s ir.attachment model, preserving original filenames and timestamps. The migration script uses Odoo’s XML‑RPC batch write API, with configurable batch sizes to stay within Odoo’s request throttling limits, ensuring a smooth cutover within the 48‑96‑hour window for typical volumes.
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 Jubilee 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.
Jubilee
Client / Contact
Odoo CRM
res.partner
1:1Jubilee client records map directly to Odoo res.partner. The partner record holds name, email, phone, address, and company type (individual vs. organization). Client status (active, inactive) becomes a custom selection field on the partner if needed — Odoo partner records do not have a native status field.
Jubilee
Client Email
Odoo CRM
res.partner (email field)
1:1Jubilee email maps to partner email. Odoo validates email format on insert and rejects malformed addresses. Duplicate email detection flags existing partners so the migration does not create duplicate contact records when the same attorney appears across multiple cases. Unmatched email formats are logged for pre‑migration correction.
Jubilee
Client Phone
Odoo CRM
res.partner (phone field)
1:1Phone and mobile phone map to the partner phone field. Odoo stores phone as a Char field, accepting free‑form numbers. If Jubilee stores separate mobile and work phone fields, both insert into the same Odoo phone field, with a label annotation indicating type. Phone numbers are normalized to a consistent format before insert to avoid validation errors.
Jubilee
Client Address
Odoo CRM
res.partner (address fields)
1:1Jubilee street, city, state, zip, country map to Odoo partner address fields (street, city, state_id, zip, country_id). State maps as a many2one to res.country.state — the state ID must resolve to an existing Odoo state record. Country maps as many2one to res.country.
Jubilee
Client Type
Odoo CRM
res.partner (x_client_type custom field)
1:1Jubilee client types (individual, corporation, LLC, partnership) have no direct Odoo equivalent. We create x_client_type as a selection field on res.partner and map each Jubilee value to the matching selection option. If Jubilee contains a type not defined in Odoo, we flag it for pre‑migration review and store the raw value in a Char fallback field.
Jubilee
Attorney / Responsible Party
Odoo CRM
res.partner (x_attorney_id custom field on opportunity)
1:1Jubilee's assigned attorney field maps as a many2one custom field (x_attorney_id) on crm.lead pointing to res.partner. The attorney partner record must exist first — we resolve by email match against Odoo users and create a minimal partner record for unmatched attorneys before opportunity insert.
Jubilee
Bankruptcy Case
Odoo CRM
crm.lead (opportunity)
1:1Each Jubilee case record maps to one Odoo crm.lead in opportunity state. The lead stores case name, amount (debt amount or fee), stage, expected close date, and all custom bankruptcy fields. Odoo uses crm.lead for both lead and opportunity — the convert_lead opportunity action handles the split if the firm later distinguishes pre-filing leads from active cases.
Jubilee
Case Number
Odoo CRM
crm.lead (x_case_number custom field)
1:1Jubilee case number (e.g., 23‑bk‑12345) has no native Odoo equivalent. We create x_case_number as a Char field on crm.lead and index it for fast lookup by case number after migration. Court docket integrations reference this field directly, and we preserve the original case number format to avoid re‑keying errors.
Jubilee
Bankruptcy Chapter
Odoo CRM
crm.lead (x_bankruptcy_chapter custom field)
1:1Chapter 7, 11, 13, and 15 values from Jubilee map to selection field x_bankruptcy_chapter on crm.lead. Value mapping ensures case-insensitive match against Odoo selection options. Chapter type drives Odoo stage pipeline creation — each chapter may warrant a separate Odoo sales team and stage set.
Jubilee
Case Status
Odoo CRM
crm.lead (stage_id + x_case_status custom field)
1:1Jubilee status values (Pending, Filed, Discharged, Dismissed, Reopened) map to Odoo stage_id records on crm.lead. We create one Odoo stage per Jubilee status value before migration. For reporting continuity we also store the original Jubilee status string in x_case_status__c as a read-only custom field.
Jubilee
Trustee Assignment
Odoo CRM
res.partner (x_trustee_name) + crm.lead (x_trustee_id)
1:1Jubilee trustee name maps to a partner record (or x_trustee_name Char field on crm.lead if no Odoo partner exists). Trustee partners are created with type 'company' and stored in x_trustee_id as a many2one on crm.lead. Duplicate trustee names are de-duplicated before insert.
Jubilee
Court District
Odoo CRM
crm.lead (x_court_district custom field)
1:1Court jurisdiction string from Jubilee (e.g., 'Northern District of California') becomes a Char field x_court_district on crm.lead. If Jubilee stores court as a structured object with name and division sub-fields, we concatenate into the Char field or create separate x_court_name and x_court_division fields.
Jubilee
Remaining Balance
Odoo CRM
crm.lead (x_remaining_balance custom field)
1:1Jubilee remaining_balance decimal maps to Odoo x_remaining_balance as a Monetary field on crm.lead, automatically respecting the company's default currency (USD unless overridden). The field stores the outstanding debt figure for case‑disposition reporting, and any null balances are preserved as zero rather than omitted, ensuring consistent reporting across all migrated cases.
Jubilee
Activity Log (calls, notes, meetings)
Odoo CRM
mail.message + crm.lead (activity_ids)
1:1Jubilee activity entries (date, type, note body, author) map to Odoo mail.message records linked to crm.lead. Each message stores author as res.partner, body as HTML, and date as mail.message create_date. Odoo's chatter widget on the opportunity form displays the full case activity history in chronological order.
Jubilee
Document Attachment
Odoo CRM
ir.attachment
1:1Jubilee file attachments (petitions, schedules, orders) re-upload to Odoo ir.attachment linked to crm.lead via res_model='crm.lead' and res_id=crm.lead_id. Files retain original filenames and (if readable from source) original create dates stored in ir.attachment create_date. Large files follow Odoo's file storage configuration.
Jubilee
Workflow / Automation
Odoo CRM
No equivalent — manual rebuild required
1:1Jubilee workflow definitions (deadline triggers, status-change notifications, filing reminders) do not migrate. We export workflow definitions as a structured JSON rebuild reference and provide an Odoo Studio setup guide so your team can recreate triggers using Odoo Automated Actions and Server Actions. Third-party e-filing integrations require separate API configuration.
| Jubilee | Odoo CRM | Compatibility | |
|---|---|---|---|
| Client / Contact | res.partner1:1 | Fully supported | |
| Client Email | res.partner (email field)1:1 | Fully supported | |
| Client Phone | res.partner (phone field)1:1 | Fully supported | |
| Client Address | res.partner (address fields)1:1 | Fully supported | |
| Client Type | res.partner (x_client_type custom field)1:1 | Fully supported | |
| Attorney / Responsible Party | res.partner (x_attorney_id custom field on opportunity)1:1 | Fully supported | |
| Bankruptcy Case | crm.lead (opportunity)1:1 | Fully supported | |
| Case Number | crm.lead (x_case_number custom field)1:1 | Fully supported | |
| Bankruptcy Chapter | crm.lead (x_bankruptcy_chapter custom field)1:1 | Fully supported | |
| Case Status | crm.lead (stage_id + x_case_status custom field)1:1 | Fully supported | |
| Trustee Assignment | res.partner (x_trustee_name) + crm.lead (x_trustee_id)1:1 | Fully supported | |
| Court District | crm.lead (x_court_district custom field)1:1 | Fully supported | |
| Remaining Balance | crm.lead (x_remaining_balance custom field)1:1 | Fully supported | |
| Activity Log (calls, notes, meetings) | mail.message + crm.lead (activity_ids)1:1 | Fully supported | |
| Document Attachment | ir.attachment1:1 | Fully supported | |
| Workflow / Automation | No equivalent — manual rebuild required1: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.
Jubilee gotchas
Desktop edition stores documents in local file paths
Trust account balance snapshot may not reflect pending transactions
Chapter-specific form versions are not auto-upgraded on import
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
Inventory Jubilee data and configure Odoo custom fields
FlitStack AI extracts every client contact, case record, activity entry, and attachment from Jubilee via the source API or CSV export. We audit field data types, pick-list values, and attachment file sizes. Meanwhile, your Odoo admin (or our team) creates the custom fields on res.partner and crm.lead — x_bankruptcy_chapter, x_case_number, x_case_status, x_trustee_id, x_attorney_id, x_court_district, x_remaining_balance, and x_source_crm_id — so the schema is ready before any data inserts. We deliver a field creation checklist with exact field names, types, and selection options derived from your Jubilee configuration.
Create Odoo partner records and resolve attorney-to-user mappings
All Jubilee client records insert into Odoo res.partner first. We deduplicate by email — if the same email appears across multiple Jubilee records, we create one partner and link all related cases to it. Attorney email addresses from Jubilee case assignments are resolved against Odoo res.users. Unmatched attorneys are flagged with a pre-migration report listing their names and emails so you can invite them to Odoo. Partner records are validated for required fields (name, email format, country_id) before the migration batch commits.
Create Odoo opportunity records with bankruptcy field mapping
Each Jubilee case inserts as an Odoo crm.lead opportunity. The partner_id foreign key references the pre-created res.partner record. All bankruptcy custom fields (x_case_number, x_bankruptcy_chapter, x_case_status, x_trustee_id, x_attorney_id, x_court_district, x_remaining_balance) populate from the corresponding Jubilee fields. Stage_id resolves via value mapping — each Jubilee status value points to a pre-created Odoo stage record. Filing dates, discharge dates, and original create timestamps map to their Odoo custom field counterparts. The insert batch is ordered by Jubilee case ID to preserve creation sequence.
Migrate activity logs and re-upload document attachments
Jubilee activity entries (calls, notes, emails) insert as mail.message records linked to their crm.lead. Each message preserves original author, timestamp, and HTML body so the Odoo chatter widget displays a complete case activity timeline. File attachments from Jubilee (petitions, schedules, court orders) are re-uploaded to ir.attachment linked to the corresponding crm.lead via res_model='crm.lead'. Large files over 25MB are chunked or compressed before upload to avoid Odoo attachment size validation errors. Original filenames and create dates are preserved.
Run sample migration with field-level diff and reconcile
A representative slice — typically 100–300 records spanning clients, cases, activities, and attachments — migrates first. We generate a field-level diff between Jubilee source values and Odoo destination fields for every record in the sample. You verify that x_bankruptcy_chapter values, x_case_status stage mapping, x_trustee_id partner links, and activity message bodies match the source. Attorney email resolution reports are reviewed to confirm owner assignment. Any mapping errors are corrected before the full run commits. We surface custom field definitions as a Studio export so your admin can apply them to additional Odoo environments.
Full migration with delta pickup, audit log, and rollback
The full migration batch inserts all remaining records into Odoo. A delta-pickup window of 24–48 hours captures any records created or modified in Jubilee during the cutover. Every insert, update, and rollback operation is logged in the FlitStack audit trail with timestamps and operator IDs. One-click rollback reverts all changes to the pre-migration snapshot if reconciliation fails. Post-migration, we deliver a reconciliation report comparing record counts and field population rates between Jubilee and Odoo. Workflow definitions are exported as a JSON rebuild reference for Odoo Studio and the Automated Actions engine.
Platform deep dives
Jubilee
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 Jubilee 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
Jubilee: Not publicly documented.
Data volume sensitivity
Jubilee 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 Jubilee to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Jubilee 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 Jubilee
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.