FE: module stock_count — kiểm kê #
Phần chung (khởi tạo client, lỗi, danh sách, ngôn ngữ) ở tài liệu FE của Core:
docs/fe/common.md; mẫu in: docs/fe/cms.md (bản đọc: xforge-documentation,
ADR-0102 của xforge-core). Sửa file này CÙNG PR khi đổi hành vi FE thấy được của
module.
Chỉ có ở CMS (XforgeClient). Menu: key stock_count.counts (quyền
stock_count.read). listStockCounts lọc status, warehouse_id; q tìm số
phiếu.
Vòng đời #
open → reconciled (chốt, điều chỉnh tồn) hoặc cancelled. Phiếu chưa chốt
xoá được. Chưa chốt thì kho chưa đổi gì.
Mỗi phiếu có actions (danh sách + chi tiết): thao tác người gọi làm được lúc
này, đã xét cả trạng thái lẫn quyền (superuser thấy hết). Bật / tắt nút theo đó,
đừng tự suy từ status. actions là chuỗi, giá trị lạ thì bỏ qua.
actions | Gọi | Trạng thái | Quyền |
|---|---|---|---|
reconcile | reconcileStockCount | open | stock_count.reconcile |
cancel | cancelStockCount | open | stock_count.create |
delete | deleteStockCount | open, cancelled | stock_count.delete |
Gọi sai trạng thái → 409 stock_count_invalid_status (details.status,
details.action): đọc lại phiếu.
Mở phiếu #
createStockCount (quyền stock_count.create): warehouseId, note?,
lines: [{
variantId, batchId?, serialId?, uomId?, countedQty }], tối đa 500
dòng. countedQty ≥ 0 (đếm thấy 0 là một kết quả). systemQty là số sổ lúc mở
phiếu theo đơn vị gốc, difference = baseCountedQty − systemQty (dương thừa, âm
thiếu).
Số liệu chốt theo lúc mở phiếu: mở rồi để lâu mà hàng vẫn ra vào thì chênh lệch không còn đúng. Nên mở phiếu ngay sau khi đếm xong.
Lô / serial. Biết chế độ qua getStockTracking, chọn lô / serial từ
listStockBatches / listStockSerials.
| Chế độ | Mỗi dòng | Lỗi |
|---|---|---|
none | Theo biến thể, không gửi lô / serial | 400 stock_count_ref_not_allowed |
batch | Đúng một batchId | 400 stock_count_batch_required; 404 stock_count_batch_not_found |
serial | Đúng một serialId, đếm 0 / 1, đơn vị gốc | 400 stock_count_serial_required, stock_count_serial_qty_unit; 409 stock_count_serial_not_countable (details.status) |
Lỗi theo dòng (error.at = lines.<i>), ngoài các lỗi trên:
- 400
stock_count_variant_invalid,stock_count_uom_invalid,stock_count_qty_not_exact; - 400
stock_count_duplicate_line: cùng biến thể / lô / serial hai lần; - 409
stock_count_already_open(details.number): phiếu khác đang mở của kho đã đếm dòng này. Hiện số phiếu để người dùng chốt hoặc huỷ phiếu đó.
Lỗi của phiếu: 400 stock_count_warehouse_invalid.
Chốt #
reconcileStockCount: mỗi dòng có chênh lệch thành một điều chỉnh kho, cùng
transaction; thừa vào phiếu PN-…, thiếu vào phiếu PX-…, mục đích
stock_count.
Không có lỗi thiếu hàng. Số đếm là sự thật: chốt được cả khi đẩy tồn xuống
dưới phần đã giữ chỗ, hoặc âm. Sau khi chốt, available có thể âm: màn tồn kho
nên làm nổi. Nên cảnh báo trước khi chốt nếu có dòng thiếu nhiều.
Serial: đếm 0 chuyển sang damaged, đếm 1 về in_stock. Lỗi của một dòng
mang error.at = items.<i>, i là thứ tự dòng trong items của phiếu (không
phải body lúc tạo).
Giá vốn #
Phiếu không mang giá vốn; chốt không cần stock.view_cost, và phần hàng thừa
vào sổ không có giá vốn.
Mẫu in: stock_count.sheet #
printDocument({ params: { name: "stock_count.sheet", id } }), quyền
stock_count.read. Phiếu kiểm kê: lô / serial, số đếm, số sổ, chênh lệch từng
dòng; không có giá vốn. Không gửi email. Thiếu quyền, sai id hay phiếu của store
khác đều trả 404.