Skip to content

URD: Sản phẩm

ModuleCORE-05Phiên bảnv0.7
Trạng tháiBuiltNgày2026-06-04

Tài liệu nghiệp vụ. URD này là danh sách tính năng của Sản phẩm - mỗi tính năng bên dưới là một Lĩnh vực Chức năng (<AREA>). Cùng <AREA> đó làm khóa cho PRD (PRD-<AREA>-NNN) và test (TC-<AREA>-NNN) của tính năng, và mỗi tính năng được liệt kê trong danh mục tính năng Delivery. Xem quy ước Feature Spine.

1. Mục đích

Định nghĩa các yêu cầu hướng người dùng cho quản lý danh mục sản phẩm: cách chủ cửa hàng tạo và duy trì sản phẩm, các biến thể họ thực sự bán, giá (fares) mà các biến thể đó mang, nhóm hàng tổ chức chúng, và định danh dùng để tra cứu. Danh mục là nền tảng mà mọi kênh bán đọc từ đó.

2. Phạm vi

Bao gồmLoại trừ
Tạo / cập nhật / quản lý trạng thái sản phẩmĐịnh mức nguyên vật liệu & công thức → Kho
Nhóm hàng (với cờ add-on)Mức tồn theo địa điểm → Kho
Biến thể và các thao tác biến thể aggregateXử lý đơn hàng & thanh toán → Đơn hàng
Fares và bộ fare (đầu vào định giá)Tính chiết khấu khuyến mãi (Đang thực hiện)
Định danh đa lược đồ (SYSTEM, SLUG, SKU, BARCODE, QRCODE)Engine quy đổi đơn vị (Dự kiến)
Khả dụng theo kênh bánNhập hàng loạt / CSV (Dự kiến)
Loại biến thể & đơn vị đo lườngĐặc tả API kỹ thuật → tài liệu lập trình viên
Lọc dữ liệu theo vai trò

Chỉ là định nghĩa khái niệm - schema và hành vi cụ thể nằm trong mô hình miền commercefares của pricing.

3. Định nghĩa

Thuật ngữĐịnh nghĩa
Sản phẩm (Product)Một mục cơ sở trong danh mục của merchant.
Biến thể (Variant)Một đơn vị bán được của sản phẩm (ví dụ kích cỡ hoặc hương vị). Thứ thực sự được bán và định giá.
Loại biến thể (Variant type)Phân loại điều khiển việc quản lý tồn & bundle: STORABLE, CONSUMABLE, SERVICE, KIT, COMBO, MANUFACTURED.
Tùy chọn (Option)Một cách một sản phẩm biến đổi (Size, Mức đá…), thuộc về một sản phẩm; mỗi biến thể chọn một trong các giá trị của nó.
Giá trị tùy chọn (Option value)Một lựa chọn trên một tùy chọn (S / M / L); duy nhất trong tùy chọn của nó.
Tổ hợp (Combination)Tập giá trị một biến thể chọn - danh tính của nó trong sản phẩm.
Bộ fare (Fare set)Container định giá liên kết 1-1 với một biến thể.
FareMột mục giá bên trong bộ fare; có thể là giá cơ bản, override, hoặc bậc theo số lượng/thời gian/kênh.
Nhóm hàng (Category)Một nhóm sản phẩm trong một merchant; có thể đánh cờ add-on.
Định danh (Identifier)Một mã theo lược đồ (SYSTEM, SLUG, SKU, BARCODE, QRCODE) dùng để tra cứu.
BundleQuan hệ combo, add-on, hoặc thường-mua-cùng giữa các biến thể.
Sản phẩm theo kênh bán (Sale-channel product)Một ánh xạ kiểm soát sản phẩm nào hiển thị ở kênh nào.

4. Mô hình Khái niệm

Chỉ là khái niệm - schema đầy đủ nằm trong mô hình miền commercefares của pricing.

5. Danh mục Tính năng

Danh sách tính năng của module này. Mỗi dòng là một tính năng (một Lĩnh vực Chức năng). Chi tiết ở §6. Được phản chiếu trong danh mục tính năng Delivery.

Feature IDTính năngPhaseTrạng tháiƯu tiên
PRDDanh mục Sản phẩmP1BuiltHigh
CATNhóm hàngP1BuiltHigh
VARBiến thểP2BuiltHigh
BNDCombo & Gói bán kèmP2BuiltHigh
OPTTùy chọn Sản phẩmP2BuiltHigh
FARFares / Định giáP2BuiltHigh
PIDĐịnh danhP1BuiltHigh
CMPKhuyến mãiP3In-progressMedium
ACCKiểm soát Truy cậpP1BuiltHigh
SCHKênh bán hàngP2BuiltHigh

Trạng thái: live từ Plane nếu có map, còn lại do registry khai báo. Vocabulary đồng nhất với Plane (state-group / phase).

6. Tính năng

Mỗi mục con cho một tính năng, theo thứ tự danh mục. Mỗi tính năng giữ mô tả, yêu cầu, và tiêu chí chấp nhận cùng nhau. Mức ưu tiên = MoSCoW (Must / Should / Could / Won't).

PRD - Danh mục Sản phẩm Built

Feature ID: products/PRD · Phase: P1 · PRDs: - · Dev: @nx/commerce

Tính năng cho người dùng: chủ tạo sản phẩm trong một merchant - mỗi sản phẩm có tên/mô tả đa ngôn ngữ, một định danh hệ thống và slug, một biến thể mặc định, hình ảnh, gán kênh bán, và vòng đời đầy đủ (vô hiệu hóa / kích hoạt lại / lưu trữ). Sản phẩm có thể tìm kiếm và liệt kê, lọc theo vai trò.

Yêu cầu

IDPYêu cầuTrạng thái
URD-PRD-001MChủ có thể tạo một sản phẩm trong một merchantBuilt
URD-PRD-002MMỗi sản phẩm nhận một định danh do hệ thống sinh và slugBuilt
URD-PRD-003MTên & mô tả sản phẩm hỗ trợ nhiều ngôn ngữBuilt
URD-PRD-004MMột biến thể mặc định được tạo cùng mỗi sản phẩm mớiBuilt
URD-PRD-005MChủ có thể cập nhật thông tin sản phẩmBuilt
URD-PRD-006MChủ có thể vô hiệu hóa / kích hoạt lại / lưu trữ một sản phẩmBuilt
URD-PRD-007MSlug sản phẩm là duy nhất trong cùng một merchantBuilt
URD-PRD-008MNgười dùng có thể tìm sản phẩm theo ID hoặc slugBuilt
URD-PRD-009MNgười dùng có thể xem danh sách sản phẩm (lọc theo vai trò)Built
URD-PRD-013SChủ có thể đính kèm hình ảnh / media cho sản phẩmBuilt
URD-PRD-014SChủ có thể gán sản phẩm cho các kênh bán cụ thểBuilt
URD-PRD-015SSản phẩm đã lưu trữ là chỉ đọc (trạng thái cuối)Built
URD-PRD-016SSản phẩm hỗ trợ phân cấp cha-conBuilt
URD-PRD-017SNgười dùng có thể tìm sản phẩm theo tên (một phần, nhận biết i18n)Built
URD-PRD-018SNgười dùng có thể lọc danh sách sản phẩm theo nhóm hàngBuilt
URD-PRD-019CChủ có thể nhập danh mục từ CSV / bảng tínhPlanned

Chấp nhận

AC-PRD-01: Tạo sản phẩm
Cho trướcKhiThì
Chủ với một merchant đang hoạt độngTạo một sản phẩm với tên + nhóm hàngSản phẩm được tạo với định danh đã sinh; biến thể mặc định được tạo; sản phẩm liên kết với merchant
Slug sẽ trùngHệ thống đảm bảo một slug duy nhất trong merchant

CAT - Nhóm hàng Built

Feature ID: products/CAT · Phase: P1 · PRDs: - · Dev: @nx/commerce

Tính năng cho người dùng: chủ gom sản phẩm vào nhóm hàng với tên đa ngôn ngữ; nhóm hàng có thể đánh cờ add-on để thúc đẩy bán kèm tại điểm bán.

Yêu cầu

IDPYêu cầuTrạng thái
URD-CAT-001MChủ có thể tạo nhóm hàng trong một merchantBuilt
URD-CAT-002MTên nhóm hàng hỗ trợ nhiều ngôn ngữBuilt
URD-CAT-003MChủ có thể cập nhật và xóa nhóm hàngBuilt
URD-CAT-004SMột nhóm hàng có thể được đánh cờ add-onBuilt

Chấp nhận

AC-CAT-01: Quản lý nhóm hàng
Cho trướcKhiThì
Chủ với một merchant đang hoạt độngTạo một nhóm hàng với tên đa ngôn ngữNhóm hàng được tạo và giới hạn theo merchant
Nhóm hàng được đánh cờ add-onLưuCờ add-on được lưu trên nhóm hàng

VAR - Biến thể Built

Feature ID: products/VAR · Phase: P2 · PRDs: - · Dev: @nx/commerce

Tính năng cho người dùng: chủ thêm nhiều biến thể bán được cho mỗi sản phẩm, mỗi biến thể có loại (STORABLE/CONSUMABLE/SERVICE/KIT/COMBO/MANUFACTURED), đơn vị đo lường, định danh, khoảng thời gian hiệu lực, và quan hệ bundle - được tạo hoặc cập nhật trong một thao tác liền mạch cùng với thông tin, bộ fare, fares, và định danh.

Yêu cầu

IDPYêu cầuTrạng thái
URD-VAR-001MMỗi sản phẩm có ít nhất một biến thể; trạng thái có thể thay đổiBuilt
URD-VAR-002MChủ có thể tạo thêm biến thểBuilt
URD-VAR-003MTạo aggregate: biến thể + thông tin + bộ fare + fares + định danh trong một thao tác liền mạchBuilt
URD-VAR-004MCập nhật aggregate: cập nhật một biến thể cùng mọi dữ liệu liên quan trong một thao tác liền mạchBuilt
URD-VAR-005MMỗi biến thể có một định danh do hệ thống sinhBuilt
URD-VAR-006MLoại biến thể (STORABLE / CONSUMABLE / SERVICE / KIT / COMBO / MANUFACTURED) có thể chọnBuilt
URD-VAR-007SBiến thể có thể có khoảng thời gian hiệu lựcBuilt
URD-VAR-008SChủ có thể gán định danh SKU / BARCODE / QRCODEBuilt
URD-VAR-009SBiến thể lưu đơn vị đo lường cơ sở / mua / bánBuilt
URD-VAR-010SBundle liên hệ các biến thể như combo / add-on / thường-mua-cùngBuilt
URD-VAR-011CGiá đã giải quyết của một biến thể có thể đọc qua một endpoint chuyên biệtPlanned
URD-VAR-012CQuy đổi đơn vị giữa đơn vị mua và đơn vị bánPlanned

Chấp nhận

AC-VAR-01: Biến thể aggregate
Cho trướcKhiThì
Một sản phẩm có sẵnChủ tạo một biến thể với thông tin, fares, và định danh trong một bướcBiến thể + thông tin + bộ fare + fares + định danh được tạo trong một thao tác liền mạch
Bất kỳ bước con nào thất bạiToàn bộ thao tác rollback; không có gì được lưu

BND - Combo & Gói bán kèm Built

Feature ID: products/BND · Phase: P2 · PRDs: PRD-BND-001 · Dev: @nx/commerce · @nx/sale

Tính năng làm gì cho người dùng: chủ liên kết hai biến thể bằng một gói có kiểu - một combo (định giá một lần, cấu thành từ các biến thể thành phần), một add-on (một biến thể liên quan miễn phí gắn vào một dòng chủ), hoặc một gợi ý mua-kèm-thường-xuyên (có hướng, với giá ghi-đè tùy chọn riêng). Tại điểm bán một combo được bung phía máy chủ thành một dòng dẫn có giá cùng các dòng thành phần giá-không, số lượng thành phần nhân theo số lượng combo, và add-on / FBT gắn vào một dòng dẫn cấp-cao nhất hiện có. Việc bung được rào chắn khỏi độ sâu vượt mức, chu trình và combo rỗng, và toàn bộ đồ thị gói được tạo liền mạch cùng biến thể. (Đây là chi tiết tính năng đằng sau đề cập gói ở URD-VAR-010.)

Yêu cầu

IDPYêu cầuTrạng thái
URD-BND-001MMột gói liên kết một biến thể dẫn với một biến thể liên quan theo một trong ba kiểu: COMBO, ADDON, FBTBuilt
URD-BND-002MMột combo cấu thành từ các biến thể thành phần mỗi cái có số lượng riêng; combo được định giá, thành phần về khôngBuilt
URD-BND-003MMột add-on liên kết một biến thể liên quan luôn-miễn-phí với một biến thể chủBuilt
URD-BND-004SMột mục FBT gợi ý một biến thể liên quan, có hướng, và có thể mang giá ghi-đè riêng (cố định / phần trăm / theo-đơn-vị / bậc thang) hoặc lùi về fare của biến thể được gợi ýBuilt
URD-BND-005MCùng một quan hệ (kiểu, dẫn, liên quan) không thể trùng lặpBuilt
URD-BND-006SCác gói của một biến thể dẫn và một kiểu mang thứ tự hiển thịBuilt
URD-BND-007MCác gói được tạo liền mạch cùng biến thể; mọi lỗi quay lui toàn bộ thao tác tạoBuilt
URD-BND-008MThêm một combo vào giỏ bung nó phía máy chủ thành một dòng dẫn có giá cùng các dòng con thành phần giá-không liên kết với dòng dẫnBuilt
URD-BND-009MSố lượng mỗi thành phần là số-lượng-mỗi-combo × số lượng combo; một thành phần đến từ nhiều nhánh được gộp vào một dòng với số lượng cộng dồnBuilt
URD-BND-010SCombo có thể lồng nhau; việc bung đệ quy đến tối đa năm cấp độ sâuBuilt
URD-BND-011MMột combo vượt giới hạn độ sâu, tạo chu trình, hoặc không có thành phần bị từ chối kèm lý do cụ thểBuilt
URD-BND-012MDòng thành phần combo không thể sửa trực tiếp; chủ sửa dòng dẫn combo và các con tự nhân theoBuilt
URD-BND-013MMột biến thể sản phẩm combo phải khai báo ít nhất một thành phần combo khi tạoBuilt
URD-BND-014SMột mục add-on hoặc FBT gắn tại điểm bán vào một dòng dẫn cấp-cao nhất hiện có, được kiểm khớp với quan hệ đã cấu hình; combo không thể gắn theo cách nàyBuilt
URD-BND-015SMột add-on vẫn giữ chỗ tồn cho thành phần của nó dù miễn phíBuilt
URD-BND-016SMỗi dòng dẫn combo và dòng thành phần ghi lại combo cùng các dòng gói đã sinh ra nó cho bếp / hoàn tiền / kiểm toán về sauBuilt

Tiêu chí Chấp nhận

AC-BND-01: Combo bung khi thêm vào giỏ
Cho trướcKhiThì
Một combo định giá một lần, gồm 1 burger + 1 khoai + 1 nướcThu ngân thêm combo vào giỏMột dòng dẫn có giá cùng ba dòng thành phần giá-không liên kết với dòng dẫn được tạo
Cùng combo đó, số lượng haiThu ngân thêm vàoMỗi dòng thành phần được nhân lên gấp đôi số-lượng-mỗi-combo
AC-BND-02: Rào chắn bung combo
Cho trướcKhiThì
Một combo lồng quá năm cấpThu ngân thêm vàoTừ chối - combo lồng quá sâu
Một combo gián tiếp tham chiếu chính nóThu ngân thêm vàoTừ chối - phát hiện chu trình combo
Một biến thể combo không có thành phầnThu ngân thêm vàoTừ chối - combo không có thành phần
AC-BND-03: Gắn add-on / FBT
Cho trướcKhiThì
Một dòng dẫn cấp-cao nhất và một quan hệ add-on đã cấu hìnhThu ngân gắn add-onMột dòng add-on miễn phí được tạo dưới dòng dẫn và tồn của nó được giữ chỗ
Một quan hệ FBT đã cấu hìnhThu ngân gắn mục FBTMột dòng mang giá riêng (có thể ghi-đè) được tạo dưới dòng dẫn
Một quan hệ comboThu ngân thử gắnTừ chối - combo được máy chủ bung, không gắn được
Mục không khớp biến thể dẫn / liên quan đã cấu hình của góiThu ngân gắnTừ chối - quan hệ gói không khớp
AC-BND-04: Dòng combo giữ nhất quán
Cho trướcKhiThì
Một combo trên đơnChủ thử sửa trực tiếp một dòng thành phầnTừ chối - thành phần không sửa trực tiếp được
Cùng combo đóChủ sửa số lượng dòng dẫn comboMọi dòng thành phần tự nhân theo
AC-BND-05: Tạo gói
Cho trướcKhiThì
Một biến thể sản phẩm combo khai báo không có thành phần comboChủ tạo nóTừ chối - một biến thể combo phải khai báo ít nhất một thành phần
Một biến thể có gói combo / add-on / FBTChủ tạo nó; bất kỳ bước con nào thất bạiToàn bộ thao tác tạo biến thể quay lui; không dòng gói nào được lưu

OPT - Tùy chọn Sản phẩm Built

Feature ID: products/OPT · Phase: P2 · PRDs: PRD-OPT-001 · PRD-OPT-002 · Dev: @nx/commerce

Tính năng cho người dùng: chủ cửa hàng định nghĩa các tùy chọn mà sản phẩm biến đổi theo (Size, Mức đá, Màu sắc…) với giá trị có thứ tự, và mỗi biến thể chọn một giá trị mỗi tùy chọn - nhờ đó mỗi biến thể được nhận diện duy nhất bằng tổ hợp lựa chọn của nó. Khi tạo sản phẩm, chủ khai báo các trục tùy chọn cùng với đúng những biến thể cần sinh, và hệ thống tạo toàn bộ sản phẩm - tùy chọn, giá trị, biến thể, liên kết, định danh và thuộc tính kho - một cách liền mạch, giải quyết một biến thể mặc định, và làm mỗi biến thể tra được theo tùy chọn của nó trong tìm kiếm.

Yêu cầu

IDPYêu cầuTrạng thái
URD-OPT-001MChủ định nghĩa các tùy chọn của sản phẩm, mỗi tùy chọn có một tên và một thứ tự hiển thịBuilt
URD-OPT-002MMỗi tùy chọn mang một danh sách giá trị được sắp thứ tựBuilt
URD-OPT-003MMột tùy chọn và các giá trị của nó được tạo hoặc đổi cùng nhau trong một bướcBuilt
URD-OPT-004MBiến thể khai báo giá trị của nó trên mỗi tùy chọn nó dùng; tùy chọn hoặc giá trị lạ bị từ chốiBuilt
URD-OPT-005MMột biến thể chọn tối đa một giá trị mỗi tùy chọnBuilt
URD-OPT-006MMọi giá trị một biến thể dùng phải thuộc về sản phẩm và về tùy chọn của nóBuilt
URD-OPT-007MKhông có hai biến thể nào của một sản phẩm dùng chung một tổ hợp; biến thể không tùy chọn được miễnBuilt
URD-OPT-008MMột cài đặt merchant có thể buộc mọi biến thể dùng tùy chọn, từ chối biến thể không tùy chọnBuilt
URD-OPT-009SChủ có thể đổi các tùy chọn mà một biến thể dùngBuilt
URD-OPT-010SMột tùy chọn không có giá trị nào, hoặc một lựa chọn trùng, bị từ chốiBuilt
URD-OPT-011MKhi tạo sản phẩm, chủ cung cấp cả các trục tùy chọn và đúng những biến thể cần sinh, mỗi biến thể khai báo lựa chọn của nó trên từng trụcBuilt
URD-OPT-012MChỉ những biến thể đã khai báo được sinh - hệ thống không bao giờ tự bung trọn ma trận tùy chọnBuilt
URD-OPT-013MTrục tùy chọn, giá trị của chúng, và mọi biến thể đã khai báo được sinh cùng sản phẩm trong một thao tác liền mạchBuilt
URD-OPT-014MĐúng một biến thể được sinh là mặc định: cái được đánh dấu tường minh, nếu không thì cái khai báo đầu tiên được nângBuilt
URD-OPT-015MKhai báo nhiều hơn một mặc định tường minh trong cùng yêu cầu tạo bị từ chốiBuilt
URD-OPT-016SChủ có thể đổi biến thể nào là mặc định sau khi tạoBuilt
URD-OPT-017SMỗi biến thể được sinh có thể mang SKU / barcode riêng; một barcode lặp trong-yêu-cầu hoặc đã dùng trong merchant bị từ chốiBuilt
URD-OPT-018SThuộc tính quản lý tồn chỉ sinh cho loại biến thể quản lý tồn; combo và loại không quản lý tồn được tạo không theo dõiBuilt
URD-OPT-019SBiến thể được sinh và lựa chọn tùy chọn của chúng được phản chiếu vào tìm kiếm, giữ tươi mới khi trục, giá trị, hoặc liên kết đổiBuilt

Nghiệm thu

AC-OPT-01: Định nghĩa tùy chọn và khai báo biến thể
Cho trướcKhiThì
Sản phẩm có tùy chọn Size (S/M/L) và Mức đá (100/50/0)Chủ khai báo một biến thể cho Lớn, 50% đáBiến thể được lưu với hai giá trị đã chọn
Cùng sản phẩm đóChủ khai báo một biến thể dùng một size không tồn tạiBị từ chối - giá trị không thuộc sản phẩm
AC-OPT-02: Tổ hợp trùng bị từ chối
Cho trướcKhiThì
Một biến thể cho Lớn, 50% đá đã tồn tạiChủ khai báo một biến thể khác cho cùng Lớn, 50% đáBị từ chối - tổ hợp là như nhau bất kể thứ tự chọn
AC-OPT-03: Cài đặt bắt buộc tùy chọn
Cho trướcKhiThì
Cài đặt bắt buộc tùy chọn đang bậtChủ tạo một biến thể không dùng tùy chọn nàoBị từ chối - mọi biến thể phải dùng tùy chọn
Cài đặt tắtCùng yêu cầu đóBiến thể được lưu; biến thể không tùy chọn có thể cùng tồn tại
AC-OPT-04: Lựa chọn nằm trong sản phẩm
Cho trướcKhiThì
Một tùy chọn thuộc sản phẩm AMột biến thể của sản phẩm B thử dùng nóBị từ chối - tùy chọn không thuộc sản phẩm đó
Một giá trị thuộc tùy chọn SizeMột biến thể ghép nó với tùy chọn Mức đáBị từ chối - giá trị không thuộc tùy chọn đó
AC-OPT-05: Sinh biến thể tường minh
Cho trướcKhiThì
Một sản phẩm có trục Size (S/M/L) và Đá (100/50/0)Chủ tạo nó khai báo năm biến thể cụ thểĐúng năm biến thể đó được sinh - không bao giờ là ma trận chín ô đầy đủ
Cùng thao tác tạo đóBất kỳ bước con nào thất bại (tùy chọn sai, barcode trùng, hai mặc định)Toàn bộ đồ thị sản phẩm rollback; không lưu gì
AC-OPT-06: Biến thể mặc định khi sinh
Cho trướcKhiThì
Nhiều biến thể khai báo, một cái đánh dấu mặc địnhSản phẩm được tạoBiến thể được đánh dấu là mặc định
Nhiều biến thể khai báo, không cái nào đánh dấuSản phẩm được tạoBiến thể khai báo đầu tiên được nâng thành mặc định
Hai biến thể khai báo đánh dấu mặc địnhSản phẩm được tạoBị từ chối - chỉ cho phép một mặc định
AC-OPT-07: Đổi mặc định sau khi tạo
Cho trướcKhiThì
Một sản phẩm có mặc định là biến thể AChủ nâng biến thể B thành mặc địnhB trở thành mặc định và A không còn là mặc định
AC-OPT-08: Tính duy nhất barcode theo từng biến thể
Cho trướcKhiThì
Hai biến thể khai báo mang cùng một barcodeSản phẩm được tạoBị từ chối - barcode trùng trong yêu cầu
Barcode của một biến thể khai báo đã tồn tại trong merchantSản phẩm được tạoBị từ chối - barcode đã được dùng
AC-OPT-09: Thuộc tính kho theo loại biến thể
Cho trướcKhiThì
Một loại biến thể quản lý tồnBiến thể được sinhThuộc tính quản lý tồn được sinh cho mỗi biến thể
Một loại combo hoặc không quản lý tồnBiến thể được sinhBiến thể được tạo không theo dõi
AC-OPT-10: Biến thể tra được theo tùy chọn
Cho trướcKhiThì
Một biến thể được sinh liên kết Size=M, Đá=50Tìm kiếm được truy vấn/lọc theo giá trị tùy chọn của nóBiến thể được trả về và lọc được theo sizeice
Trục, giá trị, hoặc liên kết của nó đổi sau đóThay đổi được áp dụngFacet tùy chọn của biến thể trong tìm kiếm được làm tươi tương ứng

FAR - Fares / Định giá Built

Feature ID: products/FAR · Phase: P2 · PRDs: - · Dev: @nx/pricing

Tính năng cho người dùng: mỗi biến thể mang đúng một bộ fare với ít nhất một fare mặc định; fares có thể phân bậc theo khoảng ngày, cửa sổ số lượng, và ngữ cảnh (kênh, thời gian), và hệ thống giải quyết giá áp dụng tại thời điểm bán (override → discount → mặc định).

Yêu cầu

IDPYêu cầuTrạng thái
URD-FAR-001MMỗi biến thể có đúng một bộ fareBuilt
URD-FAR-002MMỗi bộ fare chứa ít nhất một fare (mặc định)Built
URD-FAR-003MSố tiền fare phải bằng không hoặc dươngBuilt
URD-FAR-004MTại thời điểm bán hệ thống giải quyết fare áp dụng: override → discount → mặc địnhBuilt
URD-FAR-005SFares có thể có khoảng thời gian hiệu lựcBuilt
URD-FAR-006SFares có thể có cửa sổ số lượng tối thiểu / tối đaBuilt
URD-FAR-007SFares hỗ trợ nhóm cha-con với rule ngữ cảnh (kênh, thời gian, số lượng)Built

Mô hình fare hiện tại dùng loại nhóm OVERRIDEDISCOUNT (một bản nháp trước đó gọi chúng là SALE/OVERRIDE). Xem fares của pricing.

Chấp nhận

AC-FAR-01: Giải quyết fare
Cho trướcKhiThì
Một biến thể với nhiều fares đang hoạt độngThêm vào giỏNhóm override thắng; nếu không thì discount đủ điều kiện thấp nhất; nếu không thì fare mặc định; cửa sổ ngày & số lượng lọc ứng viên trước
Không có fare đủ điều kiệnFare mặc định (cơ bản) được dùng

PID - Định danh Built

Feature ID: products/PID · Phase: P1 · PRDs: - · Dev: @nx/commerce

Tính năng cho người dùng: sản phẩm và biến thể được tra cứu bằng mã theo lược đồ - SYSTEM và SLUG được tự sinh, trong khi chủ có thể gắn định danh SKU, BARCODE, và QRCODE, mỗi mã duy nhất theo từng lược đồ trong một merchant.

Yêu cầu

IDPYêu cầuTrạng thái
URD-PID-001MMỗi định danh là duy nhất theo từng lược đồ trong một merchantBuilt
URD-PID-002MMột sản phẩm / biến thể có thể giữ nhiều định danh trên các lược đồBuilt
URD-PID-003MĐịnh danh SYSTEM và SLUG được tự sinh khi tạoBuilt
URD-PID-004SChủ có thể gán định danh SKU, BARCODE, QRCODEBuilt

Chấp nhận

AC-PID-01: Tra cứu định danh
Cho trướcKhiThì
Một sản phẩm được tạoKhi tạoĐịnh danh SYSTEM và SLUG được tự sinh
Chủ gán một SKU/BARCODE/QRCODELưuĐịnh danh duy nhất theo từng lược đồ trong merchant

CMP - Khuyến mãi In-progress

Feature ID: products/CMP · Phase: P3 · PRDs: - · Dev: @nx/pricing

Tính năng cho người dùng: chủ tạo và quản lý các chiến dịch khuyến mãi giới hạn theo merchant với khoảng ngày và giới hạn sử dụng; việc áp dụng chiết khấu tự động tại thời điểm định giá chưa được bật.

Yêu cầu

IDPYêu cầuTrạng thái
URD-CMP-001SChủ có thể tạo và quản lý chiến dịch khuyến mãi (với khoảng ngày, giới hạn sử dụng)In-progress
URD-CMP-002SKhuyến mãi được giới hạn theo một merchantIn-progress
URD-CMP-003CChiết khấu khuyến mãi được áp dụng tự động tại thời điểm định giáPlanned

CRUD khuyến mãi đã hoạt động; engine tính chiết khấu đang bị tắt, nên chiết khấu chưa được áp dụng tự động. Xem khuyến mãi của pricing.

Chấp nhận

AC-CMP-01: Chiến dịch khuyến mãi
Cho trướcKhiThì
Chủ với một merchant đang hoạt độngTạo một chiến dịch khuyến mãi với khoảng ngày và giới hạn sử dụngChiến dịch được tạo và giới hạn theo merchant

ACC - Kiểm soát Truy cập Built

Feature ID: products/ACC · Phase: P1 · PRDs: - · Dev: @nx/commerce

Tính năng cho người dùng: mọi thao tác sản phẩm được lọc theo vai trò của người dùng yêu cầu - chủ và nhân viên chỉ thấy sản phẩm trong các merchant của mình/được phân công, trong khi admin bỏ qua lọc theo vai trò.

Yêu cầu

IDPYêu cầuTrạng thái
URD-ACC-001MMọi thao tác sản phẩm được lọc theo vai trò của người dùng yêu cầuBuilt
URD-ACC-002MChủ chỉ thấy sản phẩm dưới các merchant của mìnhBuilt
URD-ACC-003MNhân viên chỉ thấy sản phẩm trong các merchant được phân côngBuilt
URD-ACC-004MAdmin / Super Admin bỏ qua lọc theo vai tròBuilt

Chấp nhận

AC-ACC-01: Truy cập theo vai trò
Cho trướcKhiThì
Chủ với merchant X, YXem sản phẩmChỉ sản phẩm dưới X và Y được trả về
Nhân viên phân công cho XXem sản phẩmChỉ sản phẩm dưới X được trả về
AdminXem sản phẩmMọi sản phẩm được trả về; bỏ qua lọc

SCH - Kênh bán hàng (Tổ chức thực đơn & hiển thị theo kênh) Built

Feature ID: products/SCH · Phase: P2 · PRDs: PRD-SCH-001 · Dev: @nx/commerce

Tính năng cho người dùng: chủ tổ chức những gì mình bán thành các kênh bán hàng - bề mặt thực đơn có tên, đa ngôn ngữ, phân cấp (tại quầy, mang đi, giao hàng, ki-ốt). Một sản phẩm chỉ hiển thị trong một kênh khi được gán vào đó, nên hiển thị là một công tắc duy nhất bật khi tạo sản phẩm. Mỗi kênh mang một chuỗi vị trí kho theo thứ tự ưu tiên (ưu tiên thấp nhất là nguồn kho mặc định tự chọn), có trạng thái vòng đời (kích hoạt / ngừng / lưu trữ), và không thể bị ngừng khi vẫn còn đơn đang hoạt động. Mọi danh sách kênh và sản phẩm được phục vụ đã lọc theo quyền của người gọi - một chủ chỉ thấy kênh của các merchant của mình, admin thấy tất cả - nên thực đơn một thiết bị nhận được luôn được giới hạn theo người đang hỏi. (Đây là tính năng chi tiết đằng sau nhắc đến kênh bán hàng tại URD-PRD-014.)

Yêu cầu

IDPYêu cầuTrạng thái
URD-SCH-001MChủ có thể tạo kênh bán hàng trong một merchant, mỗi kênh có tên/mô tả đa ngôn ngữ và một định danh hệ thống tự sinhBuilt
URD-SCH-002MSlug kênh là duy nhất giữa các kênh đang hoạt động trong cùng một merchantBuilt
URD-SCH-003MMột kênh có trạng thái vòng đời: kích hoạt, ngừng, lưu trữBuilt
URD-SCH-004MChủ có thể cập nhật một kênh; một cập nhật không có trường nào bị từ chốiBuilt
URD-SCH-005MViệc ngừng một kênh bị từ chối khi nó còn đơn bán đang hoạt độngBuilt
URD-SCH-006SKênh hỗ trợ phân cấp cha-conBuilt
URD-SCH-007MMột sản phẩm được gán vào một hoặc nhiều kênh; việc gán quyết định sản phẩm có hiển thị trong kênh đó khôngBuilt
URD-SCH-008MCác gán sản phẩm-vào-kênh được ghi như một phần của bước tạo sản phẩm toàn vẹnBuilt
URD-SCH-009SMột kênh mang một chuỗi vị trí kho theo thứ tự ưu tiên; vị trí ưu tiên thấp nhất là mặc định tự chọn; chuỗi được diff-sync khi cập nhậtBuilt
URD-SCH-010MXóa một kênh sẽ bỏ gán các sản phẩm của nó và soft-delete kênhBuilt
URD-SCH-011MDanh sách/đếm kênh và sản phẩm được phục vụ đã lọc theo quyền của người gọi; admin bỏ qua bộ lọcBuilt
URD-SCH-012SKênh và sản phẩm có thể tìm kiếm, giới hạn theo các merchant của người gọiBuilt
URD-SCH-013STạo kênh đầu tiên của một merchant hoàn tất bước onboarding kênh của merchantBuilt

Chấp nhận

AC-SCH-01: Tạo một kênh
Cho trướcKhiThì
Chủ với một merchant đang hoạt độngTạo một kênh với tên đa ngôn ngữ và một slugKênh được tạo, giới hạn theo merchant, với một định danh hệ thống tự sinh
Một kênh đang hoạt động trong merchant đã dùng slug đóChủ tạo kênh khác cùng slugBị từ chối - slug đã được dùng trong merchant này
AC-SCH-02: Hiển thị theo kênh qua gán sản phẩm
Cho trướcKhiThì
Một kênh Tại quầy và một kênh Giao hàngChủ tạo một sản phẩm chỉ gán cho Tại quầySản phẩm hiển thị trong Tại quầy và không trong Giao hàng
Cùng sản phẩm đóChủ gán thêm vào Giao hàngSản phẩm giờ hiển thị trong cả hai kênh
AC-SCH-03: Chốt chặn khi ngừng
Cho trướcKhiThì
Một kênh còn đơn (đang hoạt động) đang mởChủ ngừng kênhBị từ chối - kênh còn đơn đang hoạt động
Cùng kênh sau khi đơn được đóng / hủyChủ ngừng nóKênh được ngừng
AC-SCH-04: Chuỗi vị trí kho
Cho trướcKhiThì
Một kênh tạo với các vị trí [A, B, C]Kênh được lưuVị trí A (ưu tiên thấp nhất) là nguồn kho mặc định tự chọn
Chuỗi được cập nhật thành [B, A]Cập nhật được áp dụngB trở thành mặc định; vị trí bị loại được bỏ gán; vị trí còn lại giữ hàng của nó
Đầu vào liệt kê một vị trí hai lầnKênh được lưuBản trùng gộp về lần xuất hiện đầu
AC-SCH-05: Phục vụ đã giới hạn theo quyền
Cho trướcKhiThì
Chủ được grant merchant X và YLiệt kê kênh / sản phẩmChỉ kênh / sản phẩm của X và Y được trả về
Nhân viên phân công cho XLiệt kê kênh / sản phẩmChỉ của X được trả về
Admin / Super AdminLiệt kê kênh / sản phẩmTất cả được trả về; bỏ qua lọc
AC-SCH-06: Xóa bỏ gán sản phẩm
Cho trướcKhiThì
Một kênh có sản phẩm được gánChủ xóa kênhCác gán sản phẩm của kênh được bỏ gán và kênh được soft-delete

7. Ràng buộc & Không-mục-tiêu

Ràng buộc

IDRàng buộc
C-01Một sản phẩm thuộc đúng một merchant
C-02Slug sản phẩm là duy nhất trong cùng một merchant
C-03Mỗi sản phẩm có ít nhất một biến thể
C-04Mỗi biến thể có đúng một bộ fare với ít nhất một fare
C-05Thao tác tạo / cập nhật aggregate là toàn vẹn: hoặc thành công trọn vẹn, hoặc không lưu gì cả
C-06Mọi bản ghi dùng soft-delete; không có gì bị xóa vật lý
C-07Lọc theo vai trò áp dụng cho mọi thao tác liệt kê và đếm

Không-mục-tiêu

  • Định mức nguyên vật liệu / quản lý công thức (→ Kho)
  • Nhập hàng loạt CSV / Excel
  • Engine quy đổi đơn vị
  • Tính chiết khấu khuyến mãi (chỉ CRUD hiện tại)

8. Lịch sử Phiên bản

NgàyTác giảMô tảVer
2026-02-26P. Do - Product OwnerUser story & yêu cầu ban đầuv0.1
2026-04-16P. Do - Product OwnerMở rộng yêu cầu biến thể & farev0.3
2026-05-29Di chuyển tài liệuTái cấu trúc theo quy ước module-docs; trung thực trạng thái Built/In-progress/Planned theo tài liệu dev; tách khuyến mãi khỏi kho (chuyển sang module Kho)v0.4
2026-06-04Claude (AI pair)Tổ chức lại theo tính năng (Feature Spine); mỗi tính năng mang yêu cầu + tiêu chí chấp nhận riêngv0.5
2026-06-15Product squadThêm tính năng BND Combo & Gói bán kèm (URD-BND-001..016) kèm tiêu chí chấp nhận; liên kết PRD-BND-001v0.6
2026-06-15Product squadThêm tính năng SCH Kênh bán hàng (tổ chức thực đơn & hiển thị theo kênh) (URD-SCH-001..013) kèm tiêu chí chấp nhận; liên kết PRD-SCH-001v0.7

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