เคสที่ 20 — AR: SO 2 หน่วย Product A → รับมัดจำ 100% → DO (1 A + 1 B ทดแทน) → ใบกำกับภาษี PAID
ตัวเลข: SO 214,000 (200,000 + VAT 14,000) มัดจำ 100% 214,000
สถานการณ์: ลูกค้าสั่ง Product A 2 ชิ้น โอนเงิน 100% พร้อมรับใบกำกับภาษีของเงินมัดจำ ตอน picking พบว่า Product A มีเหลือแค่ 1 ชิ้น → ทดแทนด้วย Product B (ราคาเท่ากัน) 1 ชิ้น ลูกค้ายอมรับ
Flow
ขั้นตอนที่เก็บมา
ทำไมใบกำกับภาษีไม่มี Output VAT
VAT 14,000 ได้ออกไว้บนใบกำกับภาษีของเงินมัดจำตอนรับเงินแล้ว — ระบบใช้กลไก totalAlreadyRealisedVAT ใน invoice_service.go ลบส่วน Output VAT บนใบกำกับภาษีหลักให้เหลือศูนย์ ป้องกันการบันทึก VAT ซ้ำ ใบกำกับภาษีตัวที่ออกหลัง DO จึงทำหน้าที่ รับรู้รายได้ เท่านั้น (Dr Customer Advances / Cr Revenue)
การทดแทนสินค้า
เนื่องจาก DO ผูกกับ SO ผ่าน source_so_id แต่บรรทัด DO ลิงก์ผลิตภัณฑ์เดี่ยวๆ ระบบยอมให้ DO และใบกำกับภาษีมีบรรทัดที่ ผลิตภัณฑ์ต่างจาก SO ได้ — เป็นการรองรับ short-pick + substitute โดยไม่ต้องสร้าง CN/รีเฟิร์น ใบกำกับภาษีที่ออกจะแสดงชื่อสินค้าจริงตามที่ส่งมอบ (1 A + 1 B)
สถานะสุดท้าย
| บัญชี | การเปลี่ยนแปลงสุทธิ |
|---|---|
| ธนาคาร | +214,000 |
| รายได้ | +200,000 |
| Output VAT | +14,000 (จากใบกำกับภาษีของเงินมัดจำ) |
| COGS | +150,000 (จาก DO 2 ชิ้น × ต้นทุน 75,000) |
| สินค้าคงคลัง (A + B) | −150,000 |
| Customer Advances, AR, DO/Invoice clearing | 0 |
ถ้าลูกค้าไม่รับทดแทน
ถ้าลูกค้าต้องการเงินคืนสำหรับชิ้นที่ขาด ต้องผ่านขั้นตอน:
- DO ลด qty เหลือ 1 ชิ้น (ขายจริงเฉพาะที่ส่งได้)
- ใบกำกับภาษี 107,000 หักมัดจำเพียงครึ่ง — เหลือมัดจำ 107,000 ค้าง
- ออกใบลดหนี้ (CN) เพื่อนำมัดจำคงเหลือกลับคืนลูกค้า (เคสที่ 7 เป็นแม่แบบ)
- REFUND_TO_CUSTOMER receipt คืนเงิน 107,000