feat(data): re-stage subcontractor demo tasks across the full state machine with coherent history
This commit is contained in:
+207
-38
@@ -7145,9 +7145,11 @@ const MOCK_SUBCONTRACTOR_TASKS = [
|
||||
{ id: 'sct_003_p1', name: 'Before.jpg', url: '/assets/images/properties/Brick_Front_Porch_Home.jpg', annotation: 'Before' },
|
||||
],
|
||||
statusHistory: [
|
||||
{ id: 'sct_003_h1', status: 'Assigned', actorId: 'a1', actorName: 'Wade Hollis', comment: 'Task created.', at: '2026-05-05T11:00:00Z' },
|
||||
{ id: 'sct_003_h2', status: 'In Progress', actorId: 'sub_003', actorName: 'Dwayne Boudreaux', comment: 'Started prep work.', at: '2026-05-13T08:00:00Z' },
|
||||
{ id: 'sct_003_h3', status: 'Completed', actorId: 'sub_003', actorName: 'Dwayne Boudreaux', comment: 'Walked through with homeowner.', at: '2026-05-14T17:30:00Z' },
|
||||
{ id: 'sct_003_h1', status: 'Assigned', actorId: 'a1', actorName: 'Wade Hollis', comment: 'Task created and assigned.', at: '2026-05-05T11:00:00Z' },
|
||||
{ id: 'sct_003_h2', status: 'Pre-Work Inspection', actorId: 'sub_003', actorName: 'Dwayne Boudreaux', comment: 'Site walk done — colour match confirmed, surfaces prepped for paint.', at: '2026-05-12T09:00:00Z' },
|
||||
{ id: 'sct_003_h3', status: 'In Progress', actorId: 'sub_003', actorName: 'Dwayne Boudreaux', comment: 'Painting started — first coat on fascia applied.', at: '2026-05-13T08:00:00Z' },
|
||||
{ id: 'sct_003_h4', status: 'Post-Work Review', actorId: 'sub_003', actorName: 'Dwayne Boudreaux', comment: 'Work complete — two coats applied, touch-ups done. Submitted for review.', at: '2026-05-14T14:00:00Z' },
|
||||
{ id: 'sct_003_h5', status: 'Completed', actorId: 'a1', actorName: 'Wade Hollis', comment: 'Approved — passed final review. Homeowner satisfied with colour match.', at: '2026-05-14T17:30:00Z' },
|
||||
],
|
||||
thread: [
|
||||
{ id: 'sct_003_t1', channel: 'group', senderId: 'sub_003', senderName: 'Dwayne Boudreaux', senderRole: 'Subcontractor', body: 'Wrapped up — homeowner signed off. Photos uploaded.', at: '2026-05-14T17:25:00Z', mine: true },
|
||||
@@ -7158,7 +7160,38 @@ const MOCK_SUBCONTRACTOR_TASKS = [
|
||||
fees: [
|
||||
{ id: 'sct_003_f1', description: 'Touch-up paint labour', type: 'Labour / Service Fee', amount: 180, createdAt: '2026-05-14T17:35:00Z' },
|
||||
],
|
||||
activities: [],
|
||||
activities: [
|
||||
{
|
||||
id: 'sct_003_a1', type: 'status_change', status: 'Assigned',
|
||||
note: 'Task created and assigned. Colour match to existing Sherwin-Williams trim noted.',
|
||||
photos: [],
|
||||
actorId: 'a1', actorName: 'Wade Hollis', actorRole: 'Admin',
|
||||
at: '2026-05-05T11:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_003_a2', type: 'status_change', status: 'Pre-Work Inspection',
|
||||
note: 'Site walk done — fascia and trim surfaces lightly sanded, colour chip matched to SW Repose Gray. Ready to paint.',
|
||||
photos: [
|
||||
{ id: 'sct_003_a2_p1', url: '/assets/images/properties/Brick_Front_Porch_Home.jpg', name: 'pre-work-inspection.jpg' },
|
||||
],
|
||||
actorId: 'sub_003', actorName: 'Dwayne Boudreaux', actorRole: 'Subcontractor',
|
||||
at: '2026-05-12T09:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_003_a3', type: 'progress_update', status: 'In Progress',
|
||||
note: 'First coat applied to fascia — good adhesion. Second coat scheduled for tomorrow morning.',
|
||||
photos: [],
|
||||
actorId: 'sub_003', actorName: 'Dwayne Boudreaux', actorRole: 'Subcontractor',
|
||||
at: '2026-05-13T08:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_003_a4', type: 'status_change', status: 'Completed',
|
||||
note: 'Approved — passed final review. Homeowner satisfied with colour match.',
|
||||
photos: [],
|
||||
actorId: 'a1', actorName: 'Wade Hollis', actorRole: 'Admin',
|
||||
at: '2026-05-14T17:30:00Z',
|
||||
},
|
||||
],
|
||||
projectId: 'PRJ-2026-006',
|
||||
paymentStatus: 'Paid',
|
||||
paymentRequestedAt: '2026-05-14T17:35:00Z',
|
||||
@@ -7280,7 +7313,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [
|
||||
},
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// sct_006 — Maya (sub_002) — Gutter replacement, Assigned
|
||||
// sct_006 — Maya (sub_002) — Gutter replacement, Pre-Work Inspection
|
||||
// -------------------------------------------------------------------
|
||||
{
|
||||
id: 'sct_006',
|
||||
@@ -7297,20 +7330,45 @@ const MOCK_SUBCONTRACTOR_TASKS = [
|
||||
priority: 'low',
|
||||
category: 'Gutters',
|
||||
assignedDate: '2026-05-17T14:00:00Z',
|
||||
status: 'Assigned',
|
||||
photos: [],
|
||||
statusHistory: [
|
||||
{ id: 'sct_006_h1', status: 'Assigned', actorId: 'own_001', actorName: 'Justin Johnson', comment: 'Task created and assigned.', at: '2026-05-17T14:00:00Z' },
|
||||
status: 'Pre-Work Inspection',
|
||||
photos: [
|
||||
{ id: 'sct_006_p1', name: 'Gutter_Damage.jpg', url: '/assets/images/properties/Broken_Roof_Surface.jpg', annotation: 'Gutter pulling away from fascia — south elevation' },
|
||||
],
|
||||
statusHistory: [
|
||||
{ id: 'sct_006_h1', status: 'Assigned', actorId: 'own_001', actorName: 'Justin Johnson', comment: 'Task created and assigned.', at: '2026-05-17T14:00:00Z' },
|
||||
{ id: 'sct_006_h2', status: 'Pre-Work Inspection', actorId: 'sub_002', actorName: 'Maya Patel', comment: 'Site walk done — materials staged, access confirmed. Measured 32 ft run, bronze 6" gutter ordered.', at: '2026-05-26T10:00:00Z' },
|
||||
],
|
||||
thread: [
|
||||
{ id: 'sct_006_t1', channel: 'group', senderId: 'sub_002', senderName: 'Maya Patel', senderRole: 'Subcontractor', body: 'On site for pre-work walkthrough. Gutter is pulling at four hangers — 32 ft run needs full replacement. Ordering materials now.', at: '2026-05-26T10:05:00Z', mine: true },
|
||||
{ id: 'sct_006_t2', channel: 'group', senderId: 'own_001', senderName: 'Justin Johnson', senderRole: 'Owner', body: 'Perfect. Confirm when materials arrive and I will coordinate access with the homeowner.', at: '2026-05-26T10:30:00Z' },
|
||||
],
|
||||
expenses: [
|
||||
{ id: 'sct_006_e1', description: '6" K-style gutter bronze (32 ft)', category: 'Materials', amount: 118.0, notes: 'Special order — delivery expected May 28.', receiptUrl: '', createdAt: '2026-05-26T11:00:00Z' },
|
||||
],
|
||||
thread: [],
|
||||
expenses: [],
|
||||
fees: [],
|
||||
activities: [],
|
||||
activities: [
|
||||
{
|
||||
id: 'sct_006_a1', type: 'status_change', status: 'Assigned',
|
||||
note: 'Task created and assigned. 30 ft gutter section pulling away from fascia after storm damage.',
|
||||
photos: [],
|
||||
actorId: 'own_001', actorName: 'Justin Johnson', actorRole: 'Owner',
|
||||
at: '2026-05-17T14:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_006_a2', type: 'status_change', status: 'Pre-Work Inspection',
|
||||
note: 'Site walk done — measured 32 ft run, confirmed bronze colour match, four failed hangers identified. Materials ordered, work scheduled for May 29.',
|
||||
photos: [
|
||||
{ id: 'sct_006_a2_p1', url: '/assets/images/properties/Broken_Roof_Surface.jpg', name: 'gutter-inspection.jpg' },
|
||||
],
|
||||
actorId: 'sub_002', actorName: 'Maya Patel', actorRole: 'Subcontractor',
|
||||
at: '2026-05-26T10:00:00Z',
|
||||
},
|
||||
],
|
||||
projectId: 'PRJ-2026-009',
|
||||
paymentStatus: 'Unpaid',
|
||||
paymentRequestedAt: null,
|
||||
createdAt: '2026-05-17T14:00:00Z',
|
||||
updatedAt: '2026-05-17T14:00:00Z',
|
||||
updatedAt: '2026-05-26T11:00:00Z',
|
||||
},
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
@@ -7336,9 +7394,11 @@ const MOCK_SUBCONTRACTOR_TASKS = [
|
||||
{ id: 'sct_007_p1', name: 'Deck_Repair.jpg', url: '/assets/images/properties/Cracked_Asphalt_Shingles.jpg', annotation: 'Soft section, top right' },
|
||||
],
|
||||
statusHistory: [
|
||||
{ id: 'sct_007_h1', status: 'Assigned', actorId: 'a1', actorName: 'Wade Hollis', comment: 'Task created.', at: '2026-05-01T09:00:00Z' },
|
||||
{ id: 'sct_007_h2', status: 'In Progress', actorId: 'sub_002', actorName: 'Maya Patel', comment: 'Tear-off underway.', at: '2026-05-05T07:30:00Z' },
|
||||
{ id: 'sct_007_h3', status: 'Completed', actorId: 'sub_002', actorName: 'Maya Patel', comment: 'Closed out, photos in.', at: '2026-05-07T16:45:00Z' },
|
||||
{ id: 'sct_007_h1', status: 'Assigned', actorId: 'a1', actorName: 'Wade Hollis', comment: 'Task created and assigned.', at: '2026-05-01T09:00:00Z' },
|
||||
{ id: 'sct_007_h2', status: 'Pre-Work Inspection', actorId: 'sub_002', actorName: 'Maya Patel', comment: 'Site walk done — soft spots located, OSB replacement measured and ordered.', at: '2026-05-04T09:30:00Z' },
|
||||
{ id: 'sct_007_h3', status: 'In Progress', actorId: 'sub_002', actorName: 'Maya Patel', comment: 'Tear-off underway — decking cut and removed.', at: '2026-05-05T07:30:00Z' },
|
||||
{ id: 'sct_007_h4', status: 'Post-Work Review', actorId: 'sub_002', actorName: 'Maya Patel', comment: 'Work complete — OSB replaced, re-felted and re-shingled. Submitted for review.', at: '2026-05-07T14:00:00Z' },
|
||||
{ id: 'sct_007_h5', status: 'Completed', actorId: 'a1', actorName: 'Wade Hollis', comment: 'Approved — passed final review. Roof deck sound and waterproofed.', at: '2026-05-07T16:45:00Z' },
|
||||
],
|
||||
thread: [
|
||||
{ id: 'sct_007_t1', channel: 'group', senderId: 'sub_002', senderName: 'Maya Patel', senderRole: 'Subcontractor', body: 'All done — closed out. Final photos uploaded.', at: '2026-05-07T16:40:00Z', mine: true },
|
||||
@@ -7351,7 +7411,38 @@ const MOCK_SUBCONTRACTOR_TASKS = [
|
||||
fees: [
|
||||
{ id: 'sct_007_f1', description: 'Labour — deck repair (2 days)', type: 'Labour / Service Fee', amount: 920, createdAt: '2026-05-07T16:50:00Z' },
|
||||
],
|
||||
activities: [],
|
||||
activities: [
|
||||
{
|
||||
id: 'sct_007_a1', type: 'status_change', status: 'Assigned',
|
||||
note: 'Task created. Sheathing soft in two ~2x2 ft areas on the north slope.',
|
||||
photos: [],
|
||||
actorId: 'a1', actorName: 'Wade Hollis', actorRole: 'Admin',
|
||||
at: '2026-05-01T09:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_007_a2', type: 'status_change', status: 'Pre-Work Inspection',
|
||||
note: 'Site walk done — both soft spots probed and measured. OSB sheets ordered, underlayment on hand.',
|
||||
photos: [
|
||||
{ id: 'sct_007_a2_p1', url: '/assets/images/properties/Cracked_Asphalt_Shingles.jpg', name: 'soft-spot-pre-work.jpg' },
|
||||
],
|
||||
actorId: 'sub_002', actorName: 'Maya Patel', actorRole: 'Subcontractor',
|
||||
at: '2026-05-04T09:30:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_007_a3', type: 'progress_update', status: 'In Progress',
|
||||
note: 'Decking cut out and removed. Framing underneath solid — no rot beyond the sheathing.',
|
||||
photos: [],
|
||||
actorId: 'sub_002', actorName: 'Maya Patel', actorRole: 'Subcontractor',
|
||||
at: '2026-05-05T07:30:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_007_a4', type: 'status_change', status: 'Completed',
|
||||
note: 'Approved — passed final review. Roof deck sound and waterproofed.',
|
||||
photos: [],
|
||||
actorId: 'a1', actorName: 'Wade Hollis', actorRole: 'Admin',
|
||||
at: '2026-05-07T16:45:00Z',
|
||||
},
|
||||
],
|
||||
projectId: 'PRJ-2026-001',
|
||||
paymentStatus: 'Paid',
|
||||
paymentRequestedAt: '2026-05-07T16:50:00Z',
|
||||
@@ -7378,7 +7469,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [
|
||||
priority: 'medium',
|
||||
category: 'Electrical',
|
||||
assignedDate: '2026-05-16T13:00:00Z',
|
||||
status: 'In Progress',
|
||||
status: 'Post-Work Review',
|
||||
photos: [
|
||||
{ id: 'sct_008_p1', name: 'Kitchen_Outlet.jpg', url: '/assets/images/properties/Modern_White_Suburban_Home.jpg', annotation: 'Kitchen — left of sink, current standard receptacle' },
|
||||
{ id: 'sct_008_p2', name: 'Island_Outlet.jpg', url: '/assets/images/properties/Sunny_Suburban_House.jpg', annotation: 'Island outlet — replace with GFCI' },
|
||||
@@ -7386,8 +7477,10 @@ const MOCK_SUBCONTRACTOR_TASKS = [
|
||||
{ id: 'sct_008_p4', name: 'Powder_Room.jpg', url: '/assets/images/properties/Luxury_Driveway_Residence.jpg', annotation: 'Powder room — confirm wire gauge' },
|
||||
],
|
||||
statusHistory: [
|
||||
{ id: 'sct_008_h1', status: 'Assigned', actorId: 'a1', actorName: 'Wade Hollis', comment: 'Task created and assigned.', at: '2026-05-16T13:00:00Z' },
|
||||
{ id: 'sct_008_h2', status: 'In Progress', actorId: 'sub_001', actorName: 'Carlos Mendoza', comment: 'On site, kitchen done; bath next.', at: '2026-05-19T10:15:00Z' },
|
||||
{ id: 'sct_008_h1', status: 'Assigned', actorId: 'a1', actorName: 'Wade Hollis', comment: 'Task created and assigned.', at: '2026-05-16T13:00:00Z' },
|
||||
{ id: 'sct_008_h2', status: 'Pre-Work Inspection', actorId: 'sub_001', actorName: 'Carlos Mendoza', comment: 'Site walk done — confirmed all copper wiring, no aluminum. Access to all four outlets verified.', at: '2026-05-18T09:00:00Z' },
|
||||
{ id: 'sct_008_h3', status: 'In Progress', actorId: 'sub_001', actorName: 'Carlos Mendoza', comment: 'On site, kitchen outlets done; bath next.', at: '2026-05-19T10:15:00Z' },
|
||||
{ id: 'sct_008_h4', status: 'Post-Work Review', actorId: 'sub_001', actorName: 'Carlos Mendoza', comment: 'Work complete — all 4 GFCI outlets installed and tested. Submitted for owner review.', at: '2026-05-19T17:00:00Z' },
|
||||
],
|
||||
thread: [
|
||||
{ id: 'sct_008_t1', channel: 'group', senderId: 'a1', senderName: 'Wade Hollis', senderRole: 'Admin', body: 'Insurance is reimbursing the code upgrade — keep receipts for the GFCI devices.', at: '2026-05-16T13:05:00Z' },
|
||||
@@ -7419,23 +7512,32 @@ const MOCK_SUBCONTRACTOR_TASKS = [
|
||||
at: '2026-05-16T13:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_008_a2', type: 'status_change', status: 'In Progress',
|
||||
note: 'Arrived on site. Verified wiring is copper (no aluminum). Starting kitchen counter outlets first.',
|
||||
id: 'sct_008_a2', type: 'status_change', status: 'Pre-Work Inspection',
|
||||
note: 'Pre-work walkthrough complete — confirmed all copper wiring throughout. Four outlet locations accessible. Good to proceed.',
|
||||
photos: [
|
||||
{ id: 'sct_008_a2_p1', url: '/assets/images/properties/Modern_White_Suburban_Home.jpg', name: 'kitchen-before.jpg' },
|
||||
],
|
||||
actorId: 'sub_001', actorName: 'Carlos Mendoza', actorRole: 'Subcontractor',
|
||||
at: '2026-05-19T10:15:00Z',
|
||||
at: '2026-05-18T09:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_008_a3', type: 'progress_update', status: 'In Progress',
|
||||
note: 'Both kitchen counter outlets swapped to Leviton 20A GFCI. Tested with plug-in tester — passed.',
|
||||
note: 'Both kitchen counter outlets and island swapped to Leviton 20A GFCI. Tested with plug-in tester — passed. Master bath and powder room done after lunch.',
|
||||
photos: [
|
||||
{ id: 'sct_008_a3_p1', url: '/assets/images/properties/Sunny_Suburban_House.jpg', name: 'gfci-installed.jpg' },
|
||||
],
|
||||
actorId: 'sub_001', actorName: 'Carlos Mendoza', actorRole: 'Subcontractor',
|
||||
at: '2026-05-19T12:30:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_008_a4', type: 'status_change', status: 'Post-Work Review',
|
||||
note: 'All 4 GFCI outlets installed and tested — kitchen (x2), master bath, and powder room. All trip and reset correctly. Submitted for owner review.',
|
||||
photos: [
|
||||
{ id: 'sct_008_a4_p1', url: '/assets/images/properties/Brick_Front_Porch_Home.jpg', name: 'bath-gfci-done.jpg' },
|
||||
],
|
||||
actorId: 'sub_001', actorName: 'Carlos Mendoza', actorRole: 'Subcontractor',
|
||||
at: '2026-05-19T17:00:00Z',
|
||||
},
|
||||
],
|
||||
projectId: 'PRJ-2026-004',
|
||||
paymentStatus: 'Unpaid',
|
||||
@@ -7445,7 +7547,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [
|
||||
},
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// sct_010 — Carlos (sub_001) — newly assigned, awaiting acknowledgement
|
||||
// sct_010 — Carlos (sub_001) — EV charger circuit, Rework Needed
|
||||
// -------------------------------------------------------------------
|
||||
{
|
||||
id: 'sct_010',
|
||||
@@ -7462,29 +7564,78 @@ const MOCK_SUBCONTRACTOR_TASKS = [
|
||||
priority: 'medium',
|
||||
category: 'Electrical',
|
||||
assignedDate: '2026-05-20T09:00:00Z',
|
||||
status: 'Assigned',
|
||||
status: 'Rework Needed',
|
||||
photos: [
|
||||
{ id: 'sct_010_p1', name: 'Garage_Wall.jpg', url: '/assets/images/properties/Modern_White_Suburban_Home.jpg', annotation: 'Wall Connector mounting location' },
|
||||
{ id: 'sct_010_p2', name: 'Panel_Location.jpg', url: '/assets/images/properties/Brick_Front_Porch_Home.jpg', annotation: 'Main panel — check available breaker slots' },
|
||||
],
|
||||
statusHistory: [
|
||||
{ id: 'sct_010_h1', status: 'Assigned', actorId: 'own_001', actorName: 'Justin Johnson', comment: 'Task created and assigned. Please confirm ETA.', at: '2026-05-20T09:00:00Z' },
|
||||
{ id: 'sct_010_h1', status: 'Assigned', actorId: 'own_001', actorName: 'Justin Johnson', comment: 'Task created and assigned. Please confirm ETA.', at: '2026-05-20T09:00:00Z' },
|
||||
{ id: 'sct_010_h2', status: 'Pre-Work Inspection', actorId: 'sub_001', actorName: 'Carlos Mendoza', comment: 'Site walk done — panel has one open double-pole slot. 60A breaker fits. Wire run planned through garage ceiling.', at: '2026-05-21T10:00:00Z' },
|
||||
{ id: 'sct_010_h3', status: 'In Progress', actorId: 'sub_001', actorName: 'Carlos Mendoza', comment: 'Circuit rough-in started — conduit run through garage attic space.', at: '2026-05-22T08:00:00Z' },
|
||||
{ id: 'sct_010_h4', status: 'Post-Work Review', actorId: 'sub_001', actorName: 'Carlos Mendoza', comment: 'Work complete — 60A circuit installed and Wall Connector mounted. Submitted for review.', at: '2026-05-26T16:00:00Z' },
|
||||
{ id: 'sct_010_h5', status: 'Rework Needed', actorId: 'own_001', actorName: 'Justin Johnson', comment: 'Conduit not secured to NEC 300.11 spacing — re-fasten every 10 ft and resubmit.', at: '2026-05-27T11:00:00Z' },
|
||||
],
|
||||
thread: [
|
||||
{ id: 'sct_010_t1', channel: 'group', senderId: 'own_001', senderName: 'Justin Johnson', senderRole: 'Owner', body: 'Carlos — homeowner is hoping to have this in before next weekend. Can you take a look at the panel and confirm slot availability?', at: '2026-05-20T09:02:00Z' },
|
||||
{ id: 'sct_010_t2', channel: 'group', senderId: 'sub_001', senderName: 'Carlos Mendoza', senderRole: 'Subcontractor', body: 'Panel has one open 2-pole slot — perfect for the 60A breaker. Will start rough-in Thursday.', at: '2026-05-21T10:10:00Z', mine: true },
|
||||
{ id: 'sct_010_t3', channel: 'group', senderId: 'own_001', senderName: 'Justin Johnson', senderRole: 'Owner', body: 'Review flag: conduit spacing does not meet NEC 300.11 — needs a clip every 10 ft along the run. Please fix and resubmit.', at: '2026-05-27T11:05:00Z' },
|
||||
],
|
||||
expenses: [
|
||||
{ id: 'sct_010_e1', description: '60A double-pole breaker (Square D)', category: 'Materials', amount: 48.0, notes: '', receiptUrl: '', createdAt: '2026-05-21T14:00:00Z' },
|
||||
{ id: 'sct_010_e2', description: '6/3 AWG NM cable — 50 ft', category: 'Materials', amount: 112.0, notes: 'Panel to garage run.', receiptUrl: '', createdAt: '2026-05-21T14:05:00Z' },
|
||||
{ id: 'sct_010_e3', description: '1" EMT conduit + fittings', category: 'Materials', amount: 34.5, notes: 'Garage exposed section.', receiptUrl: '', createdAt: '2026-05-21T14:10:00Z' },
|
||||
{ id: 'sct_010_e4', description: 'Permit fee — City of Plano (EV circuit)', category: 'Permits', amount: 75.0, notes: 'Reimbursable.', receiptUrl: '', createdAt: '2026-05-22T09:00:00Z' },
|
||||
],
|
||||
fees: [
|
||||
{ id: 'sct_010_f1', description: 'Labour — EV circuit rough-in + Wall Connector install', type: 'Labour / Service Fee', amount: 580, createdAt: '2026-05-26T16:05:00Z' },
|
||||
{ id: 'sct_010_f2', description: 'Mobilization to site', type: 'Mobilization Fee', amount: 75, createdAt: '2026-05-22T08:00:00Z' },
|
||||
],
|
||||
activities: [
|
||||
{
|
||||
id: 'sct_010_a1', type: 'status_change', status: 'Assigned',
|
||||
note: 'Task created. Tesla Wall Connector install — dedicated 60A 240V circuit from main panel to garage.',
|
||||
photos: [],
|
||||
actorId: 'own_001', actorName: 'Justin Johnson', actorRole: 'Owner',
|
||||
at: '2026-05-20T09:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_010_a2', type: 'status_change', status: 'Pre-Work Inspection',
|
||||
note: 'Panel inspection done — one open double-pole slot confirmed. Wire route planned through garage ceiling. Permit application submitted.',
|
||||
photos: [
|
||||
{ id: 'sct_010_a2_p1', url: '/assets/images/properties/Brick_Front_Porch_Home.jpg', name: 'panel-slot-available.jpg' },
|
||||
],
|
||||
actorId: 'sub_001', actorName: 'Carlos Mendoza', actorRole: 'Subcontractor',
|
||||
at: '2026-05-21T10:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_010_a3', type: 'progress_update', status: 'In Progress',
|
||||
note: 'Circuit rough-in complete — 60A breaker installed, cable run through attic, conduit section mounted on garage wall. Wall Connector wired and mounted.',
|
||||
photos: [
|
||||
{ id: 'sct_010_a3_p1', url: '/assets/images/properties/Modern_White_Suburban_Home.jpg', name: 'ev-charger-installed.jpg' },
|
||||
],
|
||||
actorId: 'sub_001', actorName: 'Carlos Mendoza', actorRole: 'Subcontractor',
|
||||
at: '2026-05-26T16:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_010_a4', type: 'status_change', status: 'Rework Needed',
|
||||
note: 'Conduit not secured to NEC 300.11 spacing — re-fasten every 10 ft and resubmit. Photos attached showing unsupported span.',
|
||||
photos: [
|
||||
{ id: 'sct_010_a4_p1', url: '/assets/images/properties/Brick_Front_Porch_Home.jpg', name: 'conduit-spacing-issue.jpg' },
|
||||
],
|
||||
actorId: 'own_001', actorName: 'Justin Johnson', actorRole: 'Owner',
|
||||
at: '2026-05-27T11:00:00Z',
|
||||
},
|
||||
],
|
||||
expenses: [],
|
||||
fees: [],
|
||||
activities: [],
|
||||
projectId: 'PRJ-2026-006',
|
||||
paymentStatus: 'Unpaid',
|
||||
paymentRequestedAt: null,
|
||||
createdAt: '2026-05-20T09:00:00Z',
|
||||
updatedAt: '2026-05-20T09:02:00Z',
|
||||
updatedAt: '2026-05-27T11:05:00Z',
|
||||
},
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// sct_009 — Jennifer Castillo (sub_004) — On Hold plumbing
|
||||
// sct_009 — Jennifer Castillo (sub_004) — Cancelled plumbing
|
||||
// -------------------------------------------------------------------
|
||||
{
|
||||
id: 'sct_009',
|
||||
@@ -7501,21 +7652,39 @@ const MOCK_SUBCONTRACTOR_TASKS = [
|
||||
priority: 'medium',
|
||||
category: 'Plumbing',
|
||||
assignedDate: '2026-05-09T10:00:00Z',
|
||||
status: 'On Hold',
|
||||
status: 'Cancelled',
|
||||
photos: [],
|
||||
statusHistory: [
|
||||
{ id: 'sct_009_h1', status: 'Assigned', actorId: 'own_001', actorName: 'Justin Johnson', comment: 'Task created.', at: '2026-05-09T10:00:00Z' },
|
||||
{ id: 'sct_009_h2', status: 'On Hold', actorId: 'sub_004', actorName: 'Jennifer Castillo', comment: 'Waiting on framing to finish.', at: '2026-05-13T12:00:00Z' },
|
||||
{ id: 'sct_009_h1', status: 'Assigned', actorId: 'own_001', actorName: 'Justin Johnson', comment: 'Task created and assigned.', at: '2026-05-09T10:00:00Z' },
|
||||
{ id: 'sct_009_h2', status: 'Cancelled', actorId: 'own_001', actorName: 'Justin Johnson', comment: 'Homeowner cancelled the ADU project — entire scope suspended. Task voided, no further work required.', at: '2026-05-20T15:00:00Z' },
|
||||
],
|
||||
thread: [
|
||||
{ id: 'sct_009_t1', channel: 'group', senderId: 'own_001', senderName: 'Justin Johnson', senderRole: 'Owner', body: 'Jennifer — unfortunately the homeowner has decided to cancel the ADU build entirely. No further work needed on this task. Apologies for the inconvenience.', at: '2026-05-20T15:02:00Z' },
|
||||
{ id: 'sct_009_t2', channel: 'group', senderId: 'sub_004', senderName: 'Jennifer Castillo', senderRole: 'Subcontractor', body: 'Understood — no work had been started so no impact on our end. Thanks for the heads-up.', at: '2026-05-20T15:30:00Z', mine: true },
|
||||
],
|
||||
thread: [],
|
||||
expenses: [],
|
||||
fees: [],
|
||||
activities: [],
|
||||
activities: [
|
||||
{
|
||||
id: 'sct_009_a1', type: 'status_change', status: 'Assigned',
|
||||
note: 'Task created. New ADU build — bathroom rough-in to coordinate with framing inspection.',
|
||||
photos: [],
|
||||
actorId: 'own_001', actorName: 'Justin Johnson', actorRole: 'Owner',
|
||||
at: '2026-05-09T10:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'sct_009_a2', type: 'status_change', status: 'Cancelled',
|
||||
note: 'Task cancelled — homeowner suspended the ADU project. No work was started.',
|
||||
photos: [],
|
||||
actorId: 'own_001', actorName: 'Justin Johnson', actorRole: 'Owner',
|
||||
at: '2026-05-20T15:00:00Z',
|
||||
},
|
||||
],
|
||||
projectId: null,
|
||||
paymentStatus: 'Unpaid',
|
||||
paymentRequestedAt: null,
|
||||
createdAt: '2026-05-09T10:00:00Z',
|
||||
updatedAt: '2026-05-13T12:00:00Z',
|
||||
updatedAt: '2026-05-20T15:30:00Z',
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user