เคสที่ 14 — AR: SO บริการ → รับมัดจำ 50% (§78 ใบกำกับภาษีของเงินมัดจำ) → ใบกำกับภาษีหลัก → รับเงินส่วนเหลือ
ตัวเลข: บริการ 100,000 + VAT 7,000 = 107,000 มัดจำ 50% = 53,500 เงินส่วนเหลือ 53,500
เทียบกับเคสที่ 4 (สินค้า): เหมือนทุกอย่าง ยกเว้นไม่มี DO เพราะเป็นบริการ — ไม่มีสินค้าให้ส่ง รายได้รับรู้ทันทีที่ออกใบกำกับภาษี (บริการ "ส่งมอบ" เมื่อออกใบกำกับภาษี)
ทำไมยังต้องมี SO? SO ใช้บันทึก commitment ระหว่างผู้ขายกับลูกค้า (สัญญา/ขอบเขตงาน) — และเป็นจุดผูกของใบกำกับภาษีของเงินมัดจำตาม §78/1 ทำให้ tax point fires ที่จุดรับเงินมัดจำตรงตามกฎหมาย (จุดรับเงินเป็น early-est event = tax point)
Flow
ขั้นตอนที่เก็บมา
ทำไม §78/1 tax point กระจาย 2 งวด
มาตรา 78/1 กำหนด tax point ของบริการ = เหตุการณ์ใดเกิดก่อนระหว่าง:
- เมื่อได้รับชำระราคา (cash event) — มัดจำ 53,500 ✓ tax point fires วันนี้สำหรับ Output VAT 3,500
- เมื่อได้ออกใบกำกับภาษี — ใบกำกับภาษีหลัก ✓ tax point fires สำหรับ residual VAT 3,500
- เมื่อได้ใช้บริการ — บางครั้งใช้ก่อน
เคสนี้ tax point ตามข้อ 1 (รับเงินมัดจำก่อน) ลงทะเบียน Output VAT 3,500 ใน PP30 ของงวดรับมัดจำ ส่วน residual 3,500 ลงทะเบียนใน PP30 ของงวดออกใบกำกับภาษีหลัก (มีกลไกป้องกัน double-count ผ่าน totalAlreadyRealisedVAT ดู invoice_service.go::buildJELines)
สถานะตลอด lifecycle
| amount_paid | สถานะใบกำกับภาษี |
|---|---|
| 0 (ก่อน Approve) | DRAFT → OPEN ที่ Approve |
| 53,500 (หลังหักมัดจำ) | PARTIALLY_PAID |
| 107,000 | PAID |
สถานะสุดท้าย (หลังรับเงินส่วนเหลือ — ปิดสมบูรณ์)
| บัญชี | การเปลี่ยนแปลงสุทธิ |
|---|---|
| ธนาคาร | +107,000 |
| รายได้ | +100,000 |
| ภาษีขาย (realised) | +7,000 (กระจาย 3.5k มัดจำ + 3.5k สุดท้าย) |
| AR, Customer Advances, Suspense Sales Tax | 0 (ปิดทั้งหมด) |