This commit is contained in:
phaichayon
2026-06-16 09:19:17 +07:00
parent b8f13e36b3
commit dff22d75b5
32 changed files with 5786 additions and 68 deletions

551
plans/task-f.md Normal file
View File

@@ -0,0 +1,551 @@
# Task F: Approval Production Module
## ALLA OS CRM vNext
คุณคือ Senior Full-stack Engineer
ให้ implement Approval Production Module โดยต่อยอดจาก:
```txt
Task A
Task B
Task B.1
Task C
Task D
Task E
Task E.1
```
Approval Module ต้องเป็น Generic Foundation ที่สามารถใช้กับ:
```txt
Quotation
Enquiry (future)
Purchase Request (future)
Purchase Order (future)
Document Approval (future)
```
ห้ามผูกกับ Quotation เพียงอย่างเดียว
---
# ต้องอ่านก่อน
```txt
docs/implementation/task-a-template-audit.md
docs/implementation/task-b-template-audit.md
docs/implementation/task-b1-foundation-stabilization.md
docs/implementation/technical-debt.md
docs/adr/0007-quotation-revision-strategy.md
docs/adr/0008-attachment-storage-strategy.md
Layout.md
AGENTS.md
.agents/skills/kiranism-shadcn-dashboard
src/features/foundation/**
src/features/crm/customers/**
src/features/crm/enquiries/**
src/features/crm/quotations/**
src/db/schema.ts
```
---
# Goal
สร้าง Approval Engine ที่ reusable ได้
รองรับ:
```txt
Submit For Approval
Approve
Reject
Request Change
Approval Timeline
Approval History
Current Approval Status
```
เริ่มใช้กับ Quotation ก่อน
---
# Approval Workflow Version 1
รองรับ sequential approval
ตัวอย่าง:
```txt
Step 1
Sales Manager
Step 2
Department Manager
Step 3
Top Manager
```
Approval ต้องเดินทีละ step
---
# Scope F1: Approval Schema
เพิ่ม tables
```txt
crm_approval_workflows
crm_approval_steps
crm_approval_requests
crm_approval_actions
```
---
## crm_approval_workflows
```txt
id
organizationId
code
name
entityType
isActive
createdAt
updatedAt
deletedAt
```
entityType ตัวอย่าง
```txt
quotation
enquiry
purchase_request
```
---
## crm_approval_steps
```txt
id
organizationId
workflowId
stepNumber
roleCode
roleName
isRequired
createdAt
updatedAt
deletedAt
```
ตัวอย่าง
```txt
sales_manager
department_manager
top_manager
```
---
## crm_approval_requests
```txt
id
organizationId
workflowId
entityType
entityId
currentStep
status
requestedBy
requestedAt
completedAt
createdAt
updatedAt
deletedAt
```
status
```txt
pending
approved
rejected
returned
cancelled
```
---
## crm_approval_actions
```txt
id
organizationId
approvalRequestId
stepNumber
action
remark
actedBy
actedAt
createdAt
updatedAt
deletedAt
```
action
```txt
approve
reject
return
submit
```
---
# Scope F2: Approval Service
สร้าง:
```txt
src/features/foundation/approval/**
```
ประกอบด้วย
```txt
types.ts
service.ts
queries.ts
mutations.ts
```
Functions
```ts
submitForApproval()
approveApproval()
rejectApproval()
returnApproval()
cancelApproval()
getApprovalRequest()
getApprovalTimeline()
getCurrentApprovalStep()
```
---
# Scope F3: Quotation Integration
เชื่อม Approval เข้ากับ Quotation
---
## Submit For Approval
จาก:
```txt
draft
revised
```
ไป:
```txt
pending_approval
```
Rules
```txt
ต้องมี item อย่างน้อย 1 รายการ
ต้องมี customer
ต้องไม่ deleted
```
---
## Approval Success
เมื่อทุก step approve
เปลี่ยน quotation status
```txt
approved
```
---
## Reject
เปลี่ยน quotation status
```txt
rejected
```
---
## Return
เปลี่ยน quotation status
```txt
draft
```
และเก็บ remark
---
# Scope F4: API Routes
สร้าง:
```txt
src/app/api/crm/approvals/route.ts
src/app/api/crm/approvals/[id]/route.ts
src/app/api/crm/approvals/[id]/approve/route.ts
src/app/api/crm/approvals/[id]/reject/route.ts
src/app/api/crm/approvals/[id]/return/route.ts
src/app/api/crm/quotations/[id]/submit-approval/route.ts
```
---
# Scope F5: Permission Model
เพิ่ม permissions
```txt
crm.approval.read
crm.approval.submit
crm.approval.approve
crm.approval.reject
crm.approval.return
```
---
# Scope F6: Approval UI
แทน placeholder route
```txt
/ dashboard / crm / approvals
```
---
Approval List
```txt
Pending
Approved
Rejected
Returned
```
ใช้
```txt
PageContainer
DataTable
```
---
Approval Detail
แสดง
```txt
Request Information
Workflow
Current Step
Timeline
Actions
```
---
# Scope F7: Quotation Detail Integration
ใน
```txt
/ dashboard / crm / quotations / [id]
```
เพิ่ม
```txt
Approval Tab
```
แสดง
```txt
Current Status
Current Step
Timeline
```
Actions
```txt
Submit For Approval
Approve
Reject
Return
```
ตาม permission
---
# Scope F8: Audit Integration
ทุก action ต้อง audit
entityType
```txt
crm_approval_request
crm_approval_action
```
---
# Scope F9: Seed Data
เพิ่มใน
```txt
foundation.seed.ts
```
Workflow เริ่มต้น
```txt
Quotation Standard Approval
```
Steps
```txt
1 sales_manager
2 department_manager
3 top_manager
```
Seed แบบ idempotent
---
# ห้ามทำ
```txt
Email Notification
Line Notification
Mobile Push
PDF Generation
Report
Dashboard KPI
Parallel Approval
Conditional Approval
Escalation
Delegation
```
---
# Output
สรุป:
1. Files Added
2. Files Modified
3. Schema Added
4. Approval APIs Added
5. Approval UI Added
6. Quotation Integration
7. Permission Added
8. Audit Integration
9. Seed Added
10. Remaining Risks
11. Task G Readiness
---
# Definition of Done
Task F ผ่านเมื่อ:
✔ Approval workflow schema พร้อม
✔ Approval request พร้อม
✔ Approval actions พร้อม
✔ Approval timeline พร้อม
✔ Submit For Approval ใช้งานได้
✔ Approve ใช้งานได้
✔ Reject ใช้งานได้
✔ Return ใช้งานได้
✔ Quotation เชื่อม approval แล้ว
✔ Audit ครบทุก approval action
✔ Approval UI ใช้งานได้
✔ ไม่ทำ notification
✔ ไม่ทำ PDF
✔ ไม่ทำ report
✔ พร้อมเริ่ม Task G