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

ย้ายสินค้าตู้แช่

เมนูย้ายสินค้าตู้แช่ใช้ย้าย stock จาก warehouse group ของสาขาปัจจุบันไปยังคลัง/ตู้แช่ปลายทาง เป็น flow แบบเอกสาร: บันทึก header ก่อน, เพิ่ม/แก้/ลบรายการสินค้า, ระบุ batch ให้ครบ แล้วจึงส่งเอกสารเข้า B1

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

AppTarget
MobileTransferWarehouseList -> TransferWarehouseDetail
POS TerminaltransferWarehouse -> TransferWarehouseDetailForm

Lifecycle ของเอกสาร

Workflow พร้อมเงื่อนไข

กฎ Header

กฎรายละเอียด
ต้องเลือกคลังต้องมี whsCode และ whsName ของคลัง/ตู้แช่ปลายทางก่อนบันทึก
เปลี่ยนบริษัทMobile block การเปลี่ยนบริษัทหลังมี item แล้ว ถ้าต้องเปลี่ยนต้องลบรายการสินค้าออกให้หมดก่อน
ข้อมูลเจ้าของHeader เก็บ branch, warehouse group, user code, responsible user, company, destination warehouse, notes และยอดรวม
Create vs updateถ้ายังไม่มี transferBranchId จะ create header; ถ้ามีแล้วจะ patch header เดิม
รายการคลังปลายทางตัวเลือก warehouse/sub-warehouse ปลายทางกรอง record ที่เป็น NF-/DR- ออกก่อนแสดง

กฎ Item และ Batch

กฎรายละเอียด
สิทธิ์แก้ itemเฉพาะเจ้าของเอกสารเท่านั้นที่เพิ่ม/แก้/ลบ item ได้ ส่วนการเลือก batch ขึ้นกับ canUserPickBatch(user)
item ที่มี batch เดิมถ้า item มี batch แล้ว ห้ามเพิ่มจำนวนมากกว่าจำนวนเดิม Mobile จะ trim batch เดิมเมื่อลดจำนวน
จำนวนสินค้าจำนวนย้ายต้องมากกว่า 0
ต้องมี batchเมื่อ user ต้องเลือก batch ต้องมีอย่างน้อย 1 batch และทุก batch ต้องมีเลข batch กับจำนวนมากกว่า 0
ยอด batchเมื่อบังคับ batch ยอดรวม batch ต้องเท่ากับจำนวนย้ายของ item พอดี
ห้าม batch ซ้ำใน item เดียวกันห้ามมี batch number ซ้ำ
ยอดคงเหลือ lotสินค้าที่ไม่ใช่ dummy ห้ามใส่จำนวนเกินยอดคงเหลือของ lot ที่เลือก
วันที่ตรวจ expiry/due date ก่อนบันทึก ถ้าเปิดเงื่อนไข transfer due date/deposit logic ต้องให้ due date มากกว่าวันรับเข้า
Dummy itemdummy transfer item ใช้ batch ที่ generate/manual ได้ ไม่ต้อง lookup lot
warehouse code ใน payloaditem payload ส่งทั้งคลังปลายทาง warehouseCode และคลังต้นทาง fromWarehouseCode โดย normalize ตามกฎ warehouse-code ของบริษัท

กฎการส่ง B1

Service / API

OperationService
ListGET /transfer-branches?page=...&branchId=...&whGrpCode=... ผ่าน getTransferWarehouses โดยส่ง whGrpCode ของ warehouse group ที่ผู้ใช้ login อยู่เพื่อกรองรายการ
DetailGET /transfer-branches/:id ผ่าน getTransferWarehouseById
Header createPOST /transfer-branches ผ่าน createTransferWarehouse
Header updatePATCH /transfer-branches/:id ผ่าน updateTransferWarehouse
Header deleteDELETE /transfer-branches/:id ผ่าน deleteTransferWarehouse
Item create/update/deletecreateTransferWarehouseItem, updateTransferWarehouseItem, deleteTransferWarehouseItem
Integration ปลายทางsendTransferWarehouseToB1(transferBranchId)

ใน service มี DISABLE_TRANSFER_WAREHOUSE_MUTATION_API สำหรับเปลี่ยน mutation เป็น dry-run cache ได้ ตอนโค้ดที่ตรวจอยู่ค่านี้เป็น false

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

เมนูนี้ต่างจากสามเมนูข้างต้น เพราะแอปสร้างและแก้ header/item เองผ่าน REST API โดยตรง ไม่ได้รับเอกสารต้นทางจาก MST. รายการใช้ GET /transfer-branches (กรองด้วย selected branchId และ whGrpCode), รายละเอียดใช้ GET /transfer-branches/:id, แล้วบันทึก header และ item ตามตารางนี้

Header เอกสาร (POST/PATCH /transfer-branches)

Fieldคืออะไรได้มาจาก / กติกาก่อนส่ง
transferBranchId, transferBranchNo, createdAtID, เลข และเวลาสร้างเอกสารbackend คืนหลัง create/list/detail; ไม่ส่งใน create/update payload
whsCode, whsNameรหัสและชื่อคลัง/ตู้แช่ปลายทางผู้ใช้เลือกจาก warehouse picker; ต้องมีทั้งคู่
companyCode, companyNameรหัสและชื่อบริษัทผู้ใช้เลือก; ถ้าว่างใช้ค่า default จาก getCompanyOption
notesหมายเหตุเอกสารผู้ใช้กรอก
branchId, branchNameสาขาที่สร้างเอกสารselected branch (BranchId/branchId, BranchName fallback whsGrpName)
amountยอดรวมเอกสารแอปส่ง 0 ใน header payload ปัจจุบัน
whGrpCode, whGrpNamewarehouse group ของผู้สร้างselected branch
userCodeรหัสเจ้าของเอกสารuser ที่ login
userResponsibleชื่อผู้รับผิดชอบชื่อ + นามสกุล user; Terminal fallback userName/username
priceListprice list สำหรับ B1ค่าคงที่ -2

Item (POST/PATCH /transfer-branches/:id/items)

Fieldคืออะไรได้มาจาก / กติกาก่อนส่ง
idID itembackend คืนใน detail; ใช้เลือก endpoint update/delete; ไม่ส่งใน item payload
productCode, productNameรหัสและชื่อสินค้าผู้ใช้เลือกจาก product inventory หรือ dummy item
warehouseCodeคลังปลายทางของ itemคลังที่ผู้ใช้เลือกใน header/item แล้ว normalize ตามกฎบริษัทก่อนส่ง
fromWarehouseCodeคลังต้นทางของ itemค่าเดิมของ item ก่อน; fallback selected whsGrpCode; normalize ตามกฎบริษัทก่อนส่ง
qty, priceจำนวนย้ายและราคาต่อหน่วยผู้ใช้กรอก/มาจาก product; แปลงเป็น number; qty ต้องมากกว่า 0
UOMCode, UOMEntryหน่วยและ ID หน่วยจาก product/item; UOMEntry fallback 0
remarkหมายเหตุ itemผู้ใช้กรอก
batchNumbersbatch ที่ย้ายผู้ใช้เลือก lot หรือกรอกสำหรับ dummy; ต้องครบตามสิทธิ์/กฎ batch

Batch (items[].batchNumbers[])

Fieldคืออะไรได้มาจาก / กติกาก่อนส่ง
batchNumber, quantityเลขและจำนวน batchผู้ใช้เลือก/กรอก; quantity แปลงเป็น number และยอดรวมต้องเท่ากับ qty เมื่อบังคับเลือก batch
admissionDateวันที่รับเข้าอ่าน addmisionDate/admissionDate ของ batch เดิมได้; เมื่อส่งใช้ admissionDate เป็น YYYY-MM-DDTHH:mm:ss
manufacturingDate, expiryDateวันที่ผลิต/หมดอายุbatch เดิมหรือวันปัจจุบันเป็น fallback
dueDateวันครบกำหนดจาก batch editor และส่งเป็น YYYY-MM-DDTHH:mm:ss

สิทธิ์และ guard

เรื่องรายละเอียด
Terminal menu keytransferWarehouse
deptCode ที่เห็นเมนู-2, 1, 2, 3, 4, 7, 29, 21, 8, 9, 12, 13, 16, 20, 22, 23, 27, 28
เงื่อนไขสาขาallowNonMainBranch = true; ผู้ใช้คลังสาขาย้าย stock ภายในสาขาได้
Full non-main accessผู้ใช้ที่มีสิทธิ์ full access ของ non-main warehouse ผ่าน menu access ได้
เจ้าของเอกสารผู้ใช้ที่สร้าง/บันทึกเอกสารเป็นเจ้าของสิทธิ์แก้ item และส่ง B1
สิทธิ์เลือก batchcanUserPickBatch(user) คุมสิทธิ์ระบุ batch rows; deptCode ปัจจุบันคือ 2, 4, 8, 12, 22, 28, 29

Mobile vs POS Terminal

เรื่องMobilePOS Terminal
Detailstack detail screendetail form ใน HomeScreen
Header saveensureTransferBranch / handleSaveHeadersaveHeader ระหว่าง submit item
Guard บริษัทblock เปลี่ยนบริษัทเมื่อมี item แล้วใช้เจตนาเดียวกันใน detail flow
Batch pickerโหลด lot ด้วย source warehouse ที่แปลงตาม companyโหลด lot จาก warehouse group/company ของสาขา
ส่ง B1ต้องเป็นเจ้าของ + item/batch ครบใช้กฎเจ้าของ + ความครบเดียวกัน

Developer Handoff Map

AreaCode
Mobile detailapps/mobile/src/screens/transferWarehouseStack/transferWarehouseDetailScreen/index.tsx
Mobile serviceapps/mobile/src/services/transferWarehouse.ts
Terminal detailapps/pos-terminal/src/screens/HomeScreen/TransferWarehouseDetailForm.tsx
Terminal serviceapps/pos-terminal/src/services/transferWarehouse.ts
Product lot lookupservices/common.ts / getProductLots
Product inventoryservices/products.ts

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