Skip to content

Inventory Ticket

1. Tổng quan

Thuộc tínhGiá trị
IDFEAT-INV-TICKET
StatusBeta (giai đoạn P2)
Ownerinventory-team
Phụ thuộcInventoryStock, InventoryLocation, Vendor (loại partner), Customer (loại partner), Material / ProductVariant (line items)

InventoryTicket là một workflow document cho các thao tác stock cần phê duyệt trước khi thực thi: transfer giữa các location, adjustment thủ công, đối chiếu cycle count, return, và scrap. Ticket có các dòng (InventoryTicketItem) và một vòng đời nhiều giai đoạn. Không có hiệu ứng stock cho đến khi ticket đạt COMPLETED — lúc đó các dòng điều khiển các lời gọi adjustStock.

2. Mô hình Entity

Trường InventoryTicket

TrườngKiểuBắt buộcMô tả
merchantIdtextOwner
typetextXem §3
statustextXem §4
partnerTypetextVENDOR / CUSTOMER / NULL
partnerIdtextFK target
sourceLocationIdtextCho TRANSFER
destinationLocationIdtextCho TRANSFER
submittedAt / approvedAt / startedAt / completedAt / cancelledAttimestamptzTimestamp theo từng trạng thái
notetextTự do

Trường InventoryTicketItem

TrườngKiểuBắt buộcMô tả
inventoryTicketIdtextFK
inventoryStockIdtextBucket đích (resolve khi submit)
itemTypetextMATERIAL / PRODUCT_VARIANT
itemIdtextFK target id
plannedQuantitydecimal(15,4)Lượng được yêu cầu
actualQuantitydecimal(15,4)Lượng thực sự áp dụng (cho cycle count vs adjustment)
uomIdtextSoft ref
multiplierdecimal(15,4)UoM-to-base

3. Các loại Ticket

Nguồn: InventoryTicketTypes.

TypeTác dụng stock khi COMPLETEGhi chú
PURCHASE_REQUESTKhông (chỉ thông tin)Kích hoạt tạo PO downstream (hôm nay là thủ công)
STOCK_IN+plannedQuantity mỗi lineNhận hàng thủ công không qua PO
TRANSFER source + + destination mỗi lineAtomic mỗi cặp; emit MATERIAL_TRANSFERRED nếu là material
INTERNAL_USE−plannedQuantity mỗi lineSử dụng nội bộ kitchen / văn phòng
ADJUSTMENT± actualQuantity mỗi lineHiệu chỉnh do operator
CYCLE_COUNT± actualQuantity−countedĐối chiếu với count vật lý
RETURN_TO_VENDOR−plannedQuantity mỗi lineLiên kết với partner Vendor
RETURN_FROM_CUSTOMER+plannedQuantity mỗi lineLiên kết với partner Customer
SCRAP_DISPOSAL−plannedQuantity mỗi lineĐánh dấu lý do (DAMAGED / EXPIRED)

4. Vòng đời

TừSự kiệnĐếnTác dụng
DRAFTsubmitSUBMITTEDLock items
SUBMITTEDapproveAPPROVEDCổng phê duyệt
APPROVEDstartIN_PROGRESSPicker bắt đầu làm
IN_PROGRESScompleteCOMPLETEDÁp dụng tác dụng stock cho từng line
any non-terminalcancelCANCELLEDTerminal — không có tác dụng stock
Status codeHiển thị
001_DRAFTDRAFT
200_SUBMITTEDSUBMITTED
250_APPROVEDAPPROVED
300_IN_PROGRESSIN_PROGRESS
303_COMPLETEDCOMPLETED
505_CANCELLEDCANCELLED

5. Vận hành

InventoryTicketService (inventory-ticket.service.ts — 40 dòng)

Kế thừa CRUD từ MerchantScopedService<TInventoryTicketSchema, ...>. Các chuyển vòng đời được wire qua endpoint update + guard ở cấp service (TBD — hiện các phương thức vòng đời còn tối thiểu).

InventoryTicketItemService (inventory-ticket-item.service.ts — 89 dòng)

Phương thứcMục đích
CRUD (kế thừa)Quản lý các dòng
Tác dụng stock khi parent COMPLETELặp các dòng và gọi InventoryStockRepository.adjustStock mỗi line

6. REST Endpoints

VerbPathAuthPermission
6× CRUD/inventory-ticketsJWT/BASICInventoryTicket.<crud>
6× CRUD/inventory-ticket-itemsJWT/BASICInventoryTicketItem.<crud>
LifecycleTBD (submit / approve / start / complete / cancel)JWT/BASICInventoryTicket.<action>

7. Sự kiện

Outbound:

TopicKhi nào
material.transferredSau khi ticket TRANSFER complete cho line material
WebSocket observation/inventory/inventory-stockSau mỗi adjustStock của từng line

8. Idempotency khi COMPLETE

Mỗi line ghi một row tracking key theo (INVENTORY_TICKET, ticketId, inventoryStockId). Chạy lại complete (vd từ retry) sẽ trúng idempotency lookup và bỏ qua các line đã áp dụng.

9. Trang liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.