% Migrated
88%
Validation Errors
1,204
Unresolved Quarantine
812
Duplicate Pairs
21,038
Side-by-side fuzzy comparison for ~21K duplicate client pairs. Resolve with Merge / Ignore / Split.
Record A (legacy)
- Name
- Maria Lopez
- DOB
- 04/12/1991
- Phone
- (714) 555-0293
- Source
- cm_clients
Record B (legacy)
- Name
- Maria L. Lopez
- DOB
- 04/12/1991
- Phone
- (714) 555-0293
- Source
- ps_clients
Records failing FK validation are quarantined. Resolve per entity type.
| Entity Type | Failure | Count | Actions |
|---|---|---|---|
| Enrollment | Missing client FK | 412 | |
| Payment | Orphaned enrollment FK | 287 | |
| Evaluation | Invalid session reference | 113 |
Delta Sync Status
Migration Plan v2 — HubSpot API
CRM v3 batch endpoints · supersedes the legacy bulk-CSV path. Sync health lives on the dashboard.
1 · Schema map
V1 tables → HubSpot objects + custom properties mapped.
2 · Identity resolve
Dedup the ~21K duplicate pairs (see tab above).
3 · API batch load
CRM v3 batch upsert + association graph rebuild.
4 · Cutover + freeze
Delta-sync to zero, then read-only freeze on V1.
⚑ PENDING — HubSpot contract renewal date
The cutover (phase 4) must complete before the HubSpot contract renews. Awaiting the exact renewal date from S2S (Michael) so the freeze window can be scheduled against it.
Manual Client Export — V1 → V2
Hand-pull a sample to validate the mapping, then run the full bulk export through 3rdbrain validation.
Data hygiene is the hard part. V1 records carry duplicates, missing FKs, and inconsistent formats — every row is run through 3rdbrain validation before it is written to V2. Resolve quarantine and identity conflicts (tabs above) before a full bulk run.
HubSpot One-to-One Views
How a migrated V1 record renders against its HubSpot object. Open each view to review the field-level mirror.
Maria Lopez
Contact · HS-7845
- Lifecycle stage
- Enrolled client
- m.lopez@example.com
- Phone
- (714) 555-0293
- County
- Orange
| V1 field | HubSpot property | Status |
|---|---|---|
| cm_clients.full_name | firstname + lastname | Mapped |
| cm_clients.dob | date_of_birth | Mapped |
| cm_clients.phone | phone | Mapped |
| cm_clients.county_code | county (custom) | Needs map |
Orange County Probation
Company · HS-2210
- Type
- Referring agency
- Associated contacts
- 1,284
- Active enrollments
- 312
| V1 field | HubSpot property | Status |
|---|---|---|
| agencies.name | name | Mapped |
| agencies.agency_type | agency_type (custom) | Mapped |
| agencies.client_ids[] | contact associations | Association |
Lopez · 26-week program
Deal · HS-9043
- Pipeline
- Enrollment
- Stage
- In progress (wk 11)
- Associated contact
- Maria Lopez
| V1 field | HubSpot property | Status |
|---|---|---|
| enrollments.program | dealname | Mapped |
| enrollments.status | dealstage | Mapped |
| enrollments.client_fk | contact association | Association |
| enrollments.activity_log[] | timeline events | Backlog |
Backlog (D58): Activity-timeline ↔ in-app messages two-way sync is deferred. Timeline events migrate one-way for now; the live bidirectional sync is not built on this surface.
HubSpot Migration — Pros / Cons
Pros
- Single source of truth for contacts, agencies, and enrollments.
- Native HubSpot automation (sequences, tasks, reporting) out of the box.
- API-driven sync removes the manual CSV re-import cycle.
- Association graph mirrors V1 foreign keys natively.
Cons
- Recurring license cost vs. the self-hosted V1 store.
- Data-hygiene cleanup required before cutover (dedup, FK repair).
- Custom V1 fields need property mapping (some not 1:1).
- Contract renewal timing constrains the cutover window (see ⚑ above).
Summary card for the client-facing pros/cons doc — kept on this surface, not a separate file.
County Rules Master Graph
Migration noteDuring migration the six legacy per-county rule configs collapse into a single Zod-typed master graph. The rules engine and editor are not rebuilt here — they live on the County Rules page.
- Six county configs → one master graph (single schema, Zod-validated).
- Income-band source for the determination flow (I8) reads from the graph.
- Reschedule-count rules (G2) are governed by the same graph.