#accounting#gl#debit-credit#posting
การลงบัญชี Dr/Cr มาตรฐาน (buildStandardGLLines)
เมื่อรูปแบบเอกสารไม่มี template ใน erp_doc_format_gl ระบบจะลง GL ตามชุดบัญชีมาตรฐานที่เขียนไว้ในโค้ด (service.go:1775) แยกตาม trans_flag ทุกบรรทัดใช้ยอดหัวเอกสาร (ก่อน VAT, VAT, ยอดรวม) แล้วต้องสมดุล Dr = Cr
ทำงานอย่างไร
การหาบัญชี (resolveChartAccount service.go:1755)
ลองรหัสตามลำดับ ถ้าไม่มีในผังบัญชีเลยใช้ "9999" (บัญชีพัก) และถูก override ด้วยบัญชีจาก erp_pass_book (ธนาคาร), รายการค่าใช้จ่าย/รายได้อื่น และบัญชีของคู่ค้า
| บทบาท | รหัสที่ลองตามลำดับ |
|---|---|
| เงินสด | 1111, 1110, 1100 |
| ธนาคาร | 1112, 1113, 1111 |
| ลูกหนี้ | 1121... / เจ้าหนี้ 2111... |
| ซื้อ | 5111, 5110, 1151 / ขาย 4111... |
| ภาษีซื้อ | 1154, 1151, 1155, 1190 / ภาษีขาย 2134, 2121, 2135, 2190 |
| เช็คจ่าย | 2112 / เช็ครับ 1122 |
| สินค้า | 1131, 1130, 1141 / ต้นทุน 5110, 5111 |
| รายได้อื่น | 4210... |
| FX ขาดทุน / กำไร | 511030 / 420040 |
Dr/Cr ตาม flag
| flag | Dr | Cr |
|---|---|---|
| 310 ทยอยรับสินค้า | ซื้อ | 212015 เจ้าหนี้ไม่ถึงกำหนดตั้งหนี้ |
| 311 ส่งคืนจากการรับ | 212015 | ซื้อ |
| 315 ตั้งหนี้จากการรับ | 212015 + ภาษีซื้อ | เจ้าหนี้ (หรือเงินที่จ่าย), มัดจำ |
| 12, 14, 18, 316, 260, 264, 87, 89 | ซื้อ + ภาษีซื้อ | เจ้าหนี้ หรือเงินที่จ่าย (inquiry 1/3 = เงินสด), มัดจำ |
| 16, 317, 262, 91 คืน/ลดหนี้ | เจ้าหนี้ หรือเงินที่รับคืน | ซื้อ, ภาษีซื้อ |
| 44, 46, 50, 144, 250, 254 ขาย | ลูกหนี้ หรือเงินที่รับ, มัดจำ | ขาย, ภาษีขาย |
| 48, 252 รับคืน/ลดหนี้ | ขาย, ภาษีขาย | ลูกหนี้ หรือเงินที่จ่ายคืน |
| 99, 101 ลูกหนี้อื่น | ลูกหนี้ หรือเงินสด | รายได้อื่น + ภาษีขาย (103 กลับข้าง) |
| 401 / 402 | ธนาคาร / เงินสด | เงินสด / ธนาคาร (ตามสมุดบัญชี) |
| 56, 68 เบิก/ปรับลด | ต้นทุน 5110 | สินค้า |
| 58, 60, 66 รับคืน/รับ/ปรับเพิ่ม | สินค้า | ต้นทุน |
| 300 เบิกเงินสดย่อย | เงินสดย่อย (1111-01 หรือบัญชีของรายการ) | เงินที่จ่าย |
| 301 คืนเงินสดย่อย | เงินที่รับ | เงินสดย่อย |
| 422 โอนเงิน | สมุดปลายทาง | สมุดต้นทาง |
| 19 / 239 ชำระหนี้ | เจ้าหนี้ / เงินที่รับ | เงินที่จ่าย / ลูกหนี้ (+ ผลต่างอัตราแลกเปลี่ยน) |
| 10, 11, 20, 25, 40, 42, 110, 112 | มัดจำ/ล่วงหน้า vs เงิน (11, 25, 110, 112 แยก VAT) |
เช็ค/บัตรเครดิต ดู วงจรเช็ครับ/เช็คจ่าย บัตรเครดิต และโอนเงินระหว่างบัญชี (Cheque Lifecycle & Bank Transfer), อัตราแลกเปลี่ยน ดู หลายสกุลเงินและกำไรขาดทุนจากอัตราแลกเปลี่ยน (Multi-Currency & FX Gain/Loss), มัดจำ ดู เงินมัดจำและเงินล่วงหน้า (Deposits & Advances)
บรรทัดรายได้/ค่าใช้จ่ายอื่นจากแท็บจ่าย (payOtherGL gl_pay_other.go:17)
cb_trans_detail.doc_type11 = ค่าใช้จ่ายอื่น (Dr), 12 = รายได้อื่น (Cr) ตามบัญชีในerp_expenses_list/erp_income_list- รายการที่ไม่มีบัญชี ใช้รายได้อื่น 4210... หรือค่าใช้จ่าย 5111...
- อ่านไม่ได้ = error (ไม่ข้าม เพราะรายการขาดหายจะยังสมดุลและซ่อนความผิดพลาด)
กฎทั่วไป
- บรรทัดยอดศูนย์ถูกตัดทิ้ง
- ขายเงินสดแยกเงินสด/ธนาคาร/บัตรตามแท็บจ่าย (
payTenders) ดู แท็บรับ/จ่ายเงิน และการชำระหนี้ตามบิล (Payment Tab & Bill Settlement)
จุดเสี่ยง
- Known gap ที่โค้ดระบุเอง (service.go:2150): IA 66 ที่มี qty และ inquiry_type <> 1 เข้าสต็อกด้วย qty x ราคาเฉลี่ย แต่ GL ลง Dr สินค้าด้วยยอดหัวเอกสารที่คีย์ จึงทำให้ GL ไม่เท่ากับมูลค่าสต็อก (comment ระบุว่ารอลุงจืดตัดสิน)
- การขาย 44 ใน standard ไม่มีบรรทัดต้นทุนขาย (COGS)/ลดสินค้า: มีได้เฉพาะใน template (action 101 ต้นทุนขาย / 103 สินค้า) และรูปแบบเริ่มต้นที่ดึงมาขณะ
inventory_gl_post= 0 จะไม่มี 2 action นี้ ดู เครื่องมือลงบัญชีตามรูปแบบ GL (GL Template Engine) (การลงต้นทุนขายของบริษัทจริงขึ้นกับแถวในerp_doc_format_glยังไม่ยืนยัน) - ยอดสต็อกใช้ยอดหัวเอกสาร ไม่ใช่
sum_of_costที่ rebuild แล้ว (ยกเว้นเอกสารที่ total = 0) - รหัสบัญชี fallback ที่ hardcode อาจไม่ตรงกับผังบัญชีของบริษัท และจะไปตก 9999 โดยไม่เตือน
ที่มาในโค้ด
backend/internal/application/process/service.go:1755resolveChartAccountbackend/internal/application/process/service.go:1775buildStandardGLLinesbackend/internal/application/process/service.go:1923310 / 311 / 315backend/internal/application/process/service.go:1965ซื้อbackend/internal/application/process/service.go:1998ขายbackend/internal/application/process/service.go:2050รับคืนbackend/internal/application/process/service.go:2146เอกสารสต็อกbackend/internal/application/process/service.go:2150known gap 66backend/internal/application/process/gl_pay_other.go:17payOtherGL