Bỏ qua để đến nội dung

Kiến Trúc Hệ Thống — BPO ERP

BPO ERP là nền tảng ERP đa tenant được hậu thuẫn bởi PostgreSQL. Backend là một ứng dụng ASP.NET Core đơn lẻ expose REST API, với cô lập tenant được thực thi bằng Row-Level Security. Frontend React + TypeScript được đồng host trên cùng một origin. Xác thực sử dụng ASP.NET Core Identity với hai chế độ JWT/cookie.


---
config:
  layout: elk
---
graph TD
    subgraph Clients
        WB["Web Browser"]
        MOB["Mobile App"]
    end

    subgraph App["Application Tier (ASP.NET Core)"]
        API["REST API / Auth"]

        subgraph Modules["Domain Modules"]
            direction LR
            CORE[Core]
            ACC[Accounting]
            INV[Inventory]
            PRO[Procurement]
            SAL[Sales]
        end

        JOBS["Background Jobs"]
        EINV["E-Invoice Adapter"]
    end

    DB[("PostgreSQL")]
    GDT["GDT Provider"]
    EXT["External Services"]

    WB & MOB -->|HTTPS| API
    API --> Modules
    Modules --> EINV --> GDT
    Modules --> DB
    JOBS --> Modules
    JOBS --> DB
    JOBS --> EXT

Tất cả các module sống trong một ứng dụng ASP.NET Core đơn lẻ, được phân tách bằng namespace. Tất cả các cuộc gọi đều trong-process — không có giao tiếp inter-service.

ModuleTrách nhiệm
Core PlatformCấp tenant, RBAC, quản lý người dùng, ghi nhật ký kiểm toán, quản trị hệ thống
Customization EngineTrường tùy chỉnh, quy tắc xác thực, bước quy trình công việc theo từng tenant
Plugin HostMở rộng mã tenant sandboxed (Phase 2)
AccountingSổ cái chung, AP, AR, tích hợp hóa đơn điện tử
InventoryChủ sản phẩm, kho, chuyển động hàng tồn kho, định giá, kiểm kê
ProcurementYêu cầu mua hàng, PO, nhập hàng, quản lý nhà cung cấp
SalesKhách hàng, báo giá, đơn đặt hàng, phiếu giao hàng, hóa đơn AR
ReportingBáo cáo tài chính, dashboard có thể cấu hình, báo cáo xuyên tenant
ManufacturingBOM, lệnh sản xuất, MRP, theo dõi chi phí sản xuất (Phase 2)
HR & PayrollHồ sơ nhân viên, lương, phiếu lương (Phase 2)
Migration ETLTrích xuất, chuyển đổi, tải, đối chiếu dữ liệu legacy (Phase 3)

Triển khai chính là trên máy chủ của BPO. Cùng một binary chạy trên cơ sở hạ tầng cloud hoặc máy chủ on-premises của khách hàng — không cần thay đổi mã nguồn. Tất cả dữ liệu tenant vẫn ở Việt Nam.


Quan ngắtCách tiếp cận
MultitenancySchema chia sẻ với cô lập row ở cấp database (tier Standard); database riêng (tier Dedicated). Xem multitenancy.md.
Auth & AuthorizationPhiên browser sử dụng cookie được quản lý bảo mật bởi server; client API/mobile sử dụng bearer token. Permission-code RBAC được thực thi ở cả API và lớp dữ liệu. Xem Access control.
Audit LoggingNhật ký kiểm toán chỉ thêm, không thay đổi cho tất cả các thay đổi dữ liệu thuộc tenant.
EncryptionTLS khi truyền; mã hóa ở cấp hạ tầng; mã hóa cấp cột cho dữ liệu cá nhân và lương.
Background JobsCông việc được lên lịch (đóng kỳ kế toán, báo cáo thuế, đồng bộ tỷ giá, polling hóa đơn điện tử) chạy như hosted services trong cùng một process.

LớpLựa chọnLý do
BackendASP.NET Core (latest LTS)Kỹ năng team; hệ sinh thái enterprise mạnh
DatabasePostgreSQLMã nguồn mở; RLS native; không có licensing per-core
ORMEntity Framework CoreQuery filter toàn cục áp dụng cô lập tenant; migrations code-first
FrontendReact + TypeScriptKỹ năng team; phù hợp cho UI doanh nghiệp dữ liệu lớn
APIRESTĐơn giản; tương thích rộng rãi client
AuthASP.NET Core Identity + JWT / OIDCCookie + Bearer dual-scheme; sẵn sàng OIDC cho SSO tương lai
HostingServer BPO (chính); cloud hoặc server khách (tùy chọn)Nơi lưu trữ dữ liệu; không cần thay đổi mã để chuyển target triển khai

ADRQuyết định
ADR-001Multitenancy: hybrid hai-tier (shared schema RLS + tùy chọn dedicated)
ADR-002Ứng dụng monolithic modular — không có microservices
ADR-003Backend: ASP.NET Core, Entity Framework Core, ASP.NET Core Identity
ADR-004Database: PostgreSQL
ADR-005Access control: permission-code RBAC với định nghĩa vai trò theo từng tenant
ADR-006Customization: trường tùy chỉnh JSON, quy tắc xác thực condition-tree, bước quy trình công việc