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

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

เมนูโอนสินค้าไปสาขาใช้จัดสินค้าออกจากคลังต้นทางเพื่อส่งไปยังสาขาปลายทาง ผู้ใช้เปิดเอกสารจากรายการโอนออก เลือก 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

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