task-f
This commit is contained in:
551
plans/task-f.md
Normal file
551
plans/task-f.md
Normal 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
|
||||
Reference in New Issue
Block a user