Need Help?

Contact Support

Kiểm tra logic nhập các sản phẩm

Rất tốt — với mô hình bạn đã thiết kế, ta có thể đánh giá tính logic khi nhập 4 loại sản phẩm như sau:


1. Sản phẩm thông thường

(Sản phẩm không có biến thể, không có lô)

✅ Hợp lý khi:

  • ProductId có trong [Products]

  • VariantId = '00000000-0000-0000-0000-000000000000' (mặc định)

  • LotId = '00000000-0000-0000-0000-000000000000' (mặc định)

  • StockPerStoreTransactionsStock xử lý đúng bộ 4 khóa

👉 Không cần nhập ProductVariants hay ProductLots


2. Sản phẩm có biến thể

(Ví dụ: quần áo có size/màu)

✅ Hợp lý khi:

  • Products: là sản phẩm cha

  • ProductVariants: chứa từng biến thể (size M, màu đỏ...)

  • StockPerStore: tồn theo ProductId + VariantId, LotId mặc định

  • TransactionsStock: ghi nhận theo biến thể

⚠ Logic cần đảm bảo:

  • VariantId bắt buộc có, liên kết đúng với ProductId

  • LotId vẫn để mặc định '00000000-0000-0000-0000-000000000000'


3. Sản phẩm theo lô

(Thuốc, thực phẩm cần hạn dùng, quản lý theo lô nhập)

✅ Hợp lý khi:

  • Products: như bình thường

  • ProductVariants: không cần dùng (nếu không có biến thể)

  • LotId: là real LotId, liên kết đến ProductLots (chứa ExpiryDate)

  • VariantId: mặc định '0000...'

  • StockPerStore: tồn kho theo từng LotId

  • TransactionsStock: ghi nhận đúng LotId

⚠ Logic cần đảm bảo:

  • LotId phải tồn tại trong ProductLots

  • VariantId phải là '000...0000' hoặc có quy ước rõ ràng


4. Sản phẩm có cả biến thể và lô

✅ Hợp lý khi:

  • Products: sản phẩm cha

  • ProductVariants: định nghĩa từng biến thể

  • ProductLots: định nghĩa các lô theo VariantId

  • StockPerStore: tồn theo bộ khóa:

    scss
    (StoreId, ProductId, VariantId, LotId)
  • TransactionsStock: mỗi giao dịch phải ghi đủ 3 trường: ProductId, VariantId, LotId

⚠ Logic cần đảm bảo:

  • LotId phải đúng với VariantId tương ứng trong ProductLots

  • Không nhập hàng hay bán hàng mà thiếu VariantId hoặc LotId


⚠️ Tóm tắt điều kiện kiểm tra tính logic khi nhập hàng

Loại SP ProductId VariantId LotId Ghi chú logic bắt buộc
Sản phẩm thông thường '0000-0000…' '0000-0000…' Không dùng bảng Variants, Lots
Sản phẩm có biến thể Variants.VariantId '0000-0000…' Có dòng VariantId đúng với ProductId
Sản phẩm có lô '0000-0000…' Lots.LotId LotId phải thuộc VariantId mặc định
Sản phẩm có biến thể và lô Variants.VariantId Lots.LotId (của biến thể đó) Phải đúng cả VariantIdLotId liên kết

🧪 Bạn nên kiểm tra các lỗi logic thường gặp:

  1. LotId không tồn tại trong ProductLots → ❌ lỗi logic

  2. VariantId không thuộc ProductId → ❌ sai biến thể

  3. StockPerStore bị trùng dòng với tổ hợp (StoreId, ProductId, VariantId, LotId) → ❌ vi phạm UNIQUE