สมอง SML

คลังความรู้ / ตารางข้อมูล

#tables#ap-ar

รายการบรรทัด ap_ar_trans_detail

ตารางนี้ใช้ สามบทบาทที่ต่างกัน ต้องแยกให้ออกเวลาอ่านข้อมูล:

  1. บรรทัดบิลที่วางบิล/ชำระ ของเอกสาร 213 / 235 / 19 / 239 (หัวอยู่ใน หัวเอกสารใบวางบิล/ใบเสร็จ-จ่ายชำระหนี้ (ap_ar_trans)) — บทบาทหลัก
  2. บรรทัดมัดจำ/เงินล่วงหน้า ของเอกสารซื้อ-ขายที่มีแท็บมัดจำ (หัวอยู่ใน หัวเอกสารสินค้า/ซื้อ/ขาย (ic_trans)) — เขียนรายละเอียด + จำนวนเงิน (trans.go:219,933-945)
  3. แถว marker ของเอกสารปรับยอดสต็อก trans_flag 66/68 ที่ผูกกับใบตรวจนับ (stock_lot.go:157-160,774-780)

คอลัมน์สำคัญ

จาก INSERT ของบทบาท 1 (docs.go:565-568):

column ความหมาย ใช้ที่ไหน
doc_no, trans_flag, doc_date เอกสารชำระที่เป็นเจ้าของบรรทัด (key ร่วมกับหัว) join กับ หัวเอกสารใบวางบิล/ใบเสร็จ-จ่ายชำระหนี้ (ap_ar_trans) ที่ report_menu_ap_ar.go:309,354,780,855
trans_type 1 = เจ้าหนี้, 2 = ลูกหนี้ (marker สต็อกใช้ 2 คงที่ stock_lot.go:778) docs.go:565-568
line_number ลำดับบรรทัด docs.go:565-568, trans.go:940
cust_code ลูกหนี้/เจ้าหนี้ของบรรทัด docs.go:565-568; อ้างใน workflow.go:116 (ตอนเปลี่ยนรหัส)
billing_no เลขที่เอกสารหนี้ที่ถูกวางบิล/ชำระ (เลข ic_trans.doc_no ของใบขาย/ซื้อ/ลดหนี้) docs.go:565-568; billPaidSQL docs.go:621-625; doc_flow.go:69
billing_date วันที่ของเอกสารหนี้นั้น docs.go:565-568; dashboard ใช้จับคู่ billing_date = t.doc_date (ai/context_sales_ar.go:35-48)
bill_type trans_flag ของเอกสารหนี้นั้น (44, 46, 12, 14, ... ) docs.go:565-568 (BillLine.BillType docs.go:502)
ref_doc_no, ref_doc_date, doc_ref เอกสารอ้างอิงของบรรทัด docs.go:565-568
due_date วันครบกำหนดของหนี้ docs.go:565-568
sum_debt_amount ยอดหนี้ของเอกสารนั้น (ในบทบาท 2 = จำนวนเงินของรายการมัดจำ) docs.go:565-568; trans.go:940
balance_ref ยอดคงเหลืออ้างอิง ณ ตอนบันทึก docs.go:565-568
sum_pay_money ยอดที่ชำระในบรรทัดนี้ docs.go:565-568; ใช้เป็น "paid" ใน billPaidSQL และรายงาน
lost_profit_exchange_amount กำไร/ขาดทุนอัตราแลกเปลี่ยนต่อบรรทัด (19/239 หลายสกุล) docs.go:572-579,621-625; ดู หลายสกุลเงินและกำไรขาดทุนจากอัตราแลกเปลี่ยน (Multi-Currency & FX Gain/Loss)
calc_flag ธงคำนวณของ marker 66/68 (ผลจาก adjustCalc) stock_lot.go:778
remark หมายเหตุ (บทบาท 2 ใช้ Remark หรือชื่อรายการ) trans.go:940
last_status 0 = ใช้งาน, 1 = ยกเลิก; INSERT ด้วย 0 แล้วตามสถานะหัวผ่าน doc flow docs.go:565-568; doc_flow.go:262
status ถูกอ้างใน doc_flow.go:96 (r.status = 0 กับ trans_flag 87, 260) — ความหมายนอกเหนือจากนี้ "ไม่ชัดจากโค้ด" doc_flow.go:96

คอลัมน์สกุลเงินที่สอง (เฉพาะ 19/239 เมื่อมี billFx): sum_debt_amount_2, balance_ref_2, sum_pay_money_2, currency_code, exchange_rate, exchange_rate_old, lost_profit_exchange_amount — เขียนด้วย UPDATE ต่อจาก INSERT ที่ docs.go:572-579 (field ใน BillLine docs.go:513-523).

หนี้คงค้าง (OutstandingBills)

ยอดค้างของเอกสารหนี้ = ยอดเอกสาร − Σ sum_pay_money (+ ผลต่างอัตราแลกเปลี่ยนเฉพาะเอกสารซื้อ/ขาย/ขายสินทรัพย์ flag 12, 44, 1802) ของบรรทัดที่ last_status = 0, trans_flag เป็นเอกสารชำระ (19 หรือ 239) และ billing_no/bill_type ตรงกับเอกสารหนี้ โดยไม่นับเอกสารที่กำลังแก้ (p.doc_no <> docNo) — billPaidSQL docs.go:621-625. ชุด trans_flag ของหนี้:

  • ลูกหนี้: debit 44 (inquiry_type 0,2), 46, 93, 95, 99, 101, 418, 250/254, 1802; credit 48, 97, 103, 252 (docs.go:600-603)
  • เจ้าหนี้: debit 12, 14, 316, 81, 83, 87, 89, 315, 260/264; credit 16, 317, 85, 91, 262 (docs.go:604-608)

ความสัมพันธ์

ใครเขียน / ใครอ่าน

  • เขียน: billStmts (docs.go:532-582) สำหรับ 213/235/19/239; trans.go:933-945 (มัดจำ/ล่วงหน้า — ลบแล้วสร้างใหม่ตามเอกสาร); stock_lot.go:774-780 (marker 66/68).
  • ลบพร้อมหัว: trans.go:428 (ลบ deposit lines ตอนลบเอกสาร ic), apArPlan docs.go:488.
  • อ่าน/อัปเดตสถานะ: doc_flow.go:69,71,96,219,262 (ใช้ตัดสินว่าเอกสารถูกวางบิล/ชำระแล้ว → ยกเลิก/แก้ไม่ได้), doc_cancel.go:494-565,354, report_menu_ap_ar.go:538,780-855, CRM/AI (ai/context_sales_ar.go:35-48 ใช้ flag 239 สำหรับลูกหนี้ค้างชำระ).

ข้อควรระวัง

  • แถวของ บทบาท 3 (marker) มี billing_no = เลขใบตรวจนับและ trans_flag = 66/68 ไม่ใช่บิลชำระหนี้ — รายงานหนี้ต้องกรอง trans_flag IN (19,239,213,235) เสมอ.
  • billing_no อ้างด้วย เลขเอกสาร + bill_type ไม่ใช่ id; เลขซ้ำข้ามชนิดเอกสารได้ จึงต้อง join ทั้งสอง (docs.go:621-625).
  • ในบรรทัดมัดจำ sum_debt_amount เก็บจำนวนเงินรายการ ไม่ใช่ยอดหนี้ — ห้ามรวมกับบทบาท 1.
  • ยกเลิกเอกสารชำระ → ต้องเปลี่ยน last_status ของบรรทัดด้วย (ไม่งั้นบิลจะยังถูกนับว่าชำระ): ทำใน doc_flow.go:262.

ที่มาในโค้ด

  • backend/internal/application/process/docs.go:498-526 (BillLine), :528, :565-568 (INSERT), :600-626, :488
  • backend/internal/application/process/trans.go:219,428,933-945
  • backend/internal/application/process/stock_lot.go:157-160,774-780
  • backend/internal/application/process/doc_flow.go:69,71,96,219,262
  • backend/internal/application/process/doc_cancel.go:354,494-565
  • backend/internal/application/process/report_menu_ap_ar.go:309,354,538,780-855
  • backend/internal/adapter/inbound/http/ai/context_sales_ar.go:35-48
  • backend/internal/application/process/workflow.go:116