TravelQ Hotel Admin — Kiến trúc microservice
Đề xuất self-host Holitech Linux · thiết kế only · 07/11/2026 (Asia/Saigon)


   Trạng thái: Bản thiết kế đề xuất – chưa triển khai / chưa nghiệm thu


  Mã tài liệu                         TravelQ-HotelAdmin-Kien-truc-Microservice-20261107

  Đối tượng                           anh Long · đội kỹ thuật Holitech

  Phạm vi                             Thiết kế kiến trúc · không mã ứng dụng · không deploy · không credential

  Hạ tầng mục tiêu                    Self-host Linux Holitech · không Cloudflare Pages/Functions/D1/TURN mint

  Nguồn đối chiếu                     Hợp đồng Spa/KT OFFLINE; audit Linux 07/11; manifest nguồn TEST t368
                                      (250/250, aggregate c3ca7ab08ca8a17f ) — đường dẫn tương đối trong kho tài
                                      liệu, không nhúng secret


   Mọi mốc thời gian/công sức là ước lượng lập kế hoạch, không phải cam kết giao hàng hay chi phí. Không tuyên
   bố chứng nhận danh tính TQID/provider; gateway TQID là ranh giới ngoài kèm kiểm thử tích hợp hiện có. Tài liệu
   không nêu số liệu hồ sơ TQID hay khẳng định dữ liệu thật/giả của provider.



  Giả định nguồn của bản này: đọc hợp đồng Spa/KT + đề xuất transport OFFLINE; audit khả thi Linux + provenance
  hash; đối chiếu nghiệp vụ từ cây nguồn TEST đã pin. Không đọc/chép secret. Bản này dùng sự thật đã có lúc soạn.



1. Mục tiêu điều hành và phạm vi

1.1 Mục tiêu
  • Tách miền nghiệp vụ thành dịch vụ có chủ sở hữu dữ liệu riêng (database-per-service), giảm điểm
    nghẽn monolith hiện tại (một Worker + D1 dùng chung).
  • Giữ hợp đồng nghiệp vụ đã biết (HV/TA, một tài khoản nhận tiền KS, bộ phận, hiển thị TQID, xuất pháp
    lý kiểm soát) khi đổi kiến trúc.
  • Chạy trên máy chủ Linux Holitech tự quản; TLS Nginx/Caddy; bí mật qua Docker/K8s secrets — không
    phụ thuộc Cloudflare.

1.2 Trong / ngoài phạm vi

  Trong phạm vi                                                      Ngoài phạm vi
  Catalog ~14–16 miền; ma trận sở hữu dữ liệu; luồng                 Viết mã, migration chạy thật, deploy, provisioning,
  bắt buộc; bảo mật; vận hành; lộ trình & rủi ro. Phân               đọc secret, gửi tin ngoài. Chứng nhận cổng thanh
  biệt UI bộ phận với backend miền — UI riêng không                  toán / khuôn mặt / encoder / attestation (chưa
  đồng nghĩa một microservice mỗi tab.                               nghiệm thu). App TravelQ ID trung tâm thuộc biên
                                                                     ngoài.



2. Hiện trạng đã xác minh vs đề xuất
Sự thật kỹ thuật từ audit 07/11/2026 (chỉ đọc). Đề xuất audit cũ Node + SQLite một máy phục vụ port monolith tối thiểu —
bị thay bởi quyết định viết lại microservice; stack dưới chọn PostgreSQL per-service.

 Hạng mục                      Hiện trạng đã kiểm                                         Đề xuất microservice

 Kiến trúc                     SPA + CF Pages Functions; D1 SQLite; chưa microservice     API Gateway/BFF + dịch vụ miền



TravelQ Hotel Admin · Kiến trúc microservice · Đề xuất 07/11/2026                                                 Trang 1 / 10
 Hạng mục                      Hiện trạng đã kiểm                                         Đề xuất microservice

 API / schema                  4 tiền tố API; 10 bảng core; Friends DB tùy chọn           OpenAPI theo dịch vụ; schema tách

 KV / R2 / DO / Queues /       Không thấy phụ thuộc bắt buộc trong cây đã rà              Không giả định; kiểm kê nếu phát
 Telegram                                                                                 hiện thêm

 Thanh toán / hoàn             Chưa gateway verified; mô phỏng fail-closed                Ledger riêng + webhook; OFF đến
                                                                                          khi có contract

 Spa / KT least-priv           Ứng viên OFFLINE đã review core; chưa live / GUI E2E       UI riêng + Dept Exec + Attestation

 Attestation QL                Chưa có endpoint / contract triển khai                     Dịch vụ Attestation; fail-closed
                                                                                          trước đó

 TQID / Face / Encoder         Proxy ngoài; face/encoder OFF                              Gateway tối thiểu; thiết bị giữ OFF

 TURN                          Mint Cloudflare                                            TURN tự host (coturn / provider
                                                                                          duyệt)

 Frontend nghiệp vụ            Check-in / booking / đơn / bảng bộ phận / báo cáo / cổng   Không đồng nghĩa E2E production
                               xuất: có theo hợp đồng nguồn                               đã đạt




TravelQ Hotel Admin · Kiến trúc microservice · Đề xuất 07/11/2026                                                    Trang 2 / 10
3. Sơ đồ kiến trúc đề xuất

                                   TravelQ Hotel Admin — Kiến trúc microservice đề xuất (self-host Holitech Linux)


      Lớp giao diện (UI riêng — không chia sẻ backend theo tab)

            Lễ tân / Admin             Bếp             Buồng phòng              Spa              Kỹ thuật          Khách in-room             TravelQ HQ          Kiosk / App




                                                               API Gateway / BFF (Nginx·Caddy TLS) + RBAC/ABAC
                                                          Cookie HttpOnly · Origin allowlist · correlation-id · không wildcard CORS


   Miền dịch vụ (mỗi dịch vụ = DB logic riêng)

          01 Auth·Tenant              02 TQID Gateway                  03 Booking·Stay                 04 Inventory                   05 Pricing 4-mắt           06 Payments
          tài khoản·phiên·MFA           PII tối thiểu·proxy             nhận phòng·xuất KB           cấp phòng nguyên tử                 giá chính thức               sổ cái·hoàn
               DB: auth_*                    DB: tqid_*                     DB: stay_*                    DB: inv_*                       DB: price_*                  DB: pay_*



             07 Orders                   08 Dept Exec                   09 Attestation                10 Notifications                   11 Reporting                 12 Legal PII
           đơn·catalog·feat               Bếp·HK·Spa·KT                QL xác nhận hoàn tất          nhắc 15p·kênh nội bộ             đối soát read-model         khai báo cư trú
             DB: order_*                   DB: dept_*                      DB: attest_*                 DB: notify_*                      DB: report_*              DB: legal_*



                        13 Friends·Consent                    14 Media Uploads                 15 Call Signaling                         16 Audit·Policy
                        tùy chọn · DB friends_*               MinIO · meta media_*             TURN tự host · call_*                  chuỗi audit append-only




      Bus sự kiện: RabbitMQ (chọn) + Outbox/Inbox                                                Dữ liệu & hạ tầng self-host (không Cloudflare)
      PaymentVerified · InventoryAllocated · OrderDispatched · DeptAdvanced                      PostgreSQL / dịch vụ (cluster 1 máy ban đầu · không join xuyên DB)
      AttestationDone · RefundRequested · RefundSettled · PricePublished                         Redis tùy chọn ephemeral · MinIO upload · OpenTelemetry+Prom+Grafana+Loki
      Idempotency-Key · consumer inbox · không dùng Redis làm sổ cái tiền                        Docker Compose trước · K8s khi cần HA thật · TLS Nginx/Caddy



      Ranh giới ngoài (không thuộc Hotel Admin)
      TravelQ ID App (gateway riêng) · Cổng thanh toán ngân hàng / merchant KS (chưa nghiệm thu) · Thiết bị khuôn mặt / encoder thẻ (OFF)

      .
      HQ TravelQ (maker/checker giá) · Báo cáo pháp lý có ủy quyền · TURN tự host thay mint Cloudflare
      .




 Hình 1. Lớp UI riêng · Gateway/BFF · 16 miền dịch vụ · RabbitMQ outbox/inbox · Postgres per-service · ranh giới ngoài (TQID, cổng
                                TT, thiết bị). SVG vector nhúng — không phụ thuộc Mermaid ngoài.




TravelQ Hotel Admin · Kiến trúc microservice · Đề xuất 07/11/2026                                                                                                            Trang 3 / 10
4. Catalog miền (~16) và sở hữu dữ liệu

Nguyên tắc: mỗi dịch vụ sở hữu schema, credential, backup riêng. Ban đầu có thể một cluster Postgres trên
một máy nhưng cấm bảng dùng chung và cấm SQL join xuyên database. Giao tiếp liên miền bằng API phiên
bản hóa + sự kiện.

 #     Dịch vụ            DB logic        Lệnh / sự kiện            Trách nhiệm chính                 Không làm

 01    Auth · Tenant      auth_*          Login, revoke, version    RBAC+ABAC hotel/dept; MFA         PII khách; tiền
                                                                    admin

 02    TQID Gateway       tqid_*          Resolve, proxy scoped     PII tối thiểu; fail-closed        Lưu hồ sơ đầy đủ; chứng
                                                                                                      nhận provider

 03    Booking · Stay     stay_*          CheckIn, Assign,          Holder policy; gọi cổng Legal     Cấp quỹ; thu tiền
                                          Checkout

 04    Inventory          inv_*           AllocateOnPaid            Cấp phòng nguyên tử; chống        User-hold; hoàn HV
                                                                    oversell

 05    Pricing 4-mắt      price_*         Propose / Approve /       Hai tài khoản cá nhân độc lập,    KS tự duyệt giá phòng
                                          Publish                   không tự duyệt; KS chỉ xem

 06    Payments ·         pay_*           Intent, Verify, Refund    1 tài khoản KS; mã động; ledger   Mark hoàn sớm; áp hoàn DV
       Refunds                                                                                        lên HV

 07    Orders ·           order_*         Create, Cancel(cho),      Snapshot giá; tắt feat chỉ đơn    Dispatch khi chưa
       Catalog                            Feat                      mới                               paid_verified (prepaid)

 08    Dept Execution     dept_*          AdvanceStep               Bếp / HK / Spa / KT;              Chốt attestation; thanh toán
                                                                    expectedStep CAS

 09    Attestation        attest_*        AttestCompletion          Đề xuất: cổng hoàn tất dịch vụ    Bypass bằng login manager;
                                                                    (không xoá ledger paid)           không thay sổ cái tiền

 10    Notifications      notify_*        ReminderDue               Nhắc 15 phút                      Tự bịa kênh Telegram (chưa
                                                                                                      có)

 11    Reporting          report_*        ProjectFromEvents         Read-model đối soát               Ghi đè ledger

 12    Legal ·            legal_*         Upsert,                   PII mã hóa; audit xuất            Full PII trên UI thường
       Residence                          AuthorizedExport

 13    Friends ·          friends_*       OptIn / Out               Scope tùy chọn                    Trộn DB vận hành KS
       Consent

 14    Media              media_* +       PutObjectMeta             Upload có phép                    Log body; lưu định danh thô
                          MinIO                                                                       không mã hóa

 15    Call Signaling     call_*          Offer / Answer meta       P2P + TURN tự host                Mint Cloudflare

 16    Audit · Policy     audit_*         Append, VerifyChain       Append-only; correlation-id       UPDATE / DELETE audit


4.1 Biên nhất quán mạnh (không tách sai)
  • Inventory ↔ Payments: chỉ Allocate sau PaymentVerified . Race “tiền về / hết phòng” → quarantine +
    reconcile. Không lặng hoàn HV (HV cấm hoàn/huỷ). Đây là câu hỏi thiết kế mở cần chốt trước code.
  • Orders ↔ Payments ↔ Dept: prepaid (đồ ăn/uống, Spa): paid_verified (ledger tiền đã nhận) → LT
    Dispatch → Advance non-terminal → Attest (cổng hoàn tất dịch vụ, đề xuất). Báo cáo tách paid /
    completed / refund_pending / settled. Kế toán doanh thu cần xác nhận tài chính — không khẳng định
    mọi “revenue” chỉ sau attestation. Không double-pay / double-count.
  • Pricing ↔ Orders: đơn giữ snapshot; đổi giá không sửa đơn cũ. Ngoại lệ giặt là theo rule đã biết —
    không suy rộng.
  • UI bộ phận là client; một bounded context Dept Execution + ABAC đủ ngày 1 trừ khi cần scale tách sau.



TravelQ Hotel Admin · Kiến trúc microservice · Đề xuất 07/11/2026                                                          Trang 4 / 10
5. Stack đề xuất (self-host)

 Thành phần        Lựa chọn                           Lý do

 Runtime           Node.js LTS + TypeScript           Gần logic JS hiện có; OpenAPI nhanh với đội nhỏ

 API               REST + OpenAPI 3; gRPC nội         gRPC chỉ khi đo được lợi ích latency/streaming
                   bộ tùy chọn

 DB                PostgreSQL per-service             Đa instance / concurrency; PITR. Không SQLite cho microservice đa tiến trình.
                                                      (Đề xuất SQLite audit = port monolith cũ — không áp dụng ở đây.)

 Bus               RabbitMQ + Outbox / Inbox          Hàng đợi bền, DLQ, pattern tài chính quen thuộc trên Compose; chọn thay
                                                      NATS vì đội nhỏ ưu tiên độ chín saga tiền

 Cache             Redis tùy chọn                     Ephemeral (rate-limit, cache); không chân lý tiền

 Object            MinIO (S3-compatible)              Upload nội bộ DC Holitech

 TLS / Secret      Nginx hoặc Caddy; Docker /         Không Cloudflare; không secret trong image / log / PDF
                   K8s secrets

 Orchestration     Docker Compose trước; K8s          Một host ≠ HA
                   khi cần HA thật

 Quan sát          OpenTelemetry → Prometheus         Correlation-id; redact PII
                   + Grafana + Loki

 Backup            PG PITR + MinIO mã hóa +           Mục tiêu đề xuất: RPO ≤ 15 phút · RTO ≤ 4 giờ — chưa đạt, chỉ mục tiêu
                   restore drill


Outbox ghi cùng transaction miền; consumer Inbox theo idempotency key — chống double-pay / double-allocate. Tên biến
môi trường (names-only, không giá trị): ví dụ AUTH_DATABASE_URL , PAY_DATABASE_URL , RABBITMQ_URL ,
 MINIO_ENDPOINT — Holitech chọn sau khi chốt runtime. Docker/Compose chưa cài trên máy audit hiện tại — cần môi
trường riêng khi triển khai sau này.




TravelQ Hotel Admin · Kiến trúc microservice · Đề xuất 07/11/2026                                                          Trang 5 / 10
6. Luồng nghiệp vụ bắt buộc (sơ đồ)

                                  Luồng bắt buộc A — Mua phòng (không user-hold · TTL 60s · Allocate sau PaymentVerified)


           1. Tạo Intent                         2. Provider                     3. PaymentVerified                4. Allocate nguyên tử                         5. Đếm đã bán
            mã động 60s                          webhook ký                       đúng KS·order·amount             Inventory · chống oversell                        chỉ verified-paid




      Hết hạn 60s → intent expired                                      Race: paid nhưng hết phòng                                                                    TA ngoại lệ
      Provider muộn → QUARANTINE + reconcile · không tự bán             Quarantine · CHỐT trước code · CẤM lặng hoàn HV (HV không hoàn/huỷ)                    chỉ highest TQ admin




                                  Luồng bắt buộc B — Đơn prepaid → paid ledger → LT → bộ phận → Attest hoàn tất → báo cáo


      CreateOrder                  paid_verified                 LT Dispatch                  Dept Advance                Attest (QL)                  Completed
                                                                                                                                                                                     Report
       snapshot giá                Bếp·Spa prepaid             không hoàn tất BP             expectedStep CAS            cổng hoàn tất*                 sau attest*




     HK: đồ dùng miễn phí                                               Nhắc Notifications sau 15 phút                              Từ chối dịch vụ đã trả → Refund*
     Giặt là = ngoại lệ trả phí (rule đã biết)                          LT không mark hoàn tất bộ phận                              Chỉ Settled khi provider verified · idempotent




                                                       Tiền · giá · hiển thị danh tính · xuất pháp lý (tóm tắt chính sách)


     Một tài khoản nhận tiền KS                                         Giá 4-mắt TravelQ                                           Hiển thị & Legal
     Mọi bộ phận · mã động hotel/order/amount                           KS chỉ VIEW giá chính thức                                  Holder: chữ cuối · TQID
     Không cash · không nợ phòng                                        2 tài khoản độc lập, không tự duyệt                         Anh/Chị khi có giới tính hồ sơ
     Không manual-paid thay gateway                                     Shared password ≠ 2 danh tính                               Đi cùng/A4/biên lai: chỉ TQID
     Hoàn DV ≠ áp cho HV                                                Giặt là: ngoại lệ chỉnh theo rule                           Export full: role+consent+audit




     Hiển thị & xuất pháp lý (sản phẩm)
     UI thường: holder = chữ cuối · TQID; Anh/Chị khi có giới tính hồ sơ; đi cùng / A4 / biên lai = chỉ TQID.
     Xuất khai báo cư trú đầy đủ chỉ với ủy quyền + consent + audit. Ledger paid độc lập attestation hoàn tất.



     * Attestation & cổng thanh toán thật chưa nghiệm thu — fail-closed đến khi có contract. Báo cáo: paid / completed / refund_pending / settled.
     Kế toán doanh thu cần xác nhận tài chính. Feature KS bật/tắt chỉ chặn đơn mới; Friends không mặc định ngày 1.




    Hình 2. Luồng A (mua phòng) và Luồng B (đơn prepaid → ledger paid → attestation hoàn tất). HV tuyệt đối không hoàn/huỷ.


6.1 Mua phòng — không user-hold
  1. Khởi tạo thanh toán → mã động TTL 60 giây, không hold quỹ theo phiên user.
 2. Hết hạn → intent expired; provider đến muộn → quarantine + reconcile; không tự coi đã bán.
 3. Chỉ PaymentVerified (chữ ký webhook, đúng merchant KS, đúng amount/order, chống replay) →
    Inventory Allocate nguyên tử.
 4. Verified-paid mới đếm quỹ đã bán. Paid nhưng hết phòng → quarantine; xử lý theo policy TA/dịch vụ
    nếu được phép — tuyệt đối không hoàn/huỷ HV. Đây là design question mở, không “lặng hoàn”.

HV: không hoàn, không huỷ. TA: ngoại lệ chỉ highest TravelQ admin (không manager/LT). Quy tắc hoàn dịch
vụ không áp blanket lên HV.

6.2 Đơn → tiền (ledger) → LT → bộ phận → attestation hoàn tất → báo cáo
  1. Tạo đơn (snapshot giá server).
 2. Prepaid (Bếp đồ ăn/uống; Spa): paid_verified trước LT dispatch. HK: đồ dùng miễn phí; giặt là trả phí
    theo rule.
 3. LT dispatch → Dept Advance + expectedStep ; non-terminal. LT không đánh dấu hoàn tất bộ phận. Nhắc
    sau 15 phút.
 4. Đề xuất: Attestation QL là cổng hoàn tất dịch vụ — không xoá / không thay sổ cái đã paid_verified.
    Hiện chưa có contract → fail-closed cho bước hoàn tất.


TravelQ Hotel Admin · Kiến trúc microservice · Đề xuất 07/11/2026                                                                                                                        Trang 6 / 10
 5. Dịch vụ đã trả bị từ chối: RefundRequested → gọi provider → RefundSettled chỉ khi verified; retry
    idempotent; không mark sớm; không double-count.
 6. Báo cáo / đối soát tách: paid · completed · refund_pending · settled. Ghi nhận kế toán doanh thu cần
    xác nhận tài chính.

Mọi khoản về một tài khoản nhận tiền đích KS. Không cash / nợ phòng / manual-paid. Mỗi giao dịch: mã
động hotel / order / amount. KS bật/tắt nhóm đơn: chỉ đơn mới; giữ lịch sử. KS VIEW giá; TravelQ maker/
checker = hai tài khoản cá nhân độc lập, không tự duyệt (mật khẩu dùng chung ≠ hai tài khoản độc lập).

6.3 Hiển thị danh tính & xuất pháp lý
  • UI thường: holder = chữ cuối · TQID; Anh/Chị chỉ khi có giới tính hồ sơ. Người đi cùng / A4 / biên lai: chỉ
    TQID.
  • Xuất khai báo cư trú: full info chỉ với ủy quyền + consent + audit; UI thường không full PII.




TravelQ Hotel Admin · Kiến trúc microservice · Đề xuất 07/11/2026                                      Trang 7 / 10
7. Bảo mật (đề xuất)

  • RBAC + ABAC: mọi request gắn hotel / department / account-version đã ký phía server; role không do
    trình duyệt chọn.
  • MFA cho admin và cặp 4-mắt giá.
  • Service identity: mTLS (danh tính dịch vụ) và phân đoạn mạng giữa service — phân đoạn mạng không
    thay thế danh tính; webhook provider: chữ ký + timestamp + nonce chống replay.
  • Truy vấn tham số hóa; PII hạn chế mã hóa at-rest; retention tách; audit pháp lý.
  • Phiên khách in-room: gắn phòng, TTL ngắn, khóa khi checkout.
  • CSRF: SameSite + Origin allowlist; cookie HttpOnly Secure; cấm wildcard origin.
  • Không secret / hash verifier / token / số định danh cá nhân trong tài liệu hay ví dụ.


8. Vận hành · quan sát · sao lưu

  • Compose: gateway, services, Postgres (logic tách), RabbitMQ, MinIO, (Redis), OTel collector,
    Prometheus, Grafana, Loki.
  • Log: correlation-id bắt buộc; không PII; không body thanh toán.
  • Backup: WAL PITR Postgres từng DB logic; object MinIO phiên bản + mã hóa; test restore định kỳ.
  • Mục tiêu (chưa đạt): RPO ≤ 15 phút · RTO ≤ 4 giờ trên single-host. Failover HA là giai đoạn sau khi có
    nhu cầu thật đã đo.


9. Lộ trình · ước lượng · rủi ro
Giả định đội: 2–3 engineer full-stack + 0.5 ops quen Node/Postgres; song song với xác nhận nghiệp vụ từ anh Long. Đơn vị:
person-week (pw). Không hứa ngày calendar / chi phí tiền. Không bịa số liệu test/CI hiện tại.

                                                                                                                               Ước
 Giai đoạn       Deliverable                                        Acceptance (không %)
                                                                                                                               lượng

 G0 Chốt         Biên dịch vụ + quyết định race HV + app con        Biên bản xác nhận viết                                     1–2 pw
                 ngày 1

 G1 Nền          Compose, Gateway, Auth, Audit, OTel                Health + login fail-closed + audit append                  3–5 pw

 G2 Phòng &      Inventory + Payments ledger (adapter lab           Không oversell test đua; HV không hoàn                     5–8 pw
 tiền            kiểm soát)

 G3 Ở & đơn      Booking/Stay + Orders + Dept + Notify              Prepaid + reminder 15p + CAS                               5–8 pw

 G4 Giá & BC     Pricing 4-mắt + Reporting                          Hai tài khoản độc lập, không tự duyệt; KS view-only        2–4 pw

 G5 PII &        Legal cổng; TQID gateway; TURN tự host             Export có audit; TQID fail-closed                          3–5 pw
 ngoài

 G6 Cứng         Attestation (cổng hoàn tất); chaos/                Hoàn tất dịch vụ có attest khi bật; ledger paid độc lập;   3–5 pw
 hóa             idempotency; restore drill                         restore đạt mục tiêu giấy


Tổng thô: ~22–37 pw (ước lượng lập kế hoạch). Với giả định đội 2–3 engineer, quy đổi thô ~8–19 tuần
trước các trễ bên ngoài (gateway/TQID/pháp lý/onboarding) — không phải cam kết ngày giao.




TravelQ Hotel Admin · Kiến trúc microservice · Đề xuất 07/11/2026                                                              Trang 8 / 10
9.1 Rủi ro chính
  1. Onboarding cổng thanh toán / merchant từng KS.
 2. Contract TQID & thay TURN khỏi Cloudflare.
 3. Khuôn mặt / encoder — giữ OFF đến khi có hardware + contract.
 4. Xuất pháp lý & retention PII.
 5. Race inventory ↔ payment (đặc biệt HV).
 6. Migration JSON-state monolith → DB tách / nhất quán phân tán.
 7. Ops single-host (backup / restore / disk / secrets).

9.2 Phải xác nhận nghiệp vụ trước khi code
  • Xử lý “paid nhưng hết phòng” với HV (không hoàn) so với TA / dịch vụ.
  • Phạm vi ngoại lệ giá giặt là.
  • Attestation: ai ký, SLA 15 phút, có ủy quyền không.
  • App con ngày 1 (Friends không mặc định).
  • Ai cấp manager đầu trên Holitech (kênh bảo mật — không qua PDF).




TravelQ Hotel Admin · Kiến trúc microservice · Đề xuất 07/11/2026           Trang 9 / 10
10. Thuật ngữ

 Thuật ngữ             Nghĩa trong tài liệu

 Microservice          Dịch vụ deploy độc lập, sở hữu DB logic riêng, giao tiếp API / sự kiện

 Outbox / Inbox        Ghi sự kiện cùng transaction; consumer khử trùng idempotent

 paid_verified         Thanh toán đã xác minh bởi provider / webhook — không phải tự khai UI

 ABAC                  Kiểm soát truy cập theo thuộc tính (hotel, dept, account-version)

 4-mắt                 Maker và checker phải là hai tài khoản cá nhân độc lập; không tự duyệt

 HV / TA               Hạng quỹ phòng theo nghiệp vụ TravelQ; HV không hoàn / huỷ

 RPO / RTO             Mục tiêu mất dữ liệu tối đa / thời gian phục hồi tối đa (chưa đạt)

 Fail-closed           Thiếu contract / secret / provider → từ chối, không mock production

 Quarantine            Trạng thái giữ kết quả tiền/phòng chưa quyết — chờ reconcile, không tự bán / tự hoàn HV



11. Kết luận

Đây là bản thiết kế đề xuất để Holitech self-host theo hướng microservice, kế thừa hợp đồng nghiệp vụ đã
biết từ nguồn Hotel Admin hiện có, đồng thời không tuyên bố đã triển khai, đã nghiệm thu cổng thanh toán,
khuôn mặt, encoder, attestation, hay chứng nhận danh tính TQID. Sự thật đã kiểm (monolith CF+D1, 4 API,
10 bảng core, không KV/R2 bắt buộc trong phạm vi rà, payment/face/encoder/attestation chưa xong)
được tách rõ khỏi phần đề xuất.

Bước tiếp theo: anh Long và Holitech chốt các câu hỏi mục §9.2, rồi mới mở giai đoạn G0 / G1.

                             — Hết tài liệu đề xuất · không chứa secret · không dữ liệu cá nhân —




TravelQ Hotel Admin · Kiến trúc microservice · Đề xuất 07/11/2026                                                Trang 10 / 10
