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

รับสินค้าจากสาขา

เมนูรับสินค้าจากสาขาใช้รับเอกสารโอนเข้ามายังสาขาที่เลือก หน้านี้รับได้ทั้งรายการที่มากับเอกสารโอน และเพิ่มสินค้าใหม่ในหน้ารับเข้าได้เมื่อผู้ใช้กรอก Container No. หรือทะเบียนรถเพื่อสร้างเลข batch

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

AppTarget
MobileTransferInList -> TransferInDetail
POS TerminaltransferIn -> TransferInDetailForm

Workflow หลัก

เส้นทางเพิ่มสินค้าใหม่

ทั้ง Mobile และ Terminal มี flow เพิ่มสินค้าใหม่ในหน้ารับเข้า:

  1. ผู้ใช้กรอก Container No. หรือทะเบียนรถ
  2. ระบบดึงเลขท้าย 4 หลัก
  3. ระบบเปิด inventory ด้วย getProductBranchContext, syncProductInventory และ local subscription
  4. รายการสินค้าถูกกรองตามบริษัท และรวม dummy products
  5. ผู้ใช้กรอกจำนวนมากกว่า 0
  6. ระบบสร้าง line ใหม่ด้วย lineNum: -1, isDel: true แล้วเปิด batch draft ที่ generate ให้ทันที

จุดนี้ต่างจากโอนสินค้าไปสาขา เพราะ Transfer In เพิ่มรายการรับใหม่ได้ แต่ Transfer Out ทำงานกับรายการโอนออกที่มีอยู่เป็นหลัก

กฎ Batch และวันที่

กฎรายละเอียด
Container/ทะเบียนรถต้องมี ก่อนเพิ่มสินค้าใหม่หรือสร้าง batch ใหม่ ระบบใช้เลขท้าย 4 หลักเป็น suffix
Line จากเอกสารเดิมbatch picker โหลด lot ด้วย getProductLots({ itemCode, whsCode: line.warehouseCode, company })
Line ที่เพิ่มใหม่สร้าง batch จาก generateBatchCode(getSelectedWhsGrpCode(branch)) + suffix ที่กรอก
ห้าม batch ซ้ำในสินค้า 1 line เลือก batch เดิมซ้ำไม่ได้
จำนวนจำนวน batch ห้ามติดลบ ส่วนจำนวนตอนเพิ่มสินค้าต้องมากกว่า 0
ยอด lotถ้า lot ที่เลือกมี quantity ต้องกรอกไม่เกินยอดคงเหลือของ lot
การรับ line เดิมline จากเอกสารโอนเดิมสามารถ submit โดยไม่มี batch ที่รับจริงได้ ถ้าไม่มี batch quantity ที่มากกว่า 0 payload จะใช้จำนวนเดิมของ line และส่ง batchNumbers: []
กรณี batch รวมเป็น 0ถ้า line มี batch แต่รวมจำนวนเป็น 0 ต้องให้ผู้ใช้ confirm แล้วส่งจำนวนเดิมโดยไม่ส่ง batch
คลังฝากเมื่อ branch.isMain === false ใช้กฎวันที่แบบห้องฝาก โดย due date ห้องฝากต้องมากกว่าวันรับเข้า

Payload ตอนบันทึก

หมายเหตุสำหรับ developer:

  • refDocNum เก็บเลขเอกสารโอนต้นทาง
  • numAtCard สร้างจาก docNum ต้นทางและ timestamp ปัจจุบัน
  • warehouse code ที่ส่งถูกสร้างใหม่จาก warehouse group ของสาขาที่เลือก; ถ้า company เป็น NFFDB และ code ยังไม่ขึ้นต้น NF- จะ prefix เป็น NF-
  • POS Terminal เก็บ warehouse tab ต้นทางใน list item เป็น sourceWhsCode แล้ว fallback ผ่าน toWhsCode/branch context ตอนสร้าง line สินค้าใหม่
  • receiptDate ถูกส่งเป็น admissionDate ด้วยรูปแบบ YYYY-MM-DDTHH:mm:ss
  • transferInDueDate ถูกส่งเป็น dueDate เฉพาะกรณีคลังฝาก ด้วยรูปแบบ YYYY-MM-DDTHH:mm:ss

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

ตารางนี้ครอบคลุม field ที่ Mobile และ POS Terminal อ่านหรือส่งใน flow รับจากสาขา. รายการตั้งต้นมาจาก GET /transfers-in?whsCode={selectedWarehouseTab} โดย tab คือ warehouse group ที่เลือกและอาจมี NF- variant; ทั้งสองแอปสร้าง payload เพื่อส่ง POST /transfer-in.

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

Line (lines[])

Fieldคืออะไรได้มาจาก / กติกาก่อนส่ง
lineNumลำดับ lineจาก API; line ใหม่ใช้ -1; service เรียงก่อนส่ง
itemCode, itemDescriptionรหัสและชื่อสินค้าline เดิมจาก API; line ใหม่จาก product inventory/dummy product
grossPrice, grossTotal, unitPrice, lineTotal, vatSum, itemCost, stockValue, discPercentราคา ยอด และต้นทุนของ lineจาก API/line ใหม่ แล้วแปลงเป็น number ก่อนส่ง
quantityจำนวนรับถ้ามี batch รวมมากกว่า 0 ใช้ยอดรวม batch (cal); ถ้าไม่มี ใช้จำนวนเดิมของ line
weightน้ำหนักจาก line/product แล้วแปลงเป็น number
warehouseCodeคลังรับเข้าสร้างจาก warehouse group ของ selected branch; company NFFDB prefix NF- เมื่อยังไม่มี prefix
warehouseNameชื่อคลังจาก line เดิมหรือค่าว่างใน line ใหม่
vatGroup, grRemarks, costingCode ถึง costingCode5, uomCode, uomEntryภาษี, หมายเหตุรับเข้า, cost center และหน่วยจาก API/ผลิตภัณฑ์; uomEntry แปลงเป็น number
batchNumberslot/batch ที่รับจริงส่งเฉพาะเมื่อยอด batch รวมมากกว่า 0; ดูตารางด้านล่าง

Batch (lines[].batchNumbers[])

Fieldคืออะไรได้มาจาก / กติกาก่อนส่ง
batchNumberเลข lot/batchline เดิมเลือกจาก lot API; line ใหม่ generate จาก warehouse/date และ suffix container/ทะเบียนรถ หรือผู้ใช้กรอก
quantityจำนวนที่รับใน lotผู้ใช้กรอก แล้วแปลงเป็น number
admissionDateวันที่รับเข้าใช้ receiptDate ที่ผู้ใช้เลือก; ส่งเป็น YYYY-MM-DDTHH:mm:ss
manufacturingDate, expiryDateวันที่ผลิต/หมดอายุมาจาก lot เดิมหรือ batch editor; expiryDate ส่งเป็น string ว่างได้
dueDateวันครบกำหนดห้องฝากใช้ transferInDueDate เฉพาะ selected branch ที่เป็นคลังฝาก/non-main และส่งเป็น YYYY-MM-DDTHH:mm:ss

สิทธิ์และ guard

เรื่องรายละเอียด
Terminal menu keytransferIn
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 รายการหน้ารายการผูกกับ warehouse/context tab ที่เลือก

Mobile vs POS Terminal

เรื่องMobilePOS Terminal
Product inventoryใช้ product branch context subscriptionใช้ pattern context/subscription เดียวกัน
เพิ่มสินค้าpicker เต็มจอและ quantity modalmodal ใน split-pane detail
วันที่มี receipt date และ deposit due date pickerมี receipt date และ deposit due date picker
หลังบันทึกgo back ถ้าทำได้ ไม่งั้น replace listrefresh list แล้วปิด detail

Developer Handoff Map

AreaCode
Mobile detailapps/mobile/src/screens/transferInStack/transferInDetailScreen/index.tsx
Mobile helpersapps/mobile/src/screens/transferInStack/helpers.ts
Terminal detailapps/pos-terminal/src/screens/HomeScreen/TransferInDetailForm.tsx
Mobile serviceapps/mobile/src/services/transferIn.ts
Terminal serviceapps/pos-terminal/src/services/transferIns.ts
Product inventoryservices/products.ts

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