รับของเข้าคลังแบบไม่เห็นราคาทุน (Blind Receiving)
พนักงานคลังรับยางหรืออะไหล่จากผู้จำหน่าย โดยบันทึกแค่จำนวนและล็อต DOT ไม่เห็นราคาทุน ฝ่ายบัญชีจึงค่อยแปลงใบรับนี้เป็นเอกสารซื้อใน BC Account (trans_flag 12) ภายหลัง
Cost Masking
- ตาราง
autocare_blind_receivingไม่มีคอลัมน์ราคาทุนเลย มีแค่ผู้จำหน่าย เลขใบส่งของ ผู้รับ คลังและที่เก็บ จำนวน สรุปรายการ ล็อต DOT รูปหลักฐานcost_maskedและสถานะ (seed.go:232-250) - โครงสร้างแคตตาล็อกยาง
TireCatalogItemที่ส่งไปหน้าร้านก็ไม่มีฟิลด์ทุน มีแค่sale_priceและpromo_price(handler.go:137-166)
1. บันทึกใบรับ create_blind_receiving (handler.go:1387-1451)
- ถ้าไม่ได้ส่ง
recv_noมาจะถือเป็นใบใหม่ เลขใบเป็น"BLIND-"ต่อด้วย 9 ตัวแรกของ Stamp ถ้าส่งมาจะถือเป็นการแก้ไข โดย upsert ด้วยON CONFLICT (recv_no) - สถานะเริ่มต้นคือ
PENDING_ACCOUNTING_COSTและcost_masked = TRUE - ถ้าเป็นใบใหม่ ระบบบวก
qty_on_handในautocare_tire_dot_stockของitem_codeและdot_codeนั้น ถ้ายังไม่มีแถวคู่นั้นในตาราง จะไม่มีการบวก เพราะเป็นคำสั่ง UPDATE อย่างเดียว - ฟิลด์ที่ไม่ได้ส่งมาจะใช้ค่าเดโม เช่น ผู้จำหน่าย
AP-MICHจำนวน 16
2. ลงบัญชี post_blind_receiving_account (handler.go:1453-1474)
ต้องส่ง recv_no แล้วระบบจะเรียก postBlindReceivingToBCAccount และตอบกลับเลขเอกสารซื้อพร้อม trans_flag: 12
3. postBlindReceivingToBCAccount (handler.go:2338-2491)
เลขเอกสาร: ใช้
fixedDocNoถ้าส่งมา ถ้าไม่มีให้ใช้bc_purchase_doc_noเดิม ถ้าไม่มีทั้งสองอย่างจะสร้างเลขเป็น"PU-AC"ต่อด้วย 8 ตัวแรกของ Stamp (handler.go:2387-2399)ล็อต: ตัดข้อความ
dot_batchesที่ช่องว่างแรก วงเล็บ หรือจุลภาค และเก็บไม่เกิน 15 ตัวอักษร (handler.go:2365-2385) ถ้าค่าคลังหรือที่เก็บมีรูปแบบCODE~ชื่อจะใช้เฉพาะส่วนรหัสสินค้าและราคาทุน: ระบบไม่ได้อ่านทุนจากข้อมูลจริง แต่เลือกจากรหัสผู้จำหน่ายด้วยค่าตายตัว (handler.go:2401-2415)
รหัสผู้จำหน่ายมีคำว่า SKU หน่วย ทุนต่อหน่วย (ค่าเริ่มต้น) TIRE-MI-2055516เส้น 3150.00 BRIDTIRE-BS-2155517เส้น 3680.00 PROFPART-SHK-PROF-4ชุด 24500.00 3MCARE-TINT-3M-FULLคัน 8900.00 มูลค่าคือ
qty × ทุนต่อหน่วยคำนวณด้วย big.Rat (handler.go:2417-2420)หัวเอกสาร:
DocFormatCode "PU",TransType 1,TransFlag 12,InquiryType 0,VatType 0,VatRate "7",TaxDocNoเท่ากับเลขใบส่งของ,DocRefเท่ากับเลขใบรับ,Confirmed trueและรหัสผู้จำหน่ายใส่ในCustCode(handler.go:2443-2471)เรียก
SaveTransถ้าล้มเหลวจะลองใหม่แบบแก้ไข ถ้ายังล้มเหลวจะ log warning แล้วคืน error (handler.go:2472-2480) ถ้าสำเร็จจะตั้งใบรับเป็นPOSTED_TO_IC_TRANSและบันทึกbc_purchase_doc_no(handler.go:2482-2490)
ข้อควรรู้
- ทุนต่อหน่วยในเอกสารซื้อเป็นค่าที่เขียนไว้ในโค้ด (handler.go:2401-2415) ไม่ได้มาจากใบแจ้งหนี้จริงของผู้จำหน่าย ใช้กับข้อมูลเดโมได้ แต่ทุนจะไม่ตรงกับสินค้าจริงตัวอื่น
- ทุก Rebuild จะโพสต์ใบรับเดโม
BLIND-2610-03และBLIND-2610-04ซ้ำด้วยเลขตายตัว ดู ข้อมูลเดโมที่ AutoCare สร้างเองและบิลตัวอย่างที่ลงบัญชีให้ (sys-autocare-seed-demo)
ที่มาในโค้ด
backend/internal/adapter/inbound/http/autocare/handler.go:1387-1474: action สร้างใบรับและลงบัญชีbackend/internal/adapter/inbound/http/autocare/handler.go:2338-2491: postBlindReceivingToBCAccountbackend/internal/adapter/inbound/http/autocare/seed.go:232-250: DDLautocare_blind_receiving
ดูเพิ่ม: ซื้อสินค้า/ตั้งหนี้ซื้อ (Purchase Invoice) · ซื้อสินค้า (ใบซื้อ 12) ลงบัญชี GL ยังไง ภาษีซื้อเข้าบัญชีไหน · ทะเบียนเจ้าหนี้/ผู้ขาย (ap_supplier) · แอป Flutter สำหรับหน้างาน 4 บทบาทของ AutoCare (sys-autocare-flutter-app) · ระบบศูนย์บริการรถยนต์และร้านยาง BC AutoCare (sys-autocare-overview)