System
Migration from Zoho
The object inventory for the move off Zoho. Every source application, every form inside it, its record count, and the module it lands in. Spreadsheets currently held outside Zoho are inventoried alongside it. Primavera P6 is retained as an integration rather than migrated.
Source systems
19
12 Creator apps, CRM, Books, People, Sign
Objects
92
17 superseded rather than migrated
Records
983k
813k mapped and loaded
Deluge script
47.1k
lines of Deluge in the source applications
Exceptions
10
185,446 records, 0 blockers
No dry run recorded yet
A dry run loads all 983,406 records into a parallel environment, recomputes every derived figure (contract sums, claim values, retention, project margin) and reconciles them against the source figure line by line. Anything that does not reconcile is listed as an exception with a proposed resolution. Nothing is written back to Zoho; the export credentials are read-only.
Supporting tools in use
37 third-party tools and manual steps currently sit alongside the Zoho applications to complete a workflow. Each is listed against the function it supports so it can be retired or re-pointed at cutover.
| Object | Source | Records | Fields | Lands in | Outcome |
|---|---|---|---|---|---|
| QClad Quoting Zoho Creator owned by Dylan Fraser · built 2021 · 4,180 lines of Deluge 49,540 records | |||||
| Tender_Register | QClad Quoting | 1,842 | 34 | Estimates | Mapped |
| Tender_Line_Item | QClad Quoting | 41,206 | 18 | Estimate lines | Mapped |
| Rate_Schedule 46 live rates plus 566 superseded versions. Only live rates come across as rates; the rest become rate history. | QClad Quoting | 612 | 22 | Pricing schedule | Mapped |
| Rate_Buildup | QClad Quoting | 3,190 | 14 | Rate cost build-up | Mapped |
| Quote_PDF_Log A log of which PDFs got generated. The document is generated on demand here, so there is nothing to log. | QClad Quoting | 2,204 | 8 | - | Superseded |
| Client_Contact | QClad Quoting | 486 | 21 | Contacts | Mapped |
| QClad Projects Zoho Creator owned by Marcus Deng · built 2021 · 7,940 lines of Deluge 102,396 records | |||||
| Project_Master | QClad Projects | 318 | 41 | Jobs | Mapped |
| Project_SOR_Line | QClad Projects | 9,884 | 16 | Schedule of rates | Mapped |
| Variation_Register | QClad Projects | 2,106 | 27 | Variations | Mapped |
| Variation_Line | QClad Projects | 8,412 | 12 | Variation lines | Mapped |
| Site_Diary | QClad Projects | 14,820 | 19 | Site diaries | Mapped |
| Project_Photo 61,408 photos, 214 GB in Zoho WorkDrive. Migrated by reference in the first pass, then bulk-copied over a weekend. | QClad Projects | 61,408 | 7 | Diary attachments | Mapped, review |
| Programme_Milestone | QClad Projects | 4,260 | 11 | Schedule | Mapped |
| Cost_Report_Snapshot A monthly frozen copy of a spreadsheet cost report. Superseded by the live project position; loaded as read-only history. | QClad Projects | 1,188 | 24 | - | Superseded |
| QClad Claims & Variations Zoho Creator owned by Janelle Roe · built 2022 · 5,320 lines of Deluge 55,470 records | |||||
| Progress_Claim | QClad Claims & Variations | 2,884 | 32 | Progress claims | Mapped |
| Claim_Line | QClad Claims & Variations | 46,180 | 15 | Claim measures | Mapped |
| Payment_Schedule | QClad Claims & Variations | 2,640 | 18 | Certification | Mapped |
| Retention_Register Currently reconciled by hand against an Excel sheet each month. Here it is computed from certified claims. | QClad Claims & Variations | 318 | 12 | Retention | Mapped |
| Sub_Claim | QClad Claims & Variations | 3,402 | 21 | Subcontractor claims | Mapped |
| BIF_Notice | QClad Claims & Variations | 46 | 14 | Claim notices | Mapped |
| QClad Timesheets Zoho Creator owned by Raelene Brown · built 2022 · 6,610 lines of Deluge 281,306 records | |||||
| Day_Card The single largest object. Four years of day cards at ~55 people a day. | QClad Timesheets | 214,806 | 17 | Timesheets | Mapped |
| Timesheet_Approval | QClad Timesheets | 46,240 | 9 | Approval trail | Mapped |
| Allowance | QClad Timesheets | 18,940 | 11 | Payroll | Mapped |
| Payroll_Export_Log The Monday Excel export. Replaced by a direct payroll extract from the same rows. | QClad Timesheets | 214 | 6 | - | Superseded |
| Crew_Roster | QClad Timesheets | 1,106 | 13 | Schedule | Mapped |
| QClad HSEQ Zoho Creator owned by Sam Kirkwood · built 2023 · 5,880 lines of Deluge 156,594 records | |||||
| SWMS | QClad HSEQ | 604 | 28 | Health & safety | Mapped |
| SWMS_Signon | QClad HSEQ | 38,412 | 8 | SWMS sign-on | Mapped |
| Take5 Held in a separate Zoho Forms app because Creator's offline mode drops records where there is no signal. Loaded against the Take 5 register. | QClad HSEQ | 96,840 | 12 | Take 5s | Mapped |
| Incident | QClad HSEQ | 486 | 34 | Incidents | Mapped |
| Toolbox_Talk | QClad HSEQ | 3,218 | 10 | Toolbox talks | Mapped |
| Competency_Ticket Ticket expiry matrix.xlsx holds the same data and loads into this object; the two are maintained separately today. | QClad HSEQ | 1,842 | 15 | Team Members | Mapped |
| Site_Induction | QClad HSEQ | 4,106 | 12 | Inductions | Mapped |
| ITP | QClad HSEQ | 1,204 | 19 | ITPs & handover | Mapped |
| ITP_Item | QClad HSEQ | 9,882 | 14 | ITP hold points | Mapped |
| QClad Procurement Zoho Creator owned by Toby Ellison · built 2023 · 3,440 lines of Deluge 25,806 records | |||||
| Purchase_Order | QClad Procurement | 4,218 | 26 | Purchases | Mapped |
| PO_Line | QClad Procurement | 16,940 | 13 | PO lines | Mapped |
| Goods_Receipt | QClad Procurement | 3,886 | 11 | Receipts | Mapped |
| Supplier | QClad Procurement | 214 | 19 | Suppliers | Mapped |
| Material_Master | QClad Procurement | 486 | 21 | Materials | Mapped |
| Subcontractor | QClad Procurement | 62 | 24 | Subcontractors | Mapped |
| QClad Field Forms Zoho Creator owned by Sam Kirkwood · built 2024 · 2,910 lines of Deluge 80,372 records | |||||
| Site_Form_Register HSE_FRM_### numbering preserved exactly, including the running sequence. The two historical resets are reconciled in the exceptions. | QClad Field Forms | 8,204 | 22 | Site Forms | Mapped |
| Plant_Prestart Books against the plant item here, so a defect raised on a roof shows on the plant register. | QClad Field Forms | 41,206 | 26 | Site Forms | Mapped |
| Hazard_Report | QClad Field Forms | 1,842 | 15 | Hazard Report | Mapped |
| Heights_Permit | QClad Field Forms | 6,640 | 18 | Site Forms | Mapped |
| Form_Photo_Log A log of which photos were emailed in. Attachments hang off the form itself here, so there is nothing to log. | QClad Field Forms | 22,480 | 7 | - | Superseded |
| QClad Plant & PPE Zoho Creator owned by Toby Ellison · built 2024 · 1,880 lines of Deluge 16,202 records | |||||
| Plant_Register | QClad Plant & PPE | 214 | 29 | Plant & Equipment | Mapped |
| Plant_Service_Log | QClad Plant & PPE | 3,106 | 14 | Plant & Equipment | Mapped |
| PPE_Issue Replacement dates come off the item's service life here rather than off a reminder somebody has to set. | QClad Plant & PPE | 12,840 | 12 | PPE Register | Mapped |
| PPE_Item | QClad Plant & PPE | 42 | 9 | PPE Register | Mapped |
| QClad Travel & Roster Zoho Creator owned by Raelene Brown · built 2024 · 2,240 lines of Deluge 102,560 records | |||||
| Travel_Booking Airline, flight number, reservation and accommodation. Paid travel time is computed from the flight times here rather than entered. | QClad Travel & Roster | 9,420 | 24 | Travel | Mapped |
| Accommodation | QClad Travel & Roster | 6,180 | 15 | Travel | Mapped |
| Roster_Swing | QClad Travel & Roster | 2,840 | 13 | Schedule | Mapped |
| Flight_Status_Poll One row per API poll, four years of them. The current status is a field on the booking here, so the poll history is archived rather than loaded. | QClad Travel & Roster | 84,120 | 6 | - | Superseded |
| QClad Payroll Prep Zoho Creator owned by Raelene Brown · built 2023 · 3,120 lines of Deluge 2,132 records | |||||
| Pay_Run | QClad Payroll Prep | 208 | 31 | Payroll | Mapped |
| Award_Rule Six agreements with different ordinary hours and overtime triggers per site. | QClad Payroll Prep | 46 | 18 | Payroll | Mapped |
| Allowance_Rule | QClad Payroll Prep | 38 | 14 | Payroll | Mapped |
| Xero_Push_Log The crib allowance rows in this log were keyed by hand into Xero rather than pushed. They load as manual adjustments so the history is honest about it. | QClad Payroll Prep | 1,840 | 11 | Payroll | Mapped, review |
| QClad Document Control Zoho Creator owned by Grace Lindqvist · built 2024 · 2,120 lines of Deluge 11,442 records | |||||
| Transmittal | QClad Document Control | 2,640 | 17 | Documents | Mapped |
| Drawing_Register | QClad Document Control | 8,204 | 22 | Documents | Mapped |
| Handover_Pack | QClad Document Control | 186 | 15 | Handover | Mapped |
| Warranty | QClad Document Control | 412 | 13 | Warranties | Mapped |
| QClad Tasks & Knowledge Zoho Creator owned by Raelene Brown · built 2025 · 1,460 lines of Deluge 9,550 records | |||||
| Task | QClad Tasks & Knowledge | 6,240 | 17 | Tasks | Mapped |
| Knowledge_Article | QClad Tasks & Knowledge | 84 | 12 | Knowledge Hub | Mapped |
| Article_Completion | QClad Tasks & Knowledge | 3,180 | 7 | Knowledge Hub | Mapped |
| Medical_Centre | QClad Tasks & Knowledge | 46 | 13 | Medical Centres | Mapped |
| Zoho CRM Zoho CRM owned by Nathan Carter · built 2020 18,382 records | |||||
| Accounts | Zoho CRM | 486 | 38 | Contacts | Mapped |
| Contacts | Zoho CRM | 1,204 | 41 | Contacts | Mapped |
| Deals Overlaps the Tender_Register in Creator: the same tender exists in both, keyed differently. Deduplicated on client and site during the load. | Zoho CRM | 1,886 | 32 | Estimates | Mapped |
| Activities | Zoho CRM | 14,806 | 18 | Contacts | Archive only |
| Zoho Books Zoho Books owned by Raelene Brown · built 2020 14,380 records | |||||
| Invoices | Zoho Books | 3,106 | 29 | Invoices | Mapped |
| Bills | Zoho Books | 6,842 | 26 | Supplier invoices | Mapped |
| Chart_of_Accounts The ledger stays where it is. QClad keep their accounting package; this system posts to it and reads the payment status back. | Zoho Books | 214 | 12 | - | Integration |
| Payments | Zoho Books | 4,218 | 14 | Payment status | Integration |
| Zoho People Zoho People owned by Raelene Brown · built 2022 6,488 records | |||||
| Employee 58 current, 84 past employees. Past employees migrate for the timesheet history to stay whole. | Zoho People | 142 | 46 | Team Members | Mapped |
| Leave | Zoho People | 6,204 | 12 | Leave | Mapped |
| Onboarding_Checklist | Zoho People | 142 | 18 | - | Archive only |
| Zoho Sign Zoho Sign owned by Sam Kirkwood · built 2023 9,842 records | |||||
| Signed_Documents Signature images and audit trails come across as attachments against the SWMS or subcontract they belong to. | Zoho Sign | 9,842 | 9 | Signed records | Mapped, review |
| Excel, the sheets not yet in the system Excel owned by Raelene Brown 3,944 records Sheets maintained outside Zoho, mostly covering functions not yet built there. Each is a view of data that already exists in another object, so they are superseded rather than migrated. | |||||
| Project cost report (one per live job) Rebuilt from claims, timesheets and purchase orders. It is the live project page. | Excel, the sheets not yet in the system | 24 | 60 | Cost centres | Superseded |
| Retention register.xlsx | Excel, the sheets not yet in the system | 318 | 14 | Retention | Superseded |
| Ticket expiry matrix.xlsx | Excel, the sheets not yet in the system | 1,842 | 9 | Team Members | Superseded |
| Store stock count.xlsx | Excel, the sheets not yet in the system | 486 | 11 | Materials | Superseded |
| Plant & EWP hire tracker.xlsx Rebuilt as the plant register, with the prestart checklists booking against the item rather than sitting in a separate app. | Excel, the sheets not yet in the system | 214 | 12 | Plant & Equipment | Superseded |
| Estimate register (estimating copy).xlsx | Excel, the sheets not yet in the system | 486 | 22 | Estimates | Superseded |
| Estimating targets FY24-FY27.xlsx Monthly and yearly targets, kept alongside the system and reconciled by hand. They sit on the estimating board here, so the actual is the board adding itself up. | Excel, the sheets not yet in the system | 48 | 9 | Estimates | Superseded |
| Progress claim tracker.xlsx The claim function was never built in Zoho, so this sheet is the claim register. It is the object with the highest risk of drift and the one the new module replaces outright. | Excel, the sheets not yet in the system | 412 | 21 | Progress Claims | Superseded |
| Subcontractor insurance tracker.xlsx | Excel, the sheets not yet in the system | 62 | 15 | Subcontractors | Superseded |
| Weekly labour forecast.xlsx | Excel, the sheets not yet in the system | 52 | 18 | Timesheets | Superseded |
| Scheduling package (bought outside Zoho) Other owned by Marcus Deng · built 2024 23,920 records Bought off the shelf and plugged into Zoho because the schedule was never built there. It holds the programme and the crew allocation, both of which exist in the job record already, so it is superseded rather than migrated. Its history loads so nothing is lost. | |||||
| Programme_Task Rebuilt from the job's own contract dates and cost centres. Moving a finish date moves the schedule rather than a second copy of it. | Scheduling package (bought outside Zoho) | 18,420 | 19 | Schedule | Superseded |
| Crew_Allocation | Scheduling package (bought outside Zoho) | 4,860 | 11 | Schedule | Superseded |
| Programme_Baseline Baselines are kept for the record. Only the current programme is live. | Scheduling package (bought outside Zoho) | 640 | 14 | Schedule | Archive only |
| Primavera P6 Primavera owned by Marcus Deng 13,080 records Retained as an integration rather than migrated: the head contractors programme in P6. Activity IDs are held against the project so a P6 update lands on the right job, and dates read in both directions. | |||||
| Activity (imported) | Primavera P6 | 4,260 | 16 | Schedule | Integration |
| Resource assignment | Primavera P6 | 8,820 | 12 | Schedule | Integration |
Nothing matches that filter.
Spreadsheets held outside Zoho
Each of these is a view of data that already exists in another object, so they are marked Superseded rather than migrated. The target module that reproduces each one is listed against it.
- Project cost report (one per live job) → Cost centres
- Retention register.xlsx → Retention
- Ticket expiry matrix.xlsx → Team Members
- Store stock count.xlsx → Materials
- Plant & EWP hire tracker.xlsx → Plant & Equipment
- Estimate register (estimating copy).xlsx → Estimates
- Estimating targets FY24-FY27.xlsx → Estimates
- Progress claim tracker.xlsx → Progress Claims
- Subcontractor insurance tracker.xlsx → Subcontractors
- Weekly labour forecast.xlsx → Timesheets
Primavera P6
Retained as an integration rather than migrated: the head contractors programme in P6. Activity IDs are held against the project so a P6 update lands on the right job, and dates read in both directions.
- Activity (imported) 4,260 Integration
- Resource assignment 8,820 Integration
Activity IDs are held against the project (QRSAUP is QRSAUP.RC.4400, Saraji is SAR.WSU.2200), so a P6 update lands on the right job and dates read in both directions.
Field by field, for the highest-volume objects
Fields marked derived are not imported: they are stored figures that the target computes instead. A contract sum becomes the sum of its lines, retention a calculation on certified claims, and GST 10% of the net.
| Zoho field | Type | QClad field | Type | Rule | |
|---|---|---|---|---|---|
| Project_Number | Single Line | → | code | text | Kept verbatim. QClad's own numbering is the key everywhere else. Clean |
| Project_Name | Single Line | → | name | text | Straight copy Clean |
| Client_Lookup | Lookup → Client_Contact | → | client | ref → Clients | Resolved to the deduplicated client, since the same head contractor exists in both Creator and CRM. Transform |
| Site_Address | Address | → | site + state | text + enum | Split; state parsed out of the address and validated against AU states. Transform |
| Contract_Value | Currency | → | - | derived | Not imported. The contract sum is the sum of the schedule-of-rates lines, so a typed total can never disagree with them again. Decision |
| Status | Dropdown (11 values) | → | status | enum (7 values) | Eleven Zoho values collapse to seven. 'Awaiting PO', 'PO received' and 'Pending start' all become Awarded. Transform |
| PM_Email | → | pm | ref → People | Matched to the person record by email; 4 historic PMs no longer employed resolve to their archived record. Transform | |
| Retention_Pct | Decimal | → | retention | decimal | Straight copy Clean |
| P6_Activity_ID | Single Line | → | p6 | text | Kept, this is the join to Primavera. Clean |
| Cost_Report_Link | URL → WorkDrive | → | - | - | Dropped. The link points at an external spreadsheet superseded by the project position page. Decision |
| Zoho field | Type | QClad field | Type | Rule | |
|---|---|---|---|---|---|
| Employee | Lookup → Employee | → | person | ref → People | Straight copy Clean |
| Date | Date | → | date | date (ISO) | Zoho stores dd-MMM-yyyy; parsed to ISO with the Brisbane offset. Transform |
| Project | Lookup → Project_Master | → | project | ref → Projects | Straight copy Clean |
| Task_Text | Multi Line | → | task | text | Free text today. Kept as written, and a rate code is inferred where the wording matches a schedule item, 84% match rate on the sample. Decision |
| Hours | Decimal | → | hours | decimal | Straight copy Clean |
| OT_Hours | Decimal | → | otHours | decimal | Straight copy Clean |
| Approved_Flag | Checkbox | → | status | enum | Checkbox plus the separate approval record become one status: Draft, Submitted, Approved or Queried. Transform |
| Cost_Rate_Snapshot | Currency | → | - | derived | Not imported. Cost is read off the person's rate at the date of the card, so a rate change no longer needs a back-fill script. Decision |
| Zoho field | Type | QClad field | Type | Rule | |
|---|---|---|---|---|---|
| Claim_Number | Auto Number | → | id | text | Kept verbatim, these appear on lodged statutory documents and cannot be renumbered. Clean |
| Project | Lookup | → | project | ref → Projects | Straight copy Clean |
| Claim_Period | Date | → | period | month | Straight copy Transform |
| Claimed_Amount | Currency | → | - | derived | A lodged claim's amount is frozen against the measure it was cut from, so the figure is reproducible rather than stored twice. Decision |
| Retention_Amount | Currency | → | - | derived | Computed at the contract's retention rate. This is the number the Excel retention register exists to double-check today. Decision |
| GST | Currency | → | - | derived | 10% of the net. Today it is recalculated by hand before the claim reaches Books. Decision |
| Status | Dropdown (8 values) | → | status | enum (6 values) | 'Submitted (awaiting schedule' and 'Submitted) overdue' become one status with the BIF clock computed from the lodgement date. Transform |
| Payment_Schedule_Date | Date | → | certifiedOn | date | Straight copy Clean |
| Books_Invoice_Ref | Single Line | → | invoice | ref → Invoices | Straight copy Clean |
| Zoho field | Type | QClad field | Type | Rule | |
|---|---|---|---|---|---|
| Submitted_By | Lookup → Employee | → | person | ref → People | Straight copy Clean |
| Submitted_On | DateTime | → | date | date | Straight copy Transform |
| Project | Single Line (typed) | → | project | ref → Projects | Typed free text in the Forms app. Matched to a project by name; 1,204 records (1.2%) need a human eye, they are listed as exceptions. Decision |
| Hazard_1..5 | 5 × Single Line | → | hazards[] | text[] | Five fixed columns collapse to a list, so a sixth hazard no longer needs a schema change. Transform |
| Control_1..5 | 5 × Single Line | → | controls[] | text[] | Straight copy Transform |
| Offline_Sync_Flag | Checkbox | → | - | - | Dropped. The flag marks records the source app failed to sync; the target captures and syncs offline natively. Decision |
What did not reconcile, and what we did about it
Records the dry run could not reconcile automatically, each with a proposed resolution. 185,446 records across 10 issues, none of them a blocker.
The site-form sequence has reset twice
HSE_FRM numbers are issued from a running counter held in a Deluge variable. It was reset in March 2023 and again in July 2024 when the app was redeployed, so 1,486 forms share a number with an earlier one. On paper two different prestart checklists are both HSE_FRM_006_0412.
Resolution. Loaded with the original number kept as the historical reference and a new unbroken sequence issued behind it. From cutover the number comes off the register rather than a variable, so it cannot reset again.
Crib allowance rows were keyed into Xero by hand, not pushed
Xero's payroll API will not take an hourly allowance, so every crib allowance line in four years of pay runs was calculated in the Zoho app and typed into Xero separately. The push log records them as sent, which is not what happened.
Resolution. Loaded as manual adjustments rather than API pushes, so the history says what actually occurred. The calculation moves into payroll here; the keystroke into Xero remains until their API accepts the line, and is flagged on every run.
Four years of flight-status polls, one row per poll
The flight-tracking integration writes a row every time it polls, whether anything changed or not. 84,120 rows describe 9,420 actual bookings, and the free tier times out often enough that gaps in the history are common.
Resolution. The final status of each booking loads onto the booking itself and the poll history is archived rather than migrated. Nothing is lost that anybody reads, and the travel register drops from 84,000 rows to 9,420.
Project typed as free text on 1.2% of Take 5s
The Take 5 form lives in Zoho Forms rather than Creator, so the project is a typed string with no lookup. 95,636 of 96,840 match a project by name. The remaining 1,204 are things like "Saraji", "MTW workshop" and "Bris rail": readable by a person, ambiguous to a loader.
Resolution. Loaded against the project their author was rostered to on that date, with the original string kept. 41 remain genuinely ambiguous and are listed for Sam to resolve by hand.
The same tender exists in both CRM and Creator
Estimating raise tenders in Creator; the same opportunities are tracked as Deals in CRM. 642 pairs are the same tender under two different keys, and the values disagree on 88 of them because one was updated and the other was not.
Resolution. Deduplicated on client + site + close date. Where values disagree the Creator figure wins (it is the one the quote was issued from) and the CRM value is kept as a note on the record.
Task text does not resolve to a rate code on 16% of day cards
Day cards carry free text rather than a schedule-of-rates item, so hours cannot always be attributed to a rate. 180,515 of 214,806 match a rate by wording. The rest are things like "general", "site" and "cleanup".
Resolution. Loaded with the text intact and no rate code. From cutover the crew app offers the project's own schedule of rates, so this stops accumulating on day one.
Stored contract value disagrees with the sum of the schedule-of-rates lines
27 projects have a typed Contract_Value that does not equal the sum of their SOR lines: variance from -$18,400 to +$62,900. This is the drift that happens when a total is typed and lines are edited separately.
Resolution. The typed total is not imported. The contract sum becomes the sum of the lines, which is the figure the claims were actually cut against. All 27 are listed with their variance for Janelle to confirm.
214 GB of site photos in Zoho WorkDrive
Photos are referenced from the diary records but stored in WorkDrive. Pulling them at API rate limits takes roughly 31 hours.
Resolution. Migrated by reference in the dry run so nothing is blocked, then bulk-copied across the cutover weekend. No diary loses its attachments.
Ticket expiry dates disagree between Creator and the Excel matrix
214 tickets have a different expiry date in the spreadsheet than in Creator, because the spreadsheet is the one that actually gets maintained. Three of them are expiries inside the next 30 days.
Resolution. The later of the two dates is loaded and both are shown on the record, flagged for Sam. After cutover there is one place for this to live.
The ledger is not migrated
QClad's accounting package stays exactly where it is. This system posts invoices to it and reads payment status back, the same as today.
Resolution. Kept as an integration. No accounting data moves.
The cutover, eight steps
Zoho remains the system of record until the parallel run reconciles twice. Crews move across one at a time, and no data entry stops during the changeover.
Read-only export from Zoho
Done 2 daysA full export of every Creator app, CRM module and Books ledger through Zoho's own API: read-only credentials, nothing written back. This is the analysis on this page.
Build partner + Wes Nakamura
Object inventory and mapping sign-off
Done 1 weekEvery form on this page mapped to a target, reviewed by the person who owns it. Anything marked Superseded is confirmed dead by its owner before it is dropped.
QClad module owners
Dry-run load into a parallel environment
Ready 3 daysEvery record from every source loaded into a copy of this system. Every derived figure (contract sums, claim values, retention, project margin) recomputed and reconciled against the Zoho figure line by line.
Build partner
Reconciliation review with QClad
Planned 1 weekThe directors, the business manager and contracts administration review the parallel environment against their own reporting. Anything that disagrees is explained or corrected before cutover proceeds.
QClad directors + build partner
Parallel run, one claim cycle
Planned 4 weeksOne full month claimed in both systems. Zoho stays the system of record until the numbers match twice.
Janelle Roe
Crew app rollout by crew
Planned 4 weeksOne crew at a time, a week apart, so the leading hand of the crew already on it can help the next. Zoho timesheets stay open until every crew is across.
Sam Kirkwood
Delta load and cutover weekend
Planned 1 weekendEverything created in Zoho since the dry run is re-loaded, the 214 GB of site photos are bulk-copied, and Zoho goes read-only on the Monday. No data entry stops.
Build partner + Wes Nakamura
Handover
Planned 1 dayThe source repository, the schema, the deployment and the build pipeline are transferred to QClad, with a walkthrough for Wes and the QClad developer.
Build partner → QClad