import type { ApprovalItem, AuditEvent, ContactShare, ContactShareLog, CrmBranch, CrmSalesperson, Customer, CustomerContact, DocumentSequence, Enquiry, MasterOption, Quotation, QuotationTemplate } from '../api/types'; export interface CrmMockState { branches: CrmBranch[]; salespersons: CrmSalesperson[]; customers: Customer[]; contacts: CustomerContact[]; contactShares: ContactShare[]; contactShareLogs: ContactShareLog[]; enquiries: Enquiry[]; quotations: Quotation[]; approvals: ApprovalItem[]; auditEvents: AuditEvent[]; sequences: DocumentSequence[]; masterOptions: MasterOption[]; templates: QuotationTemplate[]; } export const initialCrmState: CrmMockState = { branches: [ { id: 'bkk', code: 'BKK', name: 'Bangkok HQ', region: 'Central' }, { id: 'chn', code: 'CHN', name: 'Chiang Mai Branch', region: 'North' } ], salespersons: [ { id: 'sp-1', name: 'Krit S.', nickname: 'Krit', branchId: 'bkk', role: 'sales' }, { id: 'sp-2', name: 'Nicha P.', nickname: 'Nicha', branchId: 'bkk', role: 'sale_admin' }, { id: 'sp-3', name: 'Ton A.', nickname: 'Ton', branchId: 'chn', role: 'sales' } ], customers: [ { id: 'cus-1', code: 'CUS-BKK-001', name: 'Siam Metro Development', taxId: '0105556100011', address: '88 Rama 9 Road', province: 'Bangkok', district: 'Huai Khwang', subDistrict: 'Bang Kapi', postalCode: '10310', phone: '02-555-1001', fax: '02-555-1999', email: 'procurement@siammetro.co.th', customerType: 'developer', customerStatus: 'active', branchId: 'bkk', contactIds: ['ct-1', 'ct-2'] }, { id: 'cus-2', code: 'CUS-BKK-002', name: 'Prime Lift Engineering', taxId: '0105556100012', address: '19 Vibhavadi Rangsit', province: 'Bangkok', district: 'Chatuchak', subDistrict: 'Chom Phon', postalCode: '10900', phone: '02-555-2002', email: 'sales@primelift.co.th', customerType: 'contractor', customerStatus: 'active', branchId: 'bkk', contactIds: ['ct-3', 'ct-4'] }, { id: 'cus-3', code: 'CUS-CHN-003', name: 'Northern Cold Chain', taxId: '0505556100013', address: '125 Super Highway', province: 'Chiang Mai', district: 'Mueang', subDistrict: 'Wat Ket', postalCode: '50000', phone: '053-555-3003', email: 'project@ncc.co.th', customerType: 'owner', customerStatus: 'prospect', branchId: 'chn', contactIds: ['ct-5', 'ct-6'] }, { id: 'cus-4', code: 'CUS-BKK-004', name: 'Urban Dock Solution', taxId: '0105556100014', address: '77 Bangna-Trad KM.8', province: 'Samut Prakan', district: 'Bang Phli', subDistrict: 'Bang Kaeo', postalCode: '10540', phone: '02-555-4004', email: 'admin@urbandock.asia', customerType: 'consultant', customerStatus: 'active', branchId: 'bkk', contactIds: ['ct-7', 'ct-8'] }, { id: 'cus-5', code: 'CUS-CHN-005', name: 'Lanna Solar Estate', taxId: '0505556100015', address: '199 Ring Road', province: 'Chiang Mai', district: 'San Sai', subDistrict: 'Nong Chom', postalCode: '50210', phone: '053-555-5005', email: 'energy@lannasolar.co.th', customerType: 'developer', customerStatus: 'inactive', branchId: 'chn', contactIds: ['ct-9', 'ct-10'] } ], contacts: [ { id: 'ct-1', customerId: 'cus-1', name: 'Ploy Tantip', position: 'Procurement Manager', email: 'ploy@siammetro.co.th', phone: '081-111-1111', isPrimary: true }, { id: 'ct-2', customerId: 'cus-1', name: 'Vee Chan', position: 'Project Engineer', email: 'vee@siammetro.co.th', phone: '081-111-1112' }, { id: 'ct-3', customerId: 'cus-2', name: 'Boss K.', position: 'Managing Director', email: 'boss@primelift.co.th', phone: '082-222-2221', isPrimary: true }, { id: 'ct-4', customerId: 'cus-2', name: 'Jane R.', position: 'Estimator', email: 'jane@primelift.co.th', phone: '082-222-2222' }, { id: 'ct-5', customerId: 'cus-3', name: 'Aon M.', position: 'Operations Head', email: 'aon@ncc.co.th', phone: '083-333-3331', isPrimary: true }, { id: 'ct-6', customerId: 'cus-3', name: 'Max P.', position: 'Warehouse Lead', email: 'max@ncc.co.th', phone: '083-333-3332' }, { id: 'ct-7', customerId: 'cus-4', name: 'Mint T.', position: 'Design Consultant', email: 'mint@urbandock.asia', phone: '084-444-4441', isPrimary: true }, { id: 'ct-8', customerId: 'cus-4', name: 'Ken D.', position: 'Project Coordinator', email: 'ken@urbandock.asia', phone: '084-444-4442' }, { id: 'ct-9', customerId: 'cus-5', name: 'Fah N.', position: 'Energy Planning Lead', email: 'fah@lannasolar.co.th', phone: '085-555-5551', isPrimary: true }, { id: 'ct-10', customerId: 'cus-5', name: 'Palm J.', position: 'Plant Director', email: 'palm@lannasolar.co.th', phone: '085-555-5552' } ], contactShares: [ { id: 'share-1', contactId: 'ct-1', sharedWithUserId: 'u-1', sharedWithUserName: 'Nicha P.', permission: 'view', createdAt: '2026-06-01T09:00:00.000Z' }, { id: 'share-2', contactId: 'ct-7', sharedWithUserId: 'u-2', sharedWithUserName: 'Ton A.', permission: 'edit', createdAt: '2026-06-03T10:30:00.000Z' } ], contactShareLogs: [ { id: 'share-log-1', contactId: 'ct-1', action: 'SHARE', targetUserName: 'Nicha P.', actorName: 'Krit S.', createdAt: '2026-06-01T09:00:00.000Z' }, { id: 'share-log-2', contactId: 'ct-7', action: 'SHARE', targetUserName: 'Ton A.', actorName: 'Krit S.', createdAt: '2026-06-03T10:30:00.000Z' }, { id: 'share-log-3', contactId: 'ct-7', action: 'REVOKE', targetUserName: 'Ton A.', actorName: 'Nicha P.', createdAt: '2026-06-07T14:45:00.000Z' } ], enquiries: [ { id: 'enq-1', code: 'ENQ2606-001', title: 'Dock leveler replacement for Phase 3 warehouse', customerId: 'cus-1', contactId: 'ct-1', branchId: 'bkk', salesmanId: 'sp-1', productType: 'dockdoor', status: 'converted', requirementSummary: 'Replace 8 dock levelers with high cycle hydraulic model.', projectLocation: 'Bangkok Logistics Park', chancePercent: 82, competitor: 'Apex Dock', expectedValue: 2750000, dueDate: '2026-06-14', createdAt: '2026-05-28T09:00:00.000Z', updatedAt: '2026-06-09T15:20:00.000Z', quotationIds: ['qt-1', 'qt-2'], activities: [ { id: 'enq-1-act-1', type: 'CALL', title: 'รับ requirement เบื้องต้น', detail: 'ลูกค้าต้องการเปลี่ยนภายใน Q3', actorName: 'Krit S.', createdAt: '2026-05-28T09:00:00.000Z' }, { id: 'enq-1-act-2', type: 'VISIT', title: 'สำรวจหน้างาน', detail: 'หน้างานพร้อม shutdown 3 วัน', actorName: 'Krit S.', createdAt: '2026-05-30T13:30:00.000Z' }, { id: 'enq-1-act-3', type: 'CONVERT', title: 'Convert to quotation', detail: 'สร้าง QT2606-001', actorName: 'Nicha P.', createdAt: '2026-06-02T08:15:00.000Z' } ] }, { id: 'enq-2', code: 'ENQ2606-002', title: 'Overhead crane upgrade for fabrication line', customerId: 'cus-2', contactId: 'ct-3', branchId: 'bkk', salesmanId: 'sp-1', productType: 'crane', status: 'requirement', requirementSummary: '10 ton overhead crane with remote monitoring.', projectLocation: 'Samut Sakhon Plant', chancePercent: 68, competitor: 'LiftPro', expectedValue: 5200000, dueDate: '2026-06-20', createdAt: '2026-05-29T10:00:00.000Z', updatedAt: '2026-06-10T11:00:00.000Z', quotationIds: ['qt-3'], activities: [ { id: 'enq-2-act-1', type: 'MEETING', title: 'Kickoff meeting', detail: 'หารือ requirement ทางเทคนิค', actorName: 'Krit S.', createdAt: '2026-05-29T10:00:00.000Z' } ] }, { id: 'enq-3', code: 'ENQ2606-003', title: 'Solar rooftop for cold storage lot C', customerId: 'cus-3', contactId: 'ct-5', branchId: 'chn', salesmanId: 'sp-3', productType: 'solarcell', status: 'follow_up', requirementSummary: '500 kWp rooftop with energy monitoring.', projectLocation: 'Chiang Mai DC', chancePercent: 49, competitor: 'SunNorth', expectedValue: 6100000, dueDate: '2026-06-18', createdAt: '2026-05-27T09:20:00.000Z', updatedAt: '2026-06-08T16:10:00.000Z', quotationIds: ['qt-4'], activities: [ { id: 'enq-3-act-1', type: 'NOTE', title: 'ติดตาม BOQ', detail: 'รอฝั่งลูกค้าส่งโหลดไฟฟ้า', actorName: 'Ton A.', createdAt: '2026-06-08T16:10:00.000Z' } ] }, { id: 'enq-4', code: 'ENQ2606-004', title: 'Dock shelter package for retrofit', customerId: 'cus-4', contactId: 'ct-7', branchId: 'bkk', salesmanId: 'sp-1', productType: 'dockdoor', status: 'new', requirementSummary: 'Retrofit existing dock shelter 12 bays.', projectLocation: 'Bangna Logistics Hub', chancePercent: 35, competitor: 'Apex Dock', expectedValue: 1850000, dueDate: '2026-06-21', createdAt: '2026-06-05T14:00:00.000Z', updatedAt: '2026-06-05T14:00:00.000Z', quotationIds: [], activities: [ { id: 'enq-4-act-1', type: 'CALL', title: 'Lead intake', detail: 'รับ lead จาก consultant', actorName: 'Krit S.', createdAt: '2026-06-05T14:00:00.000Z' } ] }, { id: 'enq-5', code: 'ENQ2606-005', title: 'Crane preventive maintenance agreement', customerId: 'cus-2', contactId: 'ct-4', branchId: 'bkk', salesmanId: 'sp-1', productType: 'crane', status: 'qualifying', requirementSummary: 'Annual PM contract for 6 cranes.', projectLocation: 'Ayutthaya Plant', chancePercent: 53, competitor: 'LiftPro', expectedValue: 980000, dueDate: '2026-06-19', createdAt: '2026-06-02T11:00:00.000Z', updatedAt: '2026-06-06T12:00:00.000Z', quotationIds: ['qt-5'], activities: [ { id: 'enq-5-act-1', type: 'UPDATE', title: 'ผ่านขั้น qualifying', detail: 'ลูกค้ามี budget แล้ว', actorName: 'Krit S.', createdAt: '2026-06-06T12:00:00.000Z' } ] }, { id: 'enq-6', code: 'ENQ2606-006', title: 'Solar canopy concept study', customerId: 'cus-5', contactId: 'ct-9', branchId: 'chn', salesmanId: 'sp-3', productType: 'solarcell', status: 'closed_lost', requirementSummary: 'Concept study for parking canopy solar.', projectLocation: 'Chiang Rai Service Center', chancePercent: 0, competitor: 'GreenBeam', expectedValue: 2400000, dueDate: '2026-06-08', createdAt: '2026-05-20T09:00:00.000Z', updatedAt: '2026-06-08T18:00:00.000Z', quotationIds: ['qt-6'], activities: [ { id: 'enq-6-act-1', type: 'UPDATE', title: 'Lost to competitor', detail: 'ราคา competitor ต่ำกว่า', actorName: 'Ton A.', createdAt: '2026-06-08T18:00:00.000Z' } ] }, { id: 'enq-7', code: 'ENQ2606-007', title: 'High-speed door package', customerId: 'cus-1', contactId: 'ct-2', branchId: 'bkk', salesmanId: 'sp-1', productType: 'dockdoor', status: 'cancelled', requirementSummary: 'High-speed doors for food-grade area.', projectLocation: 'Pathum Thani', chancePercent: 0, competitor: 'FastDoor', expectedValue: 1600000, dueDate: '2026-06-11', createdAt: '2026-05-25T10:10:00.000Z', updatedAt: '2026-06-04T11:00:00.000Z', quotationIds: [], activities: [ { id: 'enq-7-act-1', type: 'UPDATE', title: 'Project cancelled', detail: 'Owner เลื่อน CAPEX', actorName: 'Nicha P.', createdAt: '2026-06-04T11:00:00.000Z' } ] }, { id: 'enq-8', code: 'ENQ2606-008', title: 'Monorail crane for packaging line', customerId: 'cus-3', contactId: 'ct-6', branchId: 'chn', salesmanId: 'sp-3', productType: 'crane', status: 'new', requirementSummary: '1 ton monorail crane with quick delivery.', projectLocation: 'Lamphun Plant', chancePercent: 28, competitor: 'NorthHoist', expectedValue: 740000, dueDate: '2026-06-24', createdAt: '2026-06-09T13:00:00.000Z', updatedAt: '2026-06-09T13:00:00.000Z', quotationIds: [], activities: [ { id: 'enq-8-act-1', type: 'CALL', title: 'รับ enquiry ใหม่', detail: 'ต้องการเสนอราคาใน 7 วัน', actorName: 'Ton A.', createdAt: '2026-06-09T13:00:00.000Z' } ] } ], quotations: [ { id: 'qt-1', code: 'QT2606-001', enquiryId: 'enq-1', quotationDate: '2026-06-02', validUntil: '2026-07-02', quotationType: 'official', project: 'Warehouse Dock Modernization', siteLocation: 'Bangkok Logistics Park', customerRoles: [ { role: 'owner', customerId: 'cus-1', contactId: 'ct-1' }, { role: 'consultant', customerId: 'cus-4', contactId: 'ct-7' }, { role: 'billing', customerId: 'cus-2', contactId: 'ct-4' } ], salesmanId: 'sp-1', saleAdminId: 'sp-2', branchId: 'bkk', status: 'pending_approval', revision: 0, totalAmount: 2750000, chancePercent: 82, isHotProject: true, approvalSnapshot: 'Awaiting Level 2 approval', items: [ { id: 'qt-1-item-1', topic: 'Mechanical', description: 'Hydraulic dock leveler 8 sets', quantity: 8, unit: 'set', unitPrice: 280000, amount: 2240000 }, { id: 'qt-1-item-2', topic: 'Installation', description: 'Site install and commissioning', quantity: 1, unit: 'lot', unitPrice: 510000, amount: 510000 } ], topics: [ { id: 'qt-1-topic-1', type: 'scope', label: 'Scope', items: ['Supply equipment', 'Install and test', 'Operator training'] }, { id: 'qt-1-topic-2', type: 'exclusion', label: 'Exclusion', items: ['Civil work by customer', 'Night shift overtime'] }, { id: 'qt-1-topic-3', type: 'payment', label: 'Payment', items: ['40% down payment', '50% upon delivery', '10% after handover'] } ], followUps: [ { id: 'qt-1-fu-1', title: 'Prepare approval summary', dueDate: '2026-06-12', ownerName: 'Nicha P.', status: 'open' }, { id: 'qt-1-fu-2', title: 'Confirm shutdown window', dueDate: '2026-06-13', ownerName: 'Krit S.', status: 'open' } ], attachments: [ { id: 'qt-1-att-1', fileName: 'technical-spec.pdf', fileType: 'pdf', uploadedAt: '2026-06-02T10:00:00.000Z' } ], approvalSteps: [ { id: 'qt-1-ap-1', level: 1, approverName: 'Head of Sales', approverPosition: 'Sales Director', status: 'approved', actedAt: '2026-06-03T09:30:00.000Z' }, { id: 'qt-1-ap-2', level: 2, approverName: 'CEO Office', approverPosition: 'Managing Director', status: 'pending' } ], auditEventIds: ['audit-1', 'audit-2'] }, { id: 'qt-2', code: 'QT2606-001-R01', enquiryId: 'enq-1', quotationDate: '2026-06-07', validUntil: '2026-07-07', quotationType: 'official', project: 'Warehouse Dock Modernization', siteLocation: 'Bangkok Logistics Park', customerRoles: [ { role: 'owner', customerId: 'cus-1', contactId: 'ct-1' }, { role: 'consultant', customerId: 'cus-4', contactId: 'ct-7' } ], salesmanId: 'sp-1', saleAdminId: 'sp-2', branchId: 'bkk', status: 'revised', revision: 1, totalAmount: 2875000, chancePercent: 78, isHotProject: true, approvedPdfUrl: '/mock/qt2606-001-r01.pdf', items: [ { id: 'qt-2-item-1', topic: 'Mechanical', description: 'Hydraulic dock leveler 8 sets', quantity: 8, unit: 'set', unitPrice: 280000, amount: 2240000 }, { id: 'qt-2-item-2', topic: 'Safety', description: 'Additional dock light and safety package', quantity: 1, unit: 'lot', unitPrice: 635000, amount: 635000 } ], topics: [ { id: 'qt-2-topic-1', type: 'scope', label: 'Scope', items: ['Updated safety package', 'Delivery within 30 days'] }, { id: 'qt-2-topic-2', type: 'exclusion', label: 'Exclusion', items: ['Permit by customer'] }, { id: 'qt-2-topic-3', type: 'payment', label: 'Payment', items: ['40/50/10 milestone'] } ], followUps: [ { id: 'qt-2-fu-1', title: 'Send revised file to customer', dueDate: '2026-06-12', ownerName: 'Krit S.', status: 'open' } ], attachments: [ { id: 'qt-2-att-1', fileName: 'rev1-comparison.pdf', fileType: 'pdf', uploadedAt: '2026-06-07T16:00:00.000Z' } ], approvalSteps: [ { id: 'qt-2-ap-1', level: 1, approverName: 'Head of Sales', approverPosition: 'Sales Director', status: 'approved', actedAt: '2026-06-07T15:30:00.000Z' }, { id: 'qt-2-ap-2', level: 2, approverName: 'CEO Office', approverPosition: 'Managing Director', status: 'approved', actedAt: '2026-06-08T09:00:00.000Z' } ], auditEventIds: ['audit-3'] }, { id: 'qt-3', code: 'QT2606-002', enquiryId: 'enq-2', quotationDate: '2026-06-05', validUntil: '2026-07-05', quotationType: 'budgetary', project: 'Fabrication Crane Upgrade', siteLocation: 'Samut Sakhon Plant', customerRoles: [ { role: 'owner', customerId: 'cus-2', contactId: 'ct-3' }, { role: 'contractor', customerId: 'cus-4', contactId: 'ct-8' } ], salesmanId: 'sp-1', saleAdminId: 'sp-2', branchId: 'bkk', status: 'draft', revision: 0, totalAmount: 5200000, chancePercent: 68, isHotProject: false, items: [ { id: 'qt-3-item-1', topic: 'Crane', description: '10 ton overhead crane', quantity: 1, unit: 'set', unitPrice: 4500000, amount: 4500000 }, { id: 'qt-3-item-2', topic: 'IoT', description: 'Remote monitoring package', quantity: 1, unit: 'set', unitPrice: 700000, amount: 700000 } ], topics: [ { id: 'qt-3-topic-1', type: 'scope', label: 'Scope', items: ['Supply', 'Install', 'Commission'] }, { id: 'qt-3-topic-2', type: 'payment', label: 'Payment', items: ['50% deposit', '40% delivery', '10% handover'] }, { id: 'qt-3-topic-3', type: 'exclusion', label: 'Exclusion', items: ['Building strengthening'] } ], followUps: [ { id: 'qt-3-fu-1', title: 'Finalize civil scope', dueDate: '2026-06-15', ownerName: 'Krit S.', status: 'open' } ], attachments: [], approvalSteps: [], auditEventIds: [] }, { id: 'qt-4', code: 'QT2606-003', enquiryId: 'enq-3', quotationDate: '2026-06-03', validUntil: '2026-07-03', quotationType: 'official', project: 'Cold Chain Rooftop Solar', siteLocation: 'Chiang Mai DC', customerRoles: [ { role: 'owner', customerId: 'cus-3', contactId: 'ct-5' }, { role: 'consultant', customerId: 'cus-5', contactId: 'ct-9' } ], salesmanId: 'sp-3', saleAdminId: 'sp-2', branchId: 'chn', status: 'sent', revision: 0, totalAmount: 6100000, chancePercent: 49, isHotProject: true, approvedPdfUrl: '/mock/qt2606-003.pdf', items: [ { id: 'qt-4-item-1', topic: 'Solar', description: '500 kWp rooftop system', quantity: 1, unit: 'lot', unitPrice: 5900000, amount: 5900000 }, { id: 'qt-4-item-2', topic: 'Monitoring', description: 'EMS dashboard', quantity: 1, unit: 'lot', unitPrice: 200000, amount: 200000 } ], topics: [ { id: 'qt-4-topic-1', type: 'scope', label: 'Scope', items: ['EPC turnkey'] }, { id: 'qt-4-topic-2', type: 'payment', label: 'Payment', items: ['30/60/10'] }, { id: 'qt-4-topic-3', type: 'exclusion', label: 'Exclusion', items: ['Transformer upgrade'] } ], followUps: [ { id: 'qt-4-fu-1', title: 'Follow up board decision', dueDate: '2026-06-11', ownerName: 'Ton A.', status: 'open' } ], attachments: [ { id: 'qt-4-att-1', fileName: 'financial-model.xls', fileType: 'xls', uploadedAt: '2026-06-03T12:00:00.000Z' } ], approvalSteps: [ { id: 'qt-4-ap-1', level: 1, approverName: 'Regional Sales Manager', approverPosition: 'Regional Manager', status: 'approved', actedAt: '2026-06-03T11:00:00.000Z' } ], auditEventIds: ['audit-4'] }, { id: 'qt-5', code: 'QT2606-004', enquiryId: 'enq-5', quotationDate: '2026-06-06', validUntil: '2026-07-06', quotationType: 'service', project: 'Annual Crane PM', siteLocation: 'Ayutthaya Plant', customerRoles: [{ role: 'owner', customerId: 'cus-2', contactId: 'ct-4' }], salesmanId: 'sp-1', saleAdminId: 'sp-2', branchId: 'bkk', status: 'approved', revision: 0, totalAmount: 980000, chancePercent: 53, isHotProject: false, approvedPdfUrl: '/mock/qt2606-004.pdf', items: [ { id: 'qt-5-item-1', topic: 'Service', description: 'PM contract 12 months', quantity: 1, unit: 'lot', unitPrice: 980000, amount: 980000 } ], topics: [ { id: 'qt-5-topic-1', type: 'scope', label: 'Scope', items: ['Quarterly PM', 'Emergency call support'] }, { id: 'qt-5-topic-2', type: 'payment', label: 'Payment', items: ['100% after PO'] }, { id: 'qt-5-topic-3', type: 'exclusion', label: 'Exclusion', items: ['Spare parts'] } ], followUps: [ { id: 'qt-5-fu-1', title: 'Await PO', dueDate: '2026-06-17', ownerName: 'Nicha P.', status: 'open' } ], attachments: [], approvalSteps: [ { id: 'qt-5-ap-1', level: 1, approverName: 'Service GM', approverPosition: 'GM Service', status: 'approved', actedAt: '2026-06-07T10:00:00.000Z' } ], auditEventIds: [] }, { id: 'qt-6', code: 'QT2606-005', enquiryId: 'enq-6', quotationDate: '2026-05-26', validUntil: '2026-06-25', quotationType: 'budgetary', project: 'Solar Canopy Feasibility', siteLocation: 'Chiang Rai Service Center', customerRoles: [{ role: 'owner', customerId: 'cus-5', contactId: 'ct-9' }], salesmanId: 'sp-3', saleAdminId: 'sp-2', branchId: 'chn', status: 'lost', revision: 0, totalAmount: 2400000, chancePercent: 0, isHotProject: false, items: [ { id: 'qt-6-item-1', topic: 'Solar', description: 'Canopy concept and EPC budget', quantity: 1, unit: 'lot', unitPrice: 2400000, amount: 2400000 } ], topics: [ { id: 'qt-6-topic-1', type: 'scope', label: 'Scope', items: ['Concept study'] }, { id: 'qt-6-topic-2', type: 'payment', label: 'Payment', items: ['50/50'] }, { id: 'qt-6-topic-3', type: 'exclusion', label: 'Exclusion', items: ['Authority permit'] } ], followUps: [], attachments: [], approvalSteps: [], auditEventIds: ['audit-5'] }, { id: 'qt-7', code: 'QT2606-006', enquiryId: 'enq-4', quotationDate: '2026-06-09', validUntil: '2026-07-09', quotationType: 'official', project: 'Dock Shelter Retrofit', siteLocation: 'Bangna Logistics Hub', customerRoles: [{ role: 'consultant', customerId: 'cus-4', contactId: 'ct-7' }], salesmanId: 'sp-1', saleAdminId: 'sp-2', branchId: 'bkk', status: 'pending_approval', revision: 0, totalAmount: 1850000, chancePercent: 35, isHotProject: false, items: [ { id: 'qt-7-item-1', topic: 'Retrofit', description: 'Dock shelter 12 bays', quantity: 12, unit: 'bay', unitPrice: 154166.67, amount: 1850000 } ], topics: [ { id: 'qt-7-topic-1', type: 'scope', label: 'Scope', items: ['Supply and install 12 shelters'] }, { id: 'qt-7-topic-2', type: 'payment', label: 'Payment', items: ['50/50'] }, { id: 'qt-7-topic-3', type: 'exclusion', label: 'Exclusion', items: ['Scaffold by others'] } ], followUps: [ { id: 'qt-7-fu-1', title: 'Submit approval', dueDate: '2026-06-12', ownerName: 'Nicha P.', status: 'open' } ], attachments: [], approvalSteps: [ { id: 'qt-7-ap-1', level: 1, approverName: 'Sales Director', approverPosition: 'Director', status: 'pending' } ], auditEventIds: [] }, { id: 'qt-8', code: 'QT2606-007', enquiryId: 'enq-8', quotationDate: '2026-06-10', validUntil: '2026-07-10', quotationType: 'official', project: 'Monorail Crane Fast Track', siteLocation: 'Lamphun Plant', customerRoles: [{ role: 'owner', customerId: 'cus-3', contactId: 'ct-6' }], salesmanId: 'sp-3', saleAdminId: 'sp-2', branchId: 'chn', status: 'draft', revision: 0, totalAmount: 740000, chancePercent: 28, isHotProject: false, items: [ { id: 'qt-8-item-1', topic: 'Crane', description: '1 ton monorail crane', quantity: 1, unit: 'set', unitPrice: 740000, amount: 740000 } ], topics: [ { id: 'qt-8-topic-1', type: 'scope', label: 'Scope', items: ['Supply only'] }, { id: 'qt-8-topic-2', type: 'payment', label: 'Payment', items: ['100% before delivery'] }, { id: 'qt-8-topic-3', type: 'exclusion', label: 'Exclusion', items: ['Install by customer'] } ], followUps: [], attachments: [], approvalSteps: [], auditEventIds: [] }, { id: 'qt-9', code: 'QT2606-008', enquiryId: 'enq-2', quotationDate: '2026-06-08', validUntil: '2026-07-08', quotationType: 'official', project: 'Crane Upgrade Option B', siteLocation: 'Samut Sakhon Plant', customerRoles: [{ role: 'owner', customerId: 'cus-2', contactId: 'ct-3' }], salesmanId: 'sp-1', saleAdminId: 'sp-2', branchId: 'bkk', status: 'rejected', revision: 0, totalAmount: 5450000, chancePercent: 22, isHotProject: false, items: [ { id: 'qt-9-item-1', topic: 'Crane', description: 'Higher spec option', quantity: 1, unit: 'set', unitPrice: 5450000, amount: 5450000 } ], topics: [ { id: 'qt-9-topic-1', type: 'scope', label: 'Scope', items: ['Higher duty cycle spec'] }, { id: 'qt-9-topic-2', type: 'payment', label: 'Payment', items: ['40/50/10'] }, { id: 'qt-9-topic-3', type: 'exclusion', label: 'Exclusion', items: ['Building modification'] } ], followUps: [], attachments: [], approvalSteps: [ { id: 'qt-9-ap-1', level: 1, approverName: 'Sales Director', approverPosition: 'Director', status: 'rejected', actedAt: '2026-06-09T13:00:00.000Z', comment: 'Margin below target' } ], auditEventIds: [] }, { id: 'qt-10', code: 'QT2606-009', enquiryId: 'enq-5', quotationDate: '2026-06-10', validUntil: '2026-07-10', quotationType: 'service', project: 'Spare Parts Bundle', siteLocation: 'Ayutthaya Plant', customerRoles: [{ role: 'billing', customerId: 'cus-2', contactId: 'ct-4' }], salesmanId: 'sp-1', saleAdminId: 'sp-2', branchId: 'bkk', status: 'accepted', revision: 0, totalAmount: 420000, chancePercent: 100, isHotProject: false, approvedPdfUrl: '/mock/qt2606-009.pdf', items: [ { id: 'qt-10-item-1', topic: 'Spare Parts', description: 'Critical spare bundle', quantity: 1, unit: 'lot', unitPrice: 420000, amount: 420000 } ], topics: [ { id: 'qt-10-topic-1', type: 'scope', label: 'Scope', items: ['Spare bundle supply'] }, { id: 'qt-10-topic-2', type: 'payment', label: 'Payment', items: ['100% with PO'] }, { id: 'qt-10-topic-3', type: 'exclusion', label: 'Exclusion', items: ['On-site labor'] } ], followUps: [ { id: 'qt-10-fu-1', title: 'Coordinate delivery slot', dueDate: '2026-06-16', ownerName: 'Nicha P.', status: 'done' } ], attachments: [ { id: 'qt-10-att-1', fileName: 'spare-list.doc', fileType: 'doc', uploadedAt: '2026-06-10T09:00:00.000Z' } ], approvalSteps: [ { id: 'qt-10-ap-1', level: 1, approverName: 'Service GM', approverPosition: 'GM Service', status: 'approved', actedAt: '2026-06-10T08:00:00.000Z' } ], auditEventIds: [] } ], approvals: [ { id: 'approval-1', quotationId: 'qt-1', quotationCode: 'QT2606-001', amount: 2750000, productType: 'dockdoor', branchId: 'bkk', submitterName: 'Nicha P.', approverLevel: 2, status: 'pending' }, { id: 'approval-2', quotationId: 'qt-7', quotationCode: 'QT2606-006', amount: 1850000, productType: 'dockdoor', branchId: 'bkk', submitterName: 'Nicha P.', approverLevel: 1, status: 'pending' }, { id: 'approval-3', quotationId: 'qt-3', quotationCode: 'QT2606-002', amount: 5200000, productType: 'crane', branchId: 'bkk', submitterName: 'Krit S.', approverLevel: 1, status: 'pending' } ], auditEvents: [ { id: 'audit-1', entityType: 'quotation', entityId: 'qt-1', action: 'CREATE', actorName: 'Nicha P.', detail: 'สร้างใบเสนอราคา QT2606-001', createdAt: '2026-06-02T08:15:00.000Z' }, { id: 'audit-2', entityType: 'approval', entityId: 'qt-1', action: 'APPROVE', actorName: 'Head of Sales', detail: 'อนุมัติ level 1', createdAt: '2026-06-03T09:30:00.000Z' }, { id: 'audit-3', entityType: 'quotation', entityId: 'qt-2', action: 'REVISE', actorName: 'Krit S.', detail: 'สร้าง revision R01 เพิ่ม safety package', createdAt: '2026-06-07T16:00:00.000Z' }, { id: 'audit-4', entityType: 'quotation', entityId: 'qt-4', action: 'SEND', actorName: 'Ton A.', detail: 'ส่งใบเสนอราคาให้ลูกค้าทางอีเมล', createdAt: '2026-06-04T10:10:00.000Z' }, { id: 'audit-5', entityType: 'quotation', entityId: 'qt-6', action: 'REJECT', actorName: 'Customer Board', detail: 'ลูกค้าเลือกคู่แข่งเนื่องจากราคา', createdAt: '2026-06-08T18:00:00.000Z' } ], sequences: [ { id: 'seq-1', documentType: 'enquiry', prefix: 'ENQ', period: '2606', branchId: 'bkk', currentNumber: 8, paddingLength: 3 }, { id: 'seq-2', documentType: 'quotation', prefix: 'QT', period: '2606', branchId: 'bkk', currentNumber: 9, paddingLength: 3 }, { id: 'seq-3', documentType: 'quotation_revision', prefix: 'QT', period: '2606', branchId: 'bkk', currentNumber: 1, paddingLength: 2 } ], masterOptions: [ { id: 'mo-1', group: 'status', code: 'new', label: 'New', active: true }, { id: 'mo-2', group: 'status', code: 'pending_approval', label: 'Pending Approval', active: true }, { id: 'mo-3', group: 'product_type', code: 'crane', label: 'Crane', active: true }, { id: 'mo-4', group: 'product_type', code: 'dockdoor', label: 'Dock Door', active: true }, { id: 'mo-5', group: 'product_type', code: 'solarcell', label: 'Solar Cell', active: true }, { id: 'mo-6', group: 'payment_term', code: '40_50_10', label: '40/50/10', active: true }, { id: 'mo-7', group: 'currency', code: 'THB', label: 'Thai Baht', active: true }, { id: 'mo-8', group: 'tax_rate', code: 'VAT7', label: 'VAT 7%', active: true } ], templates: [ { id: 'tpl-1', name: 'Standard Commercial Proposal', version: 'v1.2', branchId: 'bkk', description: 'Template for standard equipment quotation.', mappings: [ { id: 'tpl-1-map-1', key: 'customer_name', placeholder: '{{customer_name}}', sourceField: 'customer.name' }, { id: 'tpl-1-map-2', key: 'project_name', placeholder: '{{project_name}}', sourceField: 'quotation.project' }, { id: 'tpl-1-map-3', key: 'quotation_price', placeholder: '{{quotation_price}}', sourceField: 'quotation.totalAmount' } ] }, { id: 'tpl-2', name: 'Solar EPC Proposal', version: 'v0.9', branchId: 'chn', description: 'Template for solar EPC quotation preview.', mappings: [ { id: 'tpl-2-map-1', key: 'site_location', placeholder: '{{site_location}}', sourceField: 'quotation.siteLocation' }, { id: 'tpl-2-map-2', key: 'approver_names', placeholder: '{{approver_names}}', sourceField: 'quotation.approvalSteps[].approverName' } ] } ] };