diff --git a/src/data/mockStore.jsx b/src/data/mockStore.jsx index 9a6bc1e..b92647d 100644 --- a/src/data/mockStore.jsx +++ b/src/data/mockStore.jsx @@ -2117,7 +2117,7 @@ const MOCK_DOCUMENTS = [ const MOCK_PROJECTS = [ // ===================================================================== - // OWNER 1: Marcus Whitfield (own_001) — 6 Projects + // OWNER 1: Justin Johnson (own_001) — 6 Projects // Active owner, strong financials, one project under dispute // ===================================================================== @@ -2403,7 +2403,7 @@ const MOCK_PROJECTS = [ activityTimeline: [ { date: '2026-02-16', action: 'Issue Reported', user: 'Site Supervisor', details: 'Drywall texture inconsistent in main hallway' }, { date: '2026-02-05', action: 'Milestone Completed', user: 'Texas Builders LLC', details: 'Drywall and Paint phase finished' }, - { date: '2026-01-22', action: 'Payment Released', user: 'Marcus Whitfield', details: 'Truss and framing payment - $12,800' }, + { date: '2026-01-22', action: 'Payment Released', user: 'Justin Johnson', details: 'Truss and framing payment - $12,800' }, { date: '2026-01-18', action: 'Inspection Passed', user: 'City Inspector', details: 'Plumbing rough-in re-inspection passed' } ], invoices: [ @@ -2985,7 +2985,1261 @@ const MOCK_PROJECTS = [ { 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 } ] - } + }, + + // ===================================================================== + // OWNER 1 (own_001) — Won Kanban Leads kl_023–kl_030 → PRJ-2026-013–020 + // ===================================================================== + + // PRJ-2026-013 — Charlotte Norris (kl_023, kc_signed) + { + id: 'PRJ-2026-013', + sourceLeadId: 'kl_023', + ownerId: 'own_001', + propertyId: 'P-9013', + address: '2908 Roundabout Ln, Plano, TX 75023', + customerName: 'Charlotte Norris', + customerPhone: '(972) 555-0123', + customerEmail: 'charlotte.n@gmail.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Roof Replacement', + status: 'active', + phase: 'Pre-Construction', + budget: 18200, + approvedBudget: 18200, + committedCost: 16600, + actualCost: 0, + spent: 0, + variancePercent: -100.0, + margin: 0.09, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 1820, + startDate: '2026-03-22', + endDate: '2026-05-03', + completionPercentage: 25, + healthScore: 88, + openRFIs: 0, + changeOrderCount: 0, + pendingInvoiceCount: 0, + budgetBreakdown: [ + { name: 'ABC Supply Co.', category: 'Materials', allocated: 9800, committed: 9800, actual: 0 }, + { name: 'Plano Roofing Crew A', category: 'Labor', allocated: 6200, committed: 6200, actual: 0 }, + { name: 'City of Plano', category: 'Permits', allocated: 600, committed: 600, actual: 0 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 1600, committed: 0, actual: 0 }, + ], + changeOrders: [], + rfis: [], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_013_1', milestone: 'Deposit — 30%', amount: 5460, dueDate: '2026-03-22', status: 'paid', paidDate: '2026-03-22' }, + { id: 'ps_013_2', milestone: 'Progress — 40%', amount: 7280, dueDate: '2026-04-14', status: 'pending' }, + { id: 'ps_013_3', milestone: 'Final — 30%', amount: 5460, dueDate: '2026-04-15', status: 'pending' }, + ], + invoices: [], + milestones: [ + { id: 'ms_013_1', name: 'Contract Signed', dueDate: '2026-03-22', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_013_2', name: 'Materials Ordered', dueDate: '2026-03-24', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_013_3', name: 'Permits Pulled', dueDate: '2026-04-05', status: 'in_progress', assignedTo: 'con_001' }, + { id: 'ms_013_4', name: 'Tear-off & Decking',dueDate: '2026-04-14', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_013_5', name: 'Roofing Install', dueDate: '2026-04-21', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_013_6', name: 'Final Inspection', dueDate: '2026-04-28', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_013_7', name: 'Invoice & Payment', dueDate: '2026-05-03', status: 'pending', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-03-22', action: 'Contract Executed', user: 'Shelby Greer', details: 'Client signed. 30% deposit collected.' }, + { date: '2026-03-24', action: 'Materials Ordered', user: 'Wade Hollis', details: 'GAF Timberline HDZ Charcoal — 24 squares ordered.' }, + { date: '2026-04-05', action: 'Permit Submitted', user: 'Wade Hollis', details: 'Plano city permit application filed.' }, + ], + documents: [ + { name: 'Scope of Work - Roof Replacement', url: '#', type: 'contract' }, + { name: 'Permit Application #RFP-2026-1149', url: '#', type: 'permit' }, + { name: 'Deposit Invoice #INV-013-1', url: '#', type: 'invoice' }, + ], + teamMembers: [ + { id: 'jtm_013_1', userId: 'e4', name: 'Shelby Greer', email: 'agent4@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-014 — Henry Castaneda (kl_024, kc_signed) + { + id: 'PRJ-2026-014', + sourceLeadId: 'kl_024', + ownerId: 'own_001', + propertyId: 'P-9014', + address: '5614 Ridgewood Dr, Plano, TX 75093', + customerName: 'Henry Castaneda', + customerPhone: '(972) 555-0124', + customerEmail: 'hcastaneda@yahoo.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Siding Replacement', + status: 'active', + phase: 'Pre-Construction', + budget: 31500, + approvedBudget: 31500, + committedCost: 29300, + actualCost: 0, + spent: 0, + variancePercent: -100.0, + margin: 0.07, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 3150, + startDate: '2026-03-20', + endDate: '2026-05-01', + completionPercentage: 20, + healthScore: 85, + openRFIs: 1, + changeOrderCount: 0, + pendingInvoiceCount: 0, + budgetBreakdown: [ + { name: 'Owens Corning', category: 'Materials', allocated: 17000, committed: 17000, actual: 0 }, + { name: 'Plano Siding Crew', category: 'Labor', allocated: 11500, committed: 11500, actual: 0 }, + { name: 'City of Plano', category: 'Permits', allocated: 800, committed: 800, actual: 0 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 2200, committed: 0, actual: 0 }, + ], + changeOrders: [], + rfis: [ + { id: 'RFI-014-01', subject: 'HOA Color Approval', status: 'open', submittedBy: 'Hannah Reyes', dateOpened: '2026-03-25', dateClosed: null }, + ], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_014_1', milestone: 'Deposit — 25%', amount: 7875, dueDate: '2026-03-20', status: 'paid', paidDate: '2026-03-20' }, + { id: 'ps_014_2', milestone: 'Progress — 50%', amount: 15750, dueDate: '2026-04-25', status: 'pending' }, + { id: 'ps_014_3', milestone: 'Final — 25%', amount: 7875, dueDate: '2026-05-01', status: 'pending' }, + ], + invoices: [], + milestones: [ + { id: 'ms_014_1', name: 'Contract Signed', dueDate: '2026-03-20', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_014_2', name: 'Materials Ordered',dueDate: '2026-03-23', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_014_3', name: 'Permit Pulled', dueDate: '2026-04-05', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_014_4', name: 'Prep & Demo', dueDate: '2026-04-15', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_014_5', name: 'Siding Install', dueDate: '2026-04-22', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_014_6', name: 'Trim & Caulk', dueDate: '2026-04-26', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_014_7', name: 'Final Inspection', dueDate: '2026-04-29', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_014_8', name: 'Invoice & Payment',dueDate: '2026-05-01', status: 'pending', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-03-20', action: 'Contract Executed', user: 'Hannah Reyes', details: 'Insurance-approved scope. Full 2,400 sq ft siding.' }, + { date: '2026-03-23', action: 'Materials Ordered', user: 'Wade Hollis', details: 'James Hardie Board & Batten — Cobblestone, 2,400 sq ft.' }, + { date: '2026-03-25', action: 'RFI Opened', user: 'Hannah Reyes', details: 'HOA color approval required before start.' }, + ], + documents: [ + { name: 'Scope of Work - Siding Replacement', url: '#', type: 'contract' }, + { name: 'Permit Application #RFP-2026-1150', url: '#', type: 'permit' }, + { name: 'Deposit Invoice #INV-014-1', url: '#', type: 'invoice' }, + ], + teamMembers: [ + { id: 'jtm_014_1', userId: 'e2', name: 'Hannah Reyes', email: 'agent2@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-015 — Yvonne Blackwell (kl_025, kc_signed) + { + id: 'PRJ-2026-015', + sourceLeadId: 'kl_025', + ownerId: 'own_001', + propertyId: 'P-9015', + address: '3401 Parker Rd, Plano, TX 75023', + customerName: 'Yvonne Blackwell', + customerPhone: '(972) 555-0125', + customerEmail: 'yblackwell@gmail.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Roof Replacement', + status: 'active', + phase: 'Pre-Construction', + budget: 27800, + approvedBudget: 27800, + committedCost: 25600, + actualCost: 0, + spent: 0, + variancePercent: -100.0, + margin: 0.08, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 2780, + startDate: '2026-03-11', + endDate: '2026-04-25', + completionPercentage: 28, + healthScore: 92, + openRFIs: 0, + changeOrderCount: 0, + pendingInvoiceCount: 0, + budgetBreakdown: [ + { name: 'GAF Materials', category: 'Materials', allocated: 15200, committed: 15200, actual: 0 }, + { name: 'Plano Roofing Crew B', category: 'Labor', allocated: 9800, committed: 9800, actual: 0 }, + { name: 'City of Plano', category: 'Permits', allocated: 600, committed: 600, actual: 0 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 2200, committed: 0, actual: 0 }, + ], + changeOrders: [], + rfis: [], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_015_1', milestone: 'Deposit — 50%', amount: 13900, dueDate: '2026-03-11', status: 'paid', paidDate: '2026-03-11' }, + { id: 'ps_015_2', milestone: 'Final — 50%', amount: 13900, dueDate: '2026-04-20', status: 'pending' }, + ], + invoices: [], + milestones: [ + { id: 'ms_015_1', name: 'Contract Signed', dueDate: '2026-03-11', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_015_2', name: 'Materials Ordered', dueDate: '2026-03-12', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_015_3', name: 'Permits Pulled', dueDate: '2026-03-20', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_015_4', name: 'Tear-off & Decking', dueDate: '2026-04-07', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_015_5', name: 'Roofing Install', dueDate: '2026-04-14', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_015_6', name: 'Final Inspection', dueDate: '2026-04-20', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_015_7', name: 'Invoice & Payment', dueDate: '2026-04-25', status: 'pending', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-03-11', action: 'Contract Executed', user: 'Cody Tatum', details: 'Cash client. 50% deposit paid same day.' }, + { date: '2026-03-12', action: 'Materials Ordered', user: 'Wade Hollis', details: 'Owens Corning TruDefinition Duration — 28 squares.' }, + { date: '2026-03-20', action: 'Permit Approved', user: 'Wade Hollis', details: 'City of Plano residential roofing permit #RFP-2026-1148.' }, + ], + documents: [ + { name: 'Scope of Work - Roof Replacement', url: '#', type: 'contract' }, + { name: 'Permit #RFP-2026-1148', url: '#', type: 'permit' }, + { name: 'Deposit Invoice #INV-015-1', url: '#', type: 'invoice' }, + ], + teamMembers: [ + { id: 'jtm_015_1', userId: 'e1', name: 'Cody Tatum', email: 'agent1@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-016 — Emmanuel Okafor (kl_026, kc_signed) + { + id: 'PRJ-2026-016', + sourceLeadId: 'kl_026', + ownerId: 'own_001', + propertyId: 'P-9016', + address: '4812 Mapleshade Ln, Plano, TX 75075', + customerName: 'Emmanuel Okafor', + customerPhone: '(972) 555-0126', + customerEmail: 'e.okafor@outlook.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Roof + Gutters', + status: 'active', + phase: 'Pre-Construction', + budget: 22400, + approvedBudget: 22400, + committedCost: 21200, + actualCost: 0, + spent: 0, + variancePercent: -100.0, + margin: 0.05, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 2240, + startDate: '2026-03-25', + endDate: '2026-05-05', + completionPercentage: 22, + healthScore: 86, + openRFIs: 0, + changeOrderCount: 0, + pendingInvoiceCount: 0, + budgetBreakdown: [ + { name: 'ABC Supply Co.', category: 'Roofing Materials', allocated: 10800, committed: 10800, actual: 0 }, + { name: 'LeafGuard DFW', category: 'Gutter Materials', allocated: 3400, committed: 3400, actual: 0 }, + { name: 'Plano Roofing Crew A', category: 'Labor', allocated: 6400, committed: 6400, actual: 0 }, + { name: 'City of Plano', category: 'Permits', allocated: 600, committed: 600, actual: 0 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 1200, committed: 0, actual: 0 }, + ], + changeOrders: [], + rfis: [], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_016_1', milestone: 'Deposit — 30%', amount: 6720, dueDate: '2026-03-25', status: 'paid', paidDate: '2026-03-25' }, + { id: 'ps_016_2', milestone: 'Progress — 40%', amount: 8960, dueDate: '2026-04-18', status: 'pending' }, + { id: 'ps_016_3', milestone: 'Final — 30%', amount: 6720, dueDate: '2026-04-22', status: 'pending' }, + ], + invoices: [], + milestones: [ + { id: 'ms_016_1', name: 'Contract Signed', dueDate: '2026-03-25', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_016_2', name: 'Materials Ordered', dueDate: '2026-03-27', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_016_3', name: 'Permits Pulled', dueDate: '2026-04-08', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_016_4', name: 'Roofing Install', dueDate: '2026-04-18', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_016_5', name: 'Gutter Install', dueDate: '2026-04-20', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_016_6', name: 'Final Inspection', dueDate: '2026-04-22', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_016_7', name: 'Invoice & Payment', dueDate: '2026-05-05', status: 'pending', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-03-25', action: 'Contract Executed', user: 'Dalton Pruitt', details: 'Insurance approved full roof + gutter scope.' }, + { date: '2026-03-27', action: 'Materials Ordered', user: 'Wade Hollis', details: 'GAF shingles + K-style 6" gutters ordered.' }, + ], + documents: [ + { name: 'Scope of Work - Roof + Gutters', url: '#', type: 'contract' }, + { name: 'Permit Application #RFP-2026-1151', url: '#', type: 'permit' }, + { name: 'Deposit Invoice #INV-016-1', url: '#', type: 'invoice' }, + ], + teamMembers: [ + { id: 'jtm_016_1', userId: 'e5', name: 'Dalton Pruitt', email: 'agent5@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-017 — Adriana Voss (kl_027, kc_signed) + { + id: 'PRJ-2026-017', + sourceLeadId: 'kl_027', + ownerId: 'own_001', + propertyId: 'P-9017', + address: '1820 Custer Rd, Plano, TX 75075', + customerName: 'Adriana Voss', + customerPhone: '(972) 555-0127', + customerEmail: 'adriana.v@gmail.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Roof Replacement', + status: 'active', + phase: 'Pre-Construction', + budget: 19600, + approvedBudget: 19600, + committedCost: 18100, + actualCost: 0, + spent: 0, + variancePercent: -100.0, + margin: 0.08, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 1960, + startDate: '2026-03-28', + endDate: '2026-05-10', + completionPercentage: 24, + healthScore: 80, + openRFIs: 0, + changeOrderCount: 1, + pendingInvoiceCount: 0, + budgetBreakdown: [ + { name: 'James Hardie', category: 'Materials', allocated: 10500, committed: 10500, actual: 0 }, + { name: 'Plano Roofing Crew C', category: 'Labor', allocated: 7000, committed: 7000, actual: 0 }, + { name: 'City of Plano', category: 'Permits', allocated: 600, committed: 600, actual: 0 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 1500, committed: 0, actual: 0 }, + ], + changeOrders: [ + { id: 'CO-017-01', title: 'Supplemental — Ice & Water Barrier', amount: 1800, status: 'approved', description: 'Insurance adjuster agreed to add ice/water shield on all valleys and eaves.' }, + ], + rfis: [], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_017_1', milestone: 'Deposit — 30%', amount: 5880, dueDate: '2026-03-28', status: 'paid', paidDate: '2026-03-28' }, + { id: 'ps_017_2', milestone: 'Progress — 40%', amount: 7840, dueDate: '2026-04-25', status: 'pending' }, + { id: 'ps_017_3', milestone: 'Final — 30%', amount: 5880, dueDate: '2026-04-28', status: 'pending' }, + ], + invoices: [], + milestones: [ + { id: 'ms_017_1', name: 'Contract Signed', dueDate: '2026-03-28', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_017_2', name: 'Materials Ordered', dueDate: '2026-04-02', status: 'in_progress', assignedTo: 'con_001' }, + { id: 'ms_017_3', name: 'Permits Pulled', dueDate: '2026-04-10', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_017_4', name: 'Tear-off & Decking', dueDate: '2026-04-22', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_017_5', name: 'Roofing Install', dueDate: '2026-04-28', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_017_6', name: 'Final Inspection', dueDate: '2026-05-05', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_017_7', name: 'Invoice & Payment', dueDate: '2026-05-10', status: 'pending', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-03-28', action: 'Contract Executed', user: 'Shelby Greer', details: 'Signed after 6-week negotiation on supplement items.' }, + { date: '2026-04-02', action: 'Materials Ordered', user: 'Wade Hollis', details: 'Special color availability causing 1-week delay.' }, + ], + documents: [ + { name: 'Scope of Work - Roof Replacement', url: '#', type: 'contract' }, + { name: 'Permit Application #RFP-2026-1152', url: '#', type: 'permit' }, + { name: 'Change Order CO-017-01', url: '#', type: 'change_order' }, + ], + teamMembers: [ + { id: 'jtm_017_1', userId: 'e4', name: 'Shelby Greer', email: 'agent4@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-018 — Marvin Delgado (kl_028, kc_progress) + { + id: 'PRJ-2026-018', + sourceLeadId: 'kl_028', + ownerId: 'own_001', + propertyId: 'P-9018', + address: '6820 Windhaven Pkwy, Plano, TX 75024', + customerName: 'Marvin Delgado', + customerPhone: '(972) 555-0128', + customerEmail: 'mdelgado@gmail.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Roof Replacement', + status: 'active', + phase: 'Structural', + budget: 16800, + approvedBudget: 16800, + committedCost: 15400, + actualCost: 9800, + spent: 9800, + variancePercent: -41.7, + margin: 0.08, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 1680, + startDate: '2026-02-28', + endDate: '2026-04-10', + completionPercentage: 65, + healthScore: 82, + openRFIs: 0, + changeOrderCount: 1, + pendingInvoiceCount: 1, + budgetBreakdown: [ + { name: 'ABC Supply Co.', category: 'Materials', allocated: 9000, committed: 9000, actual: 8600 }, + { name: 'Plano Roofing Crew A', category: 'Labor', allocated: 5800, committed: 5800, actual: 600 }, + { name: 'City of Plano', category: 'Permits', allocated: 600, committed: 600, actual: 600 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 1400, committed: 0, actual: 0 }, + ], + changeOrders: [ + { id: 'CO-018-01', title: 'Decking Replacement — 2 Sheets', amount: 480, status: 'approved', description: 'Two rotted OSB sheets discovered during tear-off. Replaced at cost.' }, + ], + rfis: [], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_018_1', milestone: 'Deposit — 30%', amount: 5040, dueDate: '2026-02-28', status: 'paid', paidDate: '2026-02-28' }, + { id: 'ps_018_2', milestone: 'Progress — 40%', amount: 6720, dueDate: '2026-03-20', status: 'paid', paidDate: '2026-03-20' }, + { id: 'ps_018_3', milestone: 'Final — 30%', amount: 5040, dueDate: '2026-04-10', status: 'pending' }, + ], + invoices: [ + { id: 'inv_018_1', amount: 8600, submittedBy: 'ABC Supply Co.', status: 'paid', dueDate: '2026-03-18', datePaid: '2026-03-19' }, + { id: 'inv_018_2', amount: 600, submittedBy: 'Plano Roofing Crew A', status: 'paid', dueDate: '2026-03-20', datePaid: '2026-03-21' }, + { id: 'inv_018_3', amount: 600, submittedBy: 'City of Plano', status: 'paid', dueDate: '2026-03-10', datePaid: '2026-03-10' }, + ], + milestones: [ + { id: 'ms_018_1', name: 'Contract Signed', dueDate: '2026-02-28', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_018_2', name: 'Materials Ordered', dueDate: '2026-03-02', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_018_3', name: 'Permits Pulled', dueDate: '2026-03-10', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_018_4', name: 'Tear-off & Decking', dueDate: '2026-03-18', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_018_5', name: 'Roofing Install', dueDate: '2026-04-07', status: 'in_progress', assignedTo: 'con_001' }, + { id: 'ms_018_6', name: 'Final Inspection', dueDate: '2026-04-08', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_018_7', name: 'Invoice & Payment', dueDate: '2026-04-10', status: 'pending', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-02-28', action: 'Contract Executed', user: 'Cody Tatum', details: 'Signed. Production team notified.' }, + { date: '2026-03-18', action: 'Production Started', user: 'Wade Hollis', details: 'Tear-off crew on site. Two rotted deck boards found and replaced.' }, + { date: '2026-03-20', action: 'Progress Invoice Paid',user: 'Wade Hollis', details: 'Client paid progress invoice on time.' }, + { date: '2026-04-07', action: 'Decking Install', user: 'Wade Hollis', details: 'New decking going on today. Roofing shingles start tomorrow.' }, + ], + documents: [ + { name: 'Scope of Work - Roof Replacement', url: '#', type: 'contract' }, + { name: 'Permit #RFP-2026-1130', url: '#', type: 'permit' }, + { name: 'Change Order CO-018-01', url: '#', type: 'change_order' }, + ], + teamMembers: [ + { id: 'jtm_018_1', userId: 'e1', name: 'Cody Tatum', email: 'agent1@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-019 — Sandra Tran (kl_029, kc_progress) + { + id: 'PRJ-2026-019', + sourceLeadId: 'kl_029', + ownerId: 'own_001', + propertyId: 'P-9019', + address: '2506 Springpark Dr, Plano, TX 75023', + customerName: 'Sandra Tran', + customerPhone: '(972) 555-0129', + customerEmail: 's.tran@yahoo.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Siding Replacement', + status: 'active', + phase: 'Structural', + budget: 28500, + approvedBudget: 28500, + committedCost: 27000, + actualCost: 15600, + spent: 15600, + variancePercent: -45.3, + margin: 0.05, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 2850, + startDate: '2026-02-25', + endDate: '2026-04-15', + completionPercentage: 55, + healthScore: 78, + openRFIs: 0, + changeOrderCount: 1, + pendingInvoiceCount: 1, + 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: 'City of Plano', category: 'Permits', allocated: 800, committed: 800, actual: 800 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 1900, committed: 400, 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.' }, + ], + rfis: [], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_019_1', milestone: 'Deposit — 25%', amount: 7125, dueDate: '2026-02-25', status: 'paid', paidDate: '2026-02-25' }, + { id: 'ps_019_2', milestone: 'Progress — 50%', amount: 14250,dueDate: '2026-04-08', status: 'pending' }, + { id: 'ps_019_3', milestone: 'Final — 25%', amount: 7125, dueDate: '2026-04-15', status: 'pending' }, + ], + invoices: [ + { id: 'inv_019_1', amount: 14200, submittedBy: 'Owens Corning', status: 'paid', dueDate: '2026-03-25', datePaid: '2026-03-26' }, + { id: 'inv_019_2', amount: 600, submittedBy: 'Plano Siding Crew', status: 'paid', dueDate: '2026-03-27', datePaid: '2026-03-28' }, + { id: 'inv_019_3', amount: 800, submittedBy: 'City of Plano', status: 'paid', dueDate: '2026-03-05', datePaid: '2026-03-05' }, + ], + milestones: [ + { id: 'ms_019_1', name: 'Contract Signed', dueDate: '2026-02-25', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_019_2', name: 'Materials Ordered',dueDate: '2026-02-27', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_019_3', name: 'Permit Pulled', dueDate: '2026-03-05', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_019_4', name: 'Prep & Demo', dueDate: '2026-03-25', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_019_5', name: 'Siding Install', dueDate: '2026-04-05', status: 'in_progress', assignedTo: 'con_001' }, + { id: 'ms_019_6', name: 'Trim & Caulk', dueDate: '2026-04-10', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_019_7', name: 'Final Inspection', dueDate: '2026-04-12', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_019_8', name: 'Invoice & Payment',dueDate: '2026-04-15', status: 'pending', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-02-25', action: 'Contract Executed', user: 'Hannah Reyes', details: 'Insurance approved full scope.' }, + { date: '2026-03-25', action: 'Production Started', user: 'Wade Hollis', details: 'Demo complete. Minor rot on 2 panels — change order raised.' }, + { date: '2026-04-05', action: 'Install Underway', user: 'Wade Hollis', details: 'Siding install Day 3. On track for Friday completion.' }, + ], + documents: [ + { name: 'Scope of Work - Siding Replacement', url: '#', type: 'contract' }, + { name: 'Permit #RFP-2026-1135', url: '#', type: 'permit' }, + { name: 'Change Order CO-019-01', url: '#', type: 'change_order' }, + ], + teamMembers: [ + { id: 'jtm_019_1', userId: 'e2', name: 'Hannah Reyes', email: 'agent2@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-020 — Reginald Hopper (kl_030, kc_progress) + { + id: 'PRJ-2026-020', + sourceLeadId: 'kl_030', + ownerId: 'own_001', + propertyId: 'P-9020', + address: '1504 Estates Dr, Plano, TX 75093', + customerName: 'Reginald Hopper', + customerPhone: '(972) 555-0130', + customerEmail: 'reg.hopper@icloud.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Roof + Gutters', + status: 'active', + phase: 'Structural', + budget: 21200, + approvedBudget: 21200, + committedCost: 20000, + actualCost: 16700, + spent: 16700, + variancePercent: -21.2, + margin: 0.06, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 2120, + startDate: '2026-02-24', + endDate: '2026-04-10', + completionPercentage: 78, + healthScore: 88, + openRFIs: 0, + changeOrderCount: 0, + pendingInvoiceCount: 1, + budgetBreakdown: [ + { name: 'ABC Supply Co.', category: 'Roofing Materials', allocated: 10200, committed: 10200, actual: 9800 }, + { name: 'LeafGuard DFW', category: 'Gutter Materials', allocated: 3200, committed: 3200, actual: 3100 }, + { name: 'Plano Roofing Crew B', category: 'Labor', allocated: 6000, committed: 6000, actual: 3200 }, + { name: 'City of Plano', category: 'Permits', allocated: 600, committed: 600, actual: 600 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 1200, committed: 0, actual: 0 }, + ], + changeOrders: [], + rfis: [], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_020_1', milestone: 'Deposit — 30%', amount: 6360, dueDate: '2026-02-24', status: 'paid', paidDate: '2026-02-24' }, + { id: 'ps_020_2', milestone: 'Progress — 40%', amount: 8480, dueDate: '2026-03-22', status: 'paid', paidDate: '2026-03-22' }, + { id: 'ps_020_3', milestone: 'Final — 30%', amount: 6360, dueDate: '2026-04-10', status: 'pending' }, + ], + invoices: [ + { id: 'inv_020_1', amount: 9800, submittedBy: 'ABC Supply Co.', status: 'paid', dueDate: '2026-03-20', datePaid: '2026-03-21' }, + { id: 'inv_020_2', amount: 3100, submittedBy: 'LeafGuard DFW', status: 'paid', dueDate: '2026-04-07', datePaid: '2026-04-08' }, + { id: 'inv_020_3', amount: 3200, submittedBy: 'Plano Roofing Crew B', status: 'paid', dueDate: '2026-03-22', datePaid: '2026-03-23' }, + { id: 'inv_020_4', amount: 600, submittedBy: 'City of Plano', status: 'paid', dueDate: '2026-03-05', datePaid: '2026-03-05' }, + ], + milestones: [ + { id: 'ms_020_1', name: 'Contract Signed', dueDate: '2026-02-24', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_020_2', name: 'Materials Ordered', dueDate: '2026-02-26', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_020_3', name: 'Permits Pulled', dueDate: '2026-03-05', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_020_4', name: 'Tear-off & Decking', dueDate: '2026-03-20', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_020_5', name: 'Roofing Install', dueDate: '2026-03-22', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_020_6', name: 'Gutter Install', dueDate: '2026-04-07', status: 'in_progress', assignedTo: 'con_001' }, + { id: 'ms_020_7', name: 'Final Inspection', dueDate: '2026-04-08', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_020_8', name: 'Invoice & Payment', dueDate: '2026-04-10', status: 'pending', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-02-24', action: 'Contract Executed', user: 'Shelby Greer', details: '' }, + { date: '2026-03-20', action: 'Roofing Started', user: 'Darlene Brooks', details: 'Production underway — roofing crew Day 1.' }, + { date: '2026-03-22', action: 'Roofing Complete', user: 'Darlene Brooks', details: 'Roof done. Progress invoice sent.' }, + { date: '2026-04-07', action: 'Gutter Install', user: 'Darlene Brooks', details: 'Gutter crew arriving today for 1-day install.' }, + ], + documents: [ + { name: 'Scope of Work - Roof + Gutters', url: '#', type: 'contract' }, + { name: 'Permit #RFP-2026-1125', url: '#', type: 'permit' }, + { name: 'Progress Invoice #INV-020-2', url: '#', type: 'invoice' }, + ], + teamMembers: [ + { id: 'jtm_020_1', userId: 'e4', name: 'Shelby Greer', email: 'agent4@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // ===================================================================== + // OWNER 2 (own_002) — Won Kanban Leads kl_031–kl_038 → PRJ-2026-021–028 + // ===================================================================== + + // PRJ-2026-021 — Nadia Thornton (kl_031, kc_progress) + { + id: 'PRJ-2026-021', + sourceLeadId: 'kl_031', + ownerId: 'own_002', + propertyId: 'P-9021', + address: '5150 Preston Rd, Plano, TX 75024', + customerName: 'Nadia Thornton', + customerPhone: '(972) 555-0131', + customerEmail: 'nadia.t@gmail.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Roof Replacement', + status: 'active', + phase: 'Structural', + budget: 34500, + approvedBudget: 34500, + committedCost: 32900, + actualCost: 22700, + spent: 22700, + variancePercent: -34.2, + margin: 0.05, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 3450, + startDate: '2026-03-03', + endDate: '2026-04-25', + completionPercentage: 60, + healthScore: 90, + openRFIs: 1, + changeOrderCount: 0, + pendingInvoiceCount: 1, + budgetBreakdown: [ + { name: 'Owens Corning', category: 'Premium Materials', allocated: 19200, committed: 19200, actual: 18800 }, + { name: 'Plano Roofing Crew C', category: 'Labor', allocated: 12000, committed: 12000, actual: 3200 }, + { name: 'City of Plano', category: 'Permits', allocated: 700, committed: 700, actual: 700 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 2600, committed: 1000, actual: 0 }, + ], + changeOrders: [], + rfis: [ + { id: 'RFI-021-01', subject: 'Lifetime Warranty Registration', status: 'open', submittedBy: 'Dalton Pruitt', dateOpened: '2026-03-05', dateClosed: null }, + ], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_021_1', milestone: 'Deposit — 100%', amount: 34500, dueDate: '2026-03-03', status: 'paid', paidDate: '2026-03-03' }, + ], + invoices: [ + { id: 'inv_021_1', amount: 18800, submittedBy: 'Owens Corning', status: 'paid', dueDate: '2026-03-28', datePaid: '2026-03-29' }, + { id: 'inv_021_2', amount: 3200, submittedBy: 'Plano Roofing Crew C', status: 'paid', dueDate: '2026-03-28', datePaid: '2026-03-30' }, + { id: 'inv_021_3', amount: 700, submittedBy: 'City of Plano', status: 'paid', dueDate: '2026-03-12', datePaid: '2026-03-12' }, + ], + milestones: [ + { id: 'ms_021_1', name: 'Contract Signed', dueDate: '2026-03-03', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_021_2', name: 'Materials Ordered', dueDate: '2026-03-05', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_021_3', name: 'Permits Pulled', dueDate: '2026-03-12', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_021_4', name: 'Tear-off & Decking', dueDate: '2026-03-28', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_021_5', name: 'Roofing Install', dueDate: '2026-03-28', status: 'in_progress', assignedTo: 'con_001' }, + { id: 'ms_021_6', name: 'Ridge & Detail', dueDate: '2026-04-10', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_021_7', name: 'Final Inspection', dueDate: '2026-04-18', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_021_8', name: 'Invoice & Payment', dueDate: '2026-04-25', status: 'pending', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-03-03', action: 'Contract Executed', user: 'Dalton Pruitt', details: 'Cash client — full payment upfront.' }, + { date: '2026-03-28', action: 'Production Started', user: 'Darlene Brooks', details: 'Materials arrived. Premium install started.' }, + ], + documents: [ + { name: 'Scope of Work - Roof Replacement (Premium)', url: '#', type: 'contract' }, + { name: 'Permit #RFP-2026-1140', url: '#', type: 'permit' }, + { name: 'Material PO — Owens Corning HDZ', url: '#', type: 'invoice' }, + ], + teamMembers: [ + { id: 'jtm_021_1', userId: 'e5', name: 'Dalton Pruitt', email: 'agent5@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-022 — Clifford Aguilar (kl_032, kc_progress) + { + id: 'PRJ-2026-022', + sourceLeadId: 'kl_032', + ownerId: 'own_002', + propertyId: 'P-9022', + address: '3822 Haverwood Ln, Plano, TX 75023', + customerName: 'Clifford Aguilar', + customerPhone: '(972) 555-0132', + customerEmail: 'c.aguilar@outlook.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Siding Repair', + status: 'active', + phase: 'Structural', + budget: 9400, + approvedBudget: 9400, + committedCost: 8900, + actualCost: 6700, + spent: 6700, + variancePercent: -28.7, + margin: 0.05, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 940, + startDate: '2026-03-07', + endDate: '2026-04-10', + completionPercentage: 70, + healthScore: 84, + openRFIs: 0, + changeOrderCount: 0, + pendingInvoiceCount: 1, + budgetBreakdown: [ + { name: 'GAF Materials', category: 'Materials', allocated: 4800, committed: 4800, actual: 4600 }, + { name: 'Plano Siding Crew', category: 'Labor', allocated: 3600, committed: 3600, actual: 1600 }, + { name: 'City of Plano', category: 'Permits', allocated: 500, committed: 500, actual: 500 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 500, committed: 0, actual: 0 }, + ], + changeOrders: [], + rfis: [], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_022_1', milestone: 'Deposit — 40%', amount: 3760, dueDate: '2026-03-07', status: 'paid', paidDate: '2026-03-07' }, + { id: 'ps_022_2', milestone: 'Progress — 30%', amount: 2820, dueDate: '2026-04-01', status: 'paid', paidDate: '2026-04-02' }, + { id: 'ps_022_3', milestone: 'Final — 30%', amount: 2820, dueDate: '2026-04-10', status: 'pending' }, + ], + invoices: [ + { id: 'inv_022_1', amount: 4600, submittedBy: 'GAF Materials', status: 'paid', dueDate: '2026-03-20', datePaid: '2026-03-21' }, + { id: 'inv_022_2', amount: 1600, submittedBy: 'Plano Siding Crew', status: 'paid', dueDate: '2026-04-01', datePaid: '2026-04-02' }, + { id: 'inv_022_3', amount: 500, submittedBy: 'City of Plano', status: 'paid', dueDate: '2026-03-20', datePaid: '2026-03-20' }, + ], + milestones: [ + { id: 'ms_022_1', name: 'Contract Signed', dueDate: '2026-03-07', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_022_2', name: 'Materials Ordered', dueDate: '2026-03-09', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_022_3', name: 'Permit Pulled', dueDate: '2026-03-20', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_022_4', name: 'South Face', dueDate: '2026-04-01', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_022_5', name: 'West Face', dueDate: '2026-04-06', status: 'in_progress', assignedTo: 'con_001' }, + { id: 'ms_022_6', name: 'Final Inspection', dueDate: '2026-04-08', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_022_7', name: 'Invoice & Payment', dueDate: '2026-04-10', status: 'pending', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-03-07', action: 'Contract Executed', user: 'Cody Tatum', details: 'Partial repair — south and west faces only.' }, + { date: '2026-04-01', action: 'South Face Done', user: 'Wade Hollis', details: 'South face siding complete. Starting west face.' }, + ], + documents: [ + { name: 'Scope of Work - Siding Repair', url: '#', type: 'contract' }, + { name: 'Permit #RFP-2026-1142', url: '#', type: 'permit' }, + { name: 'Material Invoice #INV-022-1', url: '#', type: 'invoice' }, + ], + teamMembers: [ + { id: 'jtm_022_1', userId: 'e1', name: 'Cody Tatum', email: 'agent1@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-023 — Tamara Owens (kl_033, kc_progress) + { + id: 'PRJ-2026-023', + sourceLeadId: 'kl_033', + ownerId: 'own_002', + propertyId: 'P-9023', + address: '2010 Oak Creek Blvd, Plano, TX 75023', + customerName: 'Tamara Owens', + customerPhone: '(972) 555-0133', + customerEmail: 'tamara.o@yahoo.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Roof Replacement', + status: 'active', + phase: 'Structural', + budget: 42000, + approvedBudget: 42000, + committedCost: 40400, + actualCost: 18900, + spent: 18900, + variancePercent: -55.0, + margin: 0.04, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 4200, + startDate: '2026-02-15', + endDate: '2026-04-15', + completionPercentage: 45, + healthScore: 74, + openRFIs: 1, + changeOrderCount: 0, + pendingInvoiceCount: 1, + budgetBreakdown: [ + { name: 'James Hardie', category: 'Materials', allocated: 22000, committed: 22000, actual: 17200 }, + { name: 'Plano Roofing Crew A', category: 'Labor', allocated: 15500, committed: 15500, actual: 800 }, + { name: 'City of Plano', category: 'Permits', allocated: 900, committed: 900, actual: 900 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 3600, committed: 2000, actual: 0 }, + ], + changeOrders: [], + rfis: [ + { id: 'RFI-023-01', subject: 'Structural Load — Chimney Flashing', status: 'open', submittedBy: 'Hannah Reyes', dateOpened: '2026-04-05', dateClosed: null }, + ], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_023_1', milestone: 'Deposit — 25%', amount: 10500, dueDate: '2026-02-15', status: 'paid', paidDate: '2026-02-15' }, + { id: 'ps_023_2', milestone: 'Progress — 50%', amount: 21000, dueDate: '2026-04-08', status: 'pending' }, + { id: 'ps_023_3', milestone: 'Final — 25%', amount: 10500, dueDate: '2026-04-15', status: 'pending' }, + ], + invoices: [ + { id: 'inv_023_1', amount: 17200, submittedBy: 'James Hardie', status: 'paid', dueDate: '2026-04-05', datePaid: '2026-04-06' }, + { id: 'inv_023_2', amount: 800, submittedBy: 'Plano Roofing Crew A', status: 'paid', dueDate: '2026-04-05', datePaid: '2026-04-06' }, + { id: 'inv_023_3', amount: 900, submittedBy: 'City of Plano', status: 'paid', dueDate: '2026-03-01', datePaid: '2026-03-01' }, + ], + milestones: [ + { id: 'ms_023_1', name: 'Contract Signed', dueDate: '2026-02-15', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_023_2', name: 'Materials Ordered', dueDate: '2026-02-18', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_023_3', name: 'Permits Pulled', dueDate: '2026-03-01', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_023_4', name: 'Tear-off & Decking', dueDate: '2026-04-05', status: 'in_progress', assignedTo: 'con_001' }, + { id: 'ms_023_5', name: 'Roofing Install', dueDate: '2026-04-10', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_023_6', name: 'Final Inspection', dueDate: '2026-04-12', status: 'pending', assignedTo: 'con_001' }, + { id: 'ms_023_7', name: 'Invoice & Payment', dueDate: '2026-04-15', status: 'pending', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-02-15', action: 'Contract Executed', user: 'Hannah Reyes', details: 'Largest job this quarter — $42,000, 3,600 sq ft.' }, + { date: '2026-04-05', action: 'Production Started', user: 'Wade Hollis', details: 'Day 1 of 3-day job. Two crews on site.' }, + { date: '2026-04-05', action: 'RFI Opened', user: 'Hannah Reyes', details: 'Custom chimney flashing — architect sign-off required.' }, + ], + documents: [ + { name: 'Scope of Work - Roof Replacement (Large)', url: '#', type: 'contract' }, + { name: 'Permit #RFP-2026-1138', url: '#', type: 'permit' }, + { name: 'Material Invoice #INV-023-1', url: '#', type: 'invoice' }, + ], + teamMembers: [ + { id: 'jtm_023_1', userId: 'e2', name: 'Hannah Reyes', email: 'agent2@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-024 — Craig Singleton (kl_034, kc_complete) + { + id: 'PRJ-2026-024', + sourceLeadId: 'kl_034', + ownerId: 'own_002', + propertyId: 'P-9024', + address: '4110 Lorimar Dr, Plano, TX 75093', + customerName: 'Craig Singleton', + customerPhone: '(972) 555-0134', + customerEmail: 'craig.s@gmail.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Roof Replacement', + status: 'completed', + phase: 'Handover', + budget: 17200, + approvedBudget: 17200, + committedCost: 16200, + actualCost: 15580, + spent: 15580, + variancePercent: -9.4, + margin: 0.06, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 1720, + startDate: '2026-02-01', + endDate: '2026-03-01', + completionPercentage: 100, + healthScore: 95, + openRFIs: 0, + changeOrderCount: 0, + pendingInvoiceCount: 0, + budgetBreakdown: [ + { name: 'ABC Supply Co.', category: 'Materials', allocated: 9200, committed: 9200, actual: 8980 }, + { name: 'Plano Roofing Crew B', category: 'Labor', allocated: 6000, committed: 6000, actual: 6000 }, + { name: 'City of Plano', category: 'Permits', allocated: 600, committed: 600, actual: 600 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 1400, committed: 400, actual: 0 }, + ], + changeOrders: [], + rfis: [], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_024_1', milestone: 'Deposit — 30%', amount: 5160, dueDate: '2026-02-01', status: 'paid', paidDate: '2026-02-01' }, + { id: 'ps_024_2', milestone: 'Progress — 40%', amount: 6880, dueDate: '2026-02-21', status: 'paid', paidDate: '2026-02-22' }, + { id: 'ps_024_3', milestone: 'Final — 30%', amount: 5160, dueDate: '2026-03-01', status: 'paid', paidDate: '2026-03-01' }, + ], + invoices: [ + { id: 'inv_024_1', amount: 8980, submittedBy: 'ABC Supply Co.', status: 'paid', dueDate: '2026-02-20', datePaid: '2026-02-21' }, + { id: 'inv_024_2', amount: 6000, submittedBy: 'Plano Roofing Crew B', status: 'paid', dueDate: '2026-02-21', datePaid: '2026-02-22' }, + { id: 'inv_024_3', amount: 600, submittedBy: 'City of Plano', status: 'paid', dueDate: '2026-02-12', datePaid: '2026-02-12' }, + ], + milestones: [ + { id: 'ms_024_1', name: 'Contract Signed', dueDate: '2026-02-01', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_024_2', name: 'Materials Ordered', dueDate: '2026-02-03', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_024_3', name: 'Permits Pulled', dueDate: '2026-02-12', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_024_4', name: 'Tear-off & Decking', dueDate: '2026-02-20', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_024_5', name: 'Roofing Install', dueDate: '2026-02-21', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_024_6', name: 'Final Inspection', dueDate: '2026-02-28', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_024_7', name: 'Invoice & Payment', dueDate: '2026-03-01', status: 'completed', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-02-01', action: 'Contract Executed', user: 'Cody Tatum', details: '' }, + { date: '2026-02-20', action: 'Production Started', user: 'Wade Hollis', details: 'Tear-off crew on site.' }, + { date: '2026-02-21', action: 'Install Complete', user: 'Wade Hollis', details: 'Full install done in 1 day.' }, + { date: '2026-02-28', action: 'Final Inspection', user: 'Wade Hollis', details: 'Passed. Client extremely happy. 5-star review.' }, + { date: '2026-03-01', action: 'Project Closed', user: 'Wade Hollis', details: 'Final payment received. File closed.' }, + ], + documents: [ + { name: 'Scope of Work - Roof Replacement', url: '#', type: 'contract' }, + { name: 'Permit #RFP-2026-1112', url: '#', type: 'permit' }, + { name: 'Final Invoice Package', url: '#', type: 'invoice' }, + ], + teamMembers: [ + { id: 'jtm_024_1', userId: 'e1', name: 'Cody Tatum', email: 'agent1@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-025 — Bertha Fleming (kl_035, kc_complete) + { + id: 'PRJ-2026-025', + sourceLeadId: 'kl_035', + ownerId: 'own_002', + propertyId: 'P-9025', + address: '6230 West Parker Rd, Plano, TX 75093', + customerName: 'Bertha Fleming', + customerPhone: '(972) 555-0135', + customerEmail: 'bertha.f@hotmail.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Siding Replacement', + status: 'completed', + phase: 'Handover', + budget: 26400, + approvedBudget: 26400, + committedCost: 24800, + actualCost: 24300, + spent: 24300, + variancePercent: -8.0, + margin: 0.06, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 2640, + startDate: '2026-01-28', + endDate: '2026-02-22', + completionPercentage: 100, + healthScore: 93, + openRFIs: 0, + changeOrderCount: 0, + pendingInvoiceCount: 0, + budgetBreakdown: [ + { name: 'Owens Corning', category: 'Materials', allocated: 14200, committed: 14200, actual: 13900 }, + { name: 'Plano Siding Crew', category: 'Labor', allocated: 9600, committed: 9600, actual: 9600 }, + { name: 'City of Plano', category: 'Permits', allocated: 800, committed: 800, actual: 800 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 1800, committed: 200, actual: 0 }, + ], + changeOrders: [], + rfis: [], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_025_1', milestone: 'Deposit — 25%', amount: 6600, dueDate: '2026-01-28', status: 'paid', paidDate: '2026-01-28' }, + { id: 'ps_025_2', milestone: 'Progress — 50%', amount: 13200, dueDate: '2026-02-19', status: 'paid', paidDate: '2026-02-19' }, + { id: 'ps_025_3', milestone: 'Final — 25%', amount: 6600, dueDate: '2026-02-22', status: 'paid', paidDate: '2026-02-22' }, + ], + invoices: [ + { id: 'inv_025_1', amount: 13900, submittedBy: 'Owens Corning', status: 'paid', dueDate: '2026-02-15', datePaid: '2026-02-16' }, + { id: 'inv_025_2', amount: 9600, submittedBy: 'Plano Siding Crew', status: 'paid', dueDate: '2026-02-19', datePaid: '2026-02-20' }, + { id: 'inv_025_3', amount: 800, submittedBy: 'City of Plano', status: 'paid', dueDate: '2026-02-05', datePaid: '2026-02-05' }, + ], + milestones: [ + { id: 'ms_025_1', name: 'Contract Signed', dueDate: '2026-01-28', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_025_2', name: 'Materials Ordered',dueDate: '2026-01-30', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_025_3', name: 'Permit Pulled', dueDate: '2026-02-05', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_025_4', name: 'Prep & Demo', dueDate: '2026-02-15', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_025_5', name: 'Siding Install', dueDate: '2026-02-19', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_025_6', name: 'Trim & Caulk', dueDate: '2026-02-20', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_025_7', name: 'Final Inspection', dueDate: '2026-02-21', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_025_8', name: 'Invoice & Payment',dueDate: '2026-02-22', status: 'completed', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-01-28', action: 'Contract Executed', user: 'Shelby Greer', details: '' }, + { date: '2026-02-15', action: 'Production Started', user: 'Darlene Brooks', details: 'Demo and install started same day.' }, + { date: '2026-02-22', action: 'Project Closed', user: 'Darlene Brooks', details: 'Insurance check received and deposited. File closed.' }, + ], + documents: [ + { name: 'Scope of Work - Siding Replacement', url: '#', type: 'contract' }, + { name: 'Permit #RFP-2026-1108', url: '#', type: 'permit' }, + { name: 'Final Invoice Package', url: '#', type: 'invoice' }, + ], + teamMembers: [ + { id: 'jtm_025_1', userId: 'e4', name: 'Shelby Greer', email: 'agent4@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-026 — Oliver Stanton (kl_036, kc_complete) + { + id: 'PRJ-2026-026', + sourceLeadId: 'kl_036', + ownerId: 'own_002', + propertyId: 'P-9026', + address: '3750 Legacy Dr, Plano, TX 75023', + customerName: 'Oliver Stanton', + customerPhone: '(972) 555-0136', + customerEmail: 'oliver.st@outlook.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Roof Replacement', + status: 'completed', + phase: 'Handover', + budget: 22100, + approvedBudget: 22100, + committedCost: 20400, + actualCost: 20200, + spent: 20200, + variancePercent: -8.6, + margin: 0.08, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 2210, + startDate: '2026-01-30', + endDate: '2026-02-20', + completionPercentage: 100, + healthScore: 97, + openRFIs: 0, + changeOrderCount: 0, + pendingInvoiceCount: 0, + budgetBreakdown: [ + { name: 'GAF Materials', category: 'Materials', allocated: 12000, committed: 12000, actual: 11800 }, + { name: 'Plano Roofing Crew C', category: 'Labor', allocated: 7800, committed: 7800, actual: 7800 }, + { name: 'City of Plano', category: 'Permits', allocated: 600, committed: 600, actual: 600 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 1700, committed: 0, actual: 0 }, + ], + changeOrders: [], + rfis: [], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_026_1', milestone: 'Full Payment — 100%', amount: 22100, dueDate: '2026-01-30', status: 'paid', paidDate: '2026-01-30' }, + ], + invoices: [ + { id: 'inv_026_1', amount: 11800, submittedBy: 'GAF Materials', status: 'paid', dueDate: '2026-02-18', datePaid: '2026-02-19' }, + { id: 'inv_026_2', amount: 7800, submittedBy: 'Plano Roofing Crew C', status: 'paid', dueDate: '2026-02-19', datePaid: '2026-02-20' }, + { id: 'inv_026_3', amount: 600, submittedBy: 'City of Plano', status: 'paid', dueDate: '2026-02-07', datePaid: '2026-02-07' }, + ], + milestones: [ + { id: 'ms_026_1', name: 'Contract Signed', dueDate: '2026-01-30', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_026_2', name: 'Materials Ordered', dueDate: '2026-01-31', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_026_3', name: 'Permits Pulled', dueDate: '2026-02-07', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_026_4', name: 'Tear-off & Decking', dueDate: '2026-02-18', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_026_5', name: 'Roofing Install', dueDate: '2026-02-19', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_026_6', name: 'Final Inspection', dueDate: '2026-02-20', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_026_7', name: 'Invoice & Payment', dueDate: '2026-01-30', status: 'completed', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-01-30', action: 'Contract Executed', user: 'Hannah Reyes', details: 'Cash client. Full payment upfront.' }, + { date: '2026-02-18', action: 'Production Started', user: 'Wade Hollis', details: 'Tear-off started.' }, + { date: '2026-02-20', action: 'Project Closed', user: 'Wade Hollis', details: 'Outstanding quality. Referral bonus owed per agreement.' }, + ], + documents: [ + { name: 'Scope of Work - Roof Replacement', url: '#', type: 'contract' }, + { name: 'Permit #RFP-2026-1115', url: '#', type: 'permit' }, + { name: 'Completion Certificate', url: '#', type: 'certificate' }, + ], + teamMembers: [ + { id: 'jtm_026_1', userId: 'e2', name: 'Hannah Reyes', email: 'agent2@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-027 — Daphne Garrett (kl_037, kc_complete) + { + id: 'PRJ-2026-027', + sourceLeadId: 'kl_037', + ownerId: 'own_002', + propertyId: 'P-9027', + address: '1912 Mira Vista Dr, Plano, TX 75025', + customerName: 'Daphne Garrett', + customerPhone: '(972) 555-0137', + customerEmail: 'daphne.g@gmail.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Gutters + Fascia', + status: 'completed', + phase: 'Handover', + budget: 8900, + approvedBudget: 8900, + committedCost: 8600, + actualCost: 8400, + spent: 8400, + variancePercent: -5.6, + margin: 0.03, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 890, + startDate: '2026-02-10', + endDate: '2026-03-02', + completionPercentage: 100, + healthScore: 96, + openRFIs: 0, + changeOrderCount: 0, + pendingInvoiceCount: 0, + budgetBreakdown: [ + { name: 'LeafGuard DFW', category: 'Gutter Materials', allocated: 3800, committed: 3800, actual: 3600 }, + { name: 'James Hardie', category: 'Fascia Materials', allocated: 1800, committed: 1800, actual: 1800 }, + { name: 'Plano Roofing Crew A', category: 'Labor', allocated: 2600, committed: 2600, actual: 2600 }, + { name: 'City of Plano', category: 'Permits', allocated: 400, committed: 400, actual: 400 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 300, committed: 0, actual: 0 }, + ], + changeOrders: [], + rfis: [], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_027_1', milestone: 'Deposit — 50%', amount: 4450, dueDate: '2026-02-10', status: 'paid', paidDate: '2026-02-10' }, + { id: 'ps_027_2', milestone: 'Final — 50%', amount: 4450, dueDate: '2026-03-02', status: 'paid', paidDate: '2026-03-02' }, + ], + invoices: [ + { id: 'inv_027_1', amount: 3600, submittedBy: 'LeafGuard DFW', status: 'paid', dueDate: '2026-03-01', datePaid: '2026-03-02' }, + { id: 'inv_027_2', amount: 1800, submittedBy: 'James Hardie', status: 'paid', dueDate: '2026-02-28', datePaid: '2026-03-01' }, + { id: 'inv_027_3', amount: 2600, submittedBy: 'Plano Roofing Crew A', status: 'paid', dueDate: '2026-03-02', datePaid: '2026-03-02' }, + { id: 'inv_027_4', amount: 400, submittedBy: 'City of Plano', status: 'paid', dueDate: '2026-02-12', datePaid: '2026-02-12' }, + ], + milestones: [ + { id: 'ms_027_1', name: 'Contract Signed', dueDate: '2026-02-10', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_027_2', name: 'Materials Ordered', dueDate: '2026-02-12', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_027_3', name: 'Fascia Repair', dueDate: '2026-02-28', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_027_4', name: 'Gutter Install', dueDate: '2026-03-01', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_027_5', name: 'Final Walkthrough', dueDate: '2026-03-02', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_027_6', name: 'Invoice & Payment', dueDate: '2026-03-02', status: 'completed', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-02-10', action: 'Contract Executed', user: 'Dalton Pruitt', details: '' }, + { date: '2026-02-28', action: 'Production Started',user: 'Wade Hollis', details: 'Fascia repair started.' }, + { date: '2026-03-02', action: 'Project Closed', user: 'Wade Hollis', details: 'Complete. Customer gave referral cards to 3 neighbors.' }, + ], + documents: [ + { name: 'Scope of Work - Gutters + Fascia', url: '#', type: 'contract' }, + { name: 'Permit #RFP-2026-1118', url: '#', type: 'permit' }, + { name: 'Final Invoice Package', url: '#', type: 'invoice' }, + ], + teamMembers: [ + { id: 'jtm_027_1', userId: 'e5', name: 'Dalton Pruitt', email: 'agent5@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, + + // PRJ-2026-028 — Nathaniel Cruz (kl_038, kc_complete) + { + id: 'PRJ-2026-028', + sourceLeadId: 'kl_038', + ownerId: 'own_002', + propertyId: 'P-9028', + address: '5808 Tennyson Pkwy, Plano, TX 75024', + customerName: 'Nathaniel Cruz', + customerPhone: '(972) 555-0138', + customerEmail: 'ncruz@icloud.com', + contractorId: 'con_001', + subcontractorIds: [], + projectType: 'Roof Replacement', + status: 'completed', + phase: 'Handover', + budget: 19400, + approvedBudget: 19400, + committedCost: 19400, + actualCost: 18600, + spent: 18600, + variancePercent: -4.1, + margin: 0.00, + commissionType: 'percent_gross', + commissionRate: 10, + commission: 1940, + startDate: '2026-02-04', + endDate: '2026-03-20', + completionPercentage: 100, + healthScore: 87, + openRFIs: 0, + changeOrderCount: 1, + pendingInvoiceCount: 0, + budgetBreakdown: [ + { name: 'James Hardie', category: 'Materials', allocated: 10400, committed: 10400, actual: 11200 }, + { name: 'Plano Roofing Crew B', category: 'Labor', allocated: 6800, committed: 6800, actual: 6800 }, + { name: 'City of Plano', category: 'Permits', allocated: 600, committed: 600, actual: 600 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 1600, committed: 1600, actual: 0 }, + ], + changeOrders: [ + { id: 'CO-028-01', title: 'Decking Replacement — 3 Sheets', amount: 720, status: 'approved', description: 'Three rotted OSB sheets discovered during tear-off. Replaced.' }, + ], + rfis: [], + riskLog: [], + issueLog: [], + paymentSchedule: [ + { id: 'ps_028_1', milestone: 'Deposit — 30%', amount: 5820, dueDate: '2026-02-04', status: 'paid', paidDate: '2026-02-04' }, + { id: 'ps_028_2', milestone: 'Progress — 40%', amount: 7760, dueDate: '2026-03-12', status: 'paid', paidDate: '2026-03-14' }, + { id: 'ps_028_3', milestone: 'Final — 30%', amount: 5820, dueDate: '2026-03-20', status: 'paid', paidDate: '2026-03-20' }, + ], + invoices: [ + { id: 'inv_028_1', amount: 11200, submittedBy: 'James Hardie', status: 'paid', dueDate: '2026-03-10', datePaid: '2026-03-11' }, + { id: 'inv_028_2', amount: 6800, submittedBy: 'Plano Roofing Crew B', status: 'paid', dueDate: '2026-03-12', datePaid: '2026-03-13' }, + { id: 'inv_028_3', amount: 600, submittedBy: 'City of Plano', status: 'paid', dueDate: '2026-02-15', datePaid: '2026-02-15' }, + ], + milestones: [ + { id: 'ms_028_1', name: 'Contract Signed', dueDate: '2026-02-04', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_028_2', name: 'Materials Ordered', dueDate: '2026-02-06', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_028_3', name: 'Permits Pulled', dueDate: '2026-02-15', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_028_4', name: 'Tear-off & Decking', dueDate: '2026-03-10', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_028_5', name: 'Roofing Install', dueDate: '2026-03-12', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_028_6', name: 'Final Inspection', dueDate: '2026-03-18', status: 'completed', assignedTo: 'con_001' }, + { id: 'ms_028_7', name: 'Invoice & Payment', dueDate: '2026-03-20', status: 'completed', assignedTo: 'con_001' }, + ], + activityTimeline: [ + { date: '2026-02-04', action: 'Contract Executed', user: 'Shelby Greer', details: '' }, + { date: '2026-03-10', action: 'Production Started', user: 'Wade Hollis', details: 'Tear-off found 3 rotted deck sheets. CO raised.' }, + { date: '2026-03-12', action: 'Install Complete', user: 'Wade Hollis', details: 'Roofing complete.' }, + { date: '2026-03-20', action: 'Project Closed', user: 'Wade Hollis', details: 'Longest close — 7 weeks due to complex insurance supplemental.' }, + ], + documents: [ + { name: 'Scope of Work - Roof Replacement', url: '#', type: 'contract' }, + { name: 'Permit #RFP-2026-1110', url: '#', type: 'permit' }, + { name: 'Change Order CO-028-01', url: '#', type: 'change_order' }, + ], + teamMembers: [ + { id: 'jtm_028_1', userId: 'e4', name: 'Shelby Greer', email: 'agent4@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', 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 }, + ], + }, ]; // --------------------------------------------------------------------------- @@ -4267,7 +5521,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0123', email: 'charlotte.n@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', - columnId: 'kc_signed', bucketId: null, value: 18200, stormSource: true, + columnId: 'kc_signed', bucketId: null, value: 18200, stormSource: true, projectId: 'PRJ-2026-013', notes: 'Signed Mar 22. Install scheduled for Apr 14.', createdDate: '2026-03-01', activity: [ @@ -4283,7 +5537,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0124', email: 'hcastaneda@yahoo.com', jobType: 'Siding Replacement', insuranceType: 'Insurance', assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', - columnId: 'kc_signed', bucketId: null, value: 31500, + columnId: 'kc_signed', bucketId: null, value: 31500, projectId: 'PRJ-2026-014', notes: 'Signed. Full siding replacement — 2,400 sq ft. Production queue.', createdDate: '2026-02-28', activity: [ @@ -4299,7 +5553,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0125', email: 'yblackwell@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Retail', assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', - columnId: 'kc_signed', bucketId: null, value: 27800, + columnId: 'kc_signed', bucketId: null, value: 27800, projectId: 'PRJ-2026-015', notes: 'Cash client. Signed fast — paid 50% deposit upfront.', createdDate: '2026-03-05', activity: [ @@ -4315,7 +5569,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0126', email: 'e.okafor@outlook.com', jobType: 'Roof + Gutters', insuranceType: 'Insurance', assignedAgentId: 'e5', assignedAgentName: 'Dalton Pruitt', - columnId: 'kc_signed', bucketId: null, value: 22400, stormSource: true, + columnId: 'kc_signed', bucketId: null, value: 22400, stormSource: true, projectId: 'PRJ-2026-016', notes: 'Combined roof and gutter job. Production scheduled Apr 18.', createdDate: '2026-03-03', activity: [ @@ -4331,7 +5585,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0127', email: 'adriana.v@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', - columnId: 'kc_signed', bucketId: null, value: 19600, stormSource: true, + columnId: 'kc_signed', bucketId: null, value: 19600, stormSource: true, projectId: 'PRJ-2026-017', notes: 'Signed after lengthy negotiation on supplemental items.', createdDate: '2026-02-15', activity: [ @@ -4351,7 +5605,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0128', email: 'mdelgado@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', - columnId: 'kc_progress', bucketId: null, value: 16800, stormSource: true, + columnId: 'kc_progress', bucketId: null, value: 16800, stormSource: true, projectId: 'PRJ-2026-018', notes: 'Tear-off complete. New decking going on today.', createdDate: '2026-02-10', activity: [ @@ -4368,7 +5622,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0129', email: 's.tran@yahoo.com', jobType: 'Siding Replacement', insuranceType: 'Insurance', assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', - columnId: 'kc_progress', bucketId: null, value: 28500, + columnId: 'kc_progress', bucketId: null, value: 28500, projectId: 'PRJ-2026-019', notes: 'Day 3 of install. On track for completion Friday.', createdDate: '2026-02-08', activity: [ @@ -4385,7 +5639,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0130', email: 'reg.hopper@icloud.com', jobType: 'Roof + Gutters', insuranceType: 'Insurance', assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', - columnId: 'kc_progress', bucketId: null, value: 21200, + columnId: 'kc_progress', bucketId: null, value: 21200, projectId: 'PRJ-2026-020', notes: 'Roofing done. Gutters crew arriving tomorrow.', createdDate: '2026-02-05', activity: [ @@ -4402,7 +5656,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0131', email: 'nadia.t@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Retail', assignedAgentId: 'e5', assignedAgentName: 'Dalton Pruitt', - columnId: 'kc_progress', bucketId: null, value: 34500, + columnId: 'kc_progress', bucketId: null, value: 34500, projectId: 'PRJ-2026-021', notes: 'Premium GAF Timberline HDZ install. Custom color.', createdDate: '2026-02-12', activity: [ @@ -4419,7 +5673,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0132', email: 'c.aguilar@outlook.com', jobType: 'Siding Repair', insuranceType: 'Insurance', assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', - columnId: 'kc_progress', bucketId: null, value: 9400, stormSource: true, + columnId: 'kc_progress', bucketId: null, value: 9400, stormSource: true, projectId: 'PRJ-2026-022', notes: 'Partial siding repair only — south and west faces. 2 days left.', createdDate: '2026-02-18', activity: [ @@ -4436,7 +5690,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0133', email: 'tamara.o@yahoo.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', - columnId: 'kc_progress', bucketId: null, value: 42000, stormSource: true, + columnId: 'kc_progress', bucketId: null, value: 42000, stormSource: true, projectId: 'PRJ-2026-023', notes: 'Large job — 3,600 sq ft. Day 1 of 3.', createdDate: '2026-02-01', activity: [ @@ -4455,7 +5709,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0134', email: 'craig.s@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', - columnId: 'kc_complete', bucketId: null, value: 17200, + columnId: 'kc_complete', bucketId: null, value: 17200, projectId: 'PRJ-2026-024', notes: 'Job complete. Final walkthrough done. Client extremely happy.', createdDate: '2026-01-15', activity: [ @@ -4473,7 +5727,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0135', email: 'bertha.f@hotmail.com', jobType: 'Siding Replacement', insuranceType: 'Insurance', assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', - columnId: 'kc_complete', bucketId: null, value: 26400, + columnId: 'kc_complete', bucketId: null, value: 26400, projectId: 'PRJ-2026-025', notes: 'Complete. Insurance check received and deposited.', createdDate: '2026-01-10', activity: [ @@ -4491,7 +5745,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0136', email: 'oliver.st@outlook.com', jobType: 'Roof Replacement', insuranceType: 'Retail', assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', - columnId: 'kc_complete', bucketId: null, value: 22100, + columnId: 'kc_complete', bucketId: null, value: 22100, projectId: 'PRJ-2026-026', notes: 'Cash deal done. Referral bonus owed to Oliver per agreement.', createdDate: '2026-01-20', activity: [ @@ -4509,7 +5763,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0137', email: 'daphne.g@gmail.com', jobType: 'Gutters + Fascia', insuranceType: 'Insurance', assignedAgentId: 'e5', assignedAgentName: 'Dalton Pruitt', - columnId: 'kc_complete', bucketId: null, value: 8900, + columnId: 'kc_complete', bucketId: null, value: 8900, projectId: 'PRJ-2026-027', notes: 'Complete. Customer requested referral card — strong close.', createdDate: '2026-01-25', activity: [ @@ -4527,7 +5781,7 @@ const KANBAN_LEADS_INITIAL = [ phone: '(972) 555-0138', email: 'ncruz@icloud.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', - columnId: 'kc_complete', bucketId: null, value: 19400, stormSource: true, + columnId: 'kc_complete', bucketId: null, value: 19400, stormSource: true, projectId: 'PRJ-2026-028', notes: 'Complete. Longest pipeline — 7 week close. Insurance supplemental was complex.', createdDate: '2026-01-05', activity: [