PRD: Lệnh sản xuất
| Module | Kho | PRD ID | PRD-MFG-001 |
| Trạng thái | Chưa tạo item | FEAT | MFG |
| Epic | — | Plane | — |
| Ngày | 2026-07-13 | Phiên bản | v1.0 |
| Gói | @nx/inventory | URD | MFG |
| Surface | Client · Chủ/QL | ||
| Phụ trách | Phát Nguyễn | ||
Lệnh sản xuất là gì
Lệnh sản xuất (Production Order) là chứng từ của một mẻ hàng. Chủ merchant lập lệnh tại trang Client: chọn thành phẩm cần làm, công thức áp dụng, kho (InventoryLocation) nơi sản xuất, và số lượng kế hoạch.
Một lệnh chỉ chạy trong phạm vi một chi nhánh (Merchant). Nó nối hai đầu lại với nhau: nguyên liệu đi ra khỏi kho, thành phẩm đi vào kho, cùng một tờ lệnh, cùng một mẻ hàng.
Bốn chỉ số trong tồn kho
Trích từ Kho & mức tồn để khỏi phải mở PRD khác. Mỗi mặt hàng ở mỗi kho mang bốn con số:
| Con số | Hệ thống gọi | Nghĩa |
|---|---|---|
| Thực có | on-hand | Hàng đang nằm trong kho |
| Đang giữ | reserved | Đã hứa cho một chứng từ khác, không bán cho ai được nữa |
| Khả dụng | available | Phần còn bán được |
| Đang về | incoming | Đã rời kho gửi, chưa tới kho nhận |
Bất biến, đúng ở mọi thời điểm:
Khả dụng = Thực có - Đang giữBắt đầu chạy một lệnh là đẩy nguyên liệu từ khả dụng sang đang giữ. Thực có chỉ giảm lúc hoàn tất.
Vì sao một mẻ hàng cần chứng từ riêng
Có những thứ merchant không mua về bán thẳng mà phải tự làm ra: một mẻ bánh mì, một nồi nước dùng, một lô nước sốt đóng chai. Việc này khác món pha chế tại quầy. Món pha chế nổ công thức đúng lúc khách gọi, làm xong đưa cho khách luôn, thành phẩm không bao giờ nằm trong kho. Mẻ bánh thì làm trước, làm một lần một trăm cái, và trăm cái bánh đó nằm trong kho như một mặt hàng có tồn riêng, có số lô, có hạn dùng.
Không có lệnh sản xuất thì merchant chỉ còn cách gõ tay: trừ nguyên liệu bằng một phiếu xuất, cộng thành phẩm bằng một phiếu nhập, rồi tự nhớ hai phiếu đó thuộc cùng một mẻ. Sổ sách rời rạc. Không ai truy được 100 cái bánh này ăn hết bao nhiêu bột, mẻ nào hụt bao nhiêu cái, hay lô bánh trong tủ là mẻ ngày nào và còn hạn tới bao giờ.
Một mẻ bánh từ đầu tới cuối
Lệnh "Mẻ bánh 001": 100 cái bánh mì tại kho Bếp trung tâm. Công thức cần 5kg bột và 2kg đường cho 100 cái. Kho đang có 6kg bột. Bánh mì khai hạn dùng 3 ngày. Bếp ra lò được 98 cái.
| Việc xảy ra | Bột thực có | Bột đang giữ | Bột khả dụng | Bánh mì thực có |
|---|---|---|---|---|
| Lập lệnh 100 cái, lệnh ở trạng thái Soạn | 6 | 0 | 6 | 0 |
| Bắt đầu chạy | 6 | 5 | 1 | 0 |
| Hoàn tất, khai làm ra 98 cái | 1 | 0 | 1 | 98 |
- Bắt đầu chạy chỉ giữ bột. Thực có chưa đổi, sổ biến động chưa có dòng nào.
- Hoàn tất mới là lúc bột rời kho thật, và lúc lô bánh mới vào kho với hạn dùng bằng hôm nay cộng 3 ngày.
- Kế hoạch 100, thực tế 98, nên hao hụt 2 cái được ghi lên lệnh.
- Công thức có bán thành phẩm lồng bên trong mà bán thành phẩm đó có tồn riêng thì lệnh giữ chính nó, không lần xuống các nguyên liệu đã nấu ra nó.
Chỗ dễ sai nhất
Bắt đầu chạy là GIỮ, không phải TRỪ
Bấm Bắt đầu chạy: 5kg bột chuyển sang đang giữ cho lệnh, khả dụng giảm ngay, không đơn bán hay lệnh nào khác đụng được vào phần đó nữa. Nhưng thực có chưa giảm một gam nào, và sổ biến động chưa có dòng nào.
Trừ sổ là việc của lúc Hoàn tất, khi người làm khai lượng tiêu thụ thực. Trừ sớm ngay lúc bắt đầu thì hủy một lệnh đang chạy sẽ phải cộng ngược hàng trở lại kho, và sổ kho có một cặp bút toán ra rồi vào cho một mẻ chưa bao giờ chạy.
Hệ quả: hủy một lệnh đang chạy chỉ nhả phần đã giữ, khả dụng tăng trở lại ngay, và sổ kho sạch, không có dòng nào cho lệnh đó.
1. Mục tiêu & Loại trừ
Mục tiêu
- Cho chủ merchant lập, sửa, theo dõi và đóng một lệnh sản xuất trọn vòng đời tại trang Client.
- Ép đúng thứ tự vòng đời soạn → đang chạy → xong hoặc hủy, không cho nhảy thẳng từ soạn sang xong bằng bất cứ đường nào.
- Nối lệnh sản xuất vào kho thật: bắt đầu chạy thì nguyên liệu bị giữ cho mẻ hàng, hoàn tất thì nguyên liệu rời kho và thành phẩm vào kho, hủy giữa chừng thì nhả lại phần đã giữ.
- Đóng dấu số lô và hạn dùng cho lô thành phẩm vừa làm ra, để hàng tự sản xuất cũng theo dõi được hạn dùng như hàng nhập.
- Ghi nhận sản lượng thực tế và hao hụt của từng mẻ.
Loại trừ
- Lịch sản xuất, hoạch định công suất, xếp mẻ theo ca - lệnh sản xuất trong bản này là một tờ lệnh đơn lẻ, không có bộ xếp lịch.
- Nhân công, máy móc, chi phí chế biến cộng vào giá vốn thành phẩm - giá vốn thành phẩm nằm ngoài phạm vi bản này, xem Giá vốn.
- Sản xuất từng phần (làm được nửa mẻ thì nhập trước nửa số hàng) - một lệnh hoàn tất một lần.
- Nổ công thức lúc bán món pha chế - đó là việc của Công thức, không đi qua lệnh sản xuất.
- Bút toán kế toán cho phần hao hụt - hao hụt chỉ là một con số quan sát được trên lệnh và trong sổ biến động.
2. Thước đo thành công
| Thước đo | Mục tiêu / tín hiệu |
|---|---|
| Sổ sách khép kín | Mỗi mẻ hàng làm ra đều truy ngược được ra đúng lượng nguyên liệu đã ăn, qua một tờ lệnh duy nhất |
| Đúng vòng đời | Không có lệnh nào ở trạng thái xong mà chưa từng đi qua đang chạy |
| Hạn dùng hàng tự làm | Thành phẩm tự sản xuất có số lô và hạn dùng như hàng nhập, không phải hàng "không rõ ngày" |
| Hao hụt nhìn thấy được | Chủ quán mở lệnh cũ ra là biết mẻ đó hụt bao nhiêu, tỉ lệ hao hụt giảm dần khi tay nghề lên |
3. Persona & Tình huống
| Persona | Mục tiêu trong tính năng này |
|---|---|
| Chủ merchant (Owner) | Biết mỗi mẻ hàng ăn hết bao nhiêu nguyên liệu, hụt bao nhiêu, và hàng trong kho là mẻ nào |
| Quản lý (Manager) | Lập lệnh cho từng mẻ, bấm bắt đầu khi bếp vào việc, khai số lượng làm ra khi mẻ xong |
| Bếp trưởng / người làm | Nhìn lệnh biết mẻ này làm bao nhiêu, theo công thức nào, làm tại kho nào |
Kịch bản cốt lõi: quản lý mở màn Lệnh sản xuất tại trang Client, tạo một lệnh "Mẻ bánh 001" cho thành phẩm Bánh mì, chọn công thức, chọn kho Bếp trung tâm, đặt số lượng kế hoạch 100 cái → bếp vào việc, quản lý bấm Bắt đầu chạy, 5kg bột và 2kg đường bị giữ lại cho mẻ này, không ai lấy đi được nữa → bánh ra lò, đếm được 98 cái, quản lý bấm Hoàn tất và khai 98 → 5kg bột và 2kg đường rời kho thật, tồn Bánh mì tại Bếp trung tâm tăng 98 cái, mang số lô mới và hạn dùng 3 ngày kể từ hôm nay, hao hụt 2 cái được ghi lại trên lệnh.
4. User Stories
| # | Là một | Tôi muốn | Để |
|---|---|---|---|
| 01 | quản lý | lập một lệnh sản xuất cho một mẻ hàng | cả bếp và sổ kho cùng biết mẻ này làm gì, làm bao nhiêu, theo công thức nào |
| 02 | quản lý | bấm một nút Bắt đầu chạy là nguyên liệu tự được giữ theo công thức và tự trừ khỏi kho khi mẻ xong | tôi không phải gõ tay từng dòng phiếu xuất |
| 03 | quản lý | hệ thống báo ngay khi kho thiếu nguyên liệu | tôi biết trước lúc bếp vào việc chứ không phải giữa chừng |
| 04 | quản lý | khai số lượng thật sự làm ra khi hoàn tất | tồn thành phẩm là con số thật, không phải con số kế hoạch |
| 05 | chủ merchant | lô hàng tự sản xuất mang số lô và hạn dùng riêng | bán ra đúng thứ tự và không bán hàng quá hạn |
| 06 | chủ merchant | thấy hao hụt của từng mẻ | biết công thức có sát thực tế không và tay nghề bếp có ổn định không |
| 07 | quản lý | hủy một lệnh đang chạy mà không mất trắng nguyên liệu đã giữ | một mẻ bị bỏ dở không làm hỏng số liệu kho |
5. Yêu cầu chức năng
| # | Yêu cầu | Trạng thái | URD ref |
|---|---|---|---|
FR-001 | Một lệnh sản xuất là một chứng từ, khai đủ năm thông tin thì lưu được. • Thành phẩm cần làm: một biến thể sản phẩm hoặc một nguyên vật liệu, bắt buộc. • Công thức áp dụng: đúng một công thức cho một lệnh, bắt buộc. • Kho nơi sản xuất: nguyên liệu trừ ở đây và thành phẩm cũng vào đây, bắt buộc. • Số lượng kế hoạch và đơn vị tính, bắt buộc. • Ghi chú của người lập, là tùy chọn. | 🔶 | URD-MFG-002 |
FR-002 | Mỗi lệnh sản xuất mang một mã lệnh duy nhất trong chi nhánh (Merchant), dùng để gọi tên mẻ hàng đó ở mọi nơi khác: sổ biến động, lô thành phẩm, màn hình đang giữ hàng. | 🔶 | URD-MFG-002 · URD-LDG-004 |
FR-003 | Lệnh sản xuất đi qua đúng bốn trạng thái, theo một chiều. • Soạn: sửa được mọi thông tin, chưa đụng gì tới kho. • Đang chạy: nguyên liệu đã bị giữ cho lệnh, sổ kho chưa trừ. Công thức, kho và số lượng kế hoạch không sửa được nữa. • Xong: nguyên liệu đã rời kho, thành phẩm đã vào kho, lệnh đóng lại. • Hủy: lệnh dừng giữa chừng, đóng lại. | 🔶 | URD-MFG-001 |
FR-004 | Chỉ ba bước chuyển trạng thái là hợp lệ, mọi bước khác bị từ chối. • Soạn → Đang chạy, bằng nút Bắt đầu chạy. • Đang chạy → Xong, bằng nút Hoàn tất. • Soạn hoặc Đang chạy → Hủy, bằng nút Hủy lệnh. • Nhảy thẳng từ Soạn sang Xong bị từ chối. Lệnh đã Xong hoặc đã Hủy không đổi trạng thái được nữa. | 🚧 | URD-MFG-001 |
FR-005 | Chỉ hai loại thành phẩm lập được lệnh sản xuất. • Biến thể sản phẩm thuộc loại hàng sản xuất: món có tồn thành phẩm riêng, công thức của nó chỉ nổ khi chạy lệnh. • Nguyên vật liệu thuộc loại bán thành phẩm: thứ tự làm ra rồi đem đi làm món khác, ví dụ nước sốt tự nấu. • Món dạng ráp sẵn bị chặn vì công thức của nó nổ ngay lúc bán. Món kho hàng thường bị chặn vì bán 1 trừ 1 trên chính tồn của món. • Cổng chặn là loại món, không phải chuyện món đó có gắn công thức hay không. | 🚧 | URD-BOM-005 · URD-BOM-002 · URD-MAT-001 |
FR-006 | Bấm Bắt đầu chạy thì nguyên liệu bị giữ lại cho lệnh, chưa trừ sổ. • Hệ thống nổ công thức nhân với số lượng kế hoạch, dừng tại mọi thành phần có tồn riêng, và giữ trên chính tồn của thành phần đó. Công thức có bán thành phẩm lồng bên trong mà bán thành phẩm đó có theo dõi tồn thì giữ chính nó, không lần xuống các nguyên liệu đã dùng để nấu ra nó. • Từng nguyên liệu chuyển sang đang giữ cho chính lệnh này. Khả dụng giảm ngay, không đơn bán hay lệnh nào khác lấy được phần đó nữa. Thực có chưa đổi, vì sổ kho chỉ trừ lúc hoàn tất. • Thiếu bất kỳ nguyên liệu nào thì cả lệnh bị từ chối, báo rõ nguyên liệu nào thiếu bao nhiêu, và kho không bị đụng tới dòng nào. • Nguyên liệu đã bật cờ cho bán âm thì vẫn được cho qua dù không đủ tồn. | 🚧 | URD-MFG-003 · URD-BOM-009 · URD-RSV-003 |
FR-007 | Phần nguyên liệu giữ cho một lệnh sản xuất được ghi tên đúng lệnh đó. Màn hình đang giữ hàng của một mặt hàng vì thế bung ra được: đơn bán nào giữ bao nhiêu, phiếu chuyển nào giữ bao nhiêu, lệnh sản xuất nào giữ bao nhiêu. | 🚧 | URD-RSV-004 · URD-RSV-005 |
FR-008 | Nguyên liệu có theo dõi lô được trừ theo đúng chiến lược xuất đã cấu hình cho nguyên liệu đó, hết hạn sớm nhất trước hoặc nhập kho trước. Người làm không phải tự chọn lô. Lô nào bị ăn vào được chốt tại lúc hoàn tất, khi nguyên liệu thật sự rời kho. | 🚧 | URD-LSE-007 |
FR-009 | Bấm Hoàn tất thì nguyên liệu rời kho thật và tồn thành phẩm tăng đúng số lượng người làm khai ra. • Nguyên liệu trừ sổ theo lượng tiêu thụ thực người làm khai, không theo lượng đã giữ. Đang giữ về 0, thực có giảm đúng lượng thực dùng. Giữ nhiều hơn dùng thì phần dư nhả lại; dùng nhiều hơn giữ thì trừ tiếp phần chênh. • Lượng tiêu thụ thực điền sẵn bằng lượng đã giữ, sửa được (xem FR-016). • Số lượng thành phẩm thực tế là bắt buộc, điền sẵn bằng số lượng kế hoạch. • Tồn thành phẩm tăng tại đúng kho của lệnh, không phải kho khác. | 🚧 | URD-MFG-004 |
FR-010 | Hoàn tất lệnh đóng dấu số lô và hạn dùng cho lô thành phẩm vừa làm ra. • Số lô sinh ra cho riêng mẻ này. Người làm sửa lại được số lô trước khi xác nhận hoàn tất. • Hạn dùng bằng ngày hoàn tất cộng số ngày hạn dùng khai trên thành phẩm. Thành phẩm không khai số ngày hạn dùng thì lô không mang hạn dùng. • Lô này đi vào kho như mọi lô khác, nên hàng tự sản xuất cũng được xuất theo chiến lược hết hạn sớm nhất trước. | 🚧 | URD-MFG-005 · URD-LSE-002 |
FR-011 | Hoàn tất lệnh ghi lại sản lượng thực tế và hao hụt của mẻ. • Hao hụt bằng số lượng kế hoạch trừ số lượng thực tế. Làm ra nhiều hơn kế hoạch thì hao hụt bằng 0. • Cả ba con số kế hoạch, thực tế và hao hụt hiện trên màn chi tiết lệnh sau khi đóng, để đọc lại được về sau. | 🚧 | URD-MFG-006 |
FR-012 | Hủy một lệnh trả lại đúng thứ đã lấy ra, tùy lệnh đang ở đâu. • Hủy một lệnh đang soạn: lệnh đóng lại, kho không đổi gì vì chưa từng bị đụng tới. • Hủy một lệnh đang chạy: phần nguyên liệu đã giữ mà chưa trừ sổ được nhả lại, khả dụng tăng trở lại ngay. Sổ kho không có dòng nào, vì nguyên liệu chưa từng bị trừ. | 🚧 | URD-MFG-007 |
FR-013 | Mỗi lần kho đổi vì một lệnh sản xuất đều để lại một dòng trong sổ biến động. • Nguyên liệu rời kho lúc hoàn tất ghi một dòng, lý do là tiêu hao cho sản xuất. Lúc bắt đầu chạy chỉ giữ tồn nên chưa có dòng sổ nào. • Thành phẩm vào kho lúc hoàn tất ghi một dòng, lý do là nhập từ sản xuất. • Mỗi dòng trỏ ngược về đúng mã lệnh đã sinh ra nó, kèm tồn trước, số thay đổi và tồn sau. | 🚧 | URD-LDG-001 · URD-LDG-003 · URD-LDG-004 |
FR-014 | Màn Lệnh sản xuất tại trang Client liệt kê lệnh theo chi nhánh của chính người dùng. • Cột hiển thị: mã lệnh, thành phẩm, kho sản xuất, số lượng kế hoạch, số lượng thực tế, trạng thái, ngày lập. • Lọc theo trạng thái và theo kho. • Mở một lệnh ra xem chi tiết: danh sách nguyên liệu theo công thức đã nổ, mốc thời gian bắt đầu và hoàn tất, lô thành phẩm đã sinh ra. | 🚧 | URD-MFG-008 |
FR-015 | Giá vốn thành phẩm chia cho sản lượng thực, không chia cho sản lượng kế hoạch. • Giá vốn một đơn vị thành phẩm bằng tổng giá vốn nguyên liệu thực sự tiêu thụ chia cho số lượng thực tế làm ra. • Kế hoạch 50 lít mà bay hơi còn 47 lít thì chia cho 47. Chia cho 50 là báo giá vốn rẻ hơn thực tế. • Giá vốn này là giá nhập kho của lô thành phẩm vừa làm ra, và là giá trị được trừ đi khi bán món dùng tới bán thành phẩm đó. | 🚧 | URD-MFG-009 |
FR-016 | Nguyên liệu tiêu thụ thực được phép lệch định mức, có cảnh báo nhưng không chặn. • Người làm khai lượng nguyên liệu thực sự dùng cho mẻ, lệch được so với định mức công thức nhân số lượng kế hoạch. • Lệch quá ngưỡng thì hiện cảnh báo ngay trên form, và vẫn cho hoàn tất lệnh. • Chỗ lệch này chính là thứ merchant cần nhìn để biết bếp đang hao bao nhiêu. Khóa cứng theo định mức là bỏ mất giá trị chính của màn này. | 🚧 | URD-MFG-009 |
5.1 Tiêu chí nghiệm thu
- Mở màn Lệnh sản xuất, tạo một lệnh cho thành phẩm Bánh mì, chọn công thức, chọn kho Bếp trung tâm, đặt số lượng kế hoạch 100 cái → lệnh được lưu ở trạng thái Soạn, mang một mã lệnh duy nhất, tồn kho chưa đổi một con số nào.
- Mở một lệnh đang ở trạng thái Soạn → thấy nút Bắt đầu chạy và nút Hủy lệnh, không thấy nút Hoàn tất.
- Cố đưa một lệnh đang Soạn thẳng sang Xong → hệ thống từ chối, lệnh vẫn ở Soạn.
- Mở một lệnh đã Xong → không còn nút đổi trạng thái nào; lệnh đã Hủy cũng vậy.
- Tạo lệnh cho một món thuộc loại kho hàng thường hoặc loại ráp sẵn → hệ thống không cho chọn món đó làm thành phẩm của lệnh sản xuất.
- Tạo lệnh cho một nguyên vật liệu thuộc loại bán thành phẩm (nước sốt tự nấu) → hệ thống cho chọn món đó làm thành phẩm của lệnh.
- Công thức cần 5kg bột và 2kg đường cho 100 cái bánh; kho Bếp trung tâm có 6kg bột và 3kg đường → bấm Bắt đầu chạy → lệnh chuyển sang Đang chạy, bột đang giữ 5kg và khả dụng còn 1kg, đường đang giữ 2kg và khả dụng còn 1kg, thực có vẫn là 6kg bột và 3kg đường.
- Cùng lệnh đó nhưng kho chỉ còn 3kg bột → bấm Bắt đầu chạy → hệ thống từ chối, báo thiếu 2kg bột, lệnh vẫn ở Soạn, bột và đường không bị giữ hay bị trừ đồng nào.
- Cùng lệnh đó, đường đã bật cờ cho bán âm và tồn đường đang 0 → bấm Bắt đầu chạy → lệnh chạy được, khả dụng của đường xuống âm 2kg, bột vẫn bị giữ bình thường.
- Công thức có bán thành phẩm lồng bên trong, và bán thành phẩm đó có theo dõi tồn (nước sốt tự làm, tồn 3 lít) → bấm Bắt đầu chạy → hệ thống giữ trên chính tồn nước sốt, còn nguyên liệu đã dùng để nấu ra nước sốt (cà chua, dầu) không bị giữ - chúng đã bị trừ ở lệnh sản xuất nấu nước sốt.
- Cùng công thức đó, nhưng nước sốt khai là món dạng ráp sẵn không có tồn riêng → bấm Bắt đầu chạy → hệ thống đi tiếp một tầng và giữ cà chua, dầu theo đúng định lượng.
- Mở màn tồn của bột trong lúc lệnh đang chạy → phần đang giữ bung ra được và thấy dòng "Lệnh sản xuất MBA-001" kèm số lượng đang giữ.
- Bột có hai lô, lô A hạn 2026-07-20 và lô B hạn 2026-07-25, chiến lược xuất là hết hạn sớm nhất trước → bấm Hoàn tất → lô A bị trừ trước cho tới hết mới sang lô B.
- Lệnh đang chạy, thành phẩm Bánh mì khai hạn dùng 3 ngày → bấm Hoàn tất và khai 98 cái làm ra → 5kg bột và 2kg đường đang giữ được trừ sổ, thực có bột còn 1kg và đường còn 1kg, phần đang giữ về 0; tồn Bánh mì tại Bếp trung tâm tăng 98, lô mới sinh ra mang hạn dùng bằng ngày hôm nay cộng 3 ngày.
- Cùng bước hoàn tất, sửa số lô đề xuất thành mã của riêng quán → xác nhận → lô thành phẩm mang đúng mã đã sửa.
- Hoàn tất với kế hoạch 100 và thực tế 98 → màn chi tiết lệnh hiện kế hoạch 100, thực tế 98, hao hụt 2.
- Hoàn tất với kế hoạch 100 và thực tế 103 → hao hụt hiện 0, tồn thành phẩm tăng 103.
- Hoàn tất một lệnh của thành phẩm không khai số ngày hạn dùng → lô thành phẩm vẫn sinh ra với số lô, phần hạn dùng để trống.
- Hủy một lệnh đang ở Soạn → lệnh đóng lại, tồn kho không đổi gì.
- Hủy một lệnh Đang chạy → phần nguyên liệu đã giữ mà chưa trừ sổ được nhả lại, số khả dụng của nguyên liệu đó tăng trở lại ngay, thực có không đổi, sổ biến động không có dòng nào cho lệnh này, lệnh chuyển sang Hủy.
- Mở sổ biến động của bột sau khi hoàn tất một lệnh → thấy một dòng xuất với lý do tiêu hao cho sản xuất, trỏ về đúng mã lệnh, kèm tồn trước, số trừ và tồn sau.
- Mở sổ biến động của Bánh mì sau khi hoàn tất → thấy một dòng nhập với lý do nhập từ sản xuất, trỏ về đúng mã lệnh đó.
- Mở màn Lệnh sản xuất, lọc trạng thái Đang chạy và kho Bếp trung tâm → danh sách chỉ còn các lệnh đang chạy tại kho đó, không thấy lệnh của merchant khác.
6. Yêu cầu phi chức năng
| Khía cạnh | Yêu cầu |
|---|---|
| Đúng thứ tự khi nhiều người cùng bấm | Hai người cùng bấm Bắt đầu chạy trên một lệnh thì chỉ một lần chuyển trạng thái thành công và nguyên liệu chỉ bị giữ đúng một lần; người còn lại nhận thông báo lệnh đã đổi trạng thái |
| Trọn vẹn hoặc không gì cả | Một lần bắt đầu chạy giữ hết mọi nguyên liệu hoặc không giữ dòng nào; một lần hoàn tất trừ sổ nguyên liệu, tăng tồn thành phẩm và ghi lô cùng lúc, không có trạng thái nửa vời |
| Ghi sổ không trùng | Cùng một lệnh, dù thao tác bị lặp lại do mạng chập chờn hoặc bấm hai lần, chỉ ghi đúng một dòng sổ cho mỗi mặt hàng liên quan |
| Phân quyền theo merchant | Lệnh sản xuất là dữ liệu riêng của từng merchant; xóa là xóa mềm, khôi phục được |
| Độ chính xác số | Số lượng và định lượng nguyên liệu tính tới 4 chữ số thập phân |
| i18n | Nhãn trạng thái và lý do biến động hiển thị song ngữ Việt - Anh |
7. UX & Luồng
Màn Lệnh sản xuất nằm trong nhóm Kho tại trang Client, dành cho chủ merchant và quản lý. Người bán tại POS không thấy màn này - mẻ hàng làm xong rồi thì thành phẩm chỉ còn là một mặt hàng có tồn bình thường trên menu.
8. Dữ liệu & Miền nghiệp vụ
| Khái niệm | Vai trò |
|---|---|
| Lệnh sản xuất | Chứng từ điều khiển một mẻ hàng: thành phẩm, công thức, kho, số lượng kế hoạch, số lượng thực tế, hao hụt, trạng thái |
| Thành phẩm mục tiêu | Mặt hàng được làm ra - một biến thể sản phẩm hoặc một nguyên vật liệu bán thành phẩm |
| Công thức | Định lượng nguyên liệu cho một đơn vị thành phẩm; nhân với số lượng kế hoạch ra lượng nguyên liệu cần cho cả mẻ |
| Giữ tồn của lệnh | Phần nguyên liệu cam kết cho một lệnh sản xuất, mang tên chính lệnh đó |
| Lô thành phẩm | Lô sinh ra khi hoàn tất lệnh, mang số lô và hạn dùng của chính mẻ đó |
| Hao hụt | Chênh lệch số lượng kế hoạch trừ số lượng thực tế làm ra, ghi trên lệnh |
| Dòng sổ biến động | Dấu vết mỗi lần kho đổi vì lệnh: nguyên liệu ra và thành phẩm vào, cả hai ghi tại lúc hoàn tất |
Chỉ ở mức khái niệm - schema đầy đủ nằm trong domain model Kho.
9. Phụ thuộc & Giả định
Phụ thuộc vào
| # | Feature | Phụ thuộc điều gì |
|---|---|---|
| 01 | BOM Công thức | lệnh sản xuất chạy theo một công thức đã kích hoạt; công thức nổ đa cấp nhưng dừng tại mọi thành phần có tồn riêng. |
| 02 | RSV Giữ tồn | lệnh sản xuất là một người giữ tồn, dùng chung cơ chế giữ - nhả với đơn bán và phiếu chuyển kho. |
| 03 | LSE Lô, hạn dùng & chiến lược xuất | xuất nguyên liệu theo chiến lược đã cấu hình, và đóng dấu lô cho thành phẩm làm ra. |
| 04 | LDG Sổ biến động | mọi thay đổi tồn do lệnh sinh ra đều ghi một dòng sổ trỏ về lệnh. |
| 05 | STK Mục kho & mức tồn và LOC Địa điểm kho | nơi nguyên liệu bị trừ và thành phẩm được nhập. |
Giả định
| # | Giả định | Sai thì sao |
|---|---|---|
| 01 | Một mẻ hàng làm xong trong một lần; không có nhu cầu nhập trước một phần thành phẩm khi mẻ mới xong nửa chừng. | Xưởng làm mẻ dài ngày sẽ phải chờ tới cuối mẻ mới có hàng bán, hoặc lách bằng cách chẻ ra nhiều lệnh nhỏ và mất dấu vết của một mẻ. |
| 02 | Nguyên liệu được lấy ra và thành phẩm được nhập vào cùng một địa điểm kho. | Bếp trung tâm nấu rồi giao cho quầy thì phần chuyển giữa hai kho không có chứng từ, và tồn thành phẩm nằm sai chỗ cho tới khi có người lập phiếu chuyển kho. |
| 03 | Số ngày hạn dùng của thành phẩm khai sẵn trên chính mặt hàng đó, không khai lại trên từng lệnh. | Mẻ mùa hè hỏng nhanh hơn mẻ mùa đông mà số ngày là một hằng số thì lô mang hạn dùng sai, và chiến lược xuất hết hạn sớm nhất trước xuất nhầm thứ tự. |
| 04 | Chi phí nhân công và chế biến chưa cộng vào giá vốn thành phẩm trong bản này. | Giá vốn thành phẩm thấp hơn thực tế, nên lãi gộp của món tự sản xuất bị báo cao hơn thực tế. |
10. Kế hoạch phát hành & Tiêu chí
| Khía cạnh | Kế hoạch |
|---|---|
| Phase | P2 (Kho) - xem danh mục feature URD |
| Rollout | Mở cho merchant có mặt hàng thuộc loại hàng sản xuất; merchant bán lẻ thuần và quán chỉ pha chế tại quầy không cần bật |
| Migration | Không có dữ liệu lệnh sản xuất thật cần chuyển đổi |
| Tiêu chí phát hành | Một mẻ hàng chạy trọn vòng đời trên trang Client: lập lệnh, bắt đầu chạy giữ đúng nguyên liệu theo công thức, hoàn tất trừ sổ đúng phần đã giữ và tăng đúng tồn thành phẩm kèm số lô và hạn dùng, hao hụt ghi đúng, hủy giữa chừng nhả đúng phần đã giữ; mọi thay đổi tồn đều để lại dòng sổ trỏ về lệnh |
| Theo dõi | Số lệnh chạy mỗi tuần theo merchant, tỉ lệ hao hụt trung bình theo thành phẩm, số lệnh bị hủy sau khi đã bắt đầu chạy |
Tham chiếu
- URD: Lệnh sản xuất · Công thức
- Liên quan: Giữ tồn & chặn bán quá tay · Lô, hạn dùng & chiến lược xuất · Sổ biến động · Nguyên vật liệu
- Module: Kho - URD
- Developer: @nx/inventory · domain model
Rủi ro & Câu hỏi mở
| # | Rủi ro / câu hỏi | Giảm thiểu / trạng thái |
|---|---|---|
| 01 | Nguyên liệu chỉ bị trừ sổ lúc hoàn tất, nên trong lúc bếp đang làm, sổ kho vẫn nói bột còn nằm trong kho dù thực tế bột đã vào lò | Phần bột đó ở trạng thái đang giữ nên không ai lấy đi được và khả dụng đã giảm ngay (FR-006); riêng con số thực có thì đúng là lệch với thực tế trong lúc mẻ đang chạy - chấp nhận được vì mẻ hàng thường chỉ chạy trong ngày |
| 02 | Mẻ bị hủy giữa chừng vì cháy, hỏng hoặc bếp bỏ dở: nguyên liệu đã thật sự vào nồi nhưng hệ thống lại nhả hết phần đã giữ về khả dụng | Hủy lệnh nhả phần đã giữ (FR-012); phần nguyên liệu đã thật sự hỏng thì trừ ra bằng một lần kiểm kê hoặc một phiếu xuất hủy, không đi qua lệnh sản xuất |
| 03 | Sửa công thức trong lúc một lệnh đang chạy có thể làm lượng nguyên liệu đã giữ lúc bắt đầu khác với lượng trừ sổ lúc hoàn tất | Mở: chốt việc chụp lại định lượng công thức lên lệnh tại thời điểm bắt đầu chạy, và trừ sổ đúng theo bản đã chụp |
| 04 | Giá vốn thành phẩm bị tính theo sản lượng kế hoạch thay vì sản lượng thực, làm giá vốn rẻ hơn thực tế | Đã chốt: giá vốn một đơn vị bằng tổng giá vốn nguyên liệu thực sự tiêu thụ chia cho sản lượng thực (FR-015). Kế hoạch 50 lít mà bay hơi còn 47 thì chia cho 47. |
| 05 | Sản xuất từng phần (nhập trước nửa mẻ) là nhu cầu thật của xưởng lớn nhưng không nằm trong bản này | Mở: theo dõi nhu cầu thật của merchant trước khi mở phiếu con như bên chuyển kho |
| 06 | Mẻ hàng hụt nhiều lần liên tiếp có thể là do công thức sai chứ không phải bếp làm hỏng | Hao hụt ghi trên từng lệnh (FR-011), đủ dữ liệu để chủ quán tự đối chiếu lại công thức |
Câu hỏi thường gặp
| # | Câu hỏi | Trả lời |
|---|---|---|
| 01 | Lệnh sản xuất khác gì với món pha chế nổ công thức lúc bán? | Món pha chế làm ngay khi khách gọi và đưa thẳng cho khách - thành phẩm không bao giờ nằm trong kho, nên không cần lệnh. Lệnh sản xuất dành cho hàng làm trước hàng loạt rồi cất vào kho: mẻ bánh, nồi nước dùng, lô nước sốt. Thành phẩm của lệnh có tồn riêng, có số lô, có hạn dùng. |
| 02 | Vì sao bắt đầu chạy chỉ giữ nguyên liệu chứ không trừ luôn? | Vì giữ đã đủ để không ai lấy nhầm: 5kg bột chuyển sang đang giữ cho lệnh, khả dụng của bột giảm ngay, một món khác hay một lệnh khác không đụng vào phần đó được nữa. Trừ sổ là việc chốt sổ, nên để tới lúc mẻ xong mới làm - lúc đó mới biết mẻ có thật sự chạy hết hay bị bỏ dở. Đây cũng đúng cách chuyển kho đang làm: giữ hàng ở kho nguồn trước, tới lúc hàng rời kho thật mới trừ. |
| 03 | Làm ra nhiều hơn kế hoạch thì sao? | Khai đúng số làm ra thật, tồn thành phẩm tăng đúng con số đó. Hao hụt hiện 0. Số lượng kế hoạch chỉ dùng để tính lượng nguyên liệu cần lấy ra lúc bắt đầu, nó không giới hạn số lượng nhập vào kho. |
| 04 | Hủy giữa chừng có lấy lại được nguyên liệu không? | Có. Lệnh đang chạy mới chỉ giữ nguyên liệu chứ chưa trừ sổ, nên hủy là nhả hết phần đã giữ, khả dụng tăng trở lại ngay và sổ kho không có dòng nào. Nếu mẻ đã lỡ tay làm hỏng một phần nguyên liệu thật thì phần hỏng đó trừ ra bằng kiểm kê hoặc phiếu xuất hủy, không nằm trong lệnh sản xuất. |
| 05 | Hạn dùng của lô thành phẩm tính từ đâu? | Từ ngày bấm Hoàn tất, cộng số ngày hạn dùng khai sẵn trên chính thành phẩm đó. Bánh mì khai 3 ngày, hoàn tất hôm nay thì lô đó hết hạn sau 3 ngày. Thành phẩm không khai số ngày hạn dùng thì lô chỉ có số lô, không có hạn dùng. |
| 06 | Một lệnh có làm được nhiều loại thành phẩm cùng lúc không? | Không. Một lệnh, một công thức, một thành phẩm, một kho. Cần làm hai loại thì lập hai lệnh. |
| 07 | Công thức của mẻ có bán thành phẩm bên trong thì lệnh giữ cái gì? | Giữ chính bán thành phẩm đó, nếu nó có tồn riêng. Nước sốt tự làm đã được một lệnh khác nấu ra và lệnh đó đã trừ cà chua với dầu rồi, nên lệnh này chỉ giữ nước sốt và dừng lại ở đó. Lần xuống tới cà chua nữa là trừ hai lần cho cùng một số hàng. |