Skip to content

ADR-0002. DiscriminationType là phân loại thuế authoritative (dual-write taxTypeId)

FieldValue
StatusAccepted
Date2026-04-15
Deciderstaxation-team
Supersedes

Bối cảnh

  • Hệ thống có một classifier DiscriminationType generic (scope cho inventory, finance, license, và tax_classification).
  • Entity TaxType legacy trong schema pricing cũng phân loại thuế (000_VAT, 400_PIT, ...), trùng concept đó.
  • TaxGroupItemTax cần một nguồn phân loại; code pricing/calculation hiện vẫn đọc Tax.taxTypeId.
  • Chúng tôi muốn một catalogue đơn, phân vùng theo scope mà không phá vỡ pricing ngay.

Quyết định

TaxGroupItem.discriminationTypeIdTax.discriminationTypeId (cả hai notNull) là phân loại thuế authoritative. Trong lúc provision chúng tôi dual-write: mỗi Tax giữ discriminationTypeId mới và taxTypeId legacy (nullable) để các read pricing hiện tại tiếp tục hoạt động. Discrimination type dưới scope tax_classification được seed bởi taxation-0001-seed-discrimination-types.ts.

Hệ quả

ƯuNhược
Một catalogue classifier xuyên domainHai cột phải giữ đồng bộ trong giai đoạn chuyển tiếp
Tax.taxTypeId giữ nullable — không phá vỡ cứng cho pricingCần logic reconcile để map DiscriminationType → TaxType
Tax class mới thêm qua discrimination seed, không phải schemaBảng TaxType còn lại đến khi pricing migrate 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 migrationConcept classifier trùng; không tái dùng cross-domainPhân kỳ với chiến lược DiscriminationType
Drop taxTypeId ngaySchema sạchPhá vỡ read pricing đang chạyQuá rủi ro nếu không thay đổi pricing phối hợp
Bảng classifier riêng cho thuếTập trungLại thêm một classifier; cùng vấn đề trùngTái dùng thắng 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 dual-write)
  • 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.