Hưng Thịnh Foods · Food Manufacturing ERP · Product Architecture

HTF Food Manufacturing ERP — kiến trúc sản xuất, bán hàng & truy xuất

HTF không phải catering. Chuỗi đúng là mua chân gà nguyên liệu nguyên xương, nhận hàng/QC, rút xương, đóng gói nhiều quy cách, bán cho đại lý/siêu thị, rồi truy xuất được từng lô nguyên liệu → thành phẩm → fulfillment/giao hàng. Tài liệu này gom lại phần giữ sạch, cần đổi nghĩa, cần dọn, và nên build tiếp.

🏭 Nguyên xương → rút xương → đóng gói 🧊 500g · 1000g · 5000g · carton 🔁 Sales Order → Work Order → Finished Goods → Fulfillment 🚫 Không catering · không legacy demand depth 🗓️ 22/06/2026 🔀 5 góc nhìn: Architecture · Manufacturing · Sales · Lark · Technical plan

Kiến trúc tổng thể HTF — food manufacturing ERP, đầy đủ để team review

Executive summary · bounded contexts · use case catalog · flow end-to-end · data model canvas · sequence · UI mockup · roadmap · câu hỏi review

1 · Executive architecture summary

HTF Platform là gì & kiến trúc đang ở đâu

Định vị & phạm vi

  • HTF là gì: web-first food-manufacturing ERP cho Hưng Thịnh Foods — sơ chế thực phẩm (flagship: chân gà rút xương). Không còn là catering. Demand driver là Sales Order + stock target, execution là Work Order + Inventory movement + QA evidence.
  • ERP scope hiện tại (foundation đã có): Auth/Org, Master Data nền (Party/Supplier, UOM, physical catalog compatibility), Procurement (RFQ/PO), Receiving/GRN, Inventory (lot/FEFO/movement), Internal Transfer, Reports, Data Onboarding, UI shell.
  • Target scope: Item Master semantics → Sales/O2C foundation → Procurement source decoupling + receiving/QC → Manufacturing formula/BOM + Work Order → Inventory fulfillment + Traceability → Reports + AR/invoice/logistics/advanced planning.
  • Spine mục tiêu: Sales Order / Stock Target → Production Plan / Work Order → consume raw lots → produce finished-goods lots + by-product/yield/loss → QA hold/release → Inventory → Sales Fulfillment → Traceability / Recall / Reports.
  • Clean-slate direction: Item Master vocabulary là target; physical catalog names chỉ là compatibility; legacy demand depth + retired planning/formula surfaces đã freeze; US-060 active-source strict check chặn new non-exempt references.
2 DEC
DEC-0040 manufacturing realignment · DEC-0041 Sales O2C foundation (accepted)
15 use case
Bao phủ onboarding → sales → procure → produce → QA → fulfill → trace → report
9 context
Org · Master Data · Sales · Procurement · Receiving/QC · Inventory · Manufacturing · Traceability · Auth/Foyer
US-060
Clean-slate guard: frozen baseline + 0 new non-exempt active-source refs

What is planned / changed / implemented

Trạng thái phản ánh Harness truth (DEC/US), không phải runtime proof mới. Chi tiết runtime nằm ở các tab Manufacturing/Sales/Technical plan.

KhốiTrạng tháiGhi chú
ERP foundation (Auth/Org/Master Data nền/Procurement/GRN/Inventory/Transfer/Reports/Onboarding)ImplementedTái dùng từ foundation. Giữ làm nền; Sites đổi nghĩa thành plant/warehouse/cold storage.
Clean-slate guard (retired surfaces frozen, active-source strict check)Changed · US-060Retired runtime surfaces fail-closed; frozen compatibility baseline; strict scanner. Story changed, chưa implemented tới khi cleanup proof đóng.
Sales / O2C foundation (customer role/profile, price list, sales order, charges, fulfillment qua Inventory)Planned · US-059Accepted bằng DEC-0041; planned bằng US-059. Là demand driver chính.
Item Master semantics (raw/WIP/finished_good/by_product/packaging)PlannedPhysical catalog tables là compatibility cho tới khi rename/migration hoàn tất.
Procurement source decoupling (generic source thay legacy planning FK)PlannedHistorical source vẫn gắn legacy lineage; cần generic source enum.
Manufacturing (formula/BOM versioning, Work Order, inputs/outputs/by-product, QA disposition)PlannedNet-new manufacturing spine; build sau khi Sales/Inventory source rõ.
Traceability read model (lot genealogy, recall query) + manufacturing reportsPlannedRead model trên movement/WO/GRN/fulfillment facts.
AR/invoice/payment · shipment logistics · advanced planning/MRPDeferredChỉ giữ cấu trúc FK chứa được; không build logic ở slice đầu.
📐
Ranh giới docs-only vs runtime: tài liệu này là architecture truth (DEC/US/domain map). Nó không chứng minh runtime behavior. Runtime proof nằm trong story validation + TEST_MATRIX + local validation commands. "Planned/Changed" = Harness status, không phải "đã chạy".

Bounded contexts & ownership

Ranh giới sở hữu — ai sở hữu sự thật nào

Feature-first Hexagonal/DDD, static ERP module registration. Foyer chỉ là headless auth/runtime provider boundary; Desktop/Electron deferred.

🏢 Organization

Company profile, regions, sites (plant / warehouse / cold storage / sales warehouse). Scope cho mọi document.

📇 Master Data

Business parties + party roles, customer profiles, supplier profiles, sales channels, Item Master target (physical catalog compatibility), UOM/conversion.

🧾 Sales

Commercial demand: price lists, sales orders, lines, charges/allocations, events. Sở hữu commercial promise — không sở hữu stock vật lý.

🛒 Procurement

Purchase orders, lines, generic source, events. Mua nguyên liệu theo material requirement.

📥 Receiving / QC

GRN, received lots (supplier lot, expiry, temp), incoming QC hold/release trước khi vào Inventory.

📦 Inventory

Physical stock proof: batch/lot identity, stock levels, FEFO, append-only movements, stock documents (kể cả sales fulfillment). Sở hữu allocation + movement.

🏭 Manufacturing

Formula/BOM + versions, work orders, inputs/outputs, by-products, yield/loss, QA dispositions. Work Order là quyền sản xuất.

🔎 Traceability read model

Lot genealogy + recall query — read-only projection trên movement/WO/GRN/fulfillment, không tự ghi facts.

🔐 Auth / Foyer boundary

Headless auth/runtime provider. Permission htf.*, role profile htf-*, scope theo site/region. Không import Foyer UI/shell.

⚖️
3 quy tắc sở hữu cốt lõi: Business API owns business facts · Inventory owns physical stock proof · Sales owns commercial demand · Master Data owns parties + item/customer/supplier reference. Fulfillment slice đầu tiên: Sales tạo demand, Inventory stock document chứng minh xuất hàng.

3 · Use case catalog

15 use case chính — actor · trigger · steps · context · entities · proof · deferred

Mỗi use case neo vào một bounded context sở hữu và bộ entity/table chính. "Proof" là kỳ vọng validation; "Deferred" là phần ngoài slice đầu.

1Customer onboardingMaster Data
ActorSales / Data Admin
TriggerKhách mua mới được duyệt
StepsTạo/chọn party → thêm role customer → fill customer profile (kênh, hạn mức, payment terms, rate phí VC/KG, % CK) → duyệt → sinh mã
Entitiesbusiness_parties, business_party_roles (+customer), customer_profiles
ProofRole CHECK cho phép customer; profile mirror supplier_profiles; một party có thể vừa supplier vừa customer
DeferredBảng customer-segment riêng
2Sales channel / price list setupSales · Master Data
ActorSales Manager / Pricing
TriggerKỳ giá mới / thêm kênh
StepsĐịnh nghĩa channel → tạo price list → thêm price-list item (item×channel×period×tier, VAT) → gán customer price list → duyệt
Entitiessales_channels, price_lists, price_list_items, customer_price_lists, price_periods
ProofValidity window + current-key uniqueness (list, item, channel, UOM, currency, scope, tier)
DeferredPromo engine; internal target/floor chỉ là planning guard
3Sales order creationSales
ActorSales
TriggerNhu cầu mua của khách
StepsChọn customer → thêm dòng (item, qty, price-list lookup) → charges (freight/discount/support) → totals snapshot → lưu draft
Entitiessales_orders, sales_order_lines, sales_order_charges, sales_order_charge_allocations, sales_order_events
ProofTotals VO snapshot (không computed UI); charges là condition row riêng; idempotency key
DeferredQuotation → order (W3)
4Sales order approvalSales
ActorSales Manager
TriggerĐơn submitted
StepsReview → kiểm tra tín hiệu tồn/sản xuất → approve/reject → transition + append event
Entitiessales_orders (status), sales_order_events
ProofTransition guard draft→submitted→approved→…; permission htf.sales.order:approve
DeferredChặn vượt hạn mức tín dụng (W3)
5Stock target / planning demandManufacturing
ActorPlanner / PPF
TriggerStock target (MTS) hoặc kế hoạch sản xuất
StepsĐặt finished-good stock target → suy ra production demand → feed work order creation
Entitiesproduction plan / stock target (net-new), work_orders
ProofDemand link tới WO; MTS hội tụ cùng WO với MTO
DeferredMRP/ATP nâng cao
6Procurement raw materialProcurement
ActorProcurement
TriggerMaterial requirement (reorder / WO / sales-driven)
StepsTạo PO với generic source → dòng → duyệt → gửi supplier
Entitiespurchase_orders, purchase_order_lines, PO sources, PO events
ProofGeneric source (manual / reorder / production plan / work order / sales-driven); legacy lineage chỉ cho historical rows
DeferredLiên kết sâu source = production plan / WO
7GRN / receiving / incoming QCReceiving · QC
ActorWarehouse / QA
TriggerSupplier giao hàng
StepsNhận theo PO → ghi received lot (supplier lot, nhiệt độ, expiry) → incoming QC hold/release → post vào Inventory
Entitiesgrn, received lots, incoming QC, inventory_batches
ProofSupplier lot bắt buộc cho nguyên liệu chân gà; held stock chưa khả dụng
DeferredCCP record đầy đủ
8Work order creationManufacturing
ActorProduction planner
TriggerĐơn MTO hoặc kế hoạch MTS
StepsChọn formula/BOM version → đặt target output qty → reserve inputs → release WO
Entitiesformulas, formula_versions, work_orders, work_order_inputs
ProofWO là production authority; version cố định lúc release
DeferredScheduling / capacity planning
9Raw material issue to productionInventory · Manufacturing
ActorWarehouse / Production
TriggerWO đã release
StepsPick raw lot (FEFO) → issue theo WO input → post stock_movements (consume)
Entitieswork_order_inputs, stock_movements, inventory_batches
ProofAppend-only consume movement link lot → WO (mắt xích trace)
DeferredShop-floor terminal
10Production output: FG / WIP / by-product / lossManufacturing · Inventory
ActorProduction
TriggerWO execution
StepsGhi outputs (FG lot, WIP, xương by-product), yield & loss → tạo FG lot → post produce movement
Entitieswork_order_outputs, by-products, inventory_batches, stock_movements
ProofYield/loss reconciliation; by-product là first-class output
DeferredCosting / variance tài chính
11QA hold / releaseQA
ActorQA
TriggerLot vừa nhận / vừa sản xuất
StepsĐặt lot on hold → kiểm tra → disposition (release / reject / rework) → cập nhật availability
EntitiesQA dispositions, inventory_batches (status)
ProofHeld stock bị loại khỏi ATP; reuse Quality Policy + Hold/Release contract
DeferredHACCP/CCP audit đầy đủ, certification
12Inventory batch / lot trackingInventory
ActorInventory
TriggerMọi stock event
StepsDuy trì batch identity, stock levels, FEFO, movement ledger
Entitiesinventory_batches, stock levels, stock_movements
ProofAppend-only ledger; lot identity là trung tâm trace
DeferredBin/location depth nhiều kho
13Sales fulfillment từ inventory stock documentInventory ← Sales
ActorWarehouse
TriggerĐơn đã duyệt
StepsTạo stock document business_purpose='sales_fulfillment' → allocate batch → ordered vs fulfilled → post sales_fulfillment_out
Entitiesstock_documents, stock document lines, stock_movements, sales_order_lines (fulfilled qty)
ProofFirst fulfillment slice reuse Inventory doc; partial fulfillment first-class
DeferredShipment/carrier logistics aggregate (chỉ khi cần tracking)
14Traceability / recallTraceability read model
ActorQA / Compliance
TriggerRecall hoặc customer/audit query
StepsQuery lot genealogy: FG lot → WO → consumed raw lots → supplier; hoặc supplier lot → mọi shipment/khách bị ảnh hưởng
Entitieslot genealogy, recall query (read model trên movement/WO/GRN/fulfillment)
ProofTrace 2 chiều (forward + backward) từ FK thật, không từ mã nhập tay
DeferredGS1 / regulatory export package
15ReportsReports
ActorManagement
TriggerChu kỳ báo cáo
StepsRead-only facts → yield/loss, supplier rejection, stock aging/expiry, fill rate, quality hold, recall readiness
Entitiesread model trên Inventory / Manufacturing / Sales facts
ProofRead-only, không sinh write mới; thay reports catering-centric cũ
DeferredBI/dashboard depth, costing report

4 · End-to-end flow diagrams

5 flow xương sống — box & arrow

Mỗi flow ghi rõ context sở hữu từng bước. Hộp viền cam đậm = điểm quyết định/phê duyệt; badge = context.

A · Order-to-Cash (Sales flow)

Customer demand
Sales OrderSales
ApproveSales Mgr
Fulfillment docInventory
Stock movement outInventory
Invoice / AR · deferred

Sales sở hữu order; Inventory chứng minh xuất hàng. Invoice/AR chỉ giữ FK chứa được (W3).

B · Plan-to-Produce

SO / Stock target
Work OrderManufacturing
Issue raw lotsInventory
Produce FG + by-productManufacturing
QA hold/releaseQA
FG lot khả dụng

MTO (từ SO) và MTS (từ stock target) hội tụ ở Work Order. Yield/loss/by-product ghi nhận lúc produce.

C · Procure-to-Stock

Material requirement
Purchase OrderProcurement
GRN receivingReceiving
Incoming QCQA
Batch + supplier lotInventory
Raw stock khả dụng

PO source là generic; supplier lot bắt buộc để giữ mắt xích recall từ nguyên liệu.

D · Fulfillment

Approved SO
Đủ FG khả dụng?
Allocate batch (FEFO)Inventory
Stock document fulfillmentInventory
Ordered vs fulfilled qtySales
Partial / fulfilled / closed

Partial fulfillment là first-class; SO line giữ ordered/fulfilled/remaining qty.

E · Traceability (recall)

Customer shipment
FG lotInventory
Work OrderManufacturing
Consumed raw lotsInventory
GRN / supplier lotReceiving
Supplier (nguồn gốc)

Backward trace từ shipment về supplier lot; forward trace ngược lại tìm mọi khách bị ảnh hưởng — đều qua FK + read model.


5 · Data model canvas

Bản đồ data model — context cluster & quan hệ

Mỗi khối là một bounded context với entity chính; đường nối là quan hệ FK/flow chính. Item Master target là vocabulary chuẩn; physical catalog chỉ là compatibility.

scope supplier·item customer · price · item item (BOM) PO→GRN received lot consume · produce lot sales_fulfillment lot genealogy Organization company_profile regions · price_periods sites (plant/warehouse/cold) Master Data business_parties business_party_roles customer_profiles supplier_profiles sales_channels item_master target item_groups · UOM (physical catalog = compatibility only) Procurement purchase_orders · _lines po_sources (generic) po_events Receiving / QC grn · received_lots incoming_qc (hold/release) supplier lot · expiry Manufacturing formulas · formula_versions work_orders work_order_inputs work_order_outputs by_products · yield/loss qa_dispositions (legacy formula = history) Sales price_lists · price_list_items customer_price_lists sales_orders sales_order_lines sales_order_charges sales_order_charge_allocations sales_order_events owns commercial demand; no physical stock Inventory inventory_batches (lot identity) stock_levels (FEFO) stock_movements (append-only) stock_documents stock_document_lines business_purpose=sales_fulfillment owns physical stock proof Traceability read model lot_genealogy recall_query read-only projection trên movement · WO · GRN · fulfillment
Organization Master Data / Manufacturing / Trace Sales / Procurement Inventory / Receiving quan hệ trọng tâm read-model projection

Đường cam = quan hệ trọng tâm (customer/price/item, consume/produce lot, sales_fulfillment). Item Master target thay physical catalog compatibility khi rename hoàn tất.


6 · Sequence diagrams

3 sequence chính

A · Sales order → approval → fulfillment → inventory movement

Sales Sales Manager Sales domain Inventory create order (lines + charges, totals snapshot) submit for approval approve → transition draft→approved + event request fulfillment (stock document) allocate batch (FEFO) post sales_fulfillment_out · return fulfilled qty SO line: ordered vs fulfilled → partial/fulfilled

B · Work order → issue raw material → produce finished goods → QA release

Production Manufacturing Inventory QA release WO (formula version + inputs) issue raw lots (FEFO) post consume movement (lot→WO) record FG + by-product + yield/loss create FG lot · post produce movement FG lot on hold → QA inspect disposition release → lot khả dụng (vào ATP)

C · Traceability recall query: customer shipment → raw supplier lot

QA / Compliance Trace read model Inventory Manufacturing + GRN recall query (FG lot / shipment) trace fulfillment movement → FG lot FG lot → WO → consumed raw lots raw lot → GRN → supplier lot genealogy: shipment ↔ supplier (2 chiều)

Mọi mắt xích nối bằng FK + append-only movement; recall đi 2 chiều (forward: supplier lot → khách; backward: khách → supplier).


7 · UI mockups (architecture-level)

5 màn hình product surface

Wireframe mức kiến trúc giúp reviewer hình dung surface — không phải bản thiết kế cuối, không phải app code.

✎ Wireframe minh họa surface, không phải bản thiết kế cuối.
1 · Sales Order workspace — commercial demand
Sales OrderItem MasterFulfillmentTrace
Customer
KH001 — Ngọc Tú I-Food
Channel
ST — Siêu thị
Ship-from site
Chọn warehouse…
Status
Draft → Submitted
Order lines (price-list lookup)
Item ▾UOMOrderedUnit priceFulfilledRemaining
FG-CGRX-0500 ▾Khay3.00044.00003.000
FG-CGRX-1000 ▾Khay50089.0000500
+ Thêm dòng…
Σ line amount176.500.000
Charge · discount− 8.825.000
Charge · freight (rate snapshot)+ 1.750.000
VAT+ 16.767.500
Totals (snapshot VO)186.192.500
Lưu nhápGửi duyệt
Charges = condition row riêng (freight/discount/support) + allocation theo dòng
2 · Item Master / Price list setup — reference + condition record
Item
FG-CGRX-0500 — Chân gà rút xương 500g
Item type
finished_good
Sales UOM
Khay (↔ KG)
Price list items (item × channel × period, validity-governed)
Channel ▾PeriodTier (min qty)Price (before VAT)VATStatus
ST — Siêu thị2026-Q2≥ 1.00044.00010%Approved
ĐL — Đại lý2026-Q2≥ 50042.50010%Approved
NM — Nhà máy/OEM2026-Q2≥ 5.00040.00010%Draft
Current-key uniqueness: list × item × channel × UOM × currency × scope × tier. Internal target/floor là planning guard riêng.
Xem thêm mockup: Work Order board · Inventory lot trace · QA hold/release
3 · Work Order board / detail — production authority
WO-2614
Released
WO-2615
Issuing raw
WO-2616
Producing
WO-2617
QA hold
WO-2616 detail — formula CGRX-0500 v3 · target 3.000 khay
I/OItemPlannedActualLot
InputRAW chân gà nguyên xương1.500 kg1.512 kgRM-LOT-8841
Output FGFG-CGRX-05003.000 khay2.970 khayFG-LOT-5520
By-productXương (bone)410 kgBP-LOT-1203
LossHao hụt2,1%
By-product là first-class output; yield/loss reconcile input vs output
4 · Inventory lot trace screen — genealogy / recall
Trace từ
FG-LOT-5520
Hướng
Backward → supplier
Trạng thái
Released
Genealogy chain
Shipment → KH001
FG-LOT-5520
WO-2616
RM-LOT-8841
GRN-3302 · supplier lot SUP-77
Mỗi mắt xích là FK + stock movement, không phải mã nhập tay
5 · QA hold / release screen — disposition
LotItemNguồnStatusDisposition
FG-LOT-5520FG-CGRX-0500WO-2616On holdRelease ▾
RM-LOT-8841RAW chân gàGRN-3302Released
FG-LOT-5519FG-CGRX-1000WO-2615On holdReject / Rework ▾
Ghi chú disposition
VD: đạt nhiệt độ & cảm quan…
Xác nhận disposition
Held stock bị loại khỏi ATP cho tới khi release; reject/rework không vào finished stock khả dụng

8 · Implementation roadmap

Lộ trình P0 → P5

Thứ tự triển khai từ clean-slate guard tới reports + financials. Mỗi phase có trigger/điều kiện vào.

P0 · Clean-slate guard
Đã chạy trong US-060
Trạng thái: retired surfaces frozen + active-source strict check.
  • Retired planning/formula runtime surfaces fail-closed
  • Frozen compatibility baseline; 0 new non-exempt refs
  • Known legacy tokens chỉ còn archive/history/compatibility
P1 · Item Master + Sales foundation
DEC-0041 · US-059
Sau khi: P0 guard ổn định.
  • Item Master semantics: raw/WIP/finished_good/by_product/packaging
  • Customer role/profile + sales_channels
  • Sales Order + lines + charges + totals + states
  • Sales fulfillment qua inventory.stock_documents
P2 · Procurement source + receiving/QC
Decouple legacy source
Sau khi: Item Master + supplier reference rõ.
  • Generic PO source (manual/reorder/plan/WO/sales-driven)
  • GRN received lot + supplier lot bắt buộc
  • Incoming QC hold/release
P3 · Manufacturing formula/BOM + Work Order
Net-new manufacturing spine
Sau khi: Sales/Inventory source rõ.
  • Formula/BOM versioning
  • Work Order + input/output allocation
  • Yield, loss, by-product, FG lot creation
  • QA disposition link với Inventory availability
P4 · Inventory fulfillment + Traceability
Hoàn thiện trace
Sau khi: Work Order tạo FG lot.
  • Partial fulfillment + batch allocation depth
  • Lot genealogy read model (forward + backward)
  • Recall query + recall readiness report
P5 · Reports + financial + logistics + planning
Deferred scope
Sau khi: spine vận hành ổn định.
  • Reports: yield, supplier rejection, stock aging, fill rate, quality hold
  • AR / invoice / payment / e-invoice
  • Shipment logistics (carrier/tracking)
  • Advanced planning / MRP / ATP

9 · Review questions cho Claude team / architects

Câu hỏi để reviewer đánh giá kiến trúc

1 · Customer = Party / Role / Profile có đúng không?
Một party có thể vừa supplier vừa customer; tránh bảng customer phẳng riêng.
Hướng: role customer + customer_profiles mirror supplier_profiles (DEC-0041). Có cần customer-group/segment table sớm?
2 · Price list model có đủ không?
Cần channel × period × tier × validity + VAT; tách khỏi internal target/floor.
Hướng: price_lists/items/customer_price_lists có đủ key-combination cho phân khúc theo kênh chưa? Freight "thu hộ" là statistical hay liability condition?
3 · Inventory stock document có đúng là first-slice fulfillment proof?
Tránh tạo shipment tables sớm khi chưa cần carrier/tracking.
Hướng: business_purpose='sales_fulfillment' + source refs tới sales_order_lines; shipment aggregate chỉ khi cần logistics. Đồng ý?
4 · Formula/BOM và Work Order boundary có đúng?
WO là production authority; formula version cố định lúc release.
Hướng: tách formula/version (định nghĩa) khỏi work_order (execution) + inputs/outputs/by-products. WIP có cần stock vật lý riêng không?
5 · Data model có tránh tạo tech debt không?
FK thật thay mã nhập tay; charge là condition row; totals snapshot; append-only events.
Hướng: mirror procurement/transfer patterns; money theo DEC-0014; idempotency. Còn điểm nào dễ phải refactor?
6 · Deferred AR/payment/invoice/logistics có hợp lý?
Slice đầu chỉ giữ FK chứa được, không build logic.
Hướng: chain sales_order → fulfillment → invoice → payment → AR aging có đủ anchor để attach sau? Thời điểm e-invoice (NĐ 70/2025)?
7 · Active-source / clean-slate terminology có còn rò rỉ?
US-060 chặn new non-exempt retired/source-product literals trong active docs.
Hướng: dùng Item Master target + compatibility baseline wording. Có literal retired nào lọt vào tài liệu/seed/test mới không?
8 · By-product vs waste & quy cách SKU?
Ảnh hưởng formula output, yield variance, costing, traceability identity.
Hướng: xương = first-class by-product nếu cân/định lượng; mỗi quy cách 500g/1000g/5000g = finished-good SKU riêng. Đồng ý?