PRD: Đơn sản xuất & phân rã BOM
| Module | Kho (CORE-06) | PRD ID | PRD-PRO-001 |
| Trạng thái | Shipped | Chủ sở hữu | Inventory squad |
| Ngày | 2026-06-15 | Phiên bản | v1.0 |
| Packages | @nx/inventory · @nx/core | URD | PRO · REC · TRK |
TL;DR
Mang lại cho merchant kiểu sản xuất một đơn sản xuất rõ ràng - chứng từ nói "sản xuất bấy nhiêu của thành phẩm này từ công thức này, tại địa điểm này". Mỗi đơn nhắm tới một thành phẩm (biến thể bán được hoặc nguyên vật liệu bán thành phẩm), gắn với một công thức đã kích hoạt (BOM), và mang số lượng kế hoạch / thực tế / hao hụt, một vòng đời (
DRAFT → IN_PROGRESS → DONE / CANCELLED), cửa sổ lịch và truy vết lô đầu ra cho thu hồi. Phía sau là engine phân rã BOM đa cấp làm phẳng công thức gắn kèm qua các bán thành phẩm lồng nhau xuống tận nguyên vật liệu lá thực sự rút khỏi tồn - với hệ số số lượng nhân dọc theo từng nhánh, một độ sâu lồng tối đa, và phát hiện chu trình - cùng một bộ từ vựng tracking chuyên dụng (PRODUCTION_CONSUME/PRODUCTION_OUTPUT) ghi nhận tiêu hao và đầu ra theo đơn.
1. Bối cảnh & Vấn đề
Mô hình công thức (REC) cho phép merchant F&B đính một định mức nguyên vật liệu có phiên bản vào một biến thể, và đường runtime tự trừ nguyên liệu khi một phiếu bếp tiến triển. Việc đó lo bán-rồi-trừ, nhưng không lo sản xuất-vào-kho: một tiệm bánh nướng 200 ổ lúc 6h sáng, một bếp trung tâm nấu mẻ sốt, một xưởng lắp bộ kit. Những merchant này lên kế hoạch một lượt sản xuất trước khi bán, theo một công thức, và cần một chứng từ theo dõi cái gì được lên kế hoạch, cái gì thực sự làm ra, và cái gì bị hao hụt.
Không có đơn sản xuất thì không có chỗ cho một lượt đã lên kế hoạch: không có số liệu kế hoạch-vs-thực tế-vs-hao hụt, không có số sản xuất để tham chiếu, không có vòng đời để đưa một lượt từ nháp sang xong, và không có lô đầu ra để truy thu hồi về. Cũng không có cách tổng quát để mở rộng một công thức mà bản thân nó chứa bán thành phẩm (một khối bột vốn cũng là một công thức) xuống tận nguyên vật liệu thô mà một lượt tiêu hao.
Increment này cung cấp chứng từ đơn sản xuất, mô hình vòng đời và định danh của nó, engine phân rã BOM đa cấp làm phẳng công thức lồng nhau xuống nguyên vật liệu lá, và bộ từ vựng tracking sản xuất ghi nhận tiêu hao và đầu ra - nền tảng mà một lượt sản xuất-vào-kho dựng trên đó.
2. Mục tiêu & Không-mục-tiêu
Mục tiêu
- Một chứng từ đơn sản xuất nhắm tới thành phẩm (biến thể hoặc nguyên vật liệu), gắn với công thức đã kích hoạt, phạm vi theo merchant.
- Mang số lượng kế hoạch / thực tế / hao hụt theo đơn vị đo của đơn ở độ chính xác thập phân.
- Một trạng thái vòng đời với chuyển đổi xác định (
DRAFT → IN_PROGRESS → DONE / CANCELLED) và một số sản xuất sinh tự động, duy nhất. - Một địa điểm sản xuất có tên, cửa sổ lịch tuỳ chọn, và lô / hạn dùng đầu ra cho truy vết thu hồi.
- Một engine phân rã BOM đa cấp làm phẳng công thức gắn kèm qua bán thành phẩm lồng nhau xuống nguyên vật liệu lá, lan truyền hệ số số lượng, dùng phiên bản công thức đã kích hoạt mới nhất, và chốt chặn độ sâu chạy loạn lẫn chu trình.
- Một bộ từ vựng tracking chuyên dụng (
PRODUCTION_CONSUME/PRODUCTION_OUTPUT, reference typeProductionOrder) để tiêu hao thành phần và đầu ra thành phẩm được ghi như biến động bất biến theo đơn.
Không-mục-tiêu
- Thực thi vòng đời tự động - các hành động start/complete vật lý rút thành phần và ghi thành phẩm khi hoàn thành là một increment sắp tới; PRD này cung cấp chứng từ, engine phân rã, và từ vựng tracking chúng sẽ dùng.
- Hoạch định công suất, lập lịch trung tâm sản xuất, hay chi phí nhân công/khấu hao.
- Mô hình hoá tỷ lệ yield và hao hụt của công thức (phạm vi URD) - hao hụt được ghi như số lượng tuyệt đối trên đơn, không suy từ tỷ lệ yield.
- Tính giá sản xuất đa tiền tệ hay định giá tồn kho.
- Bản thân quy tắc soạn công thức (phiên bản, kích hoạt, tính duy nhất của mục) - đặc tả tại Công thức / BOM (REC).
3. Số liệu Thành công
| Số liệu | Mục tiêu / tín hiệu |
|---|---|
| Phủ chứng từ sản xuất | Một lượt được biểu diễn bởi một đơn mang kế hoạch / thực tế / hao hụt và một số sản xuất duy nhất |
| Toàn vẹn vòng đời | Trạng thái chỉ đi theo chuyển đổi hợp lệ; DONE và CANCELLED là tận cùng |
| Tính đúng phân rã | Một công thức gắn kèm phân rã đúng ra nguyên vật liệu lá của nó, với số lượng từng nhánh = tích của đường đi |
| An toàn phân rã | Một chuỗi công thức có chu trình hay cây sâu hơn tối đa bị từ chối, không bao giờ lặp |
| Từ vựng audit | Biến động sản xuất là mục bất biến kiểu PRODUCTION_CONSUME / PRODUCTION_OUTPUT và tham chiếu tới đơn |
4. Chân dung & Tình huống
| Chân dung | Mục tiêu trong tính năng |
|---|---|
| Chủ / Quản lý | Lên kế hoạch một lượt sản xuất theo công thức và theo dõi kế hoạch vs. thực tế vs. hao hụt |
| Nhân viên sản xuất | Đưa một đơn qua vòng đời và ghi cái gì thực sự làm ra |
| Cán bộ chất lượng / thu hồi | Truy một lô đã sản xuất về đơn và các thành phần nó rút |
Tình huống cốt lõi: chủ tiệm bánh tạo một đơn sản xuất để nướng 200 ổ baguette từ công thức đã kích hoạt "Baguette - chuẩn" tại bếp chính, lên lịch 06:00 ngày mai. Hệ thống gán một số sản xuất và mở đơn ở DRAFT. Công thức gắn kèm - mà khối bột của nó vốn là một công thức con gồm bột mì, nước và men - được làm phẳng xuống nguyên vật liệu lá, với mỗi số lượng lá được nhân theo 200 đơn vị kế hoạch. Khi lượt sau đó được làm và hoàn thành, tiêu hao thành phần và đầu ra thành phẩm được ghi như mục tracking bất biến theo đơn.
5. Câu chuyện Người dùng
- Là một chủ, tôi lên kế hoạch một lượt bằng cách nêu thành phẩm, công thức, số lượng và địa điểm, để một đơn sản xuất tồn tại theo dõi nó.
- Là một chủ, tôi ghi số lượng kế hoạch, thực tế và hao hụt, để thấy một lượt hoạt động ra sao.
- Là nhân viên sản xuất, tôi đưa một đơn
DRAFT → IN_PROGRESS → DONE, hoặc huỷ nó, để trạng thái phản ánh thực tế. - Là một chủ, tôi muốn một công thức có bán thành phẩm được mở rộng tới nguyên vật liệu thô mà một lượt tiêu hao, để thấy lượng rút thật trên tồn.
- Là một chủ, tôi muốn một công thức tham chiếu chính nó thành vòng lặp bị từ chối, để một lượt không bao giờ tính một danh sách thành phần vô tận.
- Là một cán bộ thu hồi, tôi truy một lô đã sản xuất về đơn và đọc các thành phần nó tiêu hao, để khoanh vùng một đợt thu hồi.
6. Yêu cầu Chức năng
| # | Yêu cầu | URD ref |
|---|---|---|
| FR-1 | Một đơn sản xuất nhắm tới thành phẩm (ProductVariant hoặc Material) và gắn với một công thức nguyên vật liệu | URD-PRO-001..002 |
| FR-2 | Đơn mang số lượng kế hoạch / thực tế / hao hụt theo đơn vị đo của nó ở độ chính xác thập phân | URD-PRO-003 |
| FR-3 | Đơn đi qua DRAFT → IN_PROGRESS → DONE / CANCELLED; DONE và CANCELLED là tận cùng | URD-PRO-004 |
| FR-4 | Mỗi đơn có một số sản xuất sinh tự động, duy nhất, không sửa bởi người dùng | URD-PRO-005 |
| FR-5 | Đơn nêu một địa điểm sản xuất nơi thành phần được rút và thành phẩm được làm ra | URD-PRO-006 |
| FR-6 | Đơn hỗ trợ cửa sổ lịch và ghi mốc thời gian bắt đầu / hoàn thành / huỷ | URD-PRO-007..008 |
| FR-7 | Đơn có thể mang một số lô đầu ra và hạn dùng cho truy vết thu hồi | URD-PRO-009 |
| FR-8 | Đơn sản xuất cô lập theo merchant và soft-delete | URD-PRO-010 · URD-CON-002 |
| FR-9 | Một công thức gắn kèm được làm phẳng qua bán thành phẩm lồng nhau xuống nguyên vật liệu lá, dùng phiên bản công thức đã kích hoạt mới nhất mỗi principal | URD-PRO-011..012 |
| FR-10 | Làm phẳng bị chốt bởi độ sâu lồng tối đa và từ chối chuỗi công thức chu trình; mỗi số lượng lá là tích của các số lượng dọc đường đi của nó | URD-PRO-013..014 |
| FR-11 | Một thành phần biến thể không có công thức con đã kích hoạt bị bỏ qua; một nguyên vật liệu không có công thức con là một lá tiêu hao trực tiếp | URD-PRO-015 |
| FR-12 | Tiêu hao thành phần và đầu ra thành phẩm được ghi như mục tracking bất biến tham chiếu tới đơn, kiểu PRODUCTION_CONSUME / PRODUCTION_OUTPUT | URD-PRO-016 · URD-TRK-001..005 |
Toàn văn yêu cầu và tiêu chí nghiệm thu nằm tại URD Kho - PRO. PRD này tham chiếu thay vì lặp lại chúng.
7. Yêu cầu Phi chức năng
| Lĩnh vực | Yêu cầu |
|---|---|
| Tenancy & authz | Mọi thao tác phạm vi theo merchant (x-merchant-id) và gated bởi quyền đơn sản xuất |
| Toàn vẹn định danh | Số sản xuất là duy nhất và sinh tự động; không bao giờ do người dùng cấp |
| Độ chính xác | Số lượng kế hoạch / thực tế / hao hụt và thành phần dùng độ chính xác thập phân (4 chữ số) |
| An toàn phân rã | Làm phẳng bị chốt độ sâu và canh chu trình - một đồ thị công thức méo lỗi nhanh, không bao giờ lặp |
| Hiệu năng phân rã | Đồ thị BOM được nạp trước theo truy vấn theo lô, theo từng cấp để làm phẳng chạy trong bộ nhớ không round-trip mỗi node |
| Bất biến | Biến động sản xuất là mục tracking chỉ-thêm; sửa chữa qua mục mới, không bao giờ sửa |
| i18n | Trạng thái và nhãn lý do hướng người dùng là song ngữ ({ en, vi }) |
8. Trải nghiệm & Luồng
Vòng đời
Phân rã BOM đa cấp
Bề mặt sản xuất cho chủ chọn thành phẩm và công thức, đặt số lượng kế hoạch và đơn vị, chọn địa điểm, tuỳ chọn lên lịch lượt và gán nhãn lô đầu ra, rồi đưa đơn qua vòng đời. Engine phân rã mở rộng công thức gắn kèm tới nguyên vật liệu lá mà một lượt tiêu hao.
9. Dữ liệu & Miền
| Thực thể | Vai trò |
|---|---|
ProductionOrder | Chứng từ sản xuất - thành phẩm nhắm tới, công thức gắn kèm, kế hoạch/thực tế/hao hụt, trạng thái, địa điểm, số sản xuất, lịch, lô đầu ra |
MaterialRecipe | Định mức đã kích hoạt mà đơn gắn vào; công thức bán thành phẩm được đệ quy khi phân rã |
MaterialRecipeItem | Một dòng thành phần - một nguyên vật liệu lá tiêu hao trực tiếp, hoặc một principal có công thức con đã kích hoạt riêng |
InventoryTracking | Biến động bất biến phía sau tiêu hao / đầu ra sản xuất, kiểu bởi các lý do sản xuất |
Chỉ khái niệm - schema và bất biến đầy đủ nằm trong domain model kho. Quan hệ là tham chiếu mềm; toàn vẹn được thực thi trong service, không bởi ràng buộc CSDL.
10. Phụ thuộc & Giả định
Phụ thuộc vào
- Công thức / BOM (REC, PRD-REC-001) - một đơn sản xuất gắn với một công thức đã kích hoạt, mà engine phân rã làm phẳng.
- Nguyên vật liệu (MAT, PRD-MAT-001) - thành phần lá của một công thức đã phân rã là nguyên vật liệu.
- Địa điểm kho (LOC) - một đơn nêu địa điểm nó sản xuất tại.
- Audit trail biến động (TRK) - tiêu hao / đầu ra sản xuất được ghi như mục tracking bất biến.
@nx/core- mô hình đơn sản xuất, từ vựng trạng thái, và các lý do sản xuất.
Giả định
- Một thành phẩm có ít nhất một phiên bản công thức đã kích hoạt để gắn vào.
- Địa điểm nhắm tới tồn tại trong merchant.
- Một thành phần biến thể nên phân rã thì mang công thức con đã kích hoạt riêng; nếu không nó bị bỏ qua khi phân rã.
11. Rủi ro & Câu hỏi mở
| Rủi ro / câu hỏi | Giảm thiểu / trạng thái |
|---|---|
| Một công thức tham chiếu chính nó, lặp danh sách thành phần | Phân rã phát hiện chu trình và từ chối đồ thị |
| Một cây công thức lồng sâu chạy loạn | Phân rã bị chốt bởi độ sâu lồng tối đa và lỗi nhanh vượt mức |
| Dùng phiên bản công thức con cũ | Phân rã luôn giải phiên bản đã kích hoạt mới nhất mỗi principal |
| Thành phần biến thể không phân rã được | Một biến thể không có công thức con đã kích hoạt bị bỏ qua (nó không phải nguyên vật liệu), được warn, không bao giờ phát như lá |
| Thực thi vòng đời chưa tự động | Có chủ ý - hành động start/complete rút thành phần và ghi đầu ra đến trong một increment sắp tới; chứng từ, engine và từ vựng tracking đã sẵn |
12. Kế hoạch Phát hành & Tiêu chí Ra mắt
| Khía cạnh | Kế hoạch |
|---|---|
| Phase | P3 (BOM + nâng cao) - PRO trong catalog tính năng URD, bên cạnh MAT và REC |
| Triển khai | Merchant ngành sản xuất / F&B; không feature flag |
| Di trú | Không - bảng đơn sản xuất và các lý do sản xuất ship cùng schema kho |
| Tiêu chí ra mắt | Một đơn có thể tạo với target, công thức, số lượng kế hoạch và địa điểm; một số sản xuất được gán và trạng thái mở ở DRAFT; trạng thái chỉ đi theo chuyển đổi hợp lệ; một công thức gắn kèm phân rã ra nguyên vật liệu lá với số lượng đã nhân; đồ thị chu trình / quá sâu bị từ chối; biến động sản xuất mang các lý do sản xuất và tham chiếu tới đơn |
| Giám sát | Lỗi phân rã theo lý do (chu trình, độ sâu), số đơn sản xuất theo trạng thái, tỷ lệ giải nguyên vật liệu lá |
13. FAQ
Đơn sản xuất khác trừ tồn theo công thức bếp ra sao? Trừ tồn bếp là bán-rồi-trừ - nó nổ khi một mục phiếu tiến triển. Đơn sản xuất là làm-vào-kho - một lượt đã lên kế hoạch theo công thức, với kế hoạch/thực tế/hao hụt và vòng đời riêng, ghi trước (hoặc độc lập với) bất kỳ giao dịch bán nào.
"BOM đa cấp" ở đây nghĩa là gì? Một thành phần công thức có thể tự nó là một principal có công thức đã kích hoạt riêng (một khối bột bên trong một ổ baguette). Phân rã đệ quy vào những bán thành phẩm đó tới khi đạt nguyên vật liệu lá, nhân số lượng dọc đường đi.
Cái gì ngăn một vòng lặp công thức treo hệ thống? Phân rã theo dõi công thức đã thăm và áp một độ sâu lồng tối đa - một chu trình hay một cây quá sâu bị từ chối ngay thay vì lặp.
Phiên bản công thức nào được dùng? Luôn là phiên bản đã kích hoạt mới nhất cho mỗi principal; bản nháp hoặc đã vô hiệu bị bỏ qua.
Hoàn thành một đơn có rút tồn tự động hôm nay không? Chưa - chứng từ, gắn công thức, engine phân rã và từ vựng tracking sản xuất (PRODUCTION_CONSUME / PRODUCTION_OUTPUT) đã sẵn; việc thực thi tự động ghi các biến động đó khi hoàn thành là một increment sắp tới.
Tham chiếu
- URD: Kho - PRO · REC · MAT · TRK
- PRD anh em: Công thức / bill of material · Nguyên vật liệu · Stock, items & movement tracking
- Module: Kho - tổng quan + truy vết
- Developer: @nx/inventory · @nx/core · domain model