refactor(data): migrate project ids to PRJ-2026-### (with inbound FKs)

This commit is contained in:
Satyam Rastogi
2026-05-29 13:50:13 +05:30
parent c62ee39012
commit 058f41c763
+47 -47
View File
@@ -1045,10 +1045,10 @@ const MOCK_OWNERS = [
openRFIs: 1, openRFIs: 1,
disputes: 1, disputes: 1,
upcomingMilestones: [ upcomingMilestones: [
{ name: 'Shingle Install Complete', project: '2604 Dunwick Dr', dueDate: '2026-02-14', projectId: 'proj_001' }, { name: 'Shingle Install Complete', project: '2604 Dunwick Dr', dueDate: '2026-02-14', projectId: 'PRJ-2026-001' },
{ name: 'Electrical Hookup', project: '6613 Phoenix Pl', dueDate: '2026-02-14', projectId: 'proj_003' }, { name: 'Electrical Hookup', project: '6613 Phoenix Pl', dueDate: '2026-02-14', projectId: 'PRJ-2026-003' },
{ name: 'Flooring and Trim', project: '2612 Dunwick Dr', dueDate: '2026-02-18', projectId: 'proj_004' }, { name: 'Flooring and Trim', project: '2612 Dunwick Dr', dueDate: '2026-02-18', projectId: 'PRJ-2026-004' },
{ name: 'Panel Replacement', project: '3913 Arizona Pl', dueDate: '2026-02-20', projectId: 'proj_006' } { name: 'Panel Replacement', project: '3913 Arizona Pl', dueDate: '2026-02-20', projectId: 'PRJ-2026-006' }
], ],
cashFlowForecast: [ cashFlowForecast: [
{ month: 'Mar 2026', inflow: 45000, outflow: 38000 }, { month: 'Mar 2026', inflow: 45000, outflow: 38000 },
@@ -1101,10 +1101,10 @@ const MOCK_OWNERS = [
openRFIs: 3, openRFIs: 3,
disputes: 2, disputes: 2,
upcomingMilestones: [ upcomingMilestones: [
{ name: 'Section A - TPO Install', project: '6909 Custer Rd', dueDate: '2026-02-28', projectId: 'proj_007' }, { name: 'Section A - TPO Install', project: '6909 Custer Rd', dueDate: '2026-02-28', projectId: 'PRJ-2026-007' },
{ name: 'Final Grade and Drainage', project: '2112 Winslow Dr', dueDate: '2026-02-10', projectId: 'proj_008' }, { name: 'Final Grade and Drainage', project: '2112 Winslow Dr', dueDate: '2026-02-10', projectId: 'PRJ-2026-008' },
{ name: 'Floor 2 Installation', project: '7224 Independence Pkwy', dueDate: '2026-02-14', projectId: 'proj_009' }, { name: 'Floor 2 Installation', project: '7224 Independence Pkwy', dueDate: '2026-02-14', projectId: 'PRJ-2026-009' },
{ name: 'Waterproofing Application', project: 'Legacy Town Center', dueDate: '2026-02-12', projectId: 'proj_011' } { name: 'Waterproofing Application', project: 'Legacy Town Center', dueDate: '2026-02-12', projectId: 'PRJ-2026-011' }
], ],
cashFlowForecast: [ cashFlowForecast: [
{ month: 'Mar 2026', inflow: 95000, outflow: 72000 }, { month: 'Mar 2026', inflow: 95000, outflow: 72000 },
@@ -1404,7 +1404,7 @@ const MOCK_ORDERS = [
{ {
id: 'ORD-001', id: 'ORD-001',
vendorId: 'v3', vendorId: 'v3',
projectId: 'proj_001', projectId: 'PRJ-2026-001',
projectAddress: '2604 Dunwick Dr, Plano, TX 75023', projectAddress: '2604 Dunwick Dr, Plano, TX 75023',
orderDate: '2026-01-18', orderDate: '2026-01-18',
dueDate: '2026-01-28', dueDate: '2026-01-28',
@@ -1458,7 +1458,7 @@ const MOCK_ORDERS = [
{ {
id: 'ORD-002', id: 'ORD-002',
vendorId: 'v3', vendorId: 'v3',
projectId: 'proj_002', projectId: 'PRJ-2026-002',
projectAddress: '2617 Rothland Ln, Plano, TX 75023', projectAddress: '2617 Rothland Ln, Plano, TX 75023',
orderDate: '2025-11-10', orderDate: '2025-11-10',
dueDate: '2025-11-20', dueDate: '2025-11-20',
@@ -1512,7 +1512,7 @@ const MOCK_ORDERS = [
{ {
id: 'ORD-003', id: 'ORD-003',
vendorId: 'v6', vendorId: 'v6',
projectId: 'proj_003', projectId: 'PRJ-2026-003',
projectAddress: '6613 Phoenix Pl, Plano, TX 75023', projectAddress: '6613 Phoenix Pl, Plano, TX 75023',
orderDate: '2026-01-25', orderDate: '2026-01-25',
dueDate: '2026-02-08', dueDate: '2026-02-08',
@@ -1565,7 +1565,7 @@ const MOCK_ORDERS = [
{ {
id: 'ORD-004', id: 'ORD-004',
vendorId: 'v5', vendorId: 'v5',
projectId: 'proj_008', projectId: 'PRJ-2026-008',
projectAddress: '2112 Winslow Dr, Plano, TX 75023', projectAddress: '2112 Winslow Dr, Plano, TX 75023',
orderDate: '2025-12-02', orderDate: '2025-12-02',
dueDate: '2025-12-15', dueDate: '2025-12-15',
@@ -1620,7 +1620,7 @@ const MOCK_ORDERS = [
{ {
id: 'ORD-005', id: 'ORD-005',
vendorId: 'v3', vendorId: 'v3',
projectId: 'proj_007', projectId: 'PRJ-2026-007',
projectAddress: '6909 Custer Rd, Plano, TX 75023', projectAddress: '6909 Custer Rd, Plano, TX 75023',
orderDate: '2026-02-01', orderDate: '2026-02-01',
dueDate: '2026-02-14', dueDate: '2026-02-14',
@@ -1682,7 +1682,7 @@ const MOCK_ORDERS = [
{ {
id: 'ORD-006', id: 'ORD-006',
vendorId: 'v4', vendorId: 'v4',
projectId: 'proj_012', projectId: 'PRJ-2026-012',
projectAddress: 'Dallas/Plano Marriott at Legacy Town Center, 7121 Bishop Rd, Plano, TX 75024', projectAddress: 'Dallas/Plano Marriott at Legacy Town Center, 7121 Bishop Rd, Plano, TX 75024',
orderDate: '2026-01-15', orderDate: '2026-01-15',
dueDate: '2026-01-30', dueDate: '2026-01-30',
@@ -1746,7 +1746,7 @@ const MOCK_ORDERS = [
{ {
id: 'ORD-007', id: 'ORD-007',
vendorId: 'v3', vendorId: 'v3',
projectId: 'proj_004', projectId: 'PRJ-2026-004',
projectAddress: '2612 Dunwick Dr, Plano, TX 75023', projectAddress: '2612 Dunwick Dr, Plano, TX 75023',
orderDate: '2026-02-15', orderDate: '2026-02-15',
dueDate: '2026-02-28', dueDate: '2026-02-28',
@@ -1772,7 +1772,7 @@ const MOCK_ORDERS = [
{ {
id: 'ORD-008', id: 'ORD-008',
vendorId: 'v3', vendorId: 'v3',
projectId: 'proj_009', projectId: 'PRJ-2026-009',
projectAddress: '7224 Independence Pkwy, Plano, TX 75025', projectAddress: '7224 Independence Pkwy, Plano, TX 75025',
orderDate: '2026-02-10', orderDate: '2026-02-10',
dueDate: '2026-02-22', dueDate: '2026-02-22',
@@ -1804,7 +1804,7 @@ const MOCK_VENDOR_INVOICES = [
id: 'INV-2026-001', id: 'INV-2026-001',
vendorId: 'v3', vendorId: 'v3',
orderId: 'ORD-002', orderId: 'ORD-002',
projectId: 'proj_002', projectId: 'PRJ-2026-002',
project: '2617 Rothland Ln, Plano, TX 75023', project: '2617 Rothland Ln, Plano, TX 75023',
invoiceDate: '2025-11-22', invoiceDate: '2025-11-22',
dueDate: '2025-12-07', dueDate: '2025-12-07',
@@ -1817,7 +1817,7 @@ const MOCK_VENDOR_INVOICES = [
id: 'INV-2026-002', id: 'INV-2026-002',
vendorId: 'v3', vendorId: 'v3',
orderId: 'ORD-001', orderId: 'ORD-001',
projectId: 'proj_001', projectId: 'PRJ-2026-001',
project: '2604 Dunwick Dr, Plano, TX 75023', project: '2604 Dunwick Dr, Plano, TX 75023',
invoiceDate: '2026-01-28', invoiceDate: '2026-01-28',
dueDate: '2026-02-12', dueDate: '2026-02-12',
@@ -1830,7 +1830,7 @@ const MOCK_VENDOR_INVOICES = [
id: 'INV-2026-003', id: 'INV-2026-003',
vendorId: 'v6', vendorId: 'v6',
orderId: 'ORD-003', orderId: 'ORD-003',
projectId: 'proj_003', projectId: 'PRJ-2026-003',
project: '6613 Phoenix Pl, Plano, TX 75023', project: '6613 Phoenix Pl, Plano, TX 75023',
invoiceDate: '2026-02-04', invoiceDate: '2026-02-04',
dueDate: '2026-02-19', dueDate: '2026-02-19',
@@ -1843,7 +1843,7 @@ const MOCK_VENDOR_INVOICES = [
id: 'INV-2026-004', id: 'INV-2026-004',
vendorId: 'v5', vendorId: 'v5',
orderId: 'ORD-004', orderId: 'ORD-004',
projectId: 'proj_008', projectId: 'PRJ-2026-008',
project: '2112 Winslow Dr, Plano, TX 75023', project: '2112 Winslow Dr, Plano, TX 75023',
invoiceDate: '2025-12-16', invoiceDate: '2025-12-16',
dueDate: '2025-12-31', dueDate: '2025-12-31',
@@ -1856,7 +1856,7 @@ const MOCK_VENDOR_INVOICES = [
id: 'INV-2026-005', id: 'INV-2026-005',
vendorId: 'v3', vendorId: 'v3',
orderId: 'ORD-005', orderId: 'ORD-005',
projectId: 'proj_007', projectId: 'PRJ-2026-007',
project: '6909 Custer Rd, Plano, TX 75023', project: '6909 Custer Rd, Plano, TX 75023',
invoiceDate: '2026-02-03', invoiceDate: '2026-02-03',
dueDate: '2026-02-18', dueDate: '2026-02-18',
@@ -1869,7 +1869,7 @@ const MOCK_VENDOR_INVOICES = [
id: 'INV-2026-006', id: 'INV-2026-006',
vendorId: 'v4', vendorId: 'v4',
orderId: 'ORD-006', orderId: 'ORD-006',
projectId: 'proj_012', projectId: 'PRJ-2026-012',
project: 'Dallas/Plano Marriott, 7121 Bishop Rd, Plano, TX 75024', project: 'Dallas/Plano Marriott, 7121 Bishop Rd, Plano, TX 75024',
invoiceDate: '2026-01-30', invoiceDate: '2026-01-30',
dueDate: '2026-02-14', dueDate: '2026-02-14',
@@ -1882,7 +1882,7 @@ const MOCK_VENDOR_INVOICES = [
id: 'INV-2026-007', id: 'INV-2026-007',
vendorId: 'v1', vendorId: 'v1',
orderId: 'ORD-LABOR-001', orderId: 'ORD-LABOR-001',
projectId: 'proj_004', projectId: 'PRJ-2026-004',
project: '2612 Dunwick Dr, Plano, TX 75023', project: '2612 Dunwick Dr, Plano, TX 75023',
invoiceDate: '2026-02-10', invoiceDate: '2026-02-10',
dueDate: '2026-02-25', dueDate: '2026-02-25',
@@ -1895,7 +1895,7 @@ const MOCK_VENDOR_INVOICES = [
id: 'INV-2026-008', id: 'INV-2026-008',
vendorId: 'v3', vendorId: 'v3',
orderId: 'ORD-MAT-006', orderId: 'ORD-MAT-006',
projectId: 'proj_006', projectId: 'PRJ-2026-006',
project: '3913 Arizona Pl, Plano, TX 75023', project: '3913 Arizona Pl, Plano, TX 75023',
invoiceDate: '2026-02-07', invoiceDate: '2026-02-07',
dueDate: '2026-02-22', dueDate: '2026-02-22',
@@ -1908,7 +1908,7 @@ const MOCK_VENDOR_INVOICES = [
id: 'INV-2025-045', id: 'INV-2025-045',
vendorId: 'v1', vendorId: 'v1',
orderId: 'ORD-HIST-001', orderId: 'ORD-HIST-001',
projectId: 'proj_010', projectId: 'PRJ-2026-010',
project: '2100 Legacy Dr, Plano, TX 75023', project: '2100 Legacy Dr, Plano, TX 75023',
invoiceDate: '2025-10-15', invoiceDate: '2025-10-15',
dueDate: '2025-10-30', dueDate: '2025-10-30',
@@ -1921,7 +1921,7 @@ const MOCK_VENDOR_INVOICES = [
id: 'INV-2025-046', id: 'INV-2025-046',
vendorId: 'v3', vendorId: 'v3',
orderId: 'ORD-HIST-002', orderId: 'ORD-HIST-002',
projectId: 'proj_010', projectId: 'PRJ-2026-010',
project: '2100 Legacy Dr, Plano, TX 75023', project: '2100 Legacy Dr, Plano, TX 75023',
invoiceDate: '2025-10-02', invoiceDate: '2025-10-02',
dueDate: '2025-10-17', dueDate: '2025-10-17',
@@ -2123,7 +2123,7 @@ const MOCK_PROJECTS = [
// Project 1: Active, on track, healthy budget // Project 1: Active, on track, healthy budget
{ {
id: 'proj_001', id: 'PRJ-2026-001',
ownerId: 'own_001', ownerId: 'own_001',
propertyId: 'P-2602', propertyId: 'P-2602',
address: '2604 Dunwick Dr, Plano, TX 75023', address: '2604 Dunwick Dr, Plano, TX 75023',
@@ -2206,7 +2206,7 @@ const MOCK_PROJECTS = [
// Project 2: Completed, zero variance (perfectly on budget) // Project 2: Completed, zero variance (perfectly on budget)
{ {
id: 'proj_002', id: 'PRJ-2026-002',
ownerId: 'own_001', ownerId: 'own_001',
propertyId: 'P-2608', propertyId: 'P-2608',
address: '2617 Rothland Ln, Plano, TX 75023', address: '2617 Rothland Ln, Plano, TX 75023',
@@ -2259,7 +2259,7 @@ const MOCK_PROJECTS = [
// Project 3: Delayed with missed milestone // Project 3: Delayed with missed milestone
{ {
id: 'proj_003', id: 'PRJ-2026-003',
ownerId: 'own_001', ownerId: 'own_001',
propertyId: 'P-2610', propertyId: 'P-2610',
address: '6613 Phoenix Pl, Plano, TX 75023', address: '6613 Phoenix Pl, Plano, TX 75023',
@@ -2339,7 +2339,7 @@ const MOCK_PROJECTS = [
// Project 4: Active, on track, under budget // Project 4: Active, on track, under budget
{ {
id: 'proj_004', id: 'PRJ-2026-004',
ownerId: 'own_001', ownerId: 'own_001',
propertyId: 'P-2600', propertyId: 'P-2600',
address: '2612 Dunwick Dr, Plano, TX 75023', address: '2612 Dunwick Dr, Plano, TX 75023',
@@ -2430,7 +2430,7 @@ const MOCK_PROJECTS = [
// Project 5: On Hold with pending dispute // Project 5: On Hold with pending dispute
{ {
id: 'proj_005', id: 'PRJ-2026-005',
ownerId: 'own_001', ownerId: 'own_001',
propertyId: 'P-2601', propertyId: 'P-2601',
address: '2608 Dunwick Dr, Plano, TX 75023', address: '2608 Dunwick Dr, Plano, TX 75023',
@@ -2507,7 +2507,7 @@ const MOCK_PROJECTS = [
// Project 6: Active, on track, early stage // Project 6: Active, on track, early stage
{ {
id: 'proj_006', id: 'PRJ-2026-006',
ownerId: 'own_001', ownerId: 'own_001',
propertyId: 'P-2625', propertyId: 'P-2625',
address: '3913 Arizona Pl, Plano, TX 75023', address: '3913 Arizona Pl, Plano, TX 75023',
@@ -2570,7 +2570,7 @@ const MOCK_PROJECTS = [
// Project 7: Active, on track, healthy budget (commercial) // Project 7: Active, on track, healthy budget (commercial)
{ {
id: 'proj_007', id: 'PRJ-2026-007',
ownerId: 'own_002', ownerId: 'own_002',
propertyId: 'P-2640', propertyId: 'P-2640',
address: '6909 Custer Rd, Plano, TX 75023', address: '6909 Custer Rd, Plano, TX 75023',
@@ -2670,7 +2670,7 @@ const MOCK_PROJECTS = [
// Project 8: Active, on track, under budget // Project 8: Active, on track, under budget
{ {
id: 'proj_008', id: 'PRJ-2026-008',
ownerId: 'own_002', ownerId: 'own_002',
propertyId: 'P-2641', propertyId: 'P-2641',
address: '2112 Winslow Dr, Plano, TX 75023', address: '2112 Winslow Dr, Plano, TX 75023',
@@ -2737,7 +2737,7 @@ const MOCK_PROJECTS = [
// Project 9: Delayed with missed milestone // Project 9: Delayed with missed milestone
{ {
id: 'proj_009', id: 'PRJ-2026-009',
ownerId: 'own_002', ownerId: 'own_002',
propertyId: 'P-2642', propertyId: 'P-2642',
address: '7224 Independence Pkwy, Plano, TX 75025', address: '7224 Independence Pkwy, Plano, TX 75025',
@@ -2797,7 +2797,7 @@ const MOCK_PROJECTS = [
// Project 10: Completed, zero variance // Project 10: Completed, zero variance
{ {
id: 'proj_010', id: 'PRJ-2026-010',
ownerId: 'own_002', ownerId: 'own_002',
propertyId: 'P-2656', propertyId: 'P-2656',
address: '2100 Legacy Dr, Plano, TX 75023', address: '2100 Legacy Dr, Plano, TX 75023',
@@ -2858,7 +2858,7 @@ const MOCK_PROJECTS = [
// Project 11: Disputed with open change orders and unresolved issues // Project 11: Disputed with open change orders and unresolved issues
{ {
id: 'proj_011', id: 'PRJ-2026-011',
ownerId: 'own_002', ownerId: 'own_002',
propertyId: 'P-2645', propertyId: 'P-2645',
address: 'Legacy Town Center, 5760 Daniel Rd, Plano, TX 75024', address: 'Legacy Town Center, 5760 Daniel Rd, Plano, TX 75024',
@@ -2927,7 +2927,7 @@ const MOCK_PROJECTS = [
// Project 12: On Hold // Project 12: On Hold
{ {
id: 'proj_012', id: 'PRJ-2026-012',
ownerId: 'own_002', ownerId: 'own_002',
propertyId: 'P-2644', propertyId: 'P-2644',
address: 'Dallas/Plano Marriott at Legacy Town Center, 7121 Bishop Rd, Plano, TX 75024', address: 'Dallas/Plano Marriott at Legacy Town Center, 7121 Bishop Rd, Plano, TX 75024',
@@ -5356,7 +5356,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [
at: '2026-05-16T14:20:00Z', at: '2026-05-16T14:20:00Z',
}, },
], ],
projectId: 'proj_004', projectId: 'PRJ-2026-004',
paymentStatus: 'Unpaid', paymentStatus: 'Unpaid',
paymentRequestedAt: '2026-05-16T17:30:00Z', paymentRequestedAt: '2026-05-16T17:30:00Z',
createdAt: '2026-05-15T09:12:00Z', createdAt: '2026-05-15T09:12:00Z',
@@ -5448,7 +5448,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [
at: '2026-05-12T16:00:00Z', at: '2026-05-12T16:00:00Z',
}, },
], ],
projectId: 'proj_003', projectId: 'PRJ-2026-003',
paymentStatus: 'Unpaid', paymentStatus: 'Unpaid',
paymentRequestedAt: '2026-05-12T17:00:00Z', paymentRequestedAt: '2026-05-12T17:00:00Z',
createdAt: '2026-05-10T15:40:00Z', createdAt: '2026-05-10T15:40:00Z',
@@ -5489,7 +5489,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [
fees: [ fees: [
{ id: 'sct_003_f1', description: 'Touch-up paint labour', type: 'Labour / Service Fee', amount: 180, createdAt: '2026-05-14T17:35:00Z' }, { id: 'sct_003_f1', description: 'Touch-up paint labour', type: 'Labour / Service Fee', amount: 180, createdAt: '2026-05-14T17:35:00Z' },
], ],
projectId: 'proj_006', projectId: 'PRJ-2026-006',
paymentStatus: 'Paid', paymentStatus: 'Paid',
paymentRequestedAt: '2026-05-14T17:35:00Z', paymentRequestedAt: '2026-05-14T17:35:00Z',
paidAt: '2026-05-18T10:15:00Z', paidAt: '2026-05-18T10:15:00Z',
@@ -5528,7 +5528,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [
], ],
expenses: [], expenses: [],
fees: [], fees: [],
projectId: 'proj_001', projectId: 'PRJ-2026-001',
paymentStatus: 'Unpaid', paymentStatus: 'Unpaid',
paymentRequestedAt: null, paymentRequestedAt: null,
createdAt: '2026-05-18T22:40:00Z', createdAt: '2026-05-18T22:40:00Z',
@@ -5597,7 +5597,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [
at: '2026-05-15T16:00:00Z', at: '2026-05-15T16:00:00Z',
}, },
], ],
projectId: 'proj_007', projectId: 'PRJ-2026-007',
paymentStatus: 'Unpaid', paymentStatus: 'Unpaid',
paymentRequestedAt: '2026-05-14T13:00:00Z', paymentRequestedAt: '2026-05-14T13:00:00Z',
createdAt: '2026-05-12T10:00:00Z', createdAt: '2026-05-12T10:00:00Z',
@@ -5628,7 +5628,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [
thread: [], thread: [],
expenses: [], expenses: [],
fees: [], fees: [],
projectId: 'proj_009', projectId: 'PRJ-2026-009',
paymentStatus: 'Unpaid', paymentStatus: 'Unpaid',
paymentRequestedAt: null, paymentRequestedAt: null,
createdAt: '2026-05-17T14:00:00Z', createdAt: '2026-05-17T14:00:00Z',
@@ -5671,7 +5671,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [
fees: [ fees: [
{ id: 'sct_007_f1', description: 'Labour — deck repair (2 days)', type: 'Labour / Service Fee', amount: 920, createdAt: '2026-05-07T16:50:00Z' }, { id: 'sct_007_f1', description: 'Labour — deck repair (2 days)', type: 'Labour / Service Fee', amount: 920, createdAt: '2026-05-07T16:50:00Z' },
], ],
projectId: 'proj_001', projectId: 'PRJ-2026-001',
paymentStatus: 'Paid', paymentStatus: 'Paid',
paymentRequestedAt: '2026-05-07T16:50:00Z', paymentRequestedAt: '2026-05-07T16:50:00Z',
paidAt: '2026-05-12T14:00:00Z', paidAt: '2026-05-12T14:00:00Z',
@@ -5754,7 +5754,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [
at: '2026-05-19T12:30:00Z', at: '2026-05-19T12:30:00Z',
}, },
], ],
projectId: 'proj_004', projectId: 'PRJ-2026-004',
paymentStatus: 'Unpaid', paymentStatus: 'Unpaid',
paymentRequestedAt: '2026-05-19T12:35:00Z', paymentRequestedAt: '2026-05-19T12:35:00Z',
createdAt: '2026-05-16T13:00:00Z', createdAt: '2026-05-16T13:00:00Z',
@@ -5791,7 +5791,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [
expenses: [], expenses: [],
fees: [], fees: [],
activities: [], activities: [],
projectId: 'proj_006', projectId: 'PRJ-2026-006',
paymentStatus: 'Unpaid', paymentStatus: 'Unpaid',
paymentRequestedAt: null, paymentRequestedAt: null,
createdAt: '2026-05-20T09:00:00Z', createdAt: '2026-05-20T09:00:00Z',