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

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

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

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