ข้ามไปยังเนื้อหาหลัก

โอนสินค้าไปสาขา

เมนูโอนสินค้าไปสาขาใช้จัดสินค้าออกจากคลังต้นทางเพื่อส่งไปยังสาขาปลายทาง ผู้ใช้เปิดเอกสารจากรายการโอนออก เลือก lot/batch ให้ครบทุกสินค้า แล้วบันทึก payload โอนออก

ทางเข้าในแอป​

AppTarget
MobileTransferOutList -> TransferOutDetail
POS TerminaltransferOut -> TransferOutDetailForm

Workflow การทำงาน​

กฎ Batch และจำนวน​

กฎรายละเอียด
Batch pickerโหลด lot ด้วย getProductLots({ itemCode, whsCode: line.warehouseCode, company })
ห้ามซ้ำในสินค้า 1 line เลือก batchNumber เดิมซ้ำไม่ได้
ยอดคงเหลือ lotถ้า lot มี quantity ต้องกรอกจำนวนไม่เกินยอดคงเหลือของ lot นั้น
ยอดค้างเบิกจำนวน batch ที่กรอกต้องไม่เกิน line.quantity - (line.cal - oldBatchQty)
จำนวนบวกจำนวน batch ต้องมากกว่า 0 และจำนวนเบิกของ line ต้องมากกว่า 0
ต้องปิด line ให้ครบปิด line editor ไม่ได้ถ้า cal !== quantity; ตอน submit ก็ block line ที่ยังค้างเบิก
วันที่Mobile ใช้ shared batch date validation; Terminal form ปัจจุบันเน้นตรวจ quantity/lot และส่ง date fields ไปกับ payload
ไม่มี flow เพิ่มสินค้าใหม่Transfer Out ทำงานกับ line จากเอกสารโอนออกที่มีอยู่ ไม่ได้เพิ่ม line รับสินค้าใหม่แบบ Transfer In

Payload ตอนบันทึก​

รายละเอียด payload:

  • numAtCard สร้างจาก docNum ของเอกสารต้นทางและ timestamp ปัจจุบัน
  • branchCode ใช้ branch.whsGrpCode ก่อน แล้ว fallback เป็น branch.BranchCode
  • userName สร้างจากชื่อ-นามสกุล แล้ว fallback เป็น username/userCode
  • เรียง lines ตาม lineNum ก่อนส่ง
  • ส่ง admissionDate ด้วยชื่อคีย์นี้และ format YYYY-MM-DDTHH:mm:ss

พจนานุกรมข้อมูลและแหล่งที่มา​

ตารางนี้ครอบคลุม field ที่ Mobile และ POS Terminal อ่านหรือส่งใน flow โอนออก. รายการตั้งต้นมาจาก GET /transfers-out?whGrpCode={selectedWhsGrpCode} แล้วทั้งสองแอปสร้าง payload ใหม่เพื่อส่ง POST /transfer-out.

Fieldคืออะไรได้มาจาก / กติกาก่อนส่ง
companyรหัสบริษัทจากเอกสารโอนออก API
docEntry, docNumID และเลขเอกสารโอนต้นทางจาก API; docNum เป็นส่วนประกอบของ numAtCard
docDate, docDueDate, taxDateวันที่เอกสาร/กำหนดส่ง/ภาษีจาก API
cardCode, cardNameรหัสและชื่อคู่ค้าจาก API
toWhsCode, toWhsNameรหัสและชื่อคลังปลายทางจาก API
commentsหมายเหตุเอกสารจาก API
numAtCardเลขอ้างอิงของเอกสารที่สร้างแอปสร้างเป็น ${docNum}_${เวลาปัจจุบัน DD-MM-YYYY HH:mm} เมื่อ submit
branchIdID สาขาในเอกสารต้นทางจาก API
branchCode, branchNamewarehouse group code/name ของสาขาที่กำลังโอนออกเขียนทับจาก selected branch (whsGrpCode, fallback BranchCode; และ whsGrpName, fallback BranchName)
userCode, userNameผู้บันทึกการโอนเขียนทับจาก user ปัจจุบัน; ชื่อ fallback เป็นค่าจากเอกสาร
payloadBeforesnapshot JSON ก่อนแก้ไขสร้างจากเอกสารที่เลือกใน detail screen

Line และ batch​

Fieldคืออะไรได้มาจาก / กติกาก่อนส่ง
lineNumลำดับ lineจาก API และเรียงก่อน submit
itemCode, itemDescriptionรหัสและชื่อสินค้าจาก line เอกสาร API
quantity, weightจำนวนที่โอนและน้ำหนักจาก line/batch editor; แปลงค่าตัวเลขก่อนส่ง และต้องปิดยอด batch ให้เท่าจำนวน line
uomCode, uomEntry, vatGroupหน่วยและภาษีpassthrough จาก line API
warehouseCodeคลังต้นทางของสินค้าจาก line API; ใช้เป็น context โหลด lot
batchNumbers[].batchNumberlot ที่ตัดออกผู้ใช้เลือกจาก getProductLots(itemCode, warehouseCode, company)
batchNumbers[].quantityจำนวนที่ตัดจาก lotผู้ใช้กรอก แล้วแปลงเป็น number; ต้องไม่เกินยอด lot และรวมเท่าจำนวน line
batchNumbers[].admissionDateวันที่รับเข้าของ lotmap จาก admissionDate ที่มาพร้อม lot/ผู้ใช้แก้ไข แล้วส่งเป็น YYYY-MM-DDTHH:mm:ss
batchNumbers[].manufacturingDate, expiryDateวันที่ผลิต/หมดอายุ lotpassthrough จาก lot หรือค่าจาก batch editor

สิทธิ์และ guard​

เรื่องรายละเอียด
Terminal menu keytransferOut
deptCode ที่เห็นเมนู-2, 1, 2, 3, 4, 7, 29, 21, 8, 9, 12, 22, 27, 28
เงื่อนไขสาขาallowNonMainBranch = true; ถ้าเลือกคลังสาขา non-main เมนูเปิดได้แม้ deptCode ไม่อยู่ในชุด stock menu
Full non-main accessผู้ใช้ที่มีสิทธิ์ full access ของ non-main warehouse ผ่าน menu access ของกลุ่ม stock นี้ได้
Context รายการlist API ผูกกับ selected warehouse group (whGrpCode)

Mobile vs POS Terminal​

เรื่องMobilePOS Terminal
หน้ารายละเอียดstack detail เต็มจอdetail pane ด้านขวาใน HomeScreen
Batch pickerSelectionModal หลังโหลด lotmodal ใน detail form
หลังบันทึกnavigation.replace('TransferOutList')refresh list แล้วเรียก onSaved
กฎหลักตรวจ batch ซ้ำ, ยอด lot, ยอดค้างเบิก, line ครบใช้กฎ quantity และ batch ซ้ำชุดเดียวกัน

Developer Handoff Map​

AreaCode
Mobile detailapps/mobile/src/screens/transferOutStack/transferOutDetailScreen/index.tsx
Mobile helpersapps/mobile/src/screens/transferOutStack/helpers.ts
Terminal detailapps/pos-terminal/src/screens/HomeScreen/TransferOutDetailForm.tsx
Mobile serviceapps/mobile/src/services/transferOut.ts
Terminal serviceapps/pos-terminal/src/services/transferOuts.ts

เอกสารที่เกี่ยวข้อง​