Sangwijit ERP Web Portal Skill — Knowledge Base (v2.1)
Last Updated: เมษายน 2026
เจ้าของโปรเจกต์: Peerapat (พีรพัฒน์) — GM, กลุ่มแสงวิจิตร
ธุรกิจ: จำหน่ายเครื่องใช้ไฟฟ้า (ยอดขาย 450M+/ปี) — ค้าปลีก, ค้าส่ง, ส่งออก, ศูนย์บริการ
Reference Folder: /Design Ai/ ใน Workspace
⚙️ กฎการทำงาน (RULES — บังคับทุกครั้ง)
Rule 1: อ่าน Flowchart ก่อนออกแบบทุก Module
ก่อนออกแบบหน้าจอ หรือเขียน Spec ใด ๆ ต้องอ่าน Flowchart ที่เกี่ยวข้องจาก folder ก่อนเสมอ
Flow Design Folder: /Design Ai/Flow Design/
| Module |
Subfolder |
ประเภทไฟล์ |
| Sales |
Sales/Flow/ |
Flow PDF (00–09) |
| Sales Documents |
Sales/Document/ |
Document Template PDF |
| Purchase |
Purchase/Flow/ |
Flow PDF (00–06) |
| Purchase Documents |
Purchase/Document/ |
Document Template PDF |
| Warehouse |
Warehouse Inventory/Flow/ |
Flow PDF (00–02) |
| Warehouse Documents |
Warehouse Inventory/Document/ |
Document Template PDF |
| Finance (Cash/Bank) |
Finance/Flow/ |
Flow PDF (01–03) |
| Finance Documents |
Finance/Document/ |
Voucher Template PDF |
| Account (AR/AP/GL/Tax) |
Account/Flow/ |
Flow PDF (00–12) |
| Account Documents |
Account/Document/ |
Voucher Template PDF (01–10) |
| Service |
Service/ |
Flow PDF (00–06) |
| Promotion |
Promotion/ |
Flow PDF (00–02) |
| Master Data |
Master/ |
Master Flow PDF (7 ไฟล์) |
| Data Transfer |
Data Transfer/ |
Transfer Flow PDF (01–06) |
ขั้นตอนการอ่านก่อนออกแบบ:
1. ระบุ Module ที่จะทำ
2. เปิด Flow PDF ที่เกี่ยวข้องจาก subfolder ด้านบน
3. ทำความเข้าใจ Status Flow + BC365 Entity ใน Flow
4. ตรวจ Document Template PDF (ถ้ามี) เพื่อดู Field ที่ต้องแสดง
5. จึงเริ่ม Spec / Screen Design
Rule 2: ไฟล์ซ้ำ — ถามก่อนเสมอ
ถ้าพบว่า folder มีไฟล์ชื่อคล้ายกันหรือเลขซ้ำกัน ต้องหยุด เปรียบเทียบ และถามผู้ใช้ก่อน ห้ามเลือกเองโดยไม่แจ้ง
ไฟล์ซ้ำที่ตัดสินใจแล้ว (ห้ามถามซ้ำ):
| Module |
ไฟล์ที่ซ้ำ |
การตัดสินใจ |
| Service / Claims |
06 Service - Claim Intake รับเรื่องเคลม ตรวจสอบสินค้า คืนของ Vendor.pdf vs 06 Service - Claim Intake รับเรื่องเคลมและตรวจสอบสินค้า.pdf |
✅ ใช้ "คืนของ Vendor" เป็น Reference หลัก (Flow ครบกว่า) |
| Sales / Document |
Credit Note (ใบลดหนี้ ใบกำกับภาษี).pdf vs Credit Note (ใบลดหนี้).pdf |
✅ คนละ Case: ใบลดหนี้ ใบกำกับภาษี = ในประกัน / ใบลดหนี้ = นอกประกัน |
🧠 Mental Model ที่ถูกต้อง (CRITICAL — อ่านก่อนทุกอย่าง)
Portal = UI Layer เท่านั้น — BC365 = System of Record
User (Browser)
↓
Sangwijit Web Portal ← React/Vue + TypeScript + Tailwind CSS
↓ REST API
BC365 Business Central ← Ledger, Posting, Stock, Document Number
↓
Azure / SQL (BC Database)
WRONG (ห้ามคิดแบบนี้):
- ❌ Portal มี Database ของตัวเอง (ไม่มี — ดึงข้อมูลจาก BC ทั้งหมด)
- ❌ Portal Post Transaction เองโดยไม่ผ่าน BC
- ❌ UI ออกแบบอิสระโดยไม่ดู BC Entity / Field
CORRECT:
- ✅ Portal = Smart Frontend + Workflow Engine ที่ call BC REST API
- ✅ ทุก Post / Confirm → ส่งไป BC แล้วค่อย Refresh หน้าจอ
- ✅ Status, เลขที่เอกสาร, ราคา → มาจาก BC เสมอ
Service Account Strategy
- ใช้ BC Service Account 1 บัญชี (ลดค่า License)
- Portal ทำ RBAC เอง (ไม่พึ่ง BC Permission ต่อ User)
- Retry + Queue เมื่อ BC API ช้าหรือ Error
📦 Modules Overview
9 Core Modules + Extensions (v2.1 — Confirmed)
| Module |
ย่อ |
Phase |
หน้าจอหลัก |
| Sales |
SL |
P1 |
Quotation, SO, Invoice, Credit Memo, Deposit, Cash Sale |
| Warehouse |
WH |
P1 |
GRN, Issue, Transfer, Adjust, Stock Card, Serial |
| Purchase |
PO |
P1 |
PR, PO, GRN, AP Invoice, Credit Memo, Vendor Return, Sale-In Accrual (PO-7), PO บิลฝาก (PO-8) |
| Finance |
FI |
P1+P2+P3 |
AR Receive, AP Payment, Expense Voucher (P2), Bank Recon, Credit Control (P2), Period Close, Fixed Asset (FI-9/10/11), WHT (FI-12), Dual-Book (FI-13) |
| Service & Delivery |
SV |
P2 |
Service Queue, Job Card, QA Close, Delivery & Installation (4.x), Mobile (Group A) |
| Promotion/Pricing |
PM |
P1+P3 |
Price List, Step Discount, Bundle, Promotion Scheme, Quota, Simulator |
| Master Data |
MD |
P1 |
Item, Customer, Vendor, Employee (ใหม่), Branch & Warehouse (ใหม่) |
| System Config |
CF |
P1 |
Tax Setup, Number Series, Customer/Vendor Config, Bin Policy, Item Config |
| Claims |
CL |
P2 |
Claims List, CN, AP CM, Approval |
| Integration/API |
IA |
P2+P3 |
API Monitor, Webhook, BC Sync Status, Error Log |
| e-Tax Invoice |
TX |
P2 |
XML Generator, Digital Signature, RD API, WHT |
| Marketplace |
MK |
P3 |
Order Inbox, SKU Map, Stock Sync, Tab ออนไลน์ใน Sales |
| Mobile App |
MB |
P2/P4 |
Group A: Service Tech (P2), Group B: Manager (P4) |
| HRM Hook |
HR |
P3 |
Employee Directory, Leave Status, Commission Hook |
กฎแยก Master Data vs System Config:
- Master Data (MD) = ข้อมูลอ้างอิงที่ User สร้างขึ้น (Item, Customer, Vendor, Employee, Branch)
- System Config (CF) = ตั้งค่าระบบโดย Admin (Tax Code, Number Series, Posting Group, Bin Policy)
- Promotion Scheme อยู่ใน Promotion module ไม่ใช่ Config → เพราะเกี่ยวข้องกับ Business Logic การขาย
🎨 UI Design Principles (7 หลักการ — ห้ามละเมิด)
- BC-First Data — ทุก Field ต้องมาจาก BC Entity ที่ระบุในเอกสาร
- Progressive Disclosure — แสดงข้อมูลตาม Role และ Context
- Status-Driven UI — สีและ ActionBar เปลี่ยนตาม Document Status เสมอ
- Shared Component First — ดู SC1-SC9 ก่อนสร้าง Component ใหม่
- Bilingual Ready — ทุก Label มี Key ทั้งไทยและอังกฤษ
- Error Recovery — ทุก API Error ต้องมี User-readable Message + Retry
- RBAC Everywhere — Field, Button, Route ต้องเช็ค Permission
📐 ERP Transaction Form — Standard Structure (7 Sections)
ห้ามเปลี่ยนลำดับ Section เด็ดขาด
┌─────────────────────────────────────────────────┐
│ 1. PAGE HEADER │
│ Module Title | Document Type | Status Badge │
│ Breadcrumb | Action Bar (context-sensitive) │
├─────────────────────────────────────────────────┤
│ 2. DOC HEADER │
│ Document No. | Date | Reference | Branch │
│ (Read-only ถ้า Posted/Confirmed) │
├─────────────────────────────────────────────────┤
│ 3. PARTY │
│ SC1/CustomerSearch หรือ Vendor Search │
│ Auto-fill: Price Group, Credit, Address │
├─────────────────────────────────────────────────┤
│ 4. LINE ITEMS │
│ SC2/ItemSearch | Qty | Price | Discount | VAT│
│ Serial Panel (SC8) | Inline Edit | Add Row │
├─────────────────────────────────────────────────┤
│ 5. TABS (ตามประเภทเอกสาร) │
│ Payment | Delivery | Reference | Notes | Log │
├─────────────────────────────────────────────────┤
│ 6. SUMMARY │
│ Subtotal | Discount | VAT 7% | Total (THB) │
│ Deposit Applied | Net Due │
├─────────────────────────────────────────────────┤
│ 7. ACTION BAR (ล่าง — sticky) │
│ ปุ่มตาม Status + Role Permission │
└─────────────────────────────────────────────────┘
ActionBar Modes ตาม Status
| Status |
ปุ่มที่แสดง |
| Draft |
Save Draft, Submit for Approval, Delete |
| Pending Approval |
(Maker: รอ) / (Approver: Approve, Reject) |
| Confirmed |
Post, Edit (ถ้า Role อนุญาต), Cancel |
| Posted |
Print, Duplicate, View GL Entries |
| Cancelled |
View Only |
🏷️ Status System — สีมาตรฐาน (ห้ามใช้สีอื่น)
| Status |
สี |
Hex |
ใช้กับ |
| Draft |
Gray |
#6B7280 |
ทุกเอกสาร |
| Pending Approval |
Orange/Amber |
#F59E0B |
เอกสารที่ต้องอนุมัติ |
| Confirmed |
Blue |
#3B82F6 |
อนุมัติแล้ว รอ Post |
| Posted |
Green |
#10B981 |
Post สู่ BC แล้ว |
| Cancelled |
Red |
#EF4444 |
ยกเลิก |
| Scheduled |
Purple |
#8B5CF6 |
งานที่นัดไว้ล่วงหน้า |
| Live |
Bright Green |
#22C55E |
Promotion ที่ Active |
| Expired |
Brown/Warm Gray |
#92400E |
Promotion หมดอายุ |
🔧 Shared Components SC1-SC9 (Full Spec)
ตาราง Usage Matrix — 130+ Screens (v2.1)
| SC |
ชื่อ Component |
หน้าจอที่ใช้หลัก |
| SC1 |
SharedCustomerSearch |
บิลขาย, ใบจอง, ใบเสนอราคา, ใบมัดจำ, ใบลดหนี้, Service Intake, รับเรื่องเคลม, อนุมัติวงเงิน, ประกบบิล AR |
| SC2 |
SharedItemSearch |
บิลขาย, ใบจอง, ใบเสนอราคา, PR, PO, RFQ, โอนสินค้า, GRN, เบิกอะไหล่, Stock Count |
| SC3 |
SharedPaymentPanel |
บิลขาย, ใบมัดจำ, ใบจอง, ใบลดหนี้ขาย, ตัดชำระเจ้าหนี้, PO-8 Deposit Bill |
| SC4 |
SharedDeliveryPanel |
บิลขาย (③ จัดส่ง/ติดตั้ง), ใบจอง, Transfer Order (ปลายทาง) |
| SC5 |
SharedDocRefPanel |
ทุกเอกสารที่มี Reference: บิลขาย←Quote/จอง/มัดจำ, PO←PR/RFQ, Service←บิล, GR←PO, PO-8←PO |
| SC6 |
SharedDepositPanel |
บิลขาย (Payment Section), ใบจอง |
| SC7 |
SharedTimeline |
ทุกเอกสาร — Queue/Dashboard, Sales, WH, Purchase, Service, Finance, Claims, FA |
| SC8 |
SharedSerialPanel |
GRN, โอนสินค้า, ใส่ Serial หลังขาย, Stock Count, Service รับซ่อม, เบิกอะไหล่, Item Master |
| SC9 |
SharedPromoPrice |
ใบเสนอราคา, ใบจอง, บิลขาย (④ โปรฯ Auto-Match), Employee Master (Commission), Sales Price List |
| SC10 |
SharedVendorSearch (NEW) |
PR, PO, AP Invoice, PO-7 Accrual, PO-8 Deposit Bill, FI-2 AP Payment, FI-12 WHT |
SC1 — SharedCustomerSearch
Search Fields (v2 — เพิ่มจากเดิม):
รหัสลูกค้า, ชื่อ (TH), นามสกุล (TH), ชื่อ (EN), เบอร์โทร, Email,
เลขผู้เสียภาษี, รหัสบัตรประชาชน (ID Card), ที่อยู่ (partial search)
Filter:
ประเภทลูกค้า: บุคคลธรรมดา / นิติบุคคล / ราชการ / Walk-in
กลุ่มลูกค้า: ค้าปลีก / ค้าส่ง / ดีลเลอร์ / ออนไลน์
กลุ่มราคา: A / B / C / VIP (Price List Group)
สาขาที่สังกัด: HQ / สาขา 1 / สาขา 2 / ...
สถานะ: Active / Blocked / Overdue
มียอดค้าง: All / มี AR ค้าง / ไม่มี
Search: Real-time ≥ 2 ตัวอักษร; Keyboard + ID Card Scan (Post GoLive)
Result: รหัส, ชื่อ-นามสกุล, ประเภท, กลุ่มราคา, วงเงิน, คงเหลือ, เบอร์, สาขา, Overdue Badge
Auto-fill: Party Section + ดึง Price List/โปร ตามกลุ่มลูกค้า
Blocked: สถานะ Blocked → Warning + ขออนุมัติก่อนเปิดบิล (ห้ามผ่าน)
Quick-Create: สร้างลูกค้าใหม่จาก popup (Draft status, รอ KYC ภายหลัง)
Customer 3 Address: ที่อยู่บัตรปชช / ที่อยู่จัดส่ง / ที่อยู่ออกใบกำกับ
API: GET /customers?$filter=..., GET /customers/{id}, POST /customers
SC2 — SharedItemSearch
Search Fields (v2 — เพิ่มจากเดิม):
รหัสสินค้า, ชื่อ (TH), ชื่อ (EN), ยี่ห้อ/แบรนด์, รุ่น/Model, Barcode/QR
Filter:
หมวดสินค้า: แอร์ / พัดลม / เครื่องซักผ้า / ตู้เย็น / TV / เครื่องครัว / อื่นๆ
ยี่ห้อ/แบรนด์: Daikin / Mitsubishi / Samsung / LG / Toshiba / ...
ช่วงราคา: 0-5K / 5K-15K / 15K-50K / 50K+
สถานะ: Active / Discontinued / Pending
สต็อก: All / มี Stock > 0 / หมดสต็อก / สต็อกต่ำ (< Min)
สาขา/คลัง: เฉพาะคลังที่ระบุ (Stock by Location)
Serial Flag: All / มี Serial / ไม่มี Serial
Search: Keyboard + Barcode Scan; แสดงสต๊อก real-time แยกตามคลัง
Result: รหัส, ชื่อ, หมวด, ยี่ห้อ, รุ่น, UOM, ราคาตามกลุ่มลูกค้า, สต๊อก, สต๊อกจอง, Serial Flag
Alt Items: แสดงสินค้าทดแทน + Bundle แนะนำเมื่อสต๊อกหมด
Serial: Serial Flag = true → เปิด SC8 อัตโนมัติใน line
Inline Edit: แก้ไขข้อมูล line ได้เลย ห้ามใช้ Popup
Import/Export: Serial No. Import/Export CSV ที่ระดับ Line
API: GET /items?$expand=itemVariants, GET /items/{id}/stockByLocation
GET /priceLists?customerId=&date=
GET /itemCategories → ดึงหมวดสินค้า
SC3 — SharedPaymentPanel
ยอด: ยอดสุทธิ, ยอดมัดจำที่หัก, ยอดคงเหลือ, VAT, ส่วนลดท้ายบิล
VAT Options: รวม VAT / ไม่รวม VAT / ไม่แสดง VAT (กลมยอด) — เลือกต่อเอกสาร
วิธีชำระ: เงินสด, โอน, เช็ค, บัตรเครดิต/เดบิต, QR Payment, เครดิต, บางส่วน
Split: เลือกหลายวิธีต่อบิลได้ (split payment)
เครดิต: ตรวจวงเงิน real-time → เกิน → Auto trigger Approval Flow
Status: ยังไม่ชำระ / ชำระบางส่วน / ชำระครบ / เกินกำหนด / รออนุมัติวงเงิน
QR Payment (2 layers) — EMVCo PromptPay via Biller ID (SWT):
• ชั้น 1 — Invoice QR : Ref1 = เลขที่บิล, ยอด fix → ลูกค้าจ่ายตรงบิลเดียว
• ชั้น 2 — Customer QR : Ref1 = รหัสลูกค้า, ยอด open/ค้างรวม/ระบุ
→ ส่งลูกค้าทาง LINE, จ่ายได้หลายบิลพร้อมกัน, แยก FI-1Q Apply Queue
• เงินเข้า → bank statement → IA-Q sync → URC → FI-1Q Queue → auto-apply
SC4 — SharedDeliveryPanel
จัดส่ง: ที่อยู่จัดส่ง, ผู้รับ, เบอร์, วันที่-ช่วงเวลา, วิธีจัดส่ง
ติดตั้ง: ต้องการติดตั้ง (Y/N) → auto-create Service Work Order หลัง Post
Status: รอจัดส่ง → กำลังจัดส่ง → ส่งแล้ว → ติดตั้งเสร็จ
QR Track: ลูกค้าดูสถานะผ่าน QR Code บนใบเสร็จ
SC5 — SharedDocRefPanel
ดึงเอกสาร: แต่ละประเภทกำหนด Source ที่ดึงได้:
บิลขาย ← Quote, ใบจอง, มัดจำ
PO ← PR, RFQ
Service ← บิลขาย (serial ref)
GR ← PO
Partial: ดึงบางส่วนได้; ติดตามยอดที่ดึงไปแล้ว vs. เหลือ
Cascade: ดึงมา → auto-fill รายการสินค้า + ลูกค้า
Chain Link: กด PO → เห็น PR ต้นทาง / กด Invoice → เห็น Shipment ปลายทาง
SC6 — SharedDepositPanel
ค้นหา: เลขมัดจำ / เลขจอง / ลูกค้า — แสดงเฉพาะที่ยังตัดได้
ตัดมัดจำ: ยอดทั้งหมด, ใช้แล้ว, คงเหลือ, จะตัดในบิลนี้
หลายใบ: รองรับหลายใบมัดจำต่อบิลเดียว
Auto: ตัดครบ → สถานะมัดจำ = Fully Applied → บันทึก AR Ledger
สร้างใหม่: จากใบจองหรือ Stand-alone → auto generate เลขที่, พิมพ์ได้ทันที
SC7 — SharedTimeline (Audit Log)
Document Chain: แสดง Quote→จอง→มัดจำ→Invoice→Shipment→Payment
คลิกเอกสารใดก็ข้ามไปได้
Reverse Link: บิลขายรู้ว่ามี Shipment/Payment ไหนอ้างอิงมา
Activity Log: ทุก Action อัตโนมัติ (สร้าง/แก้/อนุมัติ/ปฏิเสธ/พิมพ์) — ลบไม่ได้
Comment: Internal note + mention @พนักงาน → Notification; ไม่แสดงลูกค้า
PDPA: Phase 1 ต้องมี Audit Log ทุก Access
SC8 — SharedSerialPanel
กรอก/สแกน: กรอก Manual หรือ Scan Barcode; validate ไม่ซ้ำ real-time
Bulk: Upload CSV (กรณีจำนวนมาก)
ประวัติ: กด "ดูประวัติ" → lifecycle ทั้งหมด: รับเข้า→ขาย→ซ่อม→เคลม
Status: ว่าง / ใช้งานอยู่ / ซ่อม / เคลม
Serial Policy: ไม่บังคับตอนขาย — บังคับตอนคลัง "เบิก" เท่านั้น
SC9 — SharedPromoPrice
ราคา: ดึง Price List ตามกลุ่มลูกค้า + ช่องทาง + วันที่บิล; ใช้ Priority สูงสุด
โปร Badge: แสดง badge บน line item; คลิกดูเงื่อนไขได้
ของแถม: auto-add Free Item Line (ราคา 0, flag Gift) เมื่อครบเงื่อนไข
Price Alert: แจ้งเมื่อราคาจะเปลี่ยนภายใน N วัน
Override: แก้ราคาต่ำกว่า Floor → Auto Approval Flow + บันทึก Override Log
Accrual: ขายสินค้าที่มี Vendor Sale-In → บันทึก Accrual Entry อัตโนมัติ
Commission: บันทึก PC Commission record แนบกับบิล
Priority: Contract Price > Step Discount > Bundle > Trade-in > Normal
Block [T6]: คำนวณที่ Portal หรือ BC? — ยังไม่ตัดสินใจ
SC10 — SharedVendorSearch (NEW)
Search Fields:
รหัส Vendor, ชื่อบริษัท (TH/EN), เบอร์โทร, Email, เลขผู้เสียภาษี,
ชื่อผู้ติดต่อ (Contact Person)
Filter:
ประเภท Vendor: สินค้า / บริการ / ค่าเช่า / ค่าขนส่ง / อื่นๆ
WHT Category: 1% / 2% / 3% / 5% / ไม่หัก
สถานะ: Approved / Pending Approval / Blocked
Credit Term: Cash / 30 วัน / 60 วัน / 90 วัน
มี AP ค้าง: All / มี AP ค้าง / ไม่มี
Search: Real-time ≥ 2 ตัวอักษร
Result: รหัส, ชื่อ, ประเภท, WHT Category, Credit Term, AP Outstanding, สถานะ
Auto-fill: Vendor Section + ดึง WHT Rate + Credit Term + Price List
Blocked: Vendor ยังไม่ Approve → ห้ามสร้าง PO (ต้องผ่าน PO-3 Onboarding ก่อน)
ใช้ใน:
PO-1 (PR), PO-4 (PO), PO-6 (AP Invoice), PO-7 (Accrual), PO-8 (Deposit Bill)
FI-2 (AP Payment), FI-12 (WHT)
API: GET /vendors?$filter=..., GET /vendors/{id}, POST /vendors
GET /vendorLedgerEntries?vendorId=&open=true → AP ค้าง
🔌 BC365 API — Endpoints หลัก
Pattern มาตรฐาน
Base: https://{tenant}.api.businesscentral.dynamics.com/v2.0/{tenant}/Production/api/v2.0/
Auth: OAuth2 Client Credentials (Service Account)
Retry: Exponential Backoff (3 ครั้ง), Queue เมื่อ Timeout
Sales Module
GET /salesQuotes → SO Draft list
POST /salesOrders → สร้าง SO
PATCH /salesOrders/{id} → แก้ไข SO (ก่อน Post)
POST /salesOrders/{id}/post → Post SO → Invoice + Stock
POST /salesCreditMemos → CN
POST /salesOrders/{id}/shipmentLines → Delivery
Warehouse
GET /locations → คลังทั้งหมด
GET /items/{id}/stockByLocation
POST /purchaseReceipts → GRN
POST /inventoryAdjustments → Adjust
POST /itemTransferOrders → Transfer
GET /serialNumbers?itemId= → Serial Lookup
Purchase
POST /purchaseOrders → PO
POST /purchaseOrders/{id}/receive → GRN (ตัด Stock)
POST /purchaseInvoices/{id}/post → AP + GL
POST /purchaseCreditMemos → Vendor Return/CN
Finance
POST /cashReceiptJournals → AR Receive
POST /vendorPaymentJournals → AP Payment
POST /generalJournals → JV / Accrual
POST /bankAccounts/{id}/reconcile → Bank Recon
POST /accountingPeriods/{id}/close → ปิดงวด
Service (BC Extension Required)
GET /serviceOrders → [?] Standard BC มีหรือต้อง Custom?
POST /serviceOrders → สร้าง Job Card
PATCH /serviceOrders/{id} → อัปเดตสถานะ
POST /serviceOrders/{id}/complete → ปิดงาน → Auto AP ช่าง
👥 RBAC — Permission Matrix (28 Functions × 9 Roles)
| ฟังก์ชัน |
Super Admin |
บัญชี |
จัดซื้อ |
ฝ่ายขาย |
คลัง |
ศูนย์บริการ |
ช่าง |
ฝ่ายเคลม |
ผู้บริหาร |
| จัดการ User/Role |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
| เปิดบิลขาย |
✅ |
❌ |
❌ |
✅ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| ใบจอง / ใบเสนอราคา |
✅ |
❌ |
❌ |
✅ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| สร้างลูกค้า |
✅ |
❌ |
❌ |
✅ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| รับสินค้าเข้า (GRN) |
✅ |
❌ |
✅ |
❌ |
✅ |
❌ |
❌ |
❌ |
🔍 |
| โอนสินค้าคลัง |
✅ |
❌ |
❌ |
❌ |
✅ |
❌ |
❌ |
❌ |
🔍 |
| สร้าง Vendor |
✅ |
❌ |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| เสนอราคา Supplier (RFQ) |
✅ |
❌ |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| ตั้งหนี้สินค้า (AP Invoice) |
✅ |
✅ |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| ตั้งหนี้โปร/รีเบต |
✅ |
✅ |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| อนุมัติ PO |
✅ |
✅ |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| รับสินค้าซ่อม |
✅ |
❌ |
❌ |
❌ |
❌ |
✅ |
❌ |
❌ |
🔍 |
| นัดหมายคิวช่าง |
✅ |
❌ |
❌ |
❌ |
❌ |
✅ |
❌ |
❌ |
🔍 |
| ช่างรับงาน (Mobile) |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
✅ |
❌ |
❌ |
| เบิกอะไหล่ซ่อม |
✅ |
❌ |
❌ |
❌ |
❌ |
✅ |
❌ |
❌ |
🔍 |
| เบิกค่าแรงช่าง |
✅ |
✅ |
❌ |
❌ |
❌ |
✅ |
❌ |
❌ |
🔍 |
| รับเรื่องเคลม |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
✅ |
🔍 |
| ส่งเคลม Supplier |
✅ |
✅ |
✅ |
❌ |
❌ |
❌ |
❌ |
✅ |
🔍 |
| ติดตามสถานะเคลม |
✅ |
✅ |
✅ |
❌ |
❌ |
❌ |
❌ |
✅ |
🔍 |
| ใบตั้งหนี้ / ใบจ่ายเงิน |
✅ |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| ตัดหนี้เจ้าหนี้ |
✅ |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| ประกบบิลลูกหนี้ (AR) |
✅ |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| วงเงินลูกค้า / Credit |
✅ |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| คืนเงินลูกค้า (CN) |
✅ |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| บันทึกค่าใช้จ่าย |
✅ |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| กระทบยอดธนาคาร |
✅ |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
🔍 |
| Field-Level Permission |
✅ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
| ดูรายงานรวม |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
🔍 = View Only (ผู้บริหาร) | ✅ = Full Access | ❌ = No Access
กฎ RBAC ที่ห้ามละเมิด:
- Maker ≠ Checker: ห้าม Approve งานตัวเอง (บังคับทุกโมดูลที่มี Approval)
- Field-Level: ราคาต้นทุน, วงเงิน Credit → ซ่อนตาม Role
- Route Guard: ป้องกัน URL ที่ไม่มีสิทธิ์
- Approval Matrix: กำหนดใน System Config ว่า Tier ไหน → Approver คนไหน
📅 Phase Plan
Phase 1 — Run ASAP
โมดูล: Sales, Warehouse, Purchase Basic, Price List P1, Finance Basic (AR/AP/JV), Master Data, System Config
เงื่อนไข Go-Live: Master Data พร้อม + BC Sandbox ผ่าน
Key Deliverables: SC1-SC9 ครบ → Sales SO/Invoice → WH GRN/Issue → PO/GRN/AP → AR/AP Basic
Phase 2 — Scale & Control
โมดูล: Step Discount/Bundle, Credit Memo, Service+Delivery (4.x), Claims, Finance 2.5 Expense Voucher, Finance 2.6 Credit Control, Bank Recon, Integration/API Monitor, e-Tax Invoice, Mobile App Group A (ช่าง)
เงื่อนไข: Phase 1 UAT ผ่าน
Key Deliverables:
- Service Queue/JobCard + Delivery & Installation sub-module (4.1-4.3)
- Expense & Payment Voucher (จ่ายค่าใช้จ่ายทั่วไป)
- Credit Control Dashboard (ติดตามวงเงิน + Alert ลูกหนี้เกิน)
- Integration API Monitor (สถานะ Sync BC / Error Log)
- e-Tax XML + RD API, Mobile Service Tech
Phase 3 — Automate
โมดูล: Finance Full (Period Close / Tax Report), Promotion Full, Accrual Auto, Real-time, Service Notification+Performance, Marketplace (Shopee/Lazada)
เงื่อนไข: Phase 2 Stable
Key Deliverables: Marketplace Tab ออนไลน์ใน Sales, Order Inbox, Stock Sync, Technician Performance Dashboard
Phase 4 — Optimize
โมดูล: Trade-in, Promo Simulator, Advanced SLA, Mobile App Group B (ผู้บริหาร), Marketplace Dashboard, BI/KPI Full, PDPA
เงื่อนไข: Phase 3 Stable
🇹🇭 Thailand Compliance
e-Tax Invoice (Phase 2)
| Component |
รายละเอียด |
| XML Generator |
ออก Tax Invoice XML ตาม RD Standard |
| Digital Signature |
Sign ด้วย Certificate ขององค์กร |
| RD API Connector |
ส่ง XML ไป RD Portal + รับผลกลับ |
| Status Tracker |
Pending → Submitted → Accepted / Rejected |
| WHT Certificate |
ภ.ง.ด.3 / 53 — ตาม B10 (Auto/Manual TBD) |
| e-Filing Dashboard |
รายการที่ส่งแล้ว, ยังไม่ส่ง, Rejected |
⚠️ [T9] ต้องตรวจก่อนว่า BC365 Standard Thailand Extension ครอบคลุมหรือต้อง Custom
VAT & WHT
- VAT 7% บังคับทุกใบกำกับภาษี
- WHT (ภ.ง.ด.3/53) ตัดเมื่อ AP Payment
- ทุก Posted Document ต้องมี Tax Invoice No. ที่ถูกต้อง
PDPA (Phase 4)
- Consent Record + Withdrawal Flow
- Data Retention Policy + Auto-Delete Hook
- Audit Log ทุก Access — SC7 ต้องมีตั้งแต่ Phase 1
🛒 Marketplace Integration (Phase 3)
Concept: POS-Style Tab ใน Sales Module
Sales Module
├── Tab: ขายหน้าร้าน ← Sales Order ปกติ
└── Tab: ออนไลน์ ← Marketplace Orders (ใหม่ Phase 3)
├── Order Inbox (Shopee + Lazada)
├── SKU Mapping Manager
├── Auto-Create SO in BC
├── Stock Sync (BC → Marketplace)
└── Shipping Tracking
Business Rules
- คำสั่งซื้อ Marketplace → Auto-create SO ใน BC (ยืนยันหรือ Auto)
- Stock Sync: BC คือ Source of Truth → Push ไป Marketplace [T12]
- Return จาก Marketplace → Credit Memo Flow ปกติ
⚠️ [T10] Shopee/Lazada Partner Account และ Production Key พร้อมหรือยัง?
📱 Mobile App (2 Groups)
Group A — Service Tech (Phase 2, เร่งด่วน)
- รับ Job Card / นัดหมาย
- บันทึกผลงาน + รูปถ่าย Before/After
- Check-in/out ที่หน้างาน
- บันทึกอะไหล่ที่ใช้
- [T1] Native / PWA / Responsive Web?
- [T2] Offline Mode?
Group B — Manager/Sales (Phase 4)
- Sales Dashboard + KPI ส่วนตัว
- อนุมัติ Quotation / SO จากมือถือ
- ดูสต็อก Real-time
- Service Performance Report
⚠️ Open Questions — ห้าม Implement จนกว่าจะได้คำตอบ
Technical
| # |
คำถาม |
Phase |
| T1 |
Mobile: Native / PWA / Responsive Web? |
P2 |
| T2 |
Offline Mode ช่าง: Sync ยังไง? |
P2 |
| T5 |
BC Extension: Standard หรือ Custom AL? |
P1 |
| T6 |
Promotion Engine: คำนวณที่ Portal หรือ BC? |
P1 |
| T9 |
e-Tax: BC365 Standard Thailand Extension ครอบคลุมไหม? |
P2 |
| T10 |
Marketplace: Partner Account พร้อมหรือยัง? |
P3 |
| T11 |
Customer Notification: SMS หรือ LINE Notify? |
P3 |
| T12 |
Stock Sync Marketplace: Real-time หรือ Batch? |
P3 |
Business Rules
| # |
คำถาม |
Phase |
B1 |
Promotion Conflict Priority ✅ RESOLVED — Priority Number + Stack ≤ 2 ชั้น (ดู PM_promotion.md) |
P1 |
B5 |
Credit Approval Tier ✅ RESOLVED — ทั้งฝั่งขาย (SL-F1) + ฝั่งซื้อ (PO) ตั้งใน CF-7 |
P1 |
| B6 |
Deposit GL Account |
P1 |
| B9 |
SLA กี่ชั่วโมงต่อ Doc Type? |
P2 |
B10 |
WHT Certificate: Auto หรือ Manual? ✅ RESOLVED — Auto จาก FI-2 AP Payment → WHT List (FI-12) → Release → Print |
P1 |
| C1 |
⚠️ COA Mapping ระหว่าง 4 บริษัท (SWT/SWE/VMN/WPS) → ใช้ COA เดียวกันหรือต่างกัน? |
P3 |
| C2 |
⚠️ Intercompany Transaction Threshold → จำนวนเท่าไหร่ถึง Auto-detect? |
P3 |
🤖 วิธีออกแบบ Module ใหม่ (Template)
เมื่อขอออกแบบ Module หรือหน้าจอใหม่ ให้ตอบครอบคลุม:
1. Module Brief
Module: [ชื่อ]
Phase: [P1/P2/P3/P4]
BC Entity: [API Endpoint ที่เชื่อม]
Trigger: [อะไร trigger หน้าจอนี้]
Output: [เอกสารหรือ Action ที่เกิดขึ้น]
2. Screen List
[Module Code]-1: [ชื่อหน้า List/Queue]
[Module Code]-2: [ชื่อหน้า Form/Detail]
[Module Code]-3: [หน้า Approval/Review ถ้ามี]
3. ERP Transaction Form Breakdown
ระบุ Field ทั้ง 7 Sections ว่ามีอะไรบ้าง + BC Field Mapping
4. Status Flow
Draft → Submitted → Approved → Posted/Confirmed → (Cancelled)
5. Shared Components ที่ใช้
ระบุ SC ที่ต้องใช้พร้อม Config
6. RBAC
ระบุ Role + Permission (Create/Edit/Approve/Post/Cancel)
7. BC API Calls
ระบุ GET/POST/PATCH ที่ต้องใช้
8. Open Questions ที่ Block
ระบุ Question Number จาก Section Open Questions
📂 Module Spec Files (รายละเอียดทีละเมนู)
| ไฟล์ |
Module |
เมนูที่ครอบคลุม |
modules/SL_sales.md |
งานขาย (SL) |
Quotation, Reservation, Deposit, Invoice (5 ส่วน: สินค้า/ชำระ/จัดส่ง/โปรฯ/ใบกำกับ), Credit Memo, Credit Approval |
modules/PO_purchase.md |
งานจัดซื้อ (PO) |
PR, RFQ, Vendor Onboarding, PO, GRN, AP Invoice, Sale-In Accrual (PO-7), PO บิลฝาก (PO-8) |
modules/WH_warehouse.md |
งานคลัง (WH) |
Queue, GRN, Transfer, Sales Issue, Stock Count, Stock Card, Non-Move Report (WH-NM) |
modules/FI_finance.md |
งานการเงิน (FI) |
AR Receipt, AP Payment, Bank Recon, JV, Expense Voucher (P2), Credit Control (P2), Period Close (P3), Accrual Monitor (FI-8), Fixed Asset (FI-9/10/11), WHT (FI-12), Dual-Book (FI-13) |
modules/SV_service.md |
งานบริการ + เคลม (SV+CL) |
Service Intake, Job Card, Parts, QA Close, Delivery & Install, Claims 3 ประเภท |
modules/PM_promotion.md |
โปรโมชั่น (PM) |
Price List, Promotion Scheme, Bundle/Step Discount, Quota, Simulator (PM-6 Accrual ย้ายไป PO-7) |
modules/MD_master.md |
ข้อมูลหลัก (MD) |
Item, Customer, Vendor, Employee (NEW), Branch & Warehouse (NEW), Price List |
modules/CF_config.md |
ตั้งค่าระบบ (CF) |
Tax, Number Series, RBAC, Posting Groups, Bin Policy, Technician Template, Approval Matrix |
modules/IA_integration.md |
Integration & API (IA) |
BC Sync Monitor, Error Log, Webhook, Marketplace Connector (P3), Entity Explorer (P3) |
อ่าน Module Spec ก่อนออกแบบหน้าจอใด ๆ ในโมดูลนั้น
📁 Reference Files ใน Workspace
| ไฟล์ |
ใช้เพื่อ |
research.md |
ภาพรวมระบบ, Open Questions, Module Spec ครบ |
plan.md |
Task Breakdown ทุก Phase, สถานะ Task |
ui_design_pattern_guideline.md |
Design Rules, ERP Form 7 Sections, SC Spec, RBAC |
README.md |
Project Overview, 68 Screens, Phase Overview |
uxui_field_knowledge.docx |
Field Spec ทีละหน้าจอ |
1_component_fw_clean.docx |
Technical Spec SC1-SC9 |
sangwijit_reference_rev2.docx |
Business Reference + Gap Analysis |
dd_sales_phase1.docx |
Data Dictionary Phase 1 (Sales) |
dd_wh_pur_phase2.docx |
Data Dictionary Phase 2 (WH + Purchase) |
dd_finance_phase3.docx |
Data Dictionary Phase 3 (Finance) |
dd_svc_promo_master_phase4.docx |
Data Dictionary Phase 4 (Service/Claims/Promo/Master) |
sales-invoice-compact.html |
HTML Prototype — ตัวอย่าง UAT ชุดแรก |
ลำดับการอ่านเอกสาร (Document Reading Order)
research.md — เริ่มที่นี่เสมอ
plan.md — Task Status + Blocked Items
ui_design_pattern_guideline.md — Design Rules
uxui_field_knowledge.docx — Field Detail ทีละหน้าจอ
1_component_fw_clean.docx — SC Technical Spec
- Data Dictionary ตาม Phase
- Workflow PDF — BC365 Mapping จริง
🔄 Status Transition Diagrams (ทุก Module)
Sales / Invoice / Promotion / Claims
Draft → รออนุมัติวงเงิน → อนุมัติ → ออกใบกำกับแล้ว → ชำระเงินแล้ว → ปิดงาน
↓
ปฏิเสธ → Draft (แก้ไข/ส่งใหม่)
Purchasing (PR → PO → GRN → AP)
Draft → รออนุมัติ → อนุมัติแล้ว → PO Open → สินค้าเข้าแล้ว → รอวางบิล → ปิดรายการ
↓
Rejected → Draft (แก้ไข/ส่งใหม่)
Warehouse
Draft → รอตรวจสอบ → อนุมัติ → สินค้าเข้า/ออกแล้ว → ปิดงาน
Service / ศูนย์บริการ
Draft → นัดหมายแล้ว → รอช่าง → ดำเนินงาน → ส่งงาน/รออนุมัติ → ปิดงาน
↓ (ช่างนอก)
ตั้งหนี้ช่าง
Promotion / Accrual Claim (Supplier)
Draft → รออนุมัติ → Active → Claim → รอเงินเข้า → รับเงินแล้ว
↓
Expired
↓
Rejected → Draft
AR / Credit
Draft → รออนุมัติ → อนุมัติ → วางบิล → ค้างชำระ → รับชำระแล้ว → ปิดบัญชี
↓
ปฏิเสธ → Draft
Finance / Expense / AP / Tax
Draft → รออนุมัติ → อนุมัติ → จ่ายแล้ว → ปิดงาน
↓
ปฏิเสธ → Draft
Online / Marketplace
Draft → รอตรวจสอบ → อนุมัติ → จัดส่งแล้ว → ปิดงาน
🎨 UX Rules — Confirmed Patterns (Oct 2025)
กฎ UX ที่ confirm แล้ว ห้ามละเมิด:
| # |
กฎ |
รายละเอียด |
| UX1 |
Inline Edit |
แก้ไข Line Items ได้เลยที่บรรทัด — ห้ามใช้ Popup |
| UX2 |
Barcode Scan |
ทุกช่องที่เหมาะสม (Item, Serial) รองรับ Barcode Scan |
| UX3 |
Serial Import/Export |
ที่ Line Level — ปุ่ม Import/Export CSV |
| UX4 |
Document Chain |
กดจาก PO → เห็น PR ต้นทาง ย้อนกลับได้ (SC5) |
| UX5 |
Show More/Less |
ซ่อน Field ที่ไม่ใช้บ่อย — ปุ่มขยาย/ย่อ |
| UX6 |
3 Address Types |
ลูกค้ามีที่อยู่ 3 แบบ: บัตรปชช / จัดส่ง / ใบกำกับภาษี |
| UX7 |
VAT Options |
ต่อเอกสาร: รวม VAT / ไม่รวม VAT / ไม่แสดง VAT |
| UX8 |
Bundle Item |
ต้องมีหน้าจอรองรับสินค้าชุด |
| UX9 |
QR Status Track |
ลูกค้าดูสถานะสินค้า/จัดส่งผ่าน QR Code บนใบเสร็จ |
| UX10 |
QR Payment (2 layers) |
(1) Invoice QR (Ref1=INV, ยอด fix) บน SL-3/SL-4 · (2) Customer QR (Ref1=CustCode, ยอด open) บนหน้าค้นลูกค้า + MD-2 → ส่ง LINE → FI-1Q Apply Queue |
| — |
ID Card Scan |
Post Go-Live |
| — |
Document Flow Visual |
Post Go-Live |
| — |
Web Filter ละเอียด |
ใช้ Power BI แทน |
🗄️ BC365 API — Table Numbers Reference
| Module |
Endpoint |
BC Table |
| Sales Invoice |
POST /salesOrders |
Sales Header (36), Sales Line (37) |
| Sales Quote / Reservation |
POST /salesQuotes |
Sales Quote Header (6660), Sales Quote Line (6661) |
| Sales Prepayment (Deposit) |
Custom API |
Sales Prepayment Header (Custom) |
| Customer Create |
POST /customers |
Customer (18) |
| WH Transfer Order |
POST /transferOrders |
Transfer Header (5740), Transfer Line (5741) |
| Serial Entry |
PATCH /itemLedgerEntries |
Item Ledger Entry (32) |
| Vendor Create |
POST /vendors |
Vendor (23) |
| Purchase Order |
POST /purchaseOrders |
Purchase Header (38), Purchase Line (39) |
| Item Approve |
POST /items |
Item (27) |
| Service Receive |
POST /serviceOrders |
Service Header (5900), Service Line (5901) |
| Parts Requisition |
POST /serviceItemComponents |
Service Item Components (5943) |
| Claim |
Custom API |
Claim Custom Table |
| AP Invoice |
POST /purchaseInvoices |
Purchase Invoice Header (122), Purchase Invoice Line (123) |
| Payment Journal |
POST /paymentJournals |
Gen. Journal Line (81) |
| AR Match |
POST /salesInvoices |
Sales Invoice Header (112), Sales Invoice Line (113) |
| Credit Limit |
PATCH /customers |
Customer (18) — CreditLimit field |
| Sales Credit Memo |
POST /creditMemos |
Sales Credit Memo Header (114) |
🚚 Service Module — Delivery & Installation Sub-module (Phase 2)
Sub-module 4.x — บริการจัดส่งและติดตั้ง
| หน้าจอ |
รหัส |
รายละเอียด |
| Delivery Queue |
SV-4.1 |
คิวงานจัดส่ง/ติดตั้ง แสดงตาม Branch + วันที่ + สถานะ |
| Delivery Job Card |
SV-4.2 |
Form บันทึกงานจัดส่ง/ติดตั้ง (Serial, Address, Technician) |
| Delivery Completion |
SV-4.3 |
ปิดงาน: รูปถ่าย Before/After, ลูกค้าเซ็นรับ, Rating |
Business Rules:
- ทริก: Sales Invoice ที่มี Delivery Flag = true → สร้าง Delivery Job อัตโนมัติ
- Serial ต้องบันทึกก่อนปิดงาน (SC8)
- Address ใช้ SC1 → 3 Address Types (ที่อยู่จัดส่ง)
- ช่างใช้ Mobile App Group A เพื่อ Check-in / ถ่ายรูป
- Status Flow:
ใบแจ้งงาน → นัดหมาย → จัดส่ง → ติดตั้งสำเร็จ → ปิดงาน
💰 Finance Module — ส่วนที่เพิ่มใหม่ (Phase 2)
Finance 2.5 — Expense & Payment Voucher
วัตถุประสงค์: บันทึกค่าใช้จ่ายทั่วไป (ที่ไม่ผ่าน AP/PO) และออก Payment Voucher
หน้าจอ:
- Expense List: รายการค่าใช้จ่าย + สถานะ
- Expense Form: เจ้าหนี้ / ประเภทค่าใช้จ่าย / GL Account / Amount
- Payment Voucher: เลขที่ใบสำคัญ / วันที่จ่าย / วิธีชำระ (เช็ค/โอน)
Status Flow: Draft → รออนุมัติ → อนุมัติ → จ่ายแล้ว → ปิดงาน
BC API: POST /paymentJournals, POST /generalLedgerEntries
RBAC: Accountant (Create), Finance Manager (Approve+Post)
Finance 2.6 — Credit Control Dashboard
วัตถุประสงค์: ติดตามลูกหนี้ที่เกินวงเงินหรือเกินกำหนดชำระ
หน้าจอ:
- Credit Control List: ลูกหนี้ทั้งหมด + ยอดค้าง + เกินกำหนดกี่วัน + Alert
- Customer Credit Profile: ประวัติชำระ, วงเงิน, เอกสารค้าง
- Alert Actions: ปล่อยให้ขายต่อ / Hold / ส่ง Notice
Business Rules:
- ถ้า Outstanding > Credit Limit → ขึ้น Alert สีแดงทุก Module
- ถ้า Overdue > 30 วัน → Email/LINE Notify อัตโนมัติ (B5)
- SC1 ต้องแสดง Credit Status ก่อน User เปิดบิลใหม่
BC API: GET /customerLedgerEntries?customerId=, PATCH /customers (credit fields)
🔌 Integration & API Module (Phase 2+3) — Module #8
วัตถุประสงค์
ศูนย์กลางติดตามการเชื่อมต่อระหว่าง Portal ↔ BC365 ↔ ระบบภายนอก
หน้าจอหลัก
| หน้าจอ |
Phase |
รายละเอียด |
| API Sync Monitor |
P2 |
แสดงสถานะการ Sync แต่ละ Module: ล่าสุดเมื่อ, Success/Fail Count |
| Error Log |
P2 |
รายการ API Error + Response Code + Retry Button |
| Webhook Config |
P2 |
กำหนด Webhook URL ที่รับ Event จาก BC (Post, Approve, etc.) |
| Marketplace Connector |
P3 |
ตั้งค่า Shopee/Lazada API Key, Sync Status |
| BC Entity Explorer |
P3 |
ดู BC Entity ที่ Portal ใช้ + Field Mapping Summary |
Business Rules
- ทุก API Call ต้องมี Retry (3 ครั้ง) ก่อน Error Log
- Error ร้ายแรง → Alert Admin ผ่าน LINE Notify
- Log เก็บ 90 วัน (PDPA)
- Admin Only — ซ่อน Module นี้จาก Non-Admin Role
📂 Master Data vs System Config — แนวทางออกแบบ
Master Data Module (MD) — ข้อมูลอ้างอิง
ใครสร้าง: User ทั่วไปที่มีสิทธิ์ (Sales Coordinator, Admin)
ลักษณะ: เปลี่ยนบ่อย ตามธุรกิจ
| หน้าจอ |
รายละเอียด |
| Item Master |
สินค้า: รหัส, ชื่อ TH/EN, หมวด, UOM, Serial Flag, ราคาต้นทุน |
| Customer Master |
ลูกค้า: ข้อมูล KYC, กลุ่มราคา, วงเงิน, 3 Address |
| Vendor Master |
ผู้จัดจำหน่าย: ข้อมูล + เงื่อนไขการค้า |
| Employee Master (ใหม่) |
พนักงาน: รหัส, ชื่อ, ตำแหน่ง, Branch, Commission Rate |
| Branch & WH Master (ใหม่) |
สาขา: ที่อยู่, Warehouse ที่สังกัด, Contact, Manager |
| Price List |
ราคาตามกลุ่มลูกค้า / ช่วงเวลา |
System Config Module (CF) — ตั้งค่าระบบ
ใครสร้าง: System Admin เท่านั้น
ลักษณะ: เปลี่ยนน้อย เป็น Base Setting ของระบบ
| หน้าจอ |
รายละเอียด |
| Tax Setup |
VAT Code, WHT Category (ภ.ง.ด.3/53) |
| Number Series |
เลขที่เอกสารแต่ละประเภท (SO, PO, SI, etc.) |
| Item Config |
Default Posting Group, Location Policy |
| Customer/Vendor Config |
Credit Term Template, Payment Method Default |
| WH Bin Policy |
กฎการจัดวางสินค้าในคลัง |
| Technician Template |
Template การคิดค่าแรงช่าง |
| User & Role |
RBAC Matrix, Permission Assignment |
🔨 Development Checklist (ก่อนเริ่ม Implement ทุกหน้าจอ)
[ ] ⚠️ ตรวจ folder ว่ามีไฟล์ซ้ำไหม → ถ้ามี ต้องถามก่อนเสมอ
(ดูตาราง "ไฟล์ซ้ำที่ตัดสินใจแล้ว" ใน Rule 2 เพื่อเทียบว่าเคยตัดสินใจแล้วหรือยัง)
[ ] 📄 อ่าน Flowchart ใน Flow Design/ ของ Module นั้นก่อน
→ ดู Status Flow, BC Entity, Document Format
[ ] อ่าน research.md + plan.md → ตรวจ Open Questions ที่เกี่ยวข้อง
⛔ ห้าม Implement ส่วนที่มี [?] จนกว่าจะตัดสินใจ
[ ] ดู Data Dictionary (dd_*.docx) — Field ครบหรือยัง?
[ ] ตรวจ Component Usage Matrix — SC ที่ยังไม่มีต้องพัฒนาก่อน Page
[ ] ยืนยัน RBAC: Role, Field Permission, ปุ่ม Disable
[ ] พัฒนาตาม ERP Form 7 Sections — ห้ามเปลี่ยนลำดับ
[ ] ใช้ StatusBadge สีตาม Standard — ห้ามใช้สีอื่น
[ ] ทุก Label มีทั้งไทยและอังกฤษ
[ ] Unit Test Coverage > 80%
[ ] TypeScript Strict + ESLint Airbnb + Prettier ก่อน PR
Sangwijit Group © 2024–2026 | Proprietary — ห้ามเผยแพร่ภายนอก
Skill Version: 1.0 | เมษายน 2026
1---2name: sangwijit-portal3description: ระบบความรู้ครบวงจรสำหรับโปรเจกต์ Sangwijit ERP Web Portal — ระบบ Frontend Portal เชื่อมต่อกับ Dynamics 365 Business Central ครอบคลุม: สถาปัตยกรรมระบบ, 8+ Core Modules, Shared Components SC1-SC9, UI Design Pattern, BC365 API Integration, RBAC, Thailand Compliance ใช้ Skill นี้ทุกครั้งที่: - ถามหรือออกแบบ Module ใด ๆ ใน Sangwijit Portal (Sales, WH, Purchase, Finance, Service, Promotion, Master, Claims) - ออกแบบหน้าจอใหม่หรือ Flow ใหม่ตาม ERP Transaction Form Standard - เขียน Spec, Data Dictionary, หรือ Workflow สำหรับ Developer - ถามเรื่อง BC365 API Endpoint, RBAC Role, หรือ Status Flow - วางแผน Phase การพัฒนาหรือประเมิน Task ใหม่ - ถามเรื่อง Shared Component SC1-SC9 — ใช้ที่ไหน, Props คืออะไร - ออกแบบ Module ใหม่: e-Tax, Marketplace, Mobile App, HRM Hook - ตรวจสอบ Open Questions ก่อน Implement4---5
6# Sangwijit ERP Web Portal Skill — Knowledge Base (v2.1)
7
8**Last Updated:** เมษายน 2026
9**เจ้าของโปรเจกต์:** Peerapat (พีรพัฒน์) — GM, กลุ่มแสงวิจิตร
10**ธุรกิจ:** จำหน่ายเครื่องใช้ไฟฟ้า (ยอดขาย 450M+/ปี) — ค้าปลีก, ค้าส่ง, ส่งออก, ศูนย์บริการ
11**Reference Folder:** `/Design Ai/` ใน Workspace
12
13---
14
15## ⚙️ กฎการทำงาน (RULES — บังคับทุกครั้ง)
16
17### Rule 1: อ่าน Flowchart ก่อนออกแบบทุก Module
18
19ก่อนออกแบบหน้าจอ หรือเขียน Spec ใด ๆ ต้องอ่าน Flowchart ที่เกี่ยวข้องจาก folder ก่อนเสมอ
20
21**Flow Design Folder:** `/Design Ai/Flow Design/`
22
23| Module | Subfolder | ประเภทไฟล์ |
24|---|---|---|
25| Sales | `Sales/Flow/` | Flow PDF (00–09) |
26| Sales Documents | `Sales/Document/` | Document Template PDF |
27| Purchase | `Purchase/Flow/` | Flow PDF (00–06) |
28| Purchase Documents | `Purchase/Document/` | Document Template PDF |
29| Warehouse | `Warehouse Inventory/Flow/` | Flow PDF (00–02) |
30| Warehouse Documents | `Warehouse Inventory/Document/` | Document Template PDF |
31| Finance (Cash/Bank) | `Finance/Flow/` | Flow PDF (01–03) |
32| Finance Documents | `Finance/Document/` | Voucher Template PDF |
33| Account (AR/AP/GL/Tax) | `Account/Flow/` | Flow PDF (00–12) |
34| Account Documents | `Account/Document/` | Voucher Template PDF (01–10) |
35| Service | `Service/` | Flow PDF (00–06) |
36| Promotion | `Promotion/` | Flow PDF (00–02) |
37| Master Data | `Master/` | Master Flow PDF (7 ไฟล์) |
38| Data Transfer | `Data Transfer/` | Transfer Flow PDF (01–06) |
39
40**ขั้นตอนการอ่านก่อนออกแบบ:**
41```
421. ระบุ Module ที่จะทำ
432. เปิด Flow PDF ที่เกี่ยวข้องจาก subfolder ด้านบน
443. ทำความเข้าใจ Status Flow + BC365 Entity ใน Flow
454. ตรวจ Document Template PDF (ถ้ามี) เพื่อดู Field ที่ต้องแสดง
465. จึงเริ่ม Spec / Screen Design
47```
48
49---
50
51### Rule 2: ไฟล์ซ้ำ — ถามก่อนเสมอ
52
53ถ้าพบว่า folder มีไฟล์ชื่อคล้ายกันหรือเลขซ้ำกัน ต้องหยุด เปรียบเทียบ และถามผู้ใช้ก่อน ห้ามเลือกเองโดยไม่แจ้ง
54
55**ไฟล์ซ้ำที่ตัดสินใจแล้ว (ห้ามถามซ้ำ):**
56
57| Module | ไฟล์ที่ซ้ำ | การตัดสินใจ |
58|---|---|---|
59| Service / Claims | `06 Service - Claim Intake รับเรื่องเคลม ตรวจสอบสินค้า คืนของ Vendor.pdf` vs `06 Service - Claim Intake รับเรื่องเคลมและตรวจสอบสินค้า.pdf` | ✅ ใช้ **"คืนของ Vendor"** เป็น Reference หลัก (Flow ครบกว่า) |
60| Sales / Document | `Credit Note (ใบลดหนี้ ใบกำกับภาษี).pdf` vs `Credit Note (ใบลดหนี้).pdf` | ✅ **คนละ Case**: ใบลดหนี้ ใบกำกับภาษี = **ในประกัน** / ใบลดหนี้ = **นอกประกัน** |
61
62---
63
64## 🧠 Mental Model ที่ถูกต้อง (CRITICAL — อ่านก่อนทุกอย่าง)
65
66### Portal = UI Layer เท่านั้น — BC365 = System of Record
67
68```
69User (Browser)
70 ↓
71Sangwijit Web Portal ← React/Vue + TypeScript + Tailwind CSS
72 ↓ REST API
73BC365 Business Central ← Ledger, Posting, Stock, Document Number
74 ↓
75Azure / SQL (BC Database)
76```
77
78**WRONG (ห้ามคิดแบบนี้):**
79- ❌ Portal มี Database ของตัวเอง (ไม่มี — ดึงข้อมูลจาก BC ทั้งหมด)
80- ❌ Portal Post Transaction เองโดยไม่ผ่าน BC
81- ❌ UI ออกแบบอิสระโดยไม่ดู BC Entity / Field
82
83**CORRECT:**
84- ✅ Portal = Smart Frontend + Workflow Engine ที่ call BC REST API
85- ✅ ทุก Post / Confirm → ส่งไป BC แล้วค่อย Refresh หน้าจอ
86- ✅ Status, เลขที่เอกสาร, ราคา → มาจาก BC เสมอ
87
88### Service Account Strategy
89- ใช้ BC Service Account **1 บัญชี** (ลดค่า License)
90- Portal ทำ RBAC เอง (ไม่พึ่ง BC Permission ต่อ User)
91- Retry + Queue เมื่อ BC API ช้าหรือ Error
92
93---
94
95## 📦 Modules Overview
96
97### 9 Core Modules + Extensions (v2.1 — Confirmed)
98
99| Module | ย่อ | Phase | หน้าจอหลัก |
100|---|---|---|---|
101| Sales | SL | P1 | Quotation, SO, Invoice, Credit Memo, Deposit, Cash Sale |
102| Warehouse | WH | P1 | GRN, Issue, Transfer, Adjust, Stock Card, Serial |
103| Purchase | PO | P1 | PR, PO, GRN, AP Invoice, Credit Memo, Vendor Return, **Sale-In Accrual (PO-7)**, **PO บิลฝาก (PO-8)** |
104| Finance | FI | P1+P2+P3 | AR Receive, AP Payment, Expense Voucher (P2), Bank Recon, Credit Control (P2), Period Close, **Fixed Asset (FI-9/10/11)**, **WHT (FI-12)**, **Dual-Book (FI-13)** |
105| Service & Delivery | SV | P2 | Service Queue, Job Card, QA Close, Delivery & Installation (4.x), Mobile (Group A) |
106| Promotion/Pricing | PM | P1+P3 | Price List, Step Discount, Bundle, Promotion Scheme, Quota, Simulator |
107| Master Data | MD | P1 | Item, Customer, Vendor, Employee (ใหม่), Branch & Warehouse (ใหม่) |
108| System Config | CF | P1 | Tax Setup, Number Series, Customer/Vendor Config, Bin Policy, Item Config |
109| Claims | CL | P2 | Claims List, CN, AP CM, Approval |
110| Integration/API | IA | P2+P3 | API Monitor, Webhook, BC Sync Status, Error Log |
111| e-Tax Invoice | TX | P2 | XML Generator, Digital Signature, RD API, WHT |
112| Marketplace | MK | P3 | Order Inbox, SKU Map, Stock Sync, Tab ออนไลน์ใน Sales |
113| Mobile App | MB | P2/P4 | Group A: Service Tech (P2), Group B: Manager (P4) |
114| HRM Hook | HR | P3 | Employee Directory, Leave Status, Commission Hook |
115
116**กฎแยก Master Data vs System Config:**
117- **Master Data (MD)** = ข้อมูลอ้างอิงที่ User สร้างขึ้น (Item, Customer, Vendor, Employee, Branch)
118- **System Config (CF)** = ตั้งค่าระบบโดย Admin (Tax Code, Number Series, Posting Group, Bin Policy)
119- **Promotion Scheme** อยู่ใน Promotion module ไม่ใช่ Config → เพราะเกี่ยวข้องกับ Business Logic การขาย
120
121---
122
123## 🎨 UI Design Principles (7 หลักการ — ห้ามละเมิด)
124
1251. **BC-First Data** — ทุก Field ต้องมาจาก BC Entity ที่ระบุในเอกสาร
1262. **Progressive Disclosure** — แสดงข้อมูลตาม Role และ Context
1273. **Status-Driven UI** — สีและ ActionBar เปลี่ยนตาม Document Status เสมอ
1284. **Shared Component First** — ดู SC1-SC9 ก่อนสร้าง Component ใหม่
1295. **Bilingual Ready** — ทุก Label มี Key ทั้งไทยและอังกฤษ
1306. **Error Recovery** — ทุก API Error ต้องมี User-readable Message + Retry
1317. **RBAC Everywhere** — Field, Button, Route ต้องเช็ค Permission
132
133---
134
135## 📐 ERP Transaction Form — Standard Structure (7 Sections)
136
137**ห้ามเปลี่ยนลำดับ Section เด็ดขาด**
138
139```
140┌─────────────────────────────────────────────────┐
141│ 1. PAGE HEADER │
142│ Module Title | Document Type | Status Badge │
143│ Breadcrumb | Action Bar (context-sensitive) │
144├─────────────────────────────────────────────────┤
145│ 2. DOC HEADER │
146│ Document No. | Date | Reference | Branch │
147│ (Read-only ถ้า Posted/Confirmed) │
148├─────────────────────────────────────────────────┤
149│ 3. PARTY │
150│ SC1/CustomerSearch หรือ Vendor Search │
151│ Auto-fill: Price Group, Credit, Address │
152├─────────────────────────────────────────────────┤
153│ 4. LINE ITEMS │
154│ SC2/ItemSearch | Qty | Price | Discount | VAT│
155│ Serial Panel (SC8) | Inline Edit | Add Row │
156├─────────────────────────────────────────────────┤
157│ 5. TABS (ตามประเภทเอกสาร) │
158│ Payment | Delivery | Reference | Notes | Log │
159├─────────────────────────────────────────────────┤
160│ 6. SUMMARY │
161│ Subtotal | Discount | VAT 7% | Total (THB) │
162│ Deposit Applied | Net Due │
163├─────────────────────────────────────────────────┤
164│ 7. ACTION BAR (ล่าง — sticky) │
165│ ปุ่มตาม Status + Role Permission │
166└─────────────────────────────────────────────────┘
167```
168
169### ActionBar Modes ตาม Status
170
171| Status | ปุ่มที่แสดง |
172|---|---|
173| Draft | Save Draft, Submit for Approval, Delete |
174| Pending Approval | (Maker: รอ) / (Approver: Approve, Reject) |
175| Confirmed | Post, Edit (ถ้า Role อนุญาต), Cancel |
176| Posted | Print, Duplicate, View GL Entries |
177| Cancelled | View Only |
178
179---
180
181## 🏷️ Status System — สีมาตรฐาน (ห้ามใช้สีอื่น)
182
183| Status | สี | Hex | ใช้กับ |
184|---|---|---|---|
185| Draft | Gray | #6B7280 | ทุกเอกสาร |
186| Pending Approval | Orange/Amber | #F59E0B | เอกสารที่ต้องอนุมัติ |
187| Confirmed | Blue | #3B82F6 | อนุมัติแล้ว รอ Post |
188| Posted | Green | #10B981 | Post สู่ BC แล้ว |
189| Cancelled | Red | #EF4444 | ยกเลิก |
190| Scheduled | Purple | #8B5CF6 | งานที่นัดไว้ล่วงหน้า |
191| Live | Bright Green | #22C55E | Promotion ที่ Active |
192| Expired | Brown/Warm Gray | #92400E | Promotion หมดอายุ |
193
194---
195
196## 🔧 Shared Components SC1-SC9 (Full Spec)
197
198### ตาราง Usage Matrix — 130+ Screens (v2.1)
199
200| SC | ชื่อ Component | หน้าจอที่ใช้หลัก |
201|---|---|---|
202| SC1 | SharedCustomerSearch | บิลขาย, ใบจอง, ใบเสนอราคา, ใบมัดจำ, ใบลดหนี้, Service Intake, รับเรื่องเคลม, อนุมัติวงเงิน, ประกบบิล AR |
203| SC2 | SharedItemSearch | บิลขาย, ใบจอง, ใบเสนอราคา, PR, PO, RFQ, โอนสินค้า, GRN, เบิกอะไหล่, Stock Count |
204| SC3 | SharedPaymentPanel | บิลขาย, ใบมัดจำ, ใบจอง, ใบลดหนี้ขาย, ตัดชำระเจ้าหนี้, PO-8 Deposit Bill |
205| SC4 | SharedDeliveryPanel | บิลขาย (③ จัดส่ง/ติดตั้ง), ใบจอง, Transfer Order (ปลายทาง) |
206| SC5 | SharedDocRefPanel | ทุกเอกสารที่มี Reference: บิลขาย←Quote/จอง/มัดจำ, PO←PR/RFQ, Service←บิล, GR←PO, PO-8←PO |
207| SC6 | SharedDepositPanel | บิลขาย (Payment Section), ใบจอง |
208| SC7 | SharedTimeline | **ทุกเอกสาร** — Queue/Dashboard, Sales, WH, Purchase, Service, Finance, Claims, FA |
209| SC8 | SharedSerialPanel | GRN, โอนสินค้า, ใส่ Serial หลังขาย, Stock Count, Service รับซ่อม, เบิกอะไหล่, Item Master |
210| SC9 | SharedPromoPrice | ใบเสนอราคา, ใบจอง, บิลขาย (④ โปรฯ Auto-Match), Employee Master (Commission), Sales Price List |
211| **SC10** | **SharedVendorSearch** *(NEW)* | **PR, PO, AP Invoice, PO-7 Accrual, PO-8 Deposit Bill, FI-2 AP Payment, FI-12 WHT** |
212
213---
214
215### SC1 — SharedCustomerSearch
216
217```
218Search Fields (v2 — เพิ่มจากเดิม):
219 รหัสลูกค้า, ชื่อ (TH), นามสกุล (TH), ชื่อ (EN), เบอร์โทร, Email,
220 เลขผู้เสียภาษี, รหัสบัตรประชาชน (ID Card), ที่อยู่ (partial search)
221
222Filter:
223 ประเภทลูกค้า: บุคคลธรรมดา / นิติบุคคล / ราชการ / Walk-in
224 กลุ่มลูกค้า: ค้าปลีก / ค้าส่ง / ดีลเลอร์ / ออนไลน์
225 กลุ่มราคา: A / B / C / VIP (Price List Group)
226 สาขาที่สังกัด: HQ / สาขา 1 / สาขา 2 / ...
227 สถานะ: Active / Blocked / Overdue
228 มียอดค้าง: All / มี AR ค้าง / ไม่มี
229
230Search: Real-time ≥ 2 ตัวอักษร; Keyboard + ID Card Scan (Post GoLive)
231Result: รหัส, ชื่อ-นามสกุล, ประเภท, กลุ่มราคา, วงเงิน, คงเหลือ, เบอร์, สาขา, Overdue Badge
232Auto-fill: Party Section + ดึง Price List/โปร ตามกลุ่มลูกค้า
233Blocked: สถานะ Blocked → Warning + ขออนุมัติก่อนเปิดบิล (ห้ามผ่าน)
234Quick-Create: สร้างลูกค้าใหม่จาก popup (Draft status, รอ KYC ภายหลัง)
235Customer 3 Address: ที่อยู่บัตรปชช / ที่อยู่จัดส่ง / ที่อยู่ออกใบกำกับ
236API: GET /customers?$filter=..., GET /customers/{id}, POST /customers
237```
238
239### SC2 — SharedItemSearch
240
241```
242Search Fields (v2 — เพิ่มจากเดิม):
243 รหัสสินค้า, ชื่อ (TH), ชื่อ (EN), ยี่ห้อ/แบรนด์, รุ่น/Model, Barcode/QR
244
245Filter:
246 หมวดสินค้า: แอร์ / พัดลม / เครื่องซักผ้า / ตู้เย็น / TV / เครื่องครัว / อื่นๆ
247 ยี่ห้อ/แบรนด์: Daikin / Mitsubishi / Samsung / LG / Toshiba / ...
248 ช่วงราคา: 0-5K / 5K-15K / 15K-50K / 50K+
249 สถานะ: Active / Discontinued / Pending
250 สต็อก: All / มี Stock > 0 / หมดสต็อก / สต็อกต่ำ (< Min)
251 สาขา/คลัง: เฉพาะคลังที่ระบุ (Stock by Location)
252 Serial Flag: All / มี Serial / ไม่มี Serial
253
254Search: Keyboard + Barcode Scan; แสดงสต๊อก real-time แยกตามคลัง
255Result: รหัส, ชื่อ, หมวด, ยี่ห้อ, รุ่น, UOM, ราคาตามกลุ่มลูกค้า, สต๊อก, สต๊อกจอง, Serial Flag
256Alt Items: แสดงสินค้าทดแทน + Bundle แนะนำเมื่อสต๊อกหมด
257Serial: Serial Flag = true → เปิด SC8 อัตโนมัติใน line
258Inline Edit: แก้ไขข้อมูล line ได้เลย ห้ามใช้ Popup
259Import/Export: Serial No. Import/Export CSV ที่ระดับ Line
260API: GET /items?$expand=itemVariants, GET /items/{id}/stockByLocation
261 GET /priceLists?customerId=&date=
262 GET /itemCategories → ดึงหมวดสินค้า
263```
264
265### SC3 — SharedPaymentPanel
266
267```
268ยอด: ยอดสุทธิ, ยอดมัดจำที่หัก, ยอดคงเหลือ, VAT, ส่วนลดท้ายบิล
269VAT Options: รวม VAT / ไม่รวม VAT / ไม่แสดง VAT (กลมยอด) — เลือกต่อเอกสาร
270วิธีชำระ: เงินสด, โอน, เช็ค, บัตรเครดิต/เดบิต, QR Payment, เครดิต, บางส่วน
271Split: เลือกหลายวิธีต่อบิลได้ (split payment)
272เครดิต: ตรวจวงเงิน real-time → เกิน → Auto trigger Approval Flow
273Status: ยังไม่ชำระ / ชำระบางส่วน / ชำระครบ / เกินกำหนด / รออนุมัติวงเงิน
274
275QR Payment (2 layers) — EMVCo PromptPay via Biller ID (SWT):
276 • ชั้น 1 — Invoice QR : Ref1 = เลขที่บิล, ยอด fix → ลูกค้าจ่ายตรงบิลเดียว
277 • ชั้น 2 — Customer QR : Ref1 = รหัสลูกค้า, ยอด open/ค้างรวม/ระบุ
278 → ส่งลูกค้าทาง LINE, จ่ายได้หลายบิลพร้อมกัน, แยก FI-1Q Apply Queue
279 • เงินเข้า → bank statement → IA-Q sync → URC → FI-1Q Queue → auto-apply
280```
281
282### SC4 — SharedDeliveryPanel
283
284```
285จัดส่ง: ที่อยู่จัดส่ง, ผู้รับ, เบอร์, วันที่-ช่วงเวลา, วิธีจัดส่ง
286ติดตั้ง: ต้องการติดตั้ง (Y/N) → auto-create Service Work Order หลัง Post
287Status: รอจัดส่ง → กำลังจัดส่ง → ส่งแล้ว → ติดตั้งเสร็จ
288QR Track: ลูกค้าดูสถานะผ่าน QR Code บนใบเสร็จ
289```
290
291### SC5 — SharedDocRefPanel
292
293```
294ดึงเอกสาร: แต่ละประเภทกำหนด Source ที่ดึงได้:
295 บิลขาย ← Quote, ใบจอง, มัดจำ
296 PO ← PR, RFQ
297 Service ← บิลขาย (serial ref)
298 GR ← PO
299Partial: ดึงบางส่วนได้; ติดตามยอดที่ดึงไปแล้ว vs. เหลือ
300Cascade: ดึงมา → auto-fill รายการสินค้า + ลูกค้า
301Chain Link: กด PO → เห็น PR ต้นทาง / กด Invoice → เห็น Shipment ปลายทาง
302```
303
304### SC6 — SharedDepositPanel
305
306```
307ค้นหา: เลขมัดจำ / เลขจอง / ลูกค้า — แสดงเฉพาะที่ยังตัดได้
308ตัดมัดจำ: ยอดทั้งหมด, ใช้แล้ว, คงเหลือ, จะตัดในบิลนี้
309หลายใบ: รองรับหลายใบมัดจำต่อบิลเดียว
310Auto: ตัดครบ → สถานะมัดจำ = Fully Applied → บันทึก AR Ledger
311สร้างใหม่: จากใบจองหรือ Stand-alone → auto generate เลขที่, พิมพ์ได้ทันที
312```
313
314### SC7 — SharedTimeline (Audit Log)
315
316```
317Document Chain: แสดง Quote→จอง→มัดจำ→Invoice→Shipment→Payment
318 คลิกเอกสารใดก็ข้ามไปได้
319Reverse Link: บิลขายรู้ว่ามี Shipment/Payment ไหนอ้างอิงมา
320Activity Log: ทุก Action อัตโนมัติ (สร้าง/แก้/อนุมัติ/ปฏิเสธ/พิมพ์) — ลบไม่ได้
321Comment: Internal note + mention @พนักงาน → Notification; ไม่แสดงลูกค้า
322PDPA: Phase 1 ต้องมี Audit Log ทุก Access
323```
324
325### SC8 — SharedSerialPanel
326
327```
328กรอก/สแกน: กรอก Manual หรือ Scan Barcode; validate ไม่ซ้ำ real-time
329Bulk: Upload CSV (กรณีจำนวนมาก)
330ประวัติ: กด "ดูประวัติ" → lifecycle ทั้งหมด: รับเข้า→ขาย→ซ่อม→เคลม
331Status: ว่าง / ใช้งานอยู่ / ซ่อม / เคลม
332Serial Policy: ไม่บังคับตอนขาย — บังคับตอนคลัง "เบิก" เท่านั้น
333```
334
335### SC9 — SharedPromoPrice
336
337```
338ราคา: ดึง Price List ตามกลุ่มลูกค้า + ช่องทาง + วันที่บิล; ใช้ Priority สูงสุด
339โปร Badge: แสดง badge บน line item; คลิกดูเงื่อนไขได้
340ของแถม: auto-add Free Item Line (ราคา 0, flag Gift) เมื่อครบเงื่อนไข
341Price Alert: แจ้งเมื่อราคาจะเปลี่ยนภายใน N วัน
342Override: แก้ราคาต่ำกว่า Floor → Auto Approval Flow + บันทึก Override Log
343Accrual: ขายสินค้าที่มี Vendor Sale-In → บันทึก Accrual Entry อัตโนมัติ
344Commission: บันทึก PC Commission record แนบกับบิล
345Priority: Contract Price > Step Discount > Bundle > Trade-in > Normal
346Block [T6]: คำนวณที่ Portal หรือ BC? — ยังไม่ตัดสินใจ
347```
348
349### SC10 — SharedVendorSearch (NEW)
350
351```
352Search Fields:
353 รหัส Vendor, ชื่อบริษัท (TH/EN), เบอร์โทร, Email, เลขผู้เสียภาษี,
354 ชื่อผู้ติดต่อ (Contact Person)
355
356Filter:
357 ประเภท Vendor: สินค้า / บริการ / ค่าเช่า / ค่าขนส่ง / อื่นๆ
358 WHT Category: 1% / 2% / 3% / 5% / ไม่หัก
359 สถานะ: Approved / Pending Approval / Blocked
360 Credit Term: Cash / 30 วัน / 60 วัน / 90 วัน
361 มี AP ค้าง: All / มี AP ค้าง / ไม่มี
362
363Search: Real-time ≥ 2 ตัวอักษร
364Result: รหัส, ชื่อ, ประเภท, WHT Category, Credit Term, AP Outstanding, สถานะ
365Auto-fill: Vendor Section + ดึง WHT Rate + Credit Term + Price List
366Blocked: Vendor ยังไม่ Approve → ห้ามสร้าง PO (ต้องผ่าน PO-3 Onboarding ก่อน)
367
368ใช้ใน:
369 PO-1 (PR), PO-4 (PO), PO-6 (AP Invoice), PO-7 (Accrual), PO-8 (Deposit Bill)
370 FI-2 (AP Payment), FI-12 (WHT)
371
372API: GET /vendors?$filter=..., GET /vendors/{id}, POST /vendors
373 GET /vendorLedgerEntries?vendorId=&open=true → AP ค้าง
374```
375
376---
377
378## 🔌 BC365 API — Endpoints หลัก
379
380### Pattern มาตรฐาน
381
382```
383Base: https://{tenant}.api.businesscentral.dynamics.com/v2.0/{tenant}/Production/api/v2.0/
384Auth: OAuth2 Client Credentials (Service Account)
385Retry: Exponential Backoff (3 ครั้ง), Queue เมื่อ Timeout
386```
387
388### Sales Module
389
390```
391GET /salesQuotes → SO Draft list
392POST /salesOrders → สร้าง SO
393PATCH /salesOrders/{id} → แก้ไข SO (ก่อน Post)
394POST /salesOrders/{id}/post → Post SO → Invoice + Stock
395POST /salesCreditMemos → CN
396POST /salesOrders/{id}/shipmentLines → Delivery
397```
398
399### Warehouse
400
401```
402GET /locations → คลังทั้งหมด
403GET /items/{id}/stockByLocation
404POST /purchaseReceipts → GRN
405POST /inventoryAdjustments → Adjust
406POST /itemTransferOrders → Transfer
407GET /serialNumbers?itemId= → Serial Lookup
408```
409
410### Purchase
411
412```
413POST /purchaseOrders → PO
414POST /purchaseOrders/{id}/receive → GRN (ตัด Stock)
415POST /purchaseInvoices/{id}/post → AP + GL
416POST /purchaseCreditMemos → Vendor Return/CN
417```
418
419### Finance
420
421```
422POST /cashReceiptJournals → AR Receive
423POST /vendorPaymentJournals → AP Payment
424POST /generalJournals → JV / Accrual
425POST /bankAccounts/{id}/reconcile → Bank Recon
426POST /accountingPeriods/{id}/close → ปิดงวด
427```
428
429### Service (BC Extension Required)
430
431```
432GET /serviceOrders → [?] Standard BC มีหรือต้อง Custom?
433POST /serviceOrders → สร้าง Job Card
434PATCH /serviceOrders/{id} → อัปเดตสถานะ
435POST /serviceOrders/{id}/complete → ปิดงาน → Auto AP ช่าง
436```
437
438---
439
440## 👥 RBAC — Permission Matrix (28 Functions × 9 Roles)
441
442| ฟังก์ชัน | Super Admin | บัญชี | จัดซื้อ | ฝ่ายขาย | คลัง | ศูนย์บริการ | ช่าง | ฝ่ายเคลม | ผู้บริหาร |
443|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
444| จัดการ User/Role | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
445| เปิดบิลขาย | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | 🔍 |
446| ใบจอง / ใบเสนอราคา | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | 🔍 |
447| สร้างลูกค้า | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | 🔍 |
448| รับสินค้าเข้า (GRN) | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | 🔍 |
449| โอนสินค้าคลัง | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | 🔍 |
450| สร้าง Vendor | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔍 |
451| เสนอราคา Supplier (RFQ) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔍 |
452| ตั้งหนี้สินค้า (AP Invoice) | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔍 |
453| ตั้งหนี้โปร/รีเบต | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔍 |
454| อนุมัติ PO | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔍 |
455| รับสินค้าซ่อม | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | 🔍 |
456| นัดหมายคิวช่าง | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | 🔍 |
457| ช่างรับงาน (Mobile) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
458| เบิกอะไหล่ซ่อม | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | 🔍 |
459| เบิกค่าแรงช่าง | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | 🔍 |
460| รับเรื่องเคลม | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | 🔍 |
461| ส่งเคลม Supplier | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | 🔍 |
462| ติดตามสถานะเคลม | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | 🔍 |
463| ใบตั้งหนี้ / ใบจ่ายเงิน | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔍 |
464| ตัดหนี้เจ้าหนี้ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔍 |
465| ประกบบิลลูกหนี้ (AR) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔍 |
466| วงเงินลูกค้า / Credit | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔍 |
467| คืนเงินลูกค้า (CN) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔍 |
468| บันทึกค่าใช้จ่าย | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔍 |
469| กระทบยอดธนาคาร | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔍 |
470| Field-Level Permission | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
471| ดูรายงานรวม | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
472
473> 🔍 = View Only (ผู้บริหาร) | ✅ = Full Access | ❌ = No Access
474
475**กฎ RBAC ที่ห้ามละเมิด:**
476- Maker ≠ Checker: ห้าม Approve งานตัวเอง (บังคับทุกโมดูลที่มี Approval)
477- Field-Level: ราคาต้นทุน, วงเงิน Credit → ซ่อนตาม Role
478- Route Guard: ป้องกัน URL ที่ไม่มีสิทธิ์
479- Approval Matrix: กำหนดใน System Config ว่า Tier ไหน → Approver คนไหน
480
481---
482
483## 📅 Phase Plan
484
485### Phase 1 — Run ASAP
486**โมดูล:** Sales, Warehouse, Purchase Basic, Price List P1, Finance Basic (AR/AP/JV), Master Data, System Config
487**เงื่อนไข Go-Live:** Master Data พร้อม + BC Sandbox ผ่าน
488**Key Deliverables:** SC1-SC9 ครบ → Sales SO/Invoice → WH GRN/Issue → PO/GRN/AP → AR/AP Basic
489
490### Phase 2 — Scale & Control
491**โมดูล:** Step Discount/Bundle, Credit Memo, Service+Delivery (4.x), Claims, Finance 2.5 Expense Voucher, Finance 2.6 Credit Control, Bank Recon, Integration/API Monitor, e-Tax Invoice, Mobile App Group A (ช่าง)
492**เงื่อนไข:** Phase 1 UAT ผ่าน
493**Key Deliverables:**
494- Service Queue/JobCard + Delivery & Installation sub-module (4.1-4.3)
495- Expense & Payment Voucher (จ่ายค่าใช้จ่ายทั่วไป)
496- Credit Control Dashboard (ติดตามวงเงิน + Alert ลูกหนี้เกิน)
497- Integration API Monitor (สถานะ Sync BC / Error Log)
498- e-Tax XML + RD API, Mobile Service Tech
499
500### Phase 3 — Automate
501**โมดูล:** Finance Full (Period Close / Tax Report), Promotion Full, Accrual Auto, Real-time, Service Notification+Performance, Marketplace (Shopee/Lazada)
502**เงื่อนไข:** Phase 2 Stable
503**Key Deliverables:** Marketplace Tab ออนไลน์ใน Sales, Order Inbox, Stock Sync, Technician Performance Dashboard
504
505### Phase 4 — Optimize
506**โมดูล:** Trade-in, Promo Simulator, Advanced SLA, Mobile App Group B (ผู้บริหาร), Marketplace Dashboard, BI/KPI Full, PDPA
507**เงื่อนไข:** Phase 3 Stable
508
509---
510
511## 🇹🇭 Thailand Compliance
512
513### e-Tax Invoice (Phase 2)
514
515| Component | รายละเอียด |
516|---|---|
517| XML Generator | ออก Tax Invoice XML ตาม RD Standard |
518| Digital Signature | Sign ด้วย Certificate ขององค์กร |
519| RD API Connector | ส่ง XML ไป RD Portal + รับผลกลับ |
520| Status Tracker | Pending → Submitted → Accepted / Rejected |
521| WHT Certificate | ภ.ง.ด.3 / 53 — ตาม B10 (Auto/Manual TBD) |
522| e-Filing Dashboard | รายการที่ส่งแล้ว, ยังไม่ส่ง, Rejected |
523
524> ⚠️ [T9] ต้องตรวจก่อนว่า BC365 Standard Thailand Extension ครอบคลุมหรือต้อง Custom
525
526### VAT & WHT
527- VAT 7% บังคับทุกใบกำกับภาษี
528- WHT (ภ.ง.ด.3/53) ตัดเมื่อ AP Payment
529- ทุก Posted Document ต้องมี Tax Invoice No. ที่ถูกต้อง
530
531### PDPA (Phase 4)
532- Consent Record + Withdrawal Flow
533- Data Retention Policy + Auto-Delete Hook
534- Audit Log ทุก Access — SC7 ต้องมีตั้งแต่ Phase 1
535
536---
537
538## 🛒 Marketplace Integration (Phase 3)
539
540### Concept: POS-Style Tab ใน Sales Module
541
542```
543Sales Module
544├── Tab: ขายหน้าร้าน ← Sales Order ปกติ
545└── Tab: ออนไลน์ ← Marketplace Orders (ใหม่ Phase 3)
546 ├── Order Inbox (Shopee + Lazada)
547 ├── SKU Mapping Manager
548 ├── Auto-Create SO in BC
549 ├── Stock Sync (BC → Marketplace)
550 └── Shipping Tracking
551```
552
553### Business Rules
554- คำสั่งซื้อ Marketplace → Auto-create SO ใน BC (ยืนยันหรือ Auto)
555- Stock Sync: BC คือ Source of Truth → Push ไป Marketplace [T12]
556- Return จาก Marketplace → Credit Memo Flow ปกติ
557
558> ⚠️ [T10] Shopee/Lazada Partner Account และ Production Key พร้อมหรือยัง?
559
560---
561
562## 📱 Mobile App (2 Groups)
563
564### Group A — Service Tech (Phase 2, เร่งด่วน)
565- รับ Job Card / นัดหมาย
566- บันทึกผลงาน + รูปถ่าย Before/After
567- Check-in/out ที่หน้างาน
568- บันทึกอะไหล่ที่ใช้
569- [T1] Native / PWA / Responsive Web?
570- [T2] Offline Mode?
571
572### Group B — Manager/Sales (Phase 4)
573- Sales Dashboard + KPI ส่วนตัว
574- อนุมัติ Quotation / SO จากมือถือ
575- ดูสต็อก Real-time
576- Service Performance Report
577
578---
579
580## ⚠️ Open Questions — ห้าม Implement จนกว่าจะได้คำตอบ
581
582### Technical
583| # | คำถาม | Phase |
584|---|---|---|
585| T1 | Mobile: Native / PWA / Responsive Web? | P2 |
586| T2 | Offline Mode ช่าง: Sync ยังไง? | P2 |
587| T5 | BC Extension: Standard หรือ Custom AL? | P1 |
588| T6 | Promotion Engine: คำนวณที่ Portal หรือ BC? | P1 |
589| T9 | e-Tax: BC365 Standard Thailand Extension ครอบคลุมไหม? | P2 |
590| T10 | Marketplace: Partner Account พร้อมหรือยัง? | P3 |
591| T11 | Customer Notification: SMS หรือ LINE Notify? | P3 |
592| T12 | Stock Sync Marketplace: Real-time หรือ Batch? | P3 |
593
594### Business Rules
595| # | คำถาม | Phase |
596|---|---|---|
597| ~~B1~~ | ~~Promotion Conflict Priority~~ ✅ **RESOLVED** — Priority Number + Stack ≤ 2 ชั้น (ดู PM_promotion.md) | P1 |
598| ~~B5~~ | ~~Credit Approval Tier~~ ✅ **RESOLVED** — ทั้งฝั่งขาย (SL-F1) + ฝั่งซื้อ (PO) ตั้งใน CF-7 | P1 |
599| B6 | Deposit GL Account | P1 |
600| B9 | SLA กี่ชั่วโมงต่อ Doc Type? | P2 |
601| ~~B10~~ | ~~WHT Certificate: Auto หรือ Manual?~~ ✅ **RESOLVED** — Auto จาก FI-2 AP Payment → WHT List (FI-12) → Release → Print | P1 |
602| C1 | ⚠️ COA Mapping ระหว่าง 4 บริษัท (SWT/SWE/VMN/WPS) → ใช้ COA เดียวกันหรือต่างกัน? | P3 |
603| C2 | ⚠️ Intercompany Transaction Threshold → จำนวนเท่าไหร่ถึง Auto-detect? | P3 |
604
605---
606
607## 🤖 วิธีออกแบบ Module ใหม่ (Template)
608
609เมื่อขอออกแบบ Module หรือหน้าจอใหม่ ให้ตอบครอบคลุม:
610
611### 1. Module Brief
612```
613Module: [ชื่อ]
614Phase: [P1/P2/P3/P4]
615BC Entity: [API Endpoint ที่เชื่อม]
616Trigger: [อะไร trigger หน้าจอนี้]
617Output: [เอกสารหรือ Action ที่เกิดขึ้น]
618```
619
620### 2. Screen List
621```
622[Module Code]-1: [ชื่อหน้า List/Queue]
623[Module Code]-2: [ชื่อหน้า Form/Detail]
624[Module Code]-3: [หน้า Approval/Review ถ้ามี]
625```
626
627### 3. ERP Transaction Form Breakdown
628ระบุ Field ทั้ง 7 Sections ว่ามีอะไรบ้าง + BC Field Mapping
629
630### 4. Status Flow
631```
632Draft → Submitted → Approved → Posted/Confirmed → (Cancelled)
633```
634
635### 5. Shared Components ที่ใช้
636ระบุ SC ที่ต้องใช้พร้อม Config
637
638### 6. RBAC
639ระบุ Role + Permission (Create/Edit/Approve/Post/Cancel)
640
641### 7. BC API Calls
642ระบุ GET/POST/PATCH ที่ต้องใช้
643
644### 8. Open Questions ที่ Block
645ระบุ Question Number จาก Section Open Questions
646
647---
648
649## 📂 Module Spec Files (รายละเอียดทีละเมนู)
650
651| ไฟล์ | Module | เมนูที่ครอบคลุม |
652|---|---|---|
653| `modules/SL_sales.md` | งานขาย (SL) | Quotation, Reservation, Deposit, **Invoice (5 ส่วน: สินค้า/ชำระ/จัดส่ง/โปรฯ/ใบกำกับ)**, Credit Memo, Credit Approval |
654| `modules/PO_purchase.md` | งานจัดซื้อ (PO) | PR, RFQ, Vendor Onboarding, PO, GRN, AP Invoice, **Sale-In Accrual (PO-7)**, **PO บิลฝาก (PO-8)** |
655| `modules/WH_warehouse.md` | งานคลัง (WH) | Queue, GRN, Transfer, Sales Issue, Stock Count, Stock Card, **Non-Move Report (WH-NM)** |
656| `modules/FI_finance.md` | งานการเงิน (FI) | AR Receipt, AP Payment, Bank Recon, JV, Expense Voucher (P2), Credit Control (P2), Period Close (P3), **Accrual Monitor (FI-8)**, **Fixed Asset (FI-9/10/11)**, **WHT (FI-12)**, **Dual-Book (FI-13)** |
657| `modules/SV_service.md` | งานบริการ + เคลม (SV+CL) | Service Intake, Job Card, Parts, QA Close, Delivery & Install, Claims 3 ประเภท |
658| `modules/PM_promotion.md` | โปรโมชั่น (PM) | Price List, Promotion Scheme, Bundle/Step Discount, Quota, Simulator *(PM-6 Accrual ย้ายไป PO-7)* |
659| `modules/MD_master.md` | ข้อมูลหลัก (MD) | Item, Customer, Vendor, Employee (NEW), Branch & Warehouse (NEW), Price List |
660| `modules/CF_config.md` | ตั้งค่าระบบ (CF) | Tax, Number Series, RBAC, Posting Groups, Bin Policy, Technician Template, Approval Matrix |
661| `modules/IA_integration.md` | Integration & API (IA) | BC Sync Monitor, Error Log, Webhook, Marketplace Connector (P3), Entity Explorer (P3) |
662
663> อ่าน Module Spec ก่อนออกแบบหน้าจอใด ๆ ในโมดูลนั้น
664
665---
666
667## 📁 Reference Files ใน Workspace
668
669| ไฟล์ | ใช้เพื่อ |
670|---|---|
671| `research.md` | ภาพรวมระบบ, Open Questions, Module Spec ครบ |
672| `plan.md` | Task Breakdown ทุก Phase, สถานะ Task |
673| `ui_design_pattern_guideline.md` | Design Rules, ERP Form 7 Sections, SC Spec, RBAC |
674| `README.md` | Project Overview, 68 Screens, Phase Overview |
675| `uxui_field_knowledge.docx` | Field Spec ทีละหน้าจอ |
676| `1_component_fw_clean.docx` | Technical Spec SC1-SC9 |
677| `sangwijit_reference_rev2.docx` | Business Reference + Gap Analysis |
678| `dd_sales_phase1.docx` | Data Dictionary Phase 1 (Sales) |
679| `dd_wh_pur_phase2.docx` | Data Dictionary Phase 2 (WH + Purchase) |
680| `dd_finance_phase3.docx` | Data Dictionary Phase 3 (Finance) |
681| `dd_svc_promo_master_phase4.docx` | Data Dictionary Phase 4 (Service/Claims/Promo/Master) |
682| `sales-invoice-compact.html` | HTML Prototype — ตัวอย่าง UAT ชุดแรก |
683
684### ลำดับการอ่านเอกสาร (Document Reading Order)
6851. `research.md` — เริ่มที่นี่เสมอ
6862. `plan.md` — Task Status + Blocked Items
6873. `ui_design_pattern_guideline.md` — Design Rules
6884. `uxui_field_knowledge.docx` — Field Detail ทีละหน้าจอ
6895. `1_component_fw_clean.docx` — SC Technical Spec
6906. Data Dictionary ตาม Phase
6917. Workflow PDF — BC365 Mapping จริง
692
693---
694
695## 🔄 Status Transition Diagrams (ทุก Module)
696
697### Sales / Invoice / Promotion / Claims
698```
699Draft → รออนุมัติวงเงิน → อนุมัติ → ออกใบกำกับแล้ว → ชำระเงินแล้ว → ปิดงาน
700 ↓
701 ปฏิเสธ → Draft (แก้ไข/ส่งใหม่)
702```
703
704### Purchasing (PR → PO → GRN → AP)
705```
706Draft → รออนุมัติ → อนุมัติแล้ว → PO Open → สินค้าเข้าแล้ว → รอวางบิล → ปิดรายการ
707 ↓
708 Rejected → Draft (แก้ไข/ส่งใหม่)
709```
710
711### Warehouse
712```
713Draft → รอตรวจสอบ → อนุมัติ → สินค้าเข้า/ออกแล้ว → ปิดงาน
714```
715
716### Service / ศูนย์บริการ
717```
718Draft → นัดหมายแล้ว → รอช่าง → ดำเนินงาน → ส่งงาน/รออนุมัติ → ปิดงาน
719 ↓ (ช่างนอก)
720 ตั้งหนี้ช่าง
721```
722
723### Promotion / Accrual Claim (Supplier)
724```
725Draft → รออนุมัติ → Active → Claim → รอเงินเข้า → รับเงินแล้ว
726 ↓
727 Expired
728 ↓
729 Rejected → Draft
730```
731
732### AR / Credit
733```
734Draft → รออนุมัติ → อนุมัติ → วางบิล → ค้างชำระ → รับชำระแล้ว → ปิดบัญชี
735 ↓
736 ปฏิเสธ → Draft
737```
738
739### Finance / Expense / AP / Tax
740```
741Draft → รออนุมัติ → อนุมัติ → จ่ายแล้ว → ปิดงาน
742 ↓
743 ปฏิเสธ → Draft
744```
745
746### Online / Marketplace
747```
748Draft → รอตรวจสอบ → อนุมัติ → จัดส่งแล้ว → ปิดงาน
749```
750
751---
752
753## 🎨 UX Rules — Confirmed Patterns (Oct 2025)
754
755กฎ UX ที่ confirm แล้ว ห้ามละเมิด:
756
757| # | กฎ | รายละเอียด |
758|---|---|---|
759| UX1 | **Inline Edit** | แก้ไข Line Items ได้เลยที่บรรทัด — ห้ามใช้ Popup |
760| UX2 | **Barcode Scan** | ทุกช่องที่เหมาะสม (Item, Serial) รองรับ Barcode Scan |
761| UX3 | **Serial Import/Export** | ที่ Line Level — ปุ่ม Import/Export CSV |
762| UX4 | **Document Chain** | กดจาก PO → เห็น PR ต้นทาง ย้อนกลับได้ (SC5) |
763| UX5 | **Show More/Less** | ซ่อน Field ที่ไม่ใช้บ่อย — ปุ่มขยาย/ย่อ |
764| UX6 | **3 Address Types** | ลูกค้ามีที่อยู่ 3 แบบ: บัตรปชช / จัดส่ง / ใบกำกับภาษี |
765| UX7 | **VAT Options** | ต่อเอกสาร: รวม VAT / ไม่รวม VAT / ไม่แสดง VAT |
766| UX8 | **Bundle Item** | ต้องมีหน้าจอรองรับสินค้าชุด |
767| UX9 | **QR Status Track** | ลูกค้าดูสถานะสินค้า/จัดส่งผ่าน QR Code บนใบเสร็จ |
768| UX10 | **QR Payment (2 layers)** | (1) Invoice QR (Ref1=INV, ยอด fix) บน SL-3/SL-4 · (2) Customer QR (Ref1=CustCode, ยอด open) บนหน้าค้นลูกค้า + MD-2 → ส่ง LINE → FI-1Q Apply Queue |
769| — | ID Card Scan | Post Go-Live |
770| — | Document Flow Visual | Post Go-Live |
771| — | Web Filter ละเอียด | ใช้ Power BI แทน |
772
773---
774
775## 🗄️ BC365 API — Table Numbers Reference
776
777| Module | Endpoint | BC Table |
778|---|---|---|
779| Sales Invoice | POST /salesOrders | Sales Header (36), Sales Line (37) |
780| Sales Quote / Reservation | POST /salesQuotes | Sales Quote Header (6660), Sales Quote Line (6661) |
781| Sales Prepayment (Deposit) | Custom API | Sales Prepayment Header (Custom) |
782| Customer Create | POST /customers | Customer (18) |
783| WH Transfer Order | POST /transferOrders | Transfer Header (5740), Transfer Line (5741) |
784| Serial Entry | PATCH /itemLedgerEntries | Item Ledger Entry (32) |
785| Vendor Create | POST /vendors | Vendor (23) |
786| Purchase Order | POST /purchaseOrders | Purchase Header (38), Purchase Line (39) |
787| Item Approve | POST /items | Item (27) |
788| Service Receive | POST /serviceOrders | Service Header (5900), Service Line (5901) |
789| Parts Requisition | POST /serviceItemComponents | Service Item Components (5943) |
790| Claim | Custom API | Claim Custom Table |
791| AP Invoice | POST /purchaseInvoices | Purchase Invoice Header (122), Purchase Invoice Line (123) |
792| Payment Journal | POST /paymentJournals | Gen. Journal Line (81) |
793| AR Match | POST /salesInvoices | Sales Invoice Header (112), Sales Invoice Line (113) |
794| Credit Limit | PATCH /customers | Customer (18) — CreditLimit field |
795| Sales Credit Memo | POST /creditMemos | Sales Credit Memo Header (114) |
796
797---
798
799## 🚚 Service Module — Delivery & Installation Sub-module (Phase 2)
800
801### Sub-module 4.x — บริการจัดส่งและติดตั้ง
802
803| หน้าจอ | รหัส | รายละเอียด |
804|---|---|---|
805| Delivery Queue | SV-4.1 | คิวงานจัดส่ง/ติดตั้ง แสดงตาม Branch + วันที่ + สถานะ |
806| Delivery Job Card | SV-4.2 | Form บันทึกงานจัดส่ง/ติดตั้ง (Serial, Address, Technician) |
807| Delivery Completion | SV-4.3 | ปิดงาน: รูปถ่าย Before/After, ลูกค้าเซ็นรับ, Rating |
808
809**Business Rules:**
810- ทริก: Sales Invoice ที่มี Delivery Flag = true → สร้าง Delivery Job อัตโนมัติ
811- Serial ต้องบันทึกก่อนปิดงาน (SC8)
812- Address ใช้ SC1 → 3 Address Types (ที่อยู่จัดส่ง)
813- ช่างใช้ Mobile App Group A เพื่อ Check-in / ถ่ายรูป
814- Status Flow: `ใบแจ้งงาน → นัดหมาย → จัดส่ง → ติดตั้งสำเร็จ → ปิดงาน`
815
816---
817
818## 💰 Finance Module — ส่วนที่เพิ่มใหม่ (Phase 2)
819
820### Finance 2.5 — Expense & Payment Voucher
821
822```
823วัตถุประสงค์: บันทึกค่าใช้จ่ายทั่วไป (ที่ไม่ผ่าน AP/PO) และออก Payment Voucher
824
825หน้าจอ:
826- Expense List: รายการค่าใช้จ่าย + สถานะ
827- Expense Form: เจ้าหนี้ / ประเภทค่าใช้จ่าย / GL Account / Amount
828- Payment Voucher: เลขที่ใบสำคัญ / วันที่จ่าย / วิธีชำระ (เช็ค/โอน)
829
830Status Flow: Draft → รออนุมัติ → อนุมัติ → จ่ายแล้ว → ปิดงาน
831
832BC API: POST /paymentJournals, POST /generalLedgerEntries
833RBAC: Accountant (Create), Finance Manager (Approve+Post)
834```
835
836### Finance 2.6 — Credit Control Dashboard
837
838```
839วัตถุประสงค์: ติดตามลูกหนี้ที่เกินวงเงินหรือเกินกำหนดชำระ
840
841หน้าจอ:
842- Credit Control List: ลูกหนี้ทั้งหมด + ยอดค้าง + เกินกำหนดกี่วัน + Alert
843- Customer Credit Profile: ประวัติชำระ, วงเงิน, เอกสารค้าง
844- Alert Actions: ปล่อยให้ขายต่อ / Hold / ส่ง Notice
845
846Business Rules:
847- ถ้า Outstanding > Credit Limit → ขึ้น Alert สีแดงทุก Module
848- ถ้า Overdue > 30 วัน → Email/LINE Notify อัตโนมัติ (B5)
849- SC1 ต้องแสดง Credit Status ก่อน User เปิดบิลใหม่
850
851BC API: GET /customerLedgerEntries?customerId=, PATCH /customers (credit fields)
852```
853
854---
855
856## 🔌 Integration & API Module (Phase 2+3) — Module #8
857
858### วัตถุประสงค์
859ศูนย์กลางติดตามการเชื่อมต่อระหว่าง Portal ↔ BC365 ↔ ระบบภายนอก
860
861### หน้าจอหลัก
862
863| หน้าจอ | Phase | รายละเอียด |
864|---|---|---|
865| API Sync Monitor | P2 | แสดงสถานะการ Sync แต่ละ Module: ล่าสุดเมื่อ, Success/Fail Count |
866| Error Log | P2 | รายการ API Error + Response Code + Retry Button |
867| Webhook Config | P2 | กำหนด Webhook URL ที่รับ Event จาก BC (Post, Approve, etc.) |
868| Marketplace Connector | P3 | ตั้งค่า Shopee/Lazada API Key, Sync Status |
869| BC Entity Explorer | P3 | ดู BC Entity ที่ Portal ใช้ + Field Mapping Summary |
870
871### Business Rules
872- ทุก API Call ต้องมี Retry (3 ครั้ง) ก่อน Error Log
873- Error ร้ายแรง → Alert Admin ผ่าน LINE Notify
874- Log เก็บ 90 วัน (PDPA)
875- Admin Only — ซ่อน Module นี้จาก Non-Admin Role
876
877---
878
879## 📂 Master Data vs System Config — แนวทางออกแบบ
880
881### Master Data Module (MD) — ข้อมูลอ้างอิง
882**ใครสร้าง:** User ทั่วไปที่มีสิทธิ์ (Sales Coordinator, Admin)
883**ลักษณะ:** เปลี่ยนบ่อย ตามธุรกิจ
884
885| หน้าจอ | รายละเอียด |
886|---|---|
887| Item Master | สินค้า: รหัส, ชื่อ TH/EN, หมวด, UOM, Serial Flag, ราคาต้นทุน |
888| Customer Master | ลูกค้า: ข้อมูล KYC, กลุ่มราคา, วงเงิน, 3 Address |
889| Vendor Master | ผู้จัดจำหน่าย: ข้อมูล + เงื่อนไขการค้า |
890| Employee Master (ใหม่) | พนักงาน: รหัส, ชื่อ, ตำแหน่ง, Branch, Commission Rate |
891| Branch & WH Master (ใหม่) | สาขา: ที่อยู่, Warehouse ที่สังกัด, Contact, Manager |
892| Price List | ราคาตามกลุ่มลูกค้า / ช่วงเวลา |
893
894### System Config Module (CF) — ตั้งค่าระบบ
895**ใครสร้าง:** System Admin เท่านั้น
896**ลักษณะ:** เปลี่ยนน้อย เป็น Base Setting ของระบบ
897
898| หน้าจอ | รายละเอียด |
899|---|---|
900| Tax Setup | VAT Code, WHT Category (ภ.ง.ด.3/53) |
901| Number Series | เลขที่เอกสารแต่ละประเภท (SO, PO, SI, etc.) |
902| Item Config | Default Posting Group, Location Policy |
903| Customer/Vendor Config | Credit Term Template, Payment Method Default |
904| WH Bin Policy | กฎการจัดวางสินค้าในคลัง |
905| Technician Template | Template การคิดค่าแรงช่าง |
906| User & Role | RBAC Matrix, Permission Assignment |
907
908---
909
910## 🔨 Development Checklist (ก่อนเริ่ม Implement ทุกหน้าจอ)
911
912```
913[ ] ⚠️ ตรวจ folder ว่ามีไฟล์ซ้ำไหม → ถ้ามี ต้องถามก่อนเสมอ
914 (ดูตาราง "ไฟล์ซ้ำที่ตัดสินใจแล้ว" ใน Rule 2 เพื่อเทียบว่าเคยตัดสินใจแล้วหรือยัง)
915
916[ ] 📄 อ่าน Flowchart ใน Flow Design/ ของ Module นั้นก่อน
917 → ดู Status Flow, BC Entity, Document Format
918
919[ ] อ่าน research.md + plan.md → ตรวจ Open Questions ที่เกี่ยวข้อง
920 ⛔ ห้าม Implement ส่วนที่มี [?] จนกว่าจะตัดสินใจ
921
922[ ] ดู Data Dictionary (dd_*.docx) — Field ครบหรือยัง?
923
924[ ] ตรวจ Component Usage Matrix — SC ที่ยังไม่มีต้องพัฒนาก่อน Page
925
926[ ] ยืนยัน RBAC: Role, Field Permission, ปุ่ม Disable
927
928[ ] พัฒนาตาม ERP Form 7 Sections — ห้ามเปลี่ยนลำดับ
929
930[ ] ใช้ StatusBadge สีตาม Standard — ห้ามใช้สีอื่น
931
932[ ] ทุก Label มีทั้งไทยและอังกฤษ
933
934[ ] Unit Test Coverage > 80%
935
936[ ] TypeScript Strict + ESLint Airbnb + Prettier ก่อน PR
937```
938
939---
940
941*Sangwijit Group © 2024–2026 | Proprietary — ห้ามเผยแพร่ภายนอก*
942*Skill Version: 1.0 | เมษายน 2026*