feat(data): de-fake customer phones, tag 10 demo archetypes, add lost lead (#3), make #6 over-budget
This commit is contained in:
+62
-21
@@ -2214,6 +2214,7 @@ const MOCK_PROJECTS = [
|
||||
subcontractorIds: [],
|
||||
projectType: 'Gutter Replacement',
|
||||
status: 'completed',
|
||||
demoScenario: 4,
|
||||
phase: 'Handover',
|
||||
budget: 8500,
|
||||
approvedBudget: 8500,
|
||||
@@ -2267,6 +2268,7 @@ const MOCK_PROJECTS = [
|
||||
subcontractorIds: ['sub_001'],
|
||||
projectType: 'HVAC Installation',
|
||||
status: 'active',
|
||||
demoScenario: 5,
|
||||
phase: 'MEP',
|
||||
budget: 32000,
|
||||
approvedBudget: 32000,
|
||||
@@ -2578,6 +2580,7 @@ const MOCK_PROJECTS = [
|
||||
subcontractorIds: ['sub_001'],
|
||||
projectType: 'Commercial Roof Replacement',
|
||||
status: 'active',
|
||||
demoScenario: 7,
|
||||
phase: 'Structural',
|
||||
budget: 125000,
|
||||
approvedBudget: 125000,
|
||||
@@ -2678,6 +2681,7 @@ const MOCK_PROJECTS = [
|
||||
subcontractorIds: [],
|
||||
projectType: 'Foundation Repair',
|
||||
status: 'active',
|
||||
demoScenario: 8,
|
||||
phase: 'Finishing',
|
||||
budget: 75000,
|
||||
approvedBudget: 75000,
|
||||
@@ -2866,6 +2870,7 @@ const MOCK_PROJECTS = [
|
||||
subcontractorIds: ['sub_001'],
|
||||
projectType: 'Exterior Facade Restoration',
|
||||
status: 'disputed',
|
||||
demoScenario: 10,
|
||||
budget: 95000,
|
||||
spent: 68400,
|
||||
margin: 0.20,
|
||||
@@ -2902,6 +2907,12 @@ const MOCK_PROJECTS = [
|
||||
{ id: 'ms_011_6', name: 'Window Sealant Replacement', dueDate: '2026-02-28', status: 'pending', assignedTo: 'v4' },
|
||||
{ id: 'ms_011_7', name: 'Final Restoration and Paint', dueDate: '2026-03-15', status: 'pending', assignedTo: 'con_001' }
|
||||
],
|
||||
paymentSchedule: [
|
||||
{ id: 'ps_011_1', milestone: 'Mobilization (20%)', amount: 19000, dueDate: '2025-12-10', status: 'paid' },
|
||||
{ id: 'ps_011_2', milestone: 'Phase 1 Complete (25%)', amount: 23750, dueDate: '2026-01-15', status: 'paid' },
|
||||
{ id: 'ps_011_3', milestone: 'Phase 2 & Waterproof (30%)', amount: 28500, dueDate: '2026-02-20', status: 'pending' },
|
||||
{ id: 'ps_011_4', milestone: 'Final Completion (25%)', amount: 23750, dueDate: '2026-03-20', status: 'pending' },
|
||||
],
|
||||
invoices: [
|
||||
{ id: 'inv_011_1', amount: 22000, submittedBy: 'con_001', status: 'paid', dueDate: '2025-12-18', datePaid: '2025-12-20' },
|
||||
{ id: 'inv_011_2', amount: 18400, submittedBy: 'v1', status: 'paid', dueDate: '2026-01-15', datePaid: '2026-01-18' },
|
||||
@@ -2909,6 +2920,15 @@ const MOCK_PROJECTS = [
|
||||
{ id: 'inv_011_4', amount: 12800, submittedBy: 'con_001', status: 'pending', dueDate: '2026-02-20' },
|
||||
{ id: 'inv_011_5', amount: 8900, submittedBy: 'v4', status: 'pending', dueDate: '2026-03-05' }
|
||||
],
|
||||
issueLog: [
|
||||
{ id: 'issue_011_1', title: 'Scope dispute — contractor claims 3 unapproved COs; owner withheld Phase 2 payment', priority: 'Critical', status: 'open', assignedTo: 'Jesus Gonzales', dateReported: '2026-02-18' },
|
||||
],
|
||||
activityTimeline: [
|
||||
{ date: '2026-02-18', action: 'Dispute Opened', user: 'Diana Reeves', details: 'Owner withheld Phase 2 milestone payment — disputes scope of CO #2 and CO #3. Project effectively paused.' },
|
||||
{ date: '2026-02-10', action: 'Change Order Disputed', user: 'Texas Builders LLC', details: 'CO #3 structural reinforcement — owner claims it was not in original bid.' },
|
||||
{ date: '2026-01-30', action: 'Payment Released', user: 'Diana Reeves', details: 'Phase 1 payment released after masonry sign-off.' },
|
||||
{ date: '2025-12-20', action: 'Mobilization Payment', user: 'Diana Reeves', details: 'Project started — 20% mobilization paid.' },
|
||||
],
|
||||
documents: [
|
||||
{ name: 'Facade Restoration Master Contract', url: '#', type: 'contract' },
|
||||
{ name: 'Building Permit #25-2101', url: '#', type: 'permit' },
|
||||
@@ -2999,7 +3019,7 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9013',
|
||||
address: '2908 Roundabout Ln, Plano, TX 75023',
|
||||
customerName: 'Charlotte Norris',
|
||||
customerPhone: '(972) 555-0123',
|
||||
customerPhone: '(972) 413-7842',
|
||||
customerEmail: 'charlotte.n@gmail.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
@@ -3073,7 +3093,7 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9014',
|
||||
address: '5614 Ridgewood Dr, Plano, TX 75093',
|
||||
customerName: 'Henry Castaneda',
|
||||
customerPhone: '(972) 555-0124',
|
||||
customerPhone: '(469) 628-3519',
|
||||
customerEmail: 'hcastaneda@yahoo.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
@@ -3150,7 +3170,7 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9015',
|
||||
address: '3401 Parker Rd, Plano, TX 75023',
|
||||
customerName: 'Yvonne Blackwell',
|
||||
customerPhone: '(972) 555-0125',
|
||||
customerPhone: '(214) 857-4061',
|
||||
customerEmail: 'yblackwell@gmail.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
@@ -3223,7 +3243,7 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9016',
|
||||
address: '4812 Mapleshade Ln, Plano, TX 75075',
|
||||
customerName: 'Emmanuel Okafor',
|
||||
customerPhone: '(972) 555-0126',
|
||||
customerPhone: '(945) 319-7628',
|
||||
customerEmail: 'e.okafor@outlook.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
@@ -3297,12 +3317,13 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9017',
|
||||
address: '1820 Custer Rd, Plano, TX 75075',
|
||||
customerName: 'Adriana Voss',
|
||||
customerPhone: '(972) 555-0127',
|
||||
customerPhone: '(972) 541-8203',
|
||||
customerEmail: 'adriana.v@gmail.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
projectType: 'Roof Replacement',
|
||||
status: 'active',
|
||||
demoScenario: 2,
|
||||
phase: 'Pre-Construction',
|
||||
budget: 19600,
|
||||
approvedBudget: 19600,
|
||||
@@ -3372,12 +3393,13 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9018',
|
||||
address: '6820 Windhaven Pkwy, Plano, TX 75024',
|
||||
customerName: 'Marvin Delgado',
|
||||
customerPhone: '(972) 555-0128',
|
||||
customerPhone: '(469) 782-3954',
|
||||
customerEmail: 'mdelgado@gmail.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
projectType: 'Roof Replacement',
|
||||
status: 'active',
|
||||
demoScenario: 1,
|
||||
phase: 'Structural',
|
||||
budget: 16800,
|
||||
approvedBudget: 16800,
|
||||
@@ -3453,20 +3475,21 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9019',
|
||||
address: '2506 Springpark Dr, Plano, TX 75023',
|
||||
customerName: 'Sandra Tran',
|
||||
customerPhone: '(972) 555-0129',
|
||||
customerPhone: '(214) 631-9047',
|
||||
customerEmail: 's.tran@yahoo.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
projectType: 'Siding Replacement',
|
||||
status: 'active',
|
||||
demoScenario: 6,
|
||||
phase: 'Structural',
|
||||
budget: 28500,
|
||||
approvedBudget: 28500,
|
||||
committedCost: 27000,
|
||||
committedCost: 31400,
|
||||
actualCost: 15600,
|
||||
spent: 15600,
|
||||
variancePercent: -45.3,
|
||||
margin: 0.05,
|
||||
margin: -0.10,
|
||||
commissionType: 'percent_gross',
|
||||
commissionRate: 10,
|
||||
commission: 2850,
|
||||
@@ -3475,16 +3498,17 @@ const MOCK_PROJECTS = [
|
||||
completionPercentage: 55,
|
||||
healthScore: 78,
|
||||
openRFIs: 0,
|
||||
changeOrderCount: 1,
|
||||
changeOrderCount: 2,
|
||||
pendingInvoiceCount: 0,
|
||||
budgetBreakdown: [
|
||||
{ name: 'Owens Corning', category: 'Materials', allocated: 15400, committed: 15400, actual: 14200 },
|
||||
{ name: 'Plano Siding Crew', category: 'Labor', allocated: 10400, committed: 10400, actual: 600 },
|
||||
{ name: 'Plano Siding Crew', category: 'Labor', allocated: 10400, committed: 14200, actual: 600 },
|
||||
{ name: 'City of Plano', category: 'Permits', allocated: 800, committed: 800, actual: 800 },
|
||||
{ name: 'Reserve Fund', category: 'Contingency', allocated: 1900, committed: 400, actual: 0 },
|
||||
{ name: 'Reserve Fund', category: 'Contingency', allocated: 1900, committed: 1000, actual: 0 },
|
||||
],
|
||||
changeOrders: [
|
||||
{ id: 'CO-019-01', title: 'Rot Repair — 2 Panels', amount: 380, status: 'approved', description: 'Two panels of rotted OSB substrate discovered during demo. Repaired.' },
|
||||
{ id: 'CO-019-02', title: 'Hidden Rot & Structural Sheathing Replacement', amount: 3800, status: 'approved', dateSubmitted: '2026-03-28', description: 'Full west wall sheathing found severely rotted behind old siding — 320 sq ft of OSB substructure replaced plus additional labor days. Exceeds original labor budget by $3,800.' },
|
||||
],
|
||||
rfis: [],
|
||||
riskLog: [],
|
||||
@@ -3534,7 +3558,7 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9020',
|
||||
address: '1504 Estates Dr, Plano, TX 75093',
|
||||
customerName: 'Reginald Hopper',
|
||||
customerPhone: '(972) 555-0130',
|
||||
customerPhone: '(972) 487-2815',
|
||||
customerEmail: 'reg.hopper@icloud.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
@@ -3620,7 +3644,7 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9021',
|
||||
address: '5150 Preston Rd, Plano, TX 75024',
|
||||
customerName: 'Nadia Thornton',
|
||||
customerPhone: '(972) 555-0131',
|
||||
customerPhone: '(469) 354-7192',
|
||||
customerEmail: 'nadia.t@gmail.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
@@ -3698,7 +3722,7 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9022',
|
||||
address: '3822 Haverwood Ln, Plano, TX 75023',
|
||||
customerName: 'Clifford Aguilar',
|
||||
customerPhone: '(972) 555-0132',
|
||||
customerPhone: '(214) 926-5483',
|
||||
customerEmail: 'c.aguilar@outlook.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
@@ -3775,7 +3799,7 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9023',
|
||||
address: '2010 Oak Creek Blvd, Plano, TX 75023',
|
||||
customerName: 'Tamara Owens',
|
||||
customerPhone: '(972) 555-0133',
|
||||
customerPhone: '(972) 748-6130',
|
||||
customerEmail: 'tamara.o@yahoo.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
@@ -3855,7 +3879,7 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9024',
|
||||
address: '4110 Lorimar Dr, Plano, TX 75093',
|
||||
customerName: 'Craig Singleton',
|
||||
customerPhone: '(972) 555-0134',
|
||||
customerPhone: '(945) 261-8374',
|
||||
customerEmail: 'craig.s@gmail.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
@@ -3935,7 +3959,7 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9025',
|
||||
address: '6230 West Parker Rd, Plano, TX 75093',
|
||||
customerName: 'Bertha Fleming',
|
||||
customerPhone: '(972) 555-0135',
|
||||
customerPhone: '(469) 815-4027',
|
||||
customerEmail: 'bertha.f@hotmail.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
@@ -4014,12 +4038,13 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9026',
|
||||
address: '3750 Legacy Dr, Plano, TX 75023',
|
||||
customerName: 'Oliver Stanton',
|
||||
customerPhone: '(972) 555-0136',
|
||||
customerPhone: '(214) 573-9618',
|
||||
customerEmail: 'oliver.st@outlook.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
projectType: 'Roof Replacement',
|
||||
status: 'completed',
|
||||
demoScenario: 9,
|
||||
phase: 'Handover',
|
||||
budget: 22100,
|
||||
approvedBudget: 22100,
|
||||
@@ -4090,7 +4115,7 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9027',
|
||||
address: '1912 Mira Vista Dr, Plano, TX 75025',
|
||||
customerName: 'Daphne Garrett',
|
||||
customerPhone: '(972) 555-0137',
|
||||
customerPhone: '(972) 361-8459',
|
||||
customerEmail: 'daphne.g@gmail.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
@@ -4168,7 +4193,7 @@ const MOCK_PROJECTS = [
|
||||
propertyId: 'P-9028',
|
||||
address: '5808 Tennyson Pkwy, Plano, TX 75024',
|
||||
customerName: 'Nathaniel Cruz',
|
||||
customerPhone: '(972) 555-0138',
|
||||
customerPhone: '(469) 247-8613',
|
||||
customerEmail: 'ncruz@icloud.com',
|
||||
contractorId: 'con_001',
|
||||
subcontractorIds: [],
|
||||
@@ -5892,6 +5917,22 @@ const KANBAN_LEADS_INITIAL = [
|
||||
{ from: 'Signed', to: 'Follow-up', by: 'Travis Boone', date: '2026-03-28', note: 'HOA review pending. Follow-up Apr 20 for approval status.' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'kl_045', name: 'Greg Lindfors', address: '6601 Phoenix Pl, Plano, TX 75023',
|
||||
phone: '(972) 483-7162', email: 'g.lindfors@gmail.com',
|
||||
jobType: 'Roof Replacement', insuranceType: 'Insurance', value: 18000, stormSource: true,
|
||||
assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum',
|
||||
columnId: 'kc_lost', outcome: 'lost', demoScenario: 3,
|
||||
notes: 'Inspection found major hail damage; revised estimate to $18k. Customer declined — sticker shock after deductible.',
|
||||
createdDate: '2026-04-02',
|
||||
activity: [
|
||||
{ from: null, to: 'New Lead', by: 'Cody Tatum', date: '2026-04-02', note: 'Storm canvassing — homeowner reported a small leak.' },
|
||||
{ from: 'New Lead', to: 'Contacted', by: 'Cody Tatum', date: '2026-04-04', note: 'Scheduled inspection.' },
|
||||
{ from: 'Contacted', to: 'Appt Scheduled', by: 'Cody Tatum', date: '2026-04-06', note: 'Inspection Apr 9.' },
|
||||
{ from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Cody Tatum', date: '2026-04-11', note: 'Inspection found major hail damage across the slope — revised estimate $18k.' },
|
||||
{ from: 'Estimate Sent', to: 'Lost', by: 'Cody Tatum', date: '2026-04-20', note: 'Customer declined after seeing out-of-pocket deductible. Marked lost.' },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
// ── Enriched project data for signed/in-progress/complete leads ──────────────
|
||||
|
||||
Reference in New Issue
Block a user