#accounting#cheque#bank#credit-card#gl
วงจรเช็ครับ/เช็คจ่าย บัตรเครดิต และโอนเงินระหว่างบัญชี
เช็คแต่ละใบอยู่ใน cb_chq_list เอกสารแต่ละขั้น (ฝาก ผ่าน คืน ยกเลิก เปลี่ยน) เป็น ic_trans คนละ flag และ cb_chq_list.status เป็นค่า derived ที่คำนวณจากแถวล่าสุดของเช็คนั้นทุกครั้ง GL ของแต่ละขั้นลงตามชุดบัญชีมาตรฐาน
ทำงานอย่างไร
สถานะเช็ค (chequeStatusSQL cheque.go:32)
| chq_type | flag ล่าสุด → status |
|---|---|
| 1 เช็ครับ | 405→0, 410→1, 411→2, 412→3, 413→4, 414→6, 416→7, 418→8 |
| 2 เช็คจ่าย | 406→0, 451→2, 452→4, 453→3, 456→7 |
| 3 บัตรเครดิต | 461→1, 462→2 |
| 21 wallet | 463→1 |
- ไม่พบแถว = 0 (เช็คในมือ / บัตรปกติ); 418 จับคู่ด้วย
item_codeอื่นๆ ใช้chq_number; เรียงตามวันที่ เวลา trans_flag มากก่อน และ roworder RebuildChequeStatus(:68) รันหลังบันทึกแท็บจ่ายและRebuildCheque(:329) ทั้งหมดใน tx เดียว timeout 60 วินาที
เลือกเช็คได้ตามสถานะ (chequeCandidateWhere :220)
- 410 / 413: status 0 หรือ 3; 411: status 1; 412: status 1 หรือ 2; 416 / 418: 0 หรือ 3
- 451 / 452 / 456: 0 หรือ 3; 453: status 2; บัตร 461 / 462 และ wallet 463: status 0
เช็คยกมา (chequeForwardStmts cheque_forward.go:10)
- 405 เช็ครับยกมา / 406 เช็คจ่ายยกมา เขียน
cb_trans_detail+cb_chq_list; 405 เลขเช็คอยู่ใน item_code, 406 อยู่ใน chq_number และ item_code = สมุดบัญชี
โอนเงิน 422 / 420 (SyncTransferPair cheque.go:101)
- ลบ 420 เดิมแล้วสร้างใหม่จาก 422: เลขเดียวกัน, เวลา +1 นาที (
addOneMinute:181, 23:59 → 00:00), สลับคอลัมน์ต้นทาง/ปลายทาง (สาขา แผนก โครงการ สมุด ธนาคาร :81), detailcalc_flag= -1 - GL 422 (service.go:2221): Dr สมุดปลายทาง / Cr สมุดต้นทาง บัญชีจาก
erp_pass_book
GL เช็ครับ (service.go:2243)
- บัญชี: เช็ครับ 1122-00 / 1122 / 1121, เช็คระหว่างเรียกเก็บ 1122-01 / 1122 (สร้างผังบัญชี 1122-01 อัตโนมัติถ้าไม่มี)
- 410 ฝาก: Dr ธนาคาร (หรือ 1122-01 เมื่อมี 411 ที่ใช้เช็คเดียวกันและยัง active) / Cr เช็ครับ
- 411 ผ่าน: Dr ธนาคาร / Cr เช็ครับ หรือ 1122-01 และ UPDATE บรรทัด Dr ของ 410 ที่ใช้เช็คเดียวกันเป็น 1122-01
- 412 คืน: Dr เช็ครับ / Cr ธนาคาร
- 413 ยกเลิก, 414, 418 ตั้งหนี้ใหม่: Dr ลูกหนี้ / Cr เช็ครับ
- 416 เปลี่ยนเช็ค: Dr ธนาคาร / Cr เช็ครับ
GL เช็คจ่าย (service.go:2311) บัญชีเช็คจ่าย 2112 / 2111
- 451 ผ่าน: Dr เช็คจ่าย / Cr ธนาคาร
- 456 เปลี่ยน: Dr เช็คจ่าย / Cr เจ้าหนี้
- 452 ยกเลิก, 453 คืน: Dr ธนาคาร / Cr เจ้าหนี้
GL บัตรเครดิต / wallet (service.go:2329)
- 461 ขึ้นเงิน: Dr ธนาคาร (มี VAT: Dr ธนาคารด้วยฐาน + Dr ภาษีซื้อ) / Cr ลูกหนี้
- 462 / 463: Dr ลูกหนี้ / Cr ธนาคาร
จุดเสี่ยง
- 411 แก้ GL ของเอกสาร 410 (UPDATE
gl_journal_detailข้ามเอกสาร) ลำดับการ rebuild จึงมีผลต่อผล - 452 / 453 ไม่ได้กลับบัญชีเช็คจ่าย 2112 ที่ตั้งไว้ตอนจ่าย แต่ลง Dr ธนาคาร / Cr เจ้าหนี้ (เจตนายังไม่ยืนยัน); เงื่อนไข
453ในกิ่ง else ไม่มีทางทำงานเพราะ 453 ถูกจับในกิ่งแรกแล้ว - การบันทึกทะเบียนเช็ค
cb_chq_listผ่าน SaveDoc ไม่มีด่านตรวจงวด (comment period.go:108) ส่วนเอกสารวงจรเช็คที่เป็นic_transถ้าบันทึกผ่าน SaveTrans จะผ่านcheckTransScreenSave(หน้าจอใช้เส้นทางไหนยังไม่ยืนยัน) ดู งวดบัญชีและด่านตรวจงวดปิด (Accounting Period Guard) - 422 ไม่มีบรรทัดค่าธรรมเนียมโอน
ที่มาในโค้ด
backend/internal/application/process/cheque.go:32chequeStatusSQLbackend/internal/application/process/cheque.go:68RebuildChequeStatusbackend/internal/application/process/cheque.go:101SyncTransferPairbackend/internal/application/process/cheque.go:220chequeCandidateWherebackend/internal/application/process/cheque.go:329RebuildChequebackend/internal/application/process/cheque_forward.go:10เช็คยกมาbackend/internal/application/process/service.go:2221GL 422backend/internal/application/process/service.go:2243GL เช็ครับbackend/internal/application/process/service.go:2311GL เช็คจ่ายbackend/internal/application/process/service.go:2329GL บัตรเครดิต