Skip to content

URD: Định giá

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

Tài liệu nghiệp vụ. URD này là danh sách feature của Định giá - mỗi feature bên dưới là một Functional Area (<AREA>). Cùng <AREA> đó làm khóa cho PRD (PRD-<AREA>-NNN) và kiểm thử (TC-<AREA>-NNN) của feature, và mỗi feature được liệt kê trong danh mục feature Bàn giao. Xem quy ước Feature Spine.

1. Mục đích

Xác định các yêu cầu hướng người dùng cho bộ máy Định giá - cách một merchant đặt giá, cách tính thuế, cách theo dõi giá vốn biến thể và cách cấu hình khuyến mãi. Kết quả là mọi dòng hàng và mọi đơn hàng đều được định giá nhất quán và có thể kiểm toán, cả khi chủ cửa hàng cấu hình lẫn khi luồng bán hàng hỏi giá lúc thanh toán.

2. Phạm vi

Bao gồmLoại trừ
Fare set, fare, phân cấp fare cha/conLưu trữ đơn hàng
Chọn fare theo quy tắc (số lượng, thời gian, kênh)Phát hành hóa đơn / hóa đơn điện tử
Tax set, thuế, loại thuếThay đổi tồn kho
Tính thuế gộp, đã gộp/chưa gộp, theo thứ tự ưu tiênXử lý thanh toán
Thuế cấp dòng hàng và cấp đơn hàngĐịnh giá đa tiền tệ
Theo dõi giá vốn biến thể theo khoảng thời gian hiệu lựcTính giảm giá trong thanh toán (bộ tính chưa có)
Mô phỏng định giá (v1 phẳng + v2 ảnh chụp)Đặc tả API kỹ thuật
Khuyến mãi, phương thức khuyến mãi, quy tắc điều kiện

3. Định nghĩa

Thuật ngữĐịnh nghĩa
Fare SetBộ chứa toàn bộ fare cho một biến thể sản phẩm. Mỗi biến thể có một fare set ở trạng thái kích hoạt.
FareMột bản ghi giá. Fare mặc định là giá gốc; fare cha/con tạo thành một nhóm chọn lựa.
Fare mặc địnhGiá gốc dự phòng, dùng khi không có fare con theo quy tắc nào khớp.
Fare cha / conFare cha xác định chiến lược chọn (OVERRIDE hoặc DISCOUNT); fare con mang giá có điều kiện.
Quy tắcMột điều kiện (thuộc tính, toán tử, giá trị) gắn vào fare con hoặc khuyến mãi; mọi quy tắc phải đạt (logic AND).
Tax SetBộ chứa toàn bộ thuế cho một biến thể hoặc một merchant.
ThuếMột khoản theo phần trăm, cố định hoặc kết hợp, kèm mức ưu tiên, khoảng thời gian và các cờ đã gộp/chưa gộp/lũy tiến.
Loại thuếMột danh mục (vd: VAT, GST) - phạm vi toàn hệ thống hoặc theo merchant.
Giá vốnGiá vốn của một biến thể sản phẩm theo khoảng thời gian hiệu lực; một bản ghi là giá vốn hiện tại.
Ảnh chụp định giáKết quả v2 bất biến, có thể kiểm toán: mọi fare và thuế đã áp theo từng dòng hàng, cùng tổng đơn hàng.
Khuyến mãiMột chiến dịch giảm giá do merchant cấu hình, có một phương thức và các quy tắc điều kiện.
Phương thức khuyến mãiCơ chế của khuyến mãi (cách áp giảm giá).

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

Chỉ mang tính khái niệm - schema đầy đủ nằm trong mô hình miền của tài liệu kỹ thuật.

5. Danh mục Feature

Danh sách feature của module này. Mỗi dòng là một feature (một Functional Area). Chi tiết ở §6. Được phản chiếu trong danh mục feature Bàn giao.

Feature IDTính năngPhaseTrạng tháiƯu tiên
FAREFare & Fare SetP1BuiltHigh
TAXTính thuếP1BuiltHigh
COSTTheo dõi giá vốnP2BuiltHigh
SIMMô phỏng & Xem trước định giáP2BuiltHigh
PROMOKhuyến mãi & Quy tắcP3In-progressMedium

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. Các Feature

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

FARE - Fare & Fare Set Built

Feature ID: pricing/FARE · Phase: P1 · PRDs: Bộ máy định giá Fare & Thuế · Dev: @nx/pricing · Fare System

Người dùng được gì: chủ cửa hàng đặt giá gốc cho từng biến thể và, tùy chọn, các giá con có điều kiện theo quy tắc (số lượng, khung giờ, kênh). Bộ máy tự chọn fare thắng - fare con hợp lệ đầu tiên cho nhóm OVERRIDE, hoặc fare con hợp lệ rẻ nhất cho nhóm DISCOUNT, quay về fare mặc định khi cần.

Yêu cầu

IDPYêu cầu
URD-FARE-001MMỗi biến thể sản phẩm có đúng một fare set ở trạng thái kích hoạt.
URD-FARE-002MMột fare set + fare mặc định được tạo tự động khi tạo một biến thể sản phẩm (CDC).
URD-FARE-003MChủ cửa hàng có thể đặt một fare mặc định (giá gốc) cho từng biến thể.
URD-FARE-004MChủ cửa hàng có thể tạo một fare cha với một trong hai chiến lược: OVERRIDE hoặc DISCOUNT.
URD-FARE-005MChủ cửa hàng có thể thêm các fare con dưới một fare cha, mỗi fare có giá riêng.
URD-FARE-006MFare con có thể mang quy tắc (thuộc tính, toán tử, giá trị) được đánh giá theo logic AND.
URD-FARE-007MOVERRIDE: fare con hợp lệ đầu tiên được chọn ngay lập tức.
URD-FARE-008MDISCOUNT: fare con hợp lệ có giá thấp nhất được chọn.
URD-FARE-009MKhi không có fare con nào hợp lệ, fare mặc định được chọn.
URD-FARE-010SFare hỗ trợ khoảng thời gian hiệu lực (từ / đến) và giới hạn số lượng.
URD-FARE-011MFare và fare set được cô lập theo merchant và dùng xóa mềm.

Chấp nhận

AC-FARE-01: Chọn theo quy tắc
ChoKhiThì
Biến thể có mặc định 100 và một fare con DISCOUNT 80 (quy tắc: số lượng ≥ 10)Định giá 12 đơn vịFare con 80 thắng (hợp lệ và thấp nhất)
Cùng biến thểĐịnh giá 5 đơn vịFare mặc định 100 thắng (không quy tắc nào khớp)
AC-FARE-02: Tự khởi tạo khi có biến thể
ChoKhiThì
Một biến thể sản phẩm mớiSự kiện CDC của biến thể tớiMột fare set + fare mặc định được tạo tự động

TAX - Tính thuế Built

Feature ID: pricing/TAX · Phase: P1 · PRDs: Bộ máy định giá Fare & Thuế · Dev: @nx/pricing · Tax System

Người dùng được gì: chủ cửa hàng gắn thuế vào một biến thể (cấp dòng hàng) hoặc một merchant (cấp đơn hàng), chọn mức phần trăm/cố định, cách xử lý đã gộp hay chưa gộp, và thuế lũy tiến chồng thuế. Bộ máy áp chúng theo thứ tự ưu tiên và trả về bản phân rã rõ ràng.

Yêu cầu

IDPYêu cầu
URD-TAX-001MChủ cửa hàng có thể tạo loại thuế (vd: VAT), phạm vi toàn hệ thống hoặc theo merchant.
URD-TAX-002MChủ cửa hàng có thể tạo một tax set và thêm thuế vào đó (cập nhật aggregate).
URD-TAX-003MMột thuế có thể theo phần trăm, cố định hoặc kết hợp (phần trăm + cố định).
URD-TAX-004MThuế áp theo thứ tự ưu tiên (số nhỏ hơn = ưu tiên cao hơn).
URD-TAX-005MMột thuế có thể chưa gộp (cộng thêm bên trên) hoặc đã gộp (tính ngược từ giá).
URD-TAX-006MMột thuế có thể lũy tiến (tính trên tổng đang chạy đã gồm các thuế trước đó).
URD-TAX-007SMột thuế có thể mang khoảng thời gian hiệu lực và điều kiện số lượng tối thiểu/tối đa.
URD-TAX-008MThuế cấp dòng hàng áp theo từng dòng; thuế cấp đơn hàng áp cho các tax set theo phạm vi merchant.
URD-TAX-009MMột mức thuế mặc định được áp khi không có tax set nào được cấu hình.
URD-TAX-010MTax set và thuế được cô lập theo merchant và dùng xóa mềm.

Chấp nhận

AC-TAX-01: Đã gộp và chưa gộp
ChoKhiThì
Giá 110, một thuế 10% chưa gộpTínhThuế 11; tổng 121
Giá 110, một thuế 10% đã gộpTínhThuế ≈ 10; tổng giữ ở 110 (tính ngược)
AC-TAX-02: Lũy tiến theo thứ tự
ChoKhiThì
Hai thuế (10% rồi 5% lũy tiến) trên cơ sở 100Tính10 đầu → cơ sở 110 → 5,5; tổng thuế 15,5

COST - Theo dõi giá vốn Built

Feature ID: pricing/COST · Phase: P2 · PRDs: - · Dev: @nx/pricing · Cost Tracking

Người dùng được gì: chủ cửa hàng ghi nhận giá vốn của từng biến thể theo thời gian. Cập nhật giá vốn hiện tại sẽ kết thúc bản ghi giá vốn trước và mở một bản ghi mới, nên lịch sử giá vốn đầy đủ được giữ lại cho biên lợi nhuận và báo cáo.

Yêu cầu

IDPYêu cầu
URD-COST-001MChủ cửa hàng có thể ghi nhận giá vốn cho một biến thể sản phẩm với khoảng thời gian hiệu lực.
URD-COST-002MChủ cửa hàng có thể đọc giá vốn hiện tại của một biến thể.
URD-COST-003MCập nhật giá vốn hiện tại sẽ kết thúc bản ghi trước và tạo một bản ghi mới.
URD-COST-004MTại mọi thời điểm, mỗi biến thể có nhiều nhất một giá vốn hiện tại (chưa kết thúc).
URD-COST-005SLịch sử giá vốn được giữ lại và truy xuất được.
URD-COST-006MGiá vốn được cô lập theo merchant và dùng xóa mềm.

Chấp nhận

AC-COST-01: Cập nhật giá vốn hiện tại
ChoKhiThì
Biến thể có giá vốn hiện tại 50Chủ cửa hàng đặt giá vốn hiện tại thành 60Bản ghi 50 trước đó được kết thúc; 60 trở thành giá vốn hiện tại
Cùng biến thểĐọc giá vốn hiện tạiTrả về 60

SIM - Mô phỏng & Xem trước định giá Built

Feature ID: pricing/SIM · Phase: P2 · PRDs: Mô phỏng định giá & xem trước giá đơn hàng · Dev: @nx/pricing · Simulation

Người dùng được gì: luồng bán hàng định giá cả một giỏ hàng mà không cam kết một đơn. Hai endpoint không trạng thái phục vụ việc đó - một bản phân rã phẳng v1 (fare, thuế, tổng theo dòng + tổng đơn) để hiển thị trực tiếp, và một ảnh chụp bất biến, kiểm toán được v2 (một ảnh chụp đơn cộng một ảnh chụp theo từng dòng, kèm sổ cái theo bên) nhằm được lưu trên đơn. Một xem trước chỉ-đọc cho khách thấy giá trước khi thanh toán; lúc thanh toán v1 (chuẩn) và v2 (bổ sung, best-effort) chạy cùng nhau để đơn được định giá và ảnh chụp được nắm bắt.

Yêu cầu

IDPYêu cầu
URD-SIM-001MMột mô phỏng không trạng thái định giá một giỏ 1-100 dòng và trả về tổng theo dòng và theo đơn mà không lưu đơn hay thay đổi tồn kho.
URD-SIM-002MMô phỏng v1 (/simulation) trả về một bản phân rã phẳng - theo dòng: giá gốc, giá đơn vị, fare đã chọn + quy tắc fare đã áp, thuế đã áp, số lượng, subtotal, discount, tax, total; cùng subtotal/discount/tax/total của đơn và một mốc thời gian tính.
URD-SIM-003MMột id dòng do bên gọi cấp được trả lại và dùng làm khóa kết quả, để mỗi dòng đã định giá ánh xạ rõ ràng về dòng yêu cầu của nó.
URD-SIM-004MThuế đã gộp được nhúng vào giá và không bao giờ làm tăng tổng; thuế chưa gộp được cộng thêm bên trên - nhất quán với bộ máy thuế.
URD-SIM-005MMô phỏng v2 (/simulation-v2) trả về một ảnh chụp bất biến, kiểm toán được - một ảnh chụp đơn cộng một ảnh chụp theo từng dòng - mang mọi quyết định đã áp (giá, thuế, giảm giá, phí).
URD-SIM-006MMỗi quyết định đã áp của v2 sao chép nhãn, cơ sở, giá trị và khoản của nó tại thời điểm tính, để hiển thị lịch sử vẫn đúng kể cả khi quy tắc nguồn về sau bị đổi tên hay ngừng kích hoạt.
URD-SIM-007MMột ảnh chụp dòng v2 phơi ra tổng sẵn-để-đọc - buyer-payable cộng một sổ cái theo bên (mua/bán/nền tảng/nhà cung cấp/nhà nước) - và ảnh chụp đơn cuộn chúng vào subtotal, buyer-payable, sổ cái theo bên, và seller liability.
URD-SIM-008MMột mô phỏng v2 khai báo một hướng giao dịch - SALE hoặc PURCHASE - và một tiền tệ đơn (ISO 4217, mặc định VND).
URD-SIM-009MXem trước giá đơn hàng (POST /sale-orders/{id}/pricing/preview) định giá lại một đơn đang có theo kiểu chỉ-đọc - không lưu, không đổi trạng thái - và trả về bản phân rã v1.
URD-SIM-010MĐịnh giá một giỏ rỗng bị từ chối.
URD-SIM-011SLúc thanh toán đơn được định giá với v1 (chuẩn) cộng v2 (bổ sung, best-effort); một lỗi v2 được log và bỏ qua và không bao giờ chặn thanh toán.
URD-SIM-012SThuế đã áp được lưu theo dòng trộn các mục VAT của v1 với các mục PIT của v2.
URD-SIM-013MNgữ cảnh định giá mỗi dòng mang số lượng, thời điểm tính, thứ/giờ/ngày, các id biến thể của giỏ (cho quy tắc đồng xuất hiện), và một khung dịch vụ suy ra (giờ dịch vụ, ngày, thứ, thời lượng), để quy tắc fare đánh giá.
URD-SIM-014MKhi dịch vụ định giá thượng nguồn từ chối một dòng (vd: không có fare set kích hoạt), luồng bán hàng phơi ra trạng thái và lý do thật thay vì một lỗi chung chung.
URD-SIM-015MCả hai endpoint mô phỏng yêu cầu xác thực và một phạm vi merchant, và mọi phép tính định giá dùng độ chính xác thập phân.
URD-SIM-016Mv1 và v2 chia sẻ cùng logic fare và thuế lõi, nên một bản sửa đáp ở cả hai.

Chấp nhận

AC-SIM-01: Bản phân rã & tổng v1
ChoKhiThì
Một giỏ 2 dòng định giá đượcPOST /simulation/calculateMỗi dòng trả về giá gốc/đơn vị, fare đã chọn, thuế đã áp, và tổng dòng; đơn trả về subtotal/discount/tax/total và một mốc thời gian tính
Một dòng mang thuế 10% đã gộpCùng lệnhThuế đó được nhúng vào giá và không làm tăng tổng đơn
AC-SIM-02: Trả lại & khóa theo id dòng
ChoKhiThì
Các món mỗi món mang một id dòng do bên gọi cấpĐịnh giá qua v1Bản đồ kết quả được khóa theo id đó và trả lại nó trên mỗi dòng
AC-SIM-03: Ảnh chụp bất biến v2
ChoKhiThì
Một giỏ N dòngPOST /simulation-v2/calculateTrả về một ảnh chụp đơn cộng N ảnh chụp dòng; mỗi dòng mang một PRICE cộng các mục thuế của nó, buyer-payable, và một sổ cái theo bên
Ảnh chụp đơnCùng lệnhCuộn lên subtotal, buyer-payable, sổ cái theo bên, và seller liability
AC-SIM-04: Xem trước là chỉ-đọc
ChoKhiThì
Một đơn đang có với các mónPOST /sale-orders/{id}/pricing/previewBản phân rã v1 trả về và trạng thái cùng dữ liệu đã lưu của đơn không đổi
AC-SIM-05: Giỏ rỗng bị từ chối
ChoKhiThì
Một đơn không có mónĐịnh giá (xem trước)Từ chối - một giỏ rỗng không thể định giá
AC-SIM-06: v2 best-effort lúc thanh toán
ChoKhiThì
Định giá lúc thanh toán nơi phép tính v2 lỗiĐơn được định giáKết quả v1 vẫn trả về và thanh toán tiếp tục; lỗi v2 được log và bỏ qua
AC-SIM-07: Từ chối thượng nguồn được phơi ra
ChoKhiThì
Một dòng có biến thể không có fare set kích hoạtĐịnh giáTrạng thái và lý do thật từ thượng nguồn được phơi ra (không phải một lỗi 500 chung chung)

PROMO - Khuyến mãi & Quy tắc In-progress

Feature ID: pricing/PROMO · Phase: P3 · PRDs: Khuyến mãi, phương thức & quy tắc phân khúc · Dev: @nx/pricing · Promotion System

Người dùng được gì: chủ cửa hàng định nghĩa các chiến dịch khuyến mãi - một khuyến mãi mang đúng một phương thức (cố định hoặc phần trăm; nhắm vào dòng hàng, đơn hàng, hoặc vận chuyển; kèm chiến lược phân bổ), một cơ chế tiêu chuẩn hoặc mua-tặng, và ba tập quy tắc phân khúc ai đủ điều kiện (điều kiện), cái gì phải mua (nguồn), và cái gì được giảm (đích). CRUD và aggregate (khuyến mãi + phương thức + mọi tập quy tắc) đã có hôm nay; bộ tính giảm giá áp khuyến mãi khi thanh toán chưa được đấu nối vào luồng định giá.

Yêu cầu

IDPYêu cầu
URD-PROMO-001MChủ cửa hàng có thể tạo một khuyến mãi với một phương thức và các quy tắc trong một thao tác aggregate.
URD-PROMO-002MChủ cửa hàng có thể cập nhật một aggregate khuyến mãi (phương thức + quy tắc: thêm/sửa/xóa).
URD-PROMO-003MMột khuyến mãi có nhiều nhất một phương thức khuyến mãi.
URD-PROMO-004SQuy tắc điều kiện dùng cùng mô hình quy tắc như fare (thuộc tính, toán tử, giá trị, logic AND).
URD-PROMO-005MKhuyến mãi, phương thức và quy tắc được cô lập theo merchant và dùng xóa mềm.
URD-PROMO-006WGiảm giá khuyến mãi được áp tự động trong quá trình định giá lúc thanh toán (bộ tính chưa có - chưa đấu nối).
URD-PROMO-007MMột khuyến mãi khai báo một cơ chế - STANDARD (giảm giá thẳng) hoặc BUY_GET (mua-X-tặng-Y) - mặc định là STANDARD.
URD-PROMO-008MPhương thức duy nhất khai báo cách tính giảm giá: FIXED (số tiền giảm) hoặc PERCENTAGE (phần trăm giảm), mang giá trị giảm.
URD-PROMO-009MPhương thức khai báo nơi giảm giá rơi vào qua kiểu đích: ITEMS, ORDER, hoặc SHIPPING.
URD-PROMO-010SPhương thức khai báo chiến lược phân bổ - EACH (theo từng món), ACROSS (trải đều các món), hoặc ONCE (một món).
URD-PROMO-011SPhương thức có thể giới hạn số đơn vị được giảm qua giới hạn số lượng tối đa.
URD-PROMO-012MPhương thức BUY_GET khai báo số lượng nguồn tối thiểu (phải mua) và số lượng đích (được giảm).
URD-PROMO-013MQuy tắc cấp phương thức chia thành quy tắc nguồn (phải mua gì) và quy tắc đích (cái gì được giảm), gắn theo ngữ cảnh, bên cạnh quy tắc điều kiện của khuyến mãi.
URD-PROMO-014MSố đếm quy tắc điều kiện, nguồn và đích được denormalized trên khuyến mãi và phương thức và luôn chính xác khi quy tắc được thêm hoặc bỏ.
URD-PROMO-015SMột khuyến mãi mang một mã tùy chọn; khuyến mãi không mã chỉ là tự động (auto-apply), và mã là duy nhất theo merchant trong số các khuyến mãi còn sống.
URD-PROMO-016SMột khuyến mãi mang một cờ stacking kiểm soát việc nó có thể kết hợp với khuyến mãi khác, và một cờ đã-gồm-thuế.
URD-PROMO-017SMột khuyến mãi mang khoảng hiệu lực từ / đến, một giới hạn lượt dùng, và một số lượt dùng đang chạy.
URD-PROMO-018MMột khuyến mãi đi qua trạng thái vòng đời - DRAFT, ACTIVATED, DEACTIVATED, EXPIRED, hoặc ARCHIVED - mặc định là DRAFT.
URD-PROMO-019MTrong một cập nhật aggregate mỗi mục quy tắc được diễn giải theo hình dạng: không id tạo, id-kèm-trường sửa, chỉ-id xóa; một quy tắc được tạo phải mang thuộc tính, toán tử và kiểu dữ liệu.
URD-PROMO-020MXóa một khuyến mãi lan truyền tới phương thức và mọi quy tắc đính kèm (điều kiện, nguồn, đích) trong một transaction.

Chấp nhận

AC-PROMO-01: Aggregate khuyến mãi
ChoKhiThì
Chủ cửa hàng gửi một khuyến mãi + phương thức + 2 quy tắcTạoKhuyến mãi, phương thức và cả hai quy tắc được lưu cùng nhau
Chủ cửa hàng bỏ một quy tắc qua cập nhật aggregateLưuQuy tắc đó bị xóa mềm; phần còn lại được giữ
AC-PROMO-02: Mua-tặng với quy tắc nguồn/đích
ChoKhiThì
Một khuyến mãi BUY_GET: một phương thức PERCENTAGE (giá trị 100, nguồn-tối-thiểu 2, đích 1) + 1 quy tắc nguồn + 1 quy tắc đíchTạo qua aggregateKhuyến mãi, phương thức, quy tắc nguồn và quy tắc đích được lưu cùng nhau; số đếm quy tắc nguồn và đích mỗi cái đọc ra 1
AC-PROMO-03: Trộn quy tắc aggregate theo hình dạng
ChoKhiThì
Một khuyến mãi đang có với hai quy tắc điều kiệnCập nhật aggregate gửi một quy tắc có id+trường, một chỉ có id, một không idCái đầu được sửa, cái thứ hai bị xóa, cái thứ ba được tạo - trong một transaction; số đếm quy tắc vẫn chính xác
Một quy tắc được tạo thiếu thuộc tính / toán tử / kiểu dữ liệuCập nhật aggregate được lưuCả aggregate bị từ chối và rollback
AC-PROMO-04: Tính duy nhất của mã & tự động
ChoKhiThì
Một khuyến mãi còn sống với mã SUMMERTạo một khuyến mãi còn sống khác với mã SUMMERTừ chối - mã là duy nhất theo merchant trong số các khuyến mãi chưa xóa
Một khuyến mãi không có mãLưuNó chỉ là tự động (auto-apply)

7. Ràng buộc & Phi mục tiêu

Các yêu cầu xuyên suốt (CON) áp dụng cho mọi feature ở trên và được kiểm thử dưới dạng TC-CON-*.

Yêu cầu xuyên suốt (CON)

IDPYêu cầu
URD-CON-001MMọi endpoint định giá yêu cầu xác thực (JWT hoặc basic auth).
URD-CON-002MMọi bản ghi được giới hạn theo merchant qua header merchant và dùng xóa mềm.
URD-CON-003MGiá trị tiền tệ dùng độ chính xác thập phân (4 chữ số) trong toàn bộ phép tính.
URD-CON-004MẢnh chụp định giá (v2) bất biến sau khi đã tính.

Ràng buộc

IDRàng buộc
C-01Đúng một fare set ở trạng thái kích hoạt cho mỗi biến thể sản phẩm.
C-02Nhiều nhất một giá vốn hiện tại (chưa kết thúc) cho mỗi biến thể tại một thời điểm.
C-03Thuế áp theo thứ tự ưu tiên tăng dần; thuế đã gộp không bao giờ làm tăng tổng.
C-04Phép tính tiền dùng độ chính xác float(value, 4).
C-05Mọi bản ghi được cô lập theo merchant và xóa mềm.
C-06v1 (/simulation) và v2 (/simulation-v2) chia sẻ logic fare/thuế lõi; bản sửa phải đáp ở cả hai.

Phi mục tiêu

  • Định giá đa tiền tệ
  • Một bộ tính giảm giá đấu nối vào thanh toán (thực thể đã có; chưa áp)
  • Lưu trữ đơn hàng, phát hành hóa đơn, tác động lên tồn kho hoặc thanh toán

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

NgàyTác giảMô tảPhiên bản
2026-06-05Claude (AI pair)URD ban đầu từ phân tích code @nx/pricing; feature spine FARE / TAX / COST / PROMOv0.1
2026-06-15Nhóm Định giáThêm feature SIM - mô phỏng định giá (v1 phẳng + v2 ảnh chụp) & xem trước giá đơn hàngv0.2

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