feat(data): add lifecycleStage + stageHistory to all projects
This commit is contained in:
+238
-12
@@ -2201,7 +2201,15 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_001_3', userId: 'sub_001', name: 'Carlos Mendoza', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Subcontractor', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_001_3', userId: 'sub_001', name: 'Carlos Mendoza', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Subcontractor', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
{ id: 'jtm_001_4', userId: 'e1', name: 'Cody Tatum', email: 'agent1@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_001_4', userId: 'e1', name: 'Cody Tatum', email: 'agent1@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_001_5', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'pending', commissionEnabled: true, jobCommission: null }
|
{ id: 'jtm_001_5', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'pending', commissionEnabled: true, jobCommission: null }
|
||||||
]
|
],
|
||||||
|
lifecycleStage: 'Work In Progress',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-01-05', by: 'Justin Johnson', note: 'Storm damage lead identified — 2604 Dunwick Dr.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-01-10', by: 'Justin Johnson', note: 'Adjuster confirmed hail damage; claim approved.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-01-15', by: 'Justin Johnson', note: 'Full roof replacement scope signed off.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-01-20', by: 'Justin Johnson', note: 'Contract executed; mobilization deposit collected.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-01-27', by: 'Justin Johnson', note: 'Shingle install underway; dry-in inspection passed.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// Project 2: Completed, zero variance (perfectly on budget)
|
// Project 2: Completed, zero variance (perfectly on budget)
|
||||||
@@ -2255,7 +2263,14 @@ const MOCK_PROJECTS = [
|
|||||||
teamMembers: [
|
teamMembers: [
|
||||||
{ id: 'jtm_002_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_002_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_002_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }
|
{ id: 'jtm_002_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }
|
||||||
]
|
],
|
||||||
|
lifecycleStage: 'Project Completed',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2025-11-01', by: 'Justin Johnson', note: 'Gutter replacement lead — 2617 Rothland Ln.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2025-11-15', by: 'Justin Johnson', note: 'Contract executed; work scheduled.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2025-11-18', by: 'Justin Johnson', note: 'Old gutter removal started.' },
|
||||||
|
{ stage: 'Project Completed', date: '2025-12-10', by: 'Justin Johnson', note: 'Final walkthrough complete; pending final invoice.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// Project 3: Delayed with missed milestone
|
// Project 3: Delayed with missed milestone
|
||||||
@@ -2336,7 +2351,14 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_003_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: { type: 'flat', rate: 2000 } },
|
{ id: 'jtm_003_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: { type: 'flat', rate: 2000 } },
|
||||||
{ id: 'jtm_003_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Project Manager', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_003_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Project Manager', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
{ id: 'jtm_003_3', userId: 'sub_001', name: 'Carlos Mendoza', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Subcontractor', status: 'active', commissionEnabled: false, jobCommission: null }
|
{ id: 'jtm_003_3', userId: 'sub_001', name: 'Carlos Mendoza', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Subcontractor', status: 'active', commissionEnabled: false, jobCommission: null }
|
||||||
]
|
],
|
||||||
|
lifecycleStage: 'Work In Progress',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2025-12-20', by: 'Justin Johnson', note: 'HVAC replacement needed — 6613 Phoenix Pl.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2025-12-28', by: 'Justin Johnson', note: 'HVAC design plans approved.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-01-06', by: 'Justin Johnson', note: 'Contract executed.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-01-10', by: 'Justin Johnson', note: 'Site prep complete; ductwork rough-in started. Delayed due to equipment backorder.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// Project 4: Active, on track, under budget
|
// Project 4: Active, on track, under budget
|
||||||
@@ -2427,7 +2449,16 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_004_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Project Manager', status: 'active', commissionEnabled: true, jobCommission: { type: 'percent_net', rate: 8 } },
|
{ id: 'jtm_004_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Project Manager', status: 'active', commissionEnabled: true, jobCommission: { type: 'percent_net', rate: 8 } },
|
||||||
{ id: 'jtm_004_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_004_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
{ id: 'jtm_004_3', userId: 'e2', name: 'Hannah Reyes', email: 'agent2@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Inspector', status: 'active', commissionEnabled: false, jobCommission: null }
|
{ id: 'jtm_004_3', userId: 'e2', name: 'Hannah Reyes', email: 'agent2@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Inspector', status: 'active', commissionEnabled: false, jobCommission: null }
|
||||||
]
|
],
|
||||||
|
lifecycleStage: 'Work Complete — Awaiting Inspection',
|
||||||
|
completionPercentage: 80,
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2025-11-15', by: 'Justin Johnson', note: 'Interior renovation lead — 2612 Dunwick Dr.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2025-11-22', by: 'Justin Johnson', note: 'Renovation scope approved with kitchen expansion.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2025-12-01', by: 'Justin Johnson', note: 'Contract executed; demo crew scheduled.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2025-12-10', by: 'Justin Johnson', note: 'Demo started. Framing and MEP phases completed through Jan.' },
|
||||||
|
{ stage: 'Work Complete — Awaiting Inspection', date: '2026-02-16', by: 'Justin Johnson', note: 'Flooring and trim in progress; final punch list pending city inspection.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// Project 5: On Hold with pending dispute
|
// Project 5: On Hold with pending dispute
|
||||||
@@ -2504,7 +2535,13 @@ const MOCK_PROJECTS = [
|
|||||||
teamMembers: [
|
teamMembers: [
|
||||||
{ id: 'jtm_005_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_005_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_005_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }
|
{ id: 'jtm_005_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }
|
||||||
]
|
],
|
||||||
|
lifecycleStage: 'Work In Progress',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2025-12-20', by: 'Justin Johnson', note: 'Siding replacement lead — 2608 Dunwick Dr.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-01-06', by: 'Justin Johnson', note: 'Contract executed; scaffolding crew scheduled.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-01-08', by: 'Justin Johnson', note: 'Scaffolding and old siding removal complete; project paused due to defective panel dispute.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// Project 6: Active, on track, early stage
|
// Project 6: Active, on track, early stage
|
||||||
@@ -2562,7 +2599,14 @@ const MOCK_PROJECTS = [
|
|||||||
teamMembers: [
|
teamMembers: [
|
||||||
{ id: 'jtm_006_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_006_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_006_2', userId: 'sub_001', name: 'Carlos Mendoza', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }
|
{ id: 'jtm_006_2', userId: 'sub_001', name: 'Carlos Mendoza', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }
|
||||||
]
|
],
|
||||||
|
lifecycleStage: 'Contract Signed',
|
||||||
|
completionPercentage: 22,
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-01-20', by: 'Justin Johnson', note: 'Electrical upgrade needed — 3913 Arizona Pl.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-01-28', by: 'Justin Johnson', note: 'Load calc and panel spec approved.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-02-03', by: 'Justin Johnson', note: 'Contract executed; permit application filed.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
@@ -2668,7 +2712,16 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_007_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_007_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
{ id: 'jtm_007_3', userId: 'sub_001', name: 'Carlos Mendoza', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Subcontractor', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_007_3', userId: 'sub_001', name: 'Carlos Mendoza', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Subcontractor', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
{ id: 'jtm_007_4', userId: 'e4', name: 'Shelby Greer', email: 'agent4@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'active', commissionEnabled: true, jobCommission: null }
|
{ id: 'jtm_007_4', userId: 'e4', name: 'Shelby Greer', email: 'agent4@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'active', commissionEnabled: true, jobCommission: null }
|
||||||
]
|
],
|
||||||
|
lifecycleStage: 'Work In Progress',
|
||||||
|
completionPercentage: 32,
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-01-10', by: 'Diana Reeves', note: 'Commercial roof replacement — 6909 Custer Rd.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-01-18', by: 'Diana Reeves', note: 'Roof survey confirmed TPO membrane failure; insulation saturated.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-01-22', by: 'Diana Reeves', note: 'Full TPO replacement scope + drainage scuppers approved.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-01-27', by: 'Diana Reeves', note: 'Contract executed; mobilization payment released.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-02-03', by: 'Diana Reeves', note: 'Material procurement complete; Section A tear-off underway.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// Project 8: Active, on track, under budget
|
// Project 8: Active, on track, under budget
|
||||||
@@ -2736,7 +2789,17 @@ const MOCK_PROJECTS = [
|
|||||||
teamMembers: [
|
teamMembers: [
|
||||||
{ id: 'jtm_008_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_008_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_008_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }
|
{ id: 'jtm_008_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }
|
||||||
]
|
],
|
||||||
|
lifecycleStage: 'Work Complete — Awaiting Inspection',
|
||||||
|
completionPercentage: 88,
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2025-11-05', by: 'Diana Reeves', note: 'Foundation settlement identified — 2112 Winslow Dr.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2025-11-12', by: 'Diana Reeves', note: 'Structural engineer confirmed 18 piers required.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2025-11-15', by: 'Diana Reeves', note: 'Full pier + plumbing re-test scope approved.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2025-11-18', by: 'Diana Reeves', note: 'Contract executed; pier installation crews mobilized.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2025-11-22', by: 'Diana Reeves', note: 'Pier installation east and west sides complete; slab lifting done.' },
|
||||||
|
{ stage: 'Work Complete — Awaiting Inspection', date: '2026-02-10', by: 'Diana Reeves', note: 'Final grade and drainage in progress; re-certification pending.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// Project 9: Delayed with missed milestone
|
// Project 9: Delayed with missed milestone
|
||||||
@@ -2796,7 +2859,14 @@ const MOCK_PROJECTS = [
|
|||||||
teamMembers: [
|
teamMembers: [
|
||||||
{ id: 'jtm_009_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_009_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_009_2', userId: 'e2', name: 'Hannah Reyes', email: 'agent2@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Inspector', status: 'active', commissionEnabled: false, jobCommission: null }
|
{ id: 'jtm_009_2', userId: 'e2', name: 'Hannah Reyes', email: 'agent2@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Inspector', status: 'active', commissionEnabled: false, jobCommission: null }
|
||||||
]
|
],
|
||||||
|
lifecycleStage: 'Work In Progress',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-01-03', by: 'Diana Reeves', note: 'Window replacement — 7224 Independence Pkwy.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-01-08', by: 'Diana Reeves', note: 'Custom window specs approved; energy audit included.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-01-13', by: 'Diana Reeves', note: 'Contract executed; window fabrication ordered.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-02-07', by: 'Diana Reeves', note: 'Floor 1 installation complete; Floor 2 underway.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// Project 10: Completed, zero variance
|
// Project 10: Completed, zero variance
|
||||||
@@ -2857,7 +2927,14 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_010_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: { type: 'flat', rate: 1500 } },
|
{ id: 'jtm_010_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: { type: 'flat', rate: 1500 } },
|
||||||
{ id: 'jtm_010_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_010_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
{ id: 'jtm_010_3', userId: 'e5', name: 'Dalton Pruitt', email: 'agent5@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'pending', commissionEnabled: false, jobCommission: null }
|
{ id: 'jtm_010_3', userId: 'e5', name: 'Dalton Pruitt', email: 'agent5@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'pending', commissionEnabled: false, jobCommission: null }
|
||||||
]
|
],
|
||||||
|
lifecycleStage: 'Project Completed',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2025-09-01', by: 'Diana Reeves', note: 'Parking lot resurface — 2100 Legacy Dr.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2025-09-15', by: 'Diana Reeves', note: 'Contract executed; milling crew scheduled.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2025-09-20', by: 'Diana Reeves', note: 'Surface milling and paving underway.' },
|
||||||
|
{ stage: 'Project Completed', date: '2025-10-28', by: 'Diana Reeves', note: 'Striping and ADA signage done; final invoice pending.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// Project 11: Disputed with open change orders and unresolved issues
|
// Project 11: Disputed with open change orders and unresolved issues
|
||||||
@@ -2942,7 +3019,14 @@ const MOCK_PROJECTS = [
|
|||||||
teamMembers: [
|
teamMembers: [
|
||||||
{ id: 'jtm_011_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Project Manager', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_011_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Project Manager', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
{ id: 'jtm_011_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }
|
{ id: 'jtm_011_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }
|
||||||
]
|
],
|
||||||
|
lifecycleStage: 'Work In Progress',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2025-11-20', by: 'Diana Reeves', note: 'Facade restoration — Legacy Town Center.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2025-11-28', by: 'Diana Reeves', note: 'Masonry and waterproofing scope approved.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2025-12-08', by: 'Diana Reeves', note: 'Contract executed; scaffolding crew mobilized.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2025-12-12', by: 'Diana Reeves', note: 'Scaffolding up; masonry Phase 1 & 2 complete. Disputed scope on CO #2/#3 — project effectively paused at 62%.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// Project 12: On Hold
|
// Project 12: On Hold
|
||||||
@@ -3004,7 +3088,14 @@ const MOCK_PROJECTS = [
|
|||||||
teamMembers: [
|
teamMembers: [
|
||||||
{ id: 'jtm_012_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_012_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_012_2', userId: 'e3', name: 'Travis Boone', email: 'agent3@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'active', commissionEnabled: false, jobCommission: null }
|
{ id: 'jtm_012_2', userId: 'e3', name: 'Travis Boone', email: 'agent3@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'active', commissionEnabled: false, jobCommission: null }
|
||||||
]
|
],
|
||||||
|
lifecycleStage: 'Work In Progress',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-01-03', by: 'Diana Reeves', note: 'Plumbing overhaul — Dallas/Plano Marriott.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-01-08', by: 'Diana Reeves', note: 'Full main-line replacement scope approved.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-01-13', by: 'Diana Reeves', note: 'Contract executed.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-01-17', by: 'Diana Reeves', note: 'Assessment and material procurement complete; main line replaced. On hold pending permit review.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
@@ -3083,6 +3174,14 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_013_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_013_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_013_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_013_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Contract Signed',
|
||||||
|
completionPercentage: 25,
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-03-10', by: 'Justin Johnson', note: 'Storm damage roof lead — Charlotte Norris, 2908 Roundabout Ln.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-03-14', by: 'Justin Johnson', note: 'Hail damage confirmed by adjuster; claim approved.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-03-18', by: 'Justin Johnson', note: 'Full roof replacement scope approved by insurance.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-03-22', by: 'Justin Johnson', note: 'Contract executed; 30% deposit collected. Permits in progress.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-014 — Henry Castaneda (kl_024, kc_signed)
|
// PRJ-2026-014 — Henry Castaneda (kl_024, kc_signed)
|
||||||
@@ -3160,6 +3259,14 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_014_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_014_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_014_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_014_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Contract Signed',
|
||||||
|
completionPercentage: 20,
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-03-08', by: 'Justin Johnson', note: 'Insurance siding replacement lead — Henry Castaneda, 5614 Ridgewood Dr.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-03-12', by: 'Justin Johnson', note: 'Storm damage verified; full siding scope approved by carrier.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-03-16', by: 'Justin Johnson', note: 'HOA color approval pending; scope otherwise complete.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-03-20', by: 'Justin Johnson', note: 'Contract executed; 25% deposit collected.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-015 — Yvonne Blackwell (kl_025, kc_signed)
|
// PRJ-2026-015 — Yvonne Blackwell (kl_025, kc_signed)
|
||||||
@@ -3233,6 +3340,13 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_015_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_015_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_015_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_015_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Contract Signed',
|
||||||
|
completionPercentage: 28,
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-03-01', by: 'Justin Johnson', note: 'Cash client roof replacement — Yvonne Blackwell, 3401 Parker Rd.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-03-07', by: 'Justin Johnson', note: 'Scope set; 28 squares OC TruDefinition Duration.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-03-11', by: 'Justin Johnson', note: 'Contract executed; 50% deposit collected. Permit approved 3/20.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-016 — Emmanuel Okafor (kl_026, kc_signed)
|
// PRJ-2026-016 — Emmanuel Okafor (kl_026, kc_signed)
|
||||||
@@ -3307,6 +3421,14 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_016_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_016_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_016_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_016_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Contract Signed',
|
||||||
|
completionPercentage: 22,
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-03-15', by: 'Justin Johnson', note: 'Insurance roof + gutter lead — Emmanuel Okafor, 4812 Mapleshade Ln.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-03-18', by: 'Justin Johnson', note: 'Hail damage verified; full roof + gutter scope approved.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-03-21', by: 'Justin Johnson', note: 'GAF shingles + K-style gutters scope finalized.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-03-25', by: 'Justin Johnson', note: 'Contract executed; 30% deposit collected.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-017 — Adriana Voss (kl_027, kc_signed)
|
// PRJ-2026-017 — Adriana Voss (kl_027, kc_signed)
|
||||||
@@ -3383,6 +3505,14 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_017_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_017_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_017_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_017_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Contract Signed',
|
||||||
|
completionPercentage: 24,
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-03-10', by: 'Justin Johnson', note: 'Insurance roof lead — Adriana Voss, 1820 Custer Rd. 6-week supplement negotiation.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-03-15', by: 'Justin Johnson', note: 'Adjuster approved full replacement + ice/water barrier supplement.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-03-22', by: 'Justin Johnson', note: 'Supplemental scope finalized.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-03-28', by: 'Justin Johnson', note: 'Contract executed; 30% deposit collected. Materials ordered.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-018 — Marvin Delgado (kl_028, kc_progress)
|
// PRJ-2026-018 — Marvin Delgado (kl_028, kc_progress)
|
||||||
@@ -3465,6 +3595,13 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_018_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_018_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_018_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_018_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Work In Progress',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-02-15', by: 'Justin Johnson', note: 'Insurance roof replacement — Marvin Delgado, 6820 Windhaven Pkwy.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-02-18', by: 'Justin Johnson', note: 'Storm damage confirmed; adjuster approved scope.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-02-28', by: 'Justin Johnson', note: 'Contract executed; deposit and progress payments on schedule.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-03-18', by: 'Justin Johnson', note: 'Tear-off complete; roofing install underway. 2 rotted deck boards replaced via CO.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-019 — Sandra Tran (kl_029, kc_progress)
|
// PRJ-2026-019 — Sandra Tran (kl_029, kc_progress)
|
||||||
@@ -3548,6 +3685,13 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_019_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_019_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_019_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_019_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Work In Progress',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-02-10', by: 'Justin Johnson', note: 'Insurance siding replacement — Sandra Tran, 2506 Springpark Dr.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-02-14', by: 'Justin Johnson', note: 'Storm damage confirmed; full siding scope approved.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-02-25', by: 'Justin Johnson', note: 'Contract executed; deposit collected.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-03-25', by: 'Justin Johnson', note: 'Siding install underway; hidden rot discovered, CO raised for sheathing replacement.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-020 — Reginald Hopper (kl_030, kc_progress)
|
// PRJ-2026-020 — Reginald Hopper (kl_030, kc_progress)
|
||||||
@@ -3630,6 +3774,15 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_020_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_020_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_020_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_020_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Work Complete — Awaiting Inspection',
|
||||||
|
completionPercentage: 80,
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-02-10', by: 'Justin Johnson', note: 'Insurance roof + gutter — Reginald Hopper, 1504 Estates Dr.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-02-15', by: 'Justin Johnson', note: 'Hail damage verified; full scope approved.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-02-24', by: 'Justin Johnson', note: 'Contract executed; production scheduled.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-03-20', by: 'Justin Johnson', note: 'Roofing complete; gutter install started.' },
|
||||||
|
{ stage: 'Work Complete — Awaiting Inspection', date: '2026-04-08', by: 'Justin Johnson', note: 'Gutter install complete; final inspection scheduled.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
@@ -3712,6 +3865,13 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_021_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_021_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_021_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_021_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Work In Progress',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-02-20', by: 'Diana Reeves', note: 'Cash premium roof — Nadia Thornton, 5150 Preston Rd.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-02-26', by: 'Diana Reeves', note: 'Premium Owens Corning HDZ spec approved.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-03-03', by: 'Diana Reeves', note: 'Contract executed; full upfront payment received.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-03-28', by: 'Diana Reeves', note: 'Materials arrived; premium install started. Warranty registration RFI open.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-022 — Clifford Aguilar (kl_032, kc_progress)
|
// PRJ-2026-022 — Clifford Aguilar (kl_032, kc_progress)
|
||||||
@@ -3789,6 +3949,12 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_022_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_022_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_022_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_022_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Work In Progress',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-02-25', by: 'Diana Reeves', note: 'Siding repair — Clifford Aguilar, 3822 Haverwood Ln.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-03-07', by: 'Diana Reeves', note: 'Partial repair scope (south + west faces). Contract executed.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-04-01', by: 'Diana Reeves', note: 'South face complete; west face install in progress.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-023 — Tamara Owens (kl_033, kc_progress)
|
// PRJ-2026-023 — Tamara Owens (kl_033, kc_progress)
|
||||||
@@ -3869,6 +4035,14 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_023_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_023_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_023_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_023_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Work In Progress',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-02-05', by: 'Diana Reeves', note: 'Large roof replacement lead — Tamara Owens, 2010 Oak Creek Blvd. $42K job.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-02-08', by: 'Diana Reeves', note: 'Adjuster confirmed hail damage on 3,600 sq ft roof.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-02-11', by: 'Diana Reeves', note: 'Full replacement scope approved by insurance.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-02-15', by: 'Diana Reeves', note: 'Contract executed; 25% deposit collected.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-04-05', by: 'Diana Reeves', note: 'Two crews on site; chimney flashing RFI opened — architect sign-off needed.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-024 — Craig Singleton (kl_034, kc_complete)
|
// PRJ-2026-024 — Craig Singleton (kl_034, kc_complete)
|
||||||
@@ -3949,6 +4123,15 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_024_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_024_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_024_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_024_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Final Payment Received — Closed',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-01-22', by: 'Diana Reeves', note: 'Insurance roof replacement — Craig Singleton, 4110 Lorimar Dr.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-01-26', by: 'Diana Reeves', note: 'Adjuster confirmed hail damage; scope approved.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-02-01', by: 'Diana Reeves', note: 'Contract executed; deposit collected at signing.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-02-20', by: 'Diana Reeves', note: 'Tear-off and install completed in 1 day.' },
|
||||||
|
{ stage: 'Project Completed', date: '2026-02-28', by: 'Diana Reeves', note: 'Final inspection passed. 5-star review.' },
|
||||||
|
{ stage: 'Final Payment Received — Closed', date: '2026-03-01', by: 'Diana Reeves', note: 'Final payment received; file closed.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-025 — Bertha Fleming (kl_035, kc_complete)
|
// PRJ-2026-025 — Bertha Fleming (kl_035, kc_complete)
|
||||||
@@ -4028,6 +4211,15 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_025_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_025_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_025_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_025_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Final Payment Received — Closed',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-01-15', by: 'Diana Reeves', note: 'Insurance siding replacement — Bertha Fleming, 6230 West Parker Rd.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-01-20', by: 'Diana Reeves', note: 'Storm damage verified; full siding scope approved.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-01-28', by: 'Diana Reeves', note: 'Contract executed; 25% deposit collected.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-02-15', by: 'Diana Reeves', note: 'Demo and install same day.' },
|
||||||
|
{ stage: 'Project Completed', date: '2026-02-21', by: 'Diana Reeves', note: 'Final inspection passed; trim and caulk complete.' },
|
||||||
|
{ stage: 'Final Payment Received — Closed', date: '2026-02-22', by: 'Diana Reeves', note: 'Insurance check received and deposited. File closed.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-026 — Oliver Stanton (kl_036, kc_complete)
|
// PRJ-2026-026 — Oliver Stanton (kl_036, kc_complete)
|
||||||
@@ -4105,6 +4297,15 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_026_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_026_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_026_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_026_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Final Payment Received — Closed',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-01-20', by: 'Diana Reeves', note: 'Cash roof replacement — Oliver Stanton, 3750 Legacy Dr.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-01-26', by: 'Diana Reeves', note: 'GAF materials spec finalized.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-01-30', by: 'Diana Reeves', note: 'Cash client. Full payment upfront at signing.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-02-18', by: 'Diana Reeves', note: 'Tear-off started.' },
|
||||||
|
{ stage: 'Project Completed', date: '2026-02-20', by: 'Diana Reeves', note: 'Outstanding quality. Referral bonus owed.' },
|
||||||
|
{ stage: 'Final Payment Received — Closed', date: '2026-02-20', by: 'Diana Reeves', note: 'Upfront payment confirmed; project closed.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-027 — Daphne Garrett (kl_037, kc_complete)
|
// PRJ-2026-027 — Daphne Garrett (kl_037, kc_complete)
|
||||||
@@ -4183,6 +4384,15 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_027_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_027_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_027_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_027_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Final Payment Received — Closed',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-02-02', by: 'Diana Reeves', note: 'Insurance gutters + fascia — Daphne Garrett, 1912 Mira Vista Dr.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-02-05', by: 'Diana Reeves', note: 'Storm damage confirmed; scope approved by carrier.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-02-10', by: 'Diana Reeves', note: 'Contract executed; 50% deposit collected.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-02-28', by: 'Diana Reeves', note: 'Fascia repair and gutter install complete.' },
|
||||||
|
{ stage: 'Project Completed', date: '2026-03-02', by: 'Diana Reeves', note: 'Customer gave referral cards to 3 neighbors.' },
|
||||||
|
{ stage: 'Final Payment Received — Closed', date: '2026-03-02', by: 'Diana Reeves', note: 'Final payment received; file closed.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// PRJ-2026-028 — Nathaniel Cruz (kl_038, kc_complete)
|
// PRJ-2026-028 — Nathaniel Cruz (kl_038, kc_complete)
|
||||||
@@ -4264,6 +4474,15 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_028_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_028_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_028_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_028_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Final Payment Received — Closed',
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-01-25', by: 'Diana Reeves', note: 'Insurance roof replacement — Nathaniel Cruz, 5808 Tennyson Pkwy.' },
|
||||||
|
{ stage: 'Damage Verified', date: '2026-01-28', by: 'Diana Reeves', note: 'Complex insurance supplemental negotiation complete.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-02-04', by: 'Diana Reeves', note: 'Contract executed; 30% deposit collected.' },
|
||||||
|
{ stage: 'Work In Progress', date: '2026-03-10', by: 'Diana Reeves', note: 'Tear-off found 3 rotted deck sheets; CO raised and approved.' },
|
||||||
|
{ stage: 'Project Completed', date: '2026-03-18', by: 'Diana Reeves', note: 'Final inspection passed.' },
|
||||||
|
{ stage: 'Final Payment Received — Closed', date: '2026-03-20', by: 'Diana Reeves', note: 'Final payment received. Longest close — 7 weeks. File closed.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// Converted from won kanban lead kl_044 (signed, awaiting HOA approval before start)
|
// Converted from won kanban lead kl_044 (signed, awaiting HOA approval before start)
|
||||||
@@ -4335,6 +4554,13 @@ const MOCK_PROJECTS = [
|
|||||||
{ id: 'jtm_029_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
{ id: 'jtm_029_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null },
|
||||||
{ id: 'jtm_029_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
{ id: 'jtm_029_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null },
|
||||||
],
|
],
|
||||||
|
lifecycleStage: 'Contract Signed',
|
||||||
|
completionPercentage: 8,
|
||||||
|
stageHistory: [
|
||||||
|
{ stage: 'Lead', date: '2026-03-18', by: 'Justin Johnson', note: 'Gutter replacement — Jerome Watkins, 3908 Plano Pkwy.' },
|
||||||
|
{ stage: 'Scope Approved', date: '2026-03-22', by: 'Justin Johnson', note: 'LeafGuard DFW gutter spec finalized.' },
|
||||||
|
{ stage: 'Contract Signed', date: '2026-03-25', by: 'Justin Johnson', note: 'Contract executed; 30% deposit collected. Awaiting HOA approval before production start.' },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user