Skip to content

ADR-0002. DiscriminationType làm phân loại thuế chính thức (ghi kép taxTypeId)

FieldValue
StatusAccepted
Date2026-04-15
DecidersPhat Nguyen
Supersedes-

Bối cảnh

  • Hệ thống đã có một bộ phân loại DiscriminationType dùng chung (scope cho inventory, finance, license, và tax_classification).
  • Entity TaxType cũ trong schema pricing cũng phân loại thuế (000_VAT, 400_PIT, ...), trùng lặp với khái niệm đó.
  • TaxGroupItemTax cần một nguồn phân loại duy nhất; code pricing/tính toán hiện vẫn đọc Tax.taxTypeId.
  • Chúng tôi muốn một danh mục duy nhất, phân vùng theo scope mà không phá vỡ pricing ngay lập tức.

Quyết định

TaxGroupItem.discriminationTypeIdTax.discriminationTypeId (cả hai đều notNull) là phân loại thuế chính thức. Trong lúc cấp phát, chúng tôi ghi kép: mỗi Tax giữ cả discriminationTypeId mới lẫn taxTypeId cũ (nullable) để các lệnh đọc pricing hiện tại vẫn hoạt động. Các discrimination type thuộc scope tax_classification được seed bởi taxation-0001-seed-discrimination-types.ts.

Hệ quả

ƯuNhược
Một danh mục phân loại dùng chung xuyên domainHai cột phải giữ đồng bộ trong giai đoạn chuyển tiếp
Tax.taxTypeId vẫn nullable - không phá vỡ đột ngột pricingCần logic đối soát để ánh xạ DiscriminationType → TaxType
Loại thuế mới thêm qua discrimination seed, không qua schemaBảng TaxType vẫn tồn tại đến khi pricing chuyển đổi hoàn toàn

Các phương án đã cân nhắc

Phương ánƯuNhượcLý do loại bỏ
Chỉ giữ TaxTypeKhông cần migrationTrùng lặp khái niệm phân loại; không tái dùng xuyên domainLệch khỏi chiến lược DiscriminationType
Bỏ taxTypeId ngaySchema gọn gàngPhá vỡ các lệnh đọc pricing đang chạyQuá rủi ro nếu không phối hợp thay đổi pricing
Bảng phân loại riêng chỉ cho thuếTập trungLại thêm một bộ phân loại; vẫn cùng vấn đề trùng lặpTái dùng tốt hơn là tạo bảng mới

Tham chiếu

  • packages/core/src/models/schemas/tax/tax-group-item/schema.ts (discriminationTypeId)
  • packages/core/src/models/schemas/pricing/tax/schema.ts (taxTypeId nullable + discriminationTypeId)
  • packages/core/src/models/schemas/public/discrimination-type/constants.ts:DiscriminationTypeScopes.TAX_CLASSIFICATION
  • packages/taxation/src/services/tax-provisioning.service.ts (vòng lặp ghi kép)
  • packages/taxation/src/migrations/processes/taxation-0001-seed-discrimination-types.ts

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