ขายเกินวงเงินเครดิตลูกค้าได้ไหม ต้องให้ใครอนุมัติ
ตอบสั้น: ขึ้นกับสวิตช์ใน erp_option ถ้าเปิดแค่ "เตือน" (warning_credit_money) ระบบถามยืนยันแล้วบันทึกต่อได้ ถ้าเปิด "ห้าม" (lock_credit_money) ระบบไม่ยอมบันทึก ยกเว้นเปิด password_ar_credit ไว้ด้วย กรณีนั้นผู้ที่มีสิทธิ์ erp_user.approve_ar_credit = 1 กรอกรหัสผู้ใช้และรหัสผ่านเพื่ออนุมัติได้ ชื่อผู้อนุมัติถูกเก็บไว้ที่ ic_trans.user_approve
รายละเอียด
เอกสารที่ตรวจวงเงิน: ขายเชื่อ 44 (inquiry_type 0), ตั้งหนี้อื่นๆ 99, รายได้อื่นๆ 250 และเพิ่มหนี้รายได้อื่นๆ 254 (inquiry_type 0/2) และต้องมีรหัสลูกค้า การตรวจทำทุกครั้งที่บันทึก ทั้งเอกสารใหม่และเอกสารที่แก้
ลำดับการตรวจ
- อ่าน
ar_customer_detail.credit_money(วงเงิน) และcredit_status credit_statusไม่เท่ากับ 0 → ไม่ให้บันทึก "ลูกค้า ... ถูกปิดสถานะเครดิต" (ยกเว้นสถานะ 2 ตามข้อถัดไป)- สถานะ 2 (ปิดชั่วคราว) + เปิด
sr_ss_credit_check: ขายได้เฉพาะเมื่อดึงรายการจากใบสั่งที่อนุมัติแล้วในerp_credit_requestถ้าไม่ใช่จะขึ้น "ยังไม่อนุมัติเปิดสถานะเครดิต" - ถ้าไม่ได้เปิดทั้งเตือนและห้าม หรือวงเงินเป็น 0 → ไม่ตรวจวงเงิน
- หนี้คงค้าง = ยอดลูกหนี้ตามสูตรรายงานสถานะ (ไม่รวมเอกสารที่กำลังบันทึก) + เช็ครับในมือ (ถ้าเปิด
ar_credit_chq_outstandingระบบตัดทศนิยมเหลือเต็มบาท) − เงินมัดจำที่ยังไม่ใช้ (ถ้าเปิดcredit_sale_include_deposit) - เกินวงเงินเมื่อ ยอดเอกสารนี้ > วงเงิน − หนี้คงค้าง
ผลเมื่อเกินวงเงิน
- เปิด
request_ar_creditหรือlock_credit_money→ ไม่ให้บันทึก "ยอดวงเงินเครดิตของลูกค้า เกินที่กำหนดไว้" - เปิด
lock_credit_money+password_ar_credit(และไม่ได้เปิดrequest_ar_credit) → หน้าจอขอรหัสผู้อนุมัติ ถ้าผู้ใช้ไม่มีอยู่ รหัสผ่านผิด หรือไม่มีสิทธิ์ จะได้ข้อความเดียวกันคือ "รหัสผู้อนุมัติหรือรหัสผ่านไม่ถูกต้อง" - เปิดแค่
warning_credit_money→ ถาม "ต้องการดำเนินการต่อหรือไม่" แล้วบันทึกได้
ใบสั่งจอง 34 / ใบสั่งขาย 36: ตรวจเมื่อเปิด sr_ss_credit_check ยอดที่ใช้เทียบคือ ยอดเอกสาร + ยอดลูกหนี้ + ยอดจอง/สั่งขายค้าง + เช็คในมือ ถ้าเกินวงเงิน (หรือลูกค้าเป็นสถานะ 2) ระบบถามว่าจะบันทึกเพื่อขออนุมัติหรือไม่ ถ้าตอบตกลง เอกสารจะถูกพักไว้ (is_hold) พร้อมสร้างคำขอใน erp_credit_request ถ้าเปิด check_credit_sale_reserve_sale_order จะไม่ให้บันทึก "เกินวงเงินเครดิตลูกค้า" ส่วนจองเงินสด 34 จะถูกพักไว้เพื่อตรวจสัดส่วนเงินมัดจำ
ข้อควรระวัง
- ขั้นขออนุมัติแบบ OTP ของ
request_ar_creditยังไม่ได้พอร์ต ถ้าเปิดสวิตช์นี้ไว้ การขายเกินวงเงินจะถูกห้ามเสมอ และลูกค้าสถานะ 2 ก็ขายไม่ได้ (คอมเมนต์ในcheckCreditLimit) - เช็ครับในมือถูกตัดเศษเหลือเต็มบาท (
trunc) ตาม C# เดิม หนี้คงค้างจึงอาจต่ำกว่ายอดจริงไม่เกิน 1 บาท - ยอดลูกหนี้ที่ใช้ตรวจวงเงินไม่นับ 254 (ตามสูตรรายงานสถานะ) ดู ยอดลูกหนี้/เจ้าหนี้คงค้างดูได้ที่ไหน ระบบคิดจากอะไร
- ใบสั่งแบบเชื่อของลูกค้าที่วงเงิน ≤1 บาท (ไม่ได้ตั้งวงเงิน) จะถูกส่งขออนุมัติทุกใบ หรือถูกห้ามถ้าเปิด
check_credit_sale_reserve_sale_orderซึ่งต่างจากใบขาย 44 ที่วงเงิน 0 แปลว่าไม่ตรวจ
ดูเพิ่ม
- ด่านตรวจก่อนบันทึกเอกสารและวงเงินเครดิต (Save Rules & Credit Limit)
- เครดิต วันครบกำหนด และวงเงินสินเชื่อ (credit_day / due_date / credit_money)
- ป๊อปอัปราคาขาย ต้นทุน และอนุมัติวงเงินเครดิต (PriceFormulaModal / PriceInfoModal / CostLockModal / CreditApproveModal)
- erp_credit_approved_logs / erp_credit_request — ขออนุมัติเครดิต
- เงินมัดจำกับเงินล่วงหน้าต่างกันอย่างไร ลงบัญชีและตัดใช้ในใบกำกับอย่างไร
ที่มาในโค้ด
backend/internal/application/process/trans_save_rules.go:488creditCheckedเอกสารที่ตรวจวงเงินbackend/internal/application/process/trans_save_rules.go:503creditOutcomeเงื่อนไขเกินวงเงิน ห้าม หรือเตือนbackend/internal/application/process/trans_save_rules.go:522checkCreditLimitลำดับการตรวจbackend/internal/application/process/trans_save_rules.go:597arBalanceSQLยอดลูกหนี้ของลูกค้าbackend/internal/application/process/trans_save_rules.go:610creditChqSQLเช็คในมือตัดเศษเต็มบาทbackend/internal/application/process/trans_credit.go:33checkTransCreditบันทึกuser_approvebackend/internal/application/process/trans_credit.go:50creditApproverตรวจapprove_ar_credit= 1backend/internal/application/process/trans_credit.go:147planOrderCreditพักใบสั่ง 34/36