Skip to content

Taxation Service

@nx/taxation sở hữu các template tax-rule TaxGroup/TaxGroupItem và cung cấp chúng lên sản phẩm dưới dạng các dòng TaxSet + Tax, phản ứng với thay đổi sản phẩm qua Debezium CDC. Nó cũng phục vụ đơn vị hành chính, tỉnh, và phường Việt Nam dạng read-only. Pricing tiêu thụ TaxSet đã cung cấp; invoice là consumer thuế downstream.

1. Tham chiếu nhanh

Thuộc tínhGiá trị
Package@nx/taxation
CodeSVC-00130-TAXATION
LoạiMicroservice
RuntimeBun
Base ClassVerifierApplication
Vị trípackages/taxation
Base Path/v1/api/taxation
Dev Port31130
Container Port3000 (external 31130)
Snowflake ID13
DB Schematax (TaxGroup, TaxGroupItem, Vn* refs) + pricing (TaxSet, Tax, TaxType) — tất cả do @nx/core sở hữu
Binding Namespace@nx/taxation
Ownertaxation-team

2. Mục đích & Phạm vi

Bao gồmKhông bao gồm
CRUD template TaxGroup/TaxGroupItemTính tax-rate lúc bán (@nx/pricing)
Provision/deprovision TaxSet + Tax lên sản phẩmĐịnh danh thuế seller/buyer TaxInfo (commerce → invoice)
CDC reconcile khi tạo/cập nhật/xóa sản phẩmOverride thuế cấp variant (tạo thủ công, sourceType chưa set)
Validate tương thích merchant taxMethod ↔ groupSeed dữ liệu tham chiếu VN (load bên ngoài)
Tỉnh / phường / đơn vị hành chính VN read-onlyPhát hành hóa đơn (@nx/invoice)

3. Tech Stack

Bên ngoài:

Thư việnMục đích
@venizia/ignisIoC container, DI, BaseService, BaseRestController, ControllerFactory
honoFramework HTTP server (qua IGNIS)
drizzle-ormTruy cập DB qua PostgresCoreDataSource
@platformatic/kafkaKafka consumer + (de)serializer key/value
@venizia/ignis-helpersKafkaConsumerHelper, truy cập env, getError/HTTP, dayjs
zodValidate request schema (controller provisioning)

Nội bộ:

PackageMục đích
@nx/coreTẤT CẢ Drizzle schema, repository, VerifierApplication, hằng số CDC topic, TProductPgRow/TDebeziumMessage

Phụ thuộc nội bộ duy nhất là @nx/core. Package này không khai báo schema riêng.

4. Cấu trúc Project

packages/taxation/
├── src/
│   ├── application.ts          # Lớp Application (VerifierApplication)
│   ├── index.ts                # Entry → bootstrapApplication()
│   ├── migrate.ts              # Migration entry → bootstrapMigration()
│   ├── common/                 # BindingKeys, RestPaths
│   ├── components/kafka/        # CDC consumer trên CDCKafkaTopics.PRODUCT
│   ├── controllers/            # 6 REST controller + permission defs
│   ├── datasources/            # PostgresCoreDataSource binding
│   ├── migrations/processes/   # Seed (discrimination types, groups, perms, role-perms)
│   ├── repositories/           # Lớp con Repository trên schema @nx/core
│   ├── resources/              # app-info.json, banner
│   └── services/               # TaxGroup, TaxProvisioning, TaxationWorker
├── package.json
└── tsconfig.json

5. Architecture

Chi tiết: xem Architecture.

6. Snapshot Domain

ERD đầy đủ + bảng theo từng entity: xem Domain Model.

7. Tổng quan bề mặt

REST controllers (tham chiếu đầy đủ render trực tiếp từ /v1/api/taxation/doc/openapi.json):

ControllerBase pathStyleEndpoints
TaxGroupController/tax-groupsControllerFactory CRUD8
TaxGroupItemController/tax-group-itemsControllerFactory CRUD8
TaxProvisioningController/tax-provisioningCustom (provision/deprovision)2
VnProvinceController/vn-provincesRead-only
VnWardController/vn-wardsRead-only
VnAdministrativeUnitController/vn-administrative-unitsRead-only

Async topics (tham chiếu đầy đủ trong API Events):

HướngSố lượng
Inbound (Kafka CDC)1 (public.Product)
Outbound (Kafka)0
WebSocket out0
BullMQ jobs in/out0

8. Components

ComponentFileMục đích
ApplicationKafkaComponentsrc/components/kafka/component.tsSubscribe CDCKafkaTopics.PRODUCT (Debezium), fallbackMode: latest, route payload tới TaxationWorkerService.handleProductCDC

9. Services

ServiceFileMô tả ngắn
TaxGroupServicesrc/services/tax-group.service.tsValidate TaxGroup.taxMethod theo merchant taxMethod; tìm group theo method
TaxProvisioningServicesrc/services/tax-provisioning.service.tsProvision/deprovision idempotent TaxSet + Tax từ một template TaxGroup
TaxationWorkerServicesrc/services/taxation-worker.service.tsLogic CDC consumer: c/u/r → reconcile, d → deprovision

10. Repositories

Đăng ký trong application.ts. Tất cả extend repository @nx/core trên schema do core sở hữu.

RepositoryBảngNguồnMethod tùy chỉnh
TaxGroupRepositorytax.TaxGroup@nx/core
TaxGroupItemRepositorytax.TaxGroupItem@nx/core
TaxTypeRepositorypricing.TaxType@nx/core
TaxSetRepositorypricing.TaxSet@nx/corefindActiveTaxSetByPrincipal
TaxRepositorypricing.Tax@nx/core
VnProvinceRepositorytax.VnProvince@nx/core
VnWardRepositorytax.VnWard@nx/core
VnAdministrativeUnitRepositorytax.VnAdministrativeUnit@nx/core
DiscriminationTypeRepositoryDiscriminationType@nx/core
MigrationRepository, PermissionRepository, PolicyDefinitionRepository, RoleRepositoryinfra@nx/core

11. Entry Points

FileMục đích
src/index.tsService entry → bootstrapApplication()
src/migrate.tsMigration entry → bootstrapMigration()
src/application.tsLớp Application extends VerifierApplication

12. Configuration

Env vars + feature flags + dữ liệu seed: xem Configuration.

13. Operations

Deployment + observability + security + runbook: xem Operations.

14. Trang liên quan

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