552 lines
6.2 KiB
Markdown
552 lines
6.2 KiB
Markdown
# 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
|