Skip to content

Giới hạn Số liệu Đầu vào

Yêu cầu (06/2026): mọi giá trị số gửi từ client (FE/POS/BO) vào backend API đều có giới hạn. Input vượt giới hạn bị từ chối với lỗi validate HTTP 422 rõ ràng — không bao giờ được chạm tới database (không có lỗi 500 numeric overflow).

1. Các giới hạn

LoạiÁp dụng choMaxSố thập phânTương đương DB
Tiền tệ / giá trịamount, price, total, fee, giá trị giảm giá, balance, doanh thu, cost99,999,999,999.99994numeric(15,4)
Số lượng / khối lượngquantity, qty, volume, tồn kho, hệ số quy đổi uom9,999.99994numeric(8,4)

Quy tắc:

Quy tắcHành vi
Vượt max422 kèm thông báo lỗi theo field
Quá 4 chữ số thập phân422 (từ chối, không tự làm tròn)
Số âm422 — mọi input tiền/số lượng đều không âm, trừ khi field ghi rõ ngoại lệ
NaN / Infinity / không phải số422
Field tỷ giá (exchange rate)Giữ precision riêng (numeric(12,6) / numeric(19,6)) nhưng vẫn chặn ở tầng validate theo cùng cách

2. Phạm vi — chặn ở đâu

Giới hạn nằm ở tầng validate Zod, qua schema dùng chung trong @nx/core (nguồn duy nhất — không khai báo lại theo từng package). Precision cột DB không thay đổi trong yêu cầu này.

Hai bề mặt input phải quét trong mỗi package:

  1. Request schema khai báo tay — các field z.number() trong models/requests/definitions.ts của controller.
  2. Schema sinh tự động từ CRUD — entity có cột decimal/numeric (và field số trong jsonb) expose qua generic CRUD controller; schema insert/update sinh ra nhận giá trị không giới hạn nếu không override.

3. Triển khai theo package

PackageBề mặtTrạng thái
coreschema dùng chung + hằng số jsonb (giảm giá sale-item, schema sổ ledger)WK25
commerce18 CRUD controllers, lowStockThreshold, hệ số quy đổi uomWK25
saletiền mặt ca (shift), số lượng order, 14 CRUD controllersWK25
inventorysố lượng & đơn giá phiếu nhập/xuất, purchase order (15 CRUD controllers)WK25
pricingamount & quantity của fare/cost/tax/promotion-method (9 CRUD controllers)WK25
financeamount/exchangeRate phiếu thu chi, 5 CRUD controllersWK25
invoicedòng hóa đơn quantity/price/amount/taxAmountWK25
ledgerrevenueMin/Max bậc thuế, declaredAnnualRevenueWK25
taxationvalue của tax-group-item (5 CRUD controllers)WK25
helpdeskcompensation.amountChờ — build package đang hỏng; tạo item khi sửa xong
identity / signal / search / outreach / payment / asset / licensingchỉ có priority/phân trang/đếm — không có input tiền/số lượng từ FE (đã audit 06/2026)Không cần làm

4. Ma trận test biên (cho QA)

Chạy cho từng endpoint nhận field tiền hoặc số lượng:

#InputKỳ vọng
1đúng 99999999999.9999 (tiền) / 9999.9999 (số lượng)202/200 chấp nhận
2max + 0.0001422, lỗi nêu tên field
3giá trị 4 chữ số thập phân (vd 12.3456)chấp nhận
4giá trị 5 chữ số thập phân (vd 12.34567)422
5-1422 (trừ khi field ghi rõ cho phép âm)
60chấp nhận (trừ khi field yêu cầu dương, vd amount phiếu thu chi)
7chuỗi "abc", null cho field bắt buộc, 1e30422

Bất kỳ case nào trả lỗi DB / HTTP 500 = bug — thiếu giới hạn ở tầng validate.

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