# Task B: Foundation Layer Implementation ## ALLA OS CRM vNext (Organization-Based) คุณคือ Senior Full-stack Engineer โปรด implement Foundation Layer สำหรับ ALLA OS CRM vNext โดยอ้างอิงผลจาก: * docs/implementation/task-a-template-audit.md * Layout.md * .agents/skills/kiranism-shadcn-dashboard ## เป้าหมาย สร้าง Foundation Layer ที่ทุก module ในอนาคตสามารถใช้ร่วมกันได้ Task B นี้ยังไม่ใช่ CRM Module ยังไม่ต้องสร้าง: * Customer * Contact * Enquiry * Quotation * Approval * Dashboard KPI * Report * PDF Generator --- # สิ่งที่ต้องอ่านก่อน อ่านและยึดตาม: ```txt docs/implementation/task-a-template-audit.md Layout.md .agents/skills/kiranism-shadcn-dashboard src/auth.ts src/lib/auth/** src/db/schema.ts src/features/products/** src/features/users/** ``` ใช้ `products` และ `users` เป็น production reference ห้ามใช้: ```txt src/features/crm/** src/constants/mock-api* ``` เป็น reference หลัก --- # Scope 1: Current User Context สร้าง shared helper ```ts getCurrentUser() requireCurrentUser() getCurrentUserContext() ``` Expected output: ```ts { user, activeOrganization, membership, permissions, businessRole } ``` Requirements: * ใช้ Auth.js ของระบบ * ใช้ session helper ที่มีอยู่แล้ว * ห้าม duplicate auth logic * ใช้ shared auth layer ของโปรเจ็ค --- # Scope 2: Organization Context สร้าง shared helper ```ts getCurrentOrganization() getActiveOrganizationId() requireOrganizationAccess() ``` Requirements: * ใช้ activeOrganizationId จากระบบเดิม * ใช้ membership เดิม * ใช้ organization เป็น tenant boundary Business Rule: ```txt ทุก CRM entity ในอนาคต ต้องอยู่ภายใต้ organizationId ``` --- # Scope 3: Permission Layer สร้าง helper ```ts hasPermission(permission) requirePermission(permission) hasBusinessRole(role) ``` ตัวอย่าง: ```ts hasPermission("crm.customer.create") hasPermission("crm.quotation.approve") ``` Requirements: * ใช้ memberships.permissions * ใช้ businessRole * ไม่สร้าง RBAC ใหม่ --- # Scope 4: Branch Scope สร้าง helper ```ts getUserBranches() getActiveBranch() validateBranchAccess() ``` Business Rule: ```txt organization ├─ branch A ├─ branch B └─ branch C ``` branch เป็น business scope ไม่ใช่ tenant Requirements: * ยังไม่ต้องสร้าง CRM branch UI * ยังไม่ต้อง migrate schema * สร้างเฉพาะ abstraction layer --- # Scope 5: Master Options Service สร้าง service ```ts getOptionsByCategory() getActiveOptionsByCategory() ``` รองรับ category เช่น: ```txt crm_customer_status crm_customer_type crm_enquiry_status crm_quotation_status crm_product_type crm_currency crm_payment_term crm_priority crm_lead_channel ``` Requirements: * ใช้ ms_options schema * รองรับ parent/child option * รองรับ soft delete * CRM module ในอนาคตห้าม hardcode status --- # Scope 6: Document Sequence Service สร้าง service ```ts previewNextDocumentCode() generateNextDocumentCode() ``` ตัวอย่าง: ```txt CUS2606-001 ENQ2606-001 QT2606-001 ``` Requirements: * ใช้ document_sequences * preview ห้าม increment * generate ต้อง increment * transaction-safe * ห้าม generate code ฝั่ง client --- # Scope 7: Audit Log Helper สร้าง helper ```ts auditCreate() auditUpdate() auditDelete() auditAction() ``` Requirements: * ใช้ tr_audit_logs * รองรับ beforeData * รองรับ afterData * รองรับ requestId * ทุก future mutation ต้องเรียกผ่าน helper นี้ --- # Folder Convention ยึดตาม Task A ถ้าไม่มี convention ที่ชัดเจน: ```txt src/features/foundation/ ├── auth-context/ ├── organization-context/ ├── permission/ ├── branch-scope/ ├── master-options/ ├── document-sequence/ └── audit-log/ ``` และทุก feature ใช้รูปแบบ: ```txt api/ ├── types.ts ├── service.ts ├── queries.ts └── mutations.ts ``` ตาม kiranism-shadcn-dashboard --- # UI Scope ถ้าจำเป็นเท่านั้น สร้างได้แค่: ```txt / dashboard/settings/master-options ``` สำหรับทดสอบ foundation และต้อง: * ใช้ PageContainer * ใช้ Layout.md * ใช้ theme token เดิม * ใช้ DataTable เดิม * ใช้ Sheet/Dialog เดิม ห้ามสร้าง dashboard ใหม่ --- # ห้ามทำ ```txt Customer CRUD Contact CRUD Enquiry CRUD Quotation CRUD Approval Workflow Dashboard KPI PDF Generator Reporting Notification ``` --- # Output หลังเสร็จให้สรุป: 1. ไฟล์ที่เพิ่ม 2. ไฟล์ที่แก้ไข 3. Helper ที่สร้าง 4. Service ที่สร้าง 5. จุดที่ reuse จาก template 6. จุดที่ต้อง migration ในอนาคต 7. Risk 8. Task C readiness --- # Definition of Done Task B ถือว่าเสร็จเมื่อ: ✔ Current User Context ใช้งานได้ ✔ Organization Context ใช้งานได้ ✔ Permission Layer ใช้งานได้ ✔ Branch Scope abstraction พร้อม ✔ Master Options Service พร้อม ✔ Document Sequence Service พร้อม ✔ Audit Log Helper พร้อม ✔ ยังไม่มี CRM business module ถูกสร้าง ✔ ไม่แก้ auth architecture เดิม ✔ ไม่สร้าง design system ใหม่ ✔ พร้อมเริ่ม Task C: Customer + Contact