Skip to content

Đặc Tả Quản Lý Quy Trình Nghiệp Vụ (BPM_SPEC)

Dự án: PTX Channel Manager (ptx-cm)
Phiên bản: 1.0.0
Ngày: 2026-03-02
Tiêu chuẩn: ISO 19510:2013 (BPMN 2.0) — Mô hình hóa thực tế
Liên quan: SRD.md | UI_SPEC.md | system-architecture.md


1. Phạm Vi & Tham Chiếu ISO 19510

1.1 Mục đích

Tài liệu này mô hình hóa tất cả quy trình vận hành PTX-CM sử dụng khái niệm Business Process Model and Notation (BPMN 2.0) theo định nghĩa ISO 19510:2013. Các quy trình được trực quan hóa dưới dạng sơ đồ Mermaid để render trực tiếp.

1.2 Mức Độ Tuân Thủ

Mô hình hóa thực tế — không tuân thủ XML nghiêm ngặt. Chúng tôi sử dụng các khái niệm BPMN (tasks, gateways, events, lanes) cho mục đích tài liệu và trực quan hóa. Engine runtime là state machine TypeScript tùy chỉnh (NestJS), không phải bộ thực thi BPMN XML.

1.3 Quy Ước Ký Hiệu Sơ Đồ

Hình dạngCú pháp MermaidPhần tử BPMNMô tả
Hình chữ nhật bo tròn([text])User TaskHành động thủ công cần người nhập liệu
Hình chữ nhật[text]Service TaskHành động tự động của hệ thống
Hình thoi{text}Exclusive Gateway (XOR)Điểm quyết định, chọn một đường
Hình tròn((text))Start/End EventRanh giới quy trình
Subgraphsubgraph NamePool/LaneNhóm tác nhân hoặc hệ thống
Mũi tên nét đứt-.->Message/SignalKích hoạt liên quy trình
Mũi tên đậm==>Critical pathĐường chính (happy path)

2. Ánh Xạ Khái Niệm ISO 19510

Phần tử BPMNLoại ISO 19510Triển khai PTX-CMThành phần
PoolParticipantRanh giới hệ thống (PTX-CM)Ứng dụng NestJS
LaneParticipantVai trò tác nhân (U-01–U-07)RBAC PermissionsGuard
User TaskActivityHành động UI: click nút, gửi formReact component + API call
Service TaskActivityBullMQ job hoặc thực thi hookBookingHooksService, SyncEngine
Script TaskActivityTính toán nội bộAvailabilityCalc, DeduplicationLogic
Exclusive GatewayGatewayKiểm tra transition + kiểm tra vai tròBookingStatusTransition.allowedRoles
Parallel GatewayGatewayThực thi hook đồng thờiPromise.all(hooks) trong BookingHooksService
Timer Start EventEventLịch BullMQ repeatable jobPollingScheduler (mỗi 2-3 phút)
Error Boundary EventEventTry/catch → Tạo AlertSyncJob.status=failed → E-11 Alert
Message Intermediate EventEventGửi thông báosend_notification hook (email/LINE)
Signal EventEventPhát broadcast toàn hệ thốngPhát hiện overbooking → Alert + Dashboard
Start EventEventTrigger quy trìnhAPI request, BullMQ job trigger, hành động người dùng
End Event (terminate)EventTrạng thái kết thúcBookingStatusDef.isTerminal=true
Data ObjectDataThực thể (E-xx)Prisma model
Data StoreDataPostgreSQL table / Redis cacheTầng cơ sở dữ liệu

3. Danh Mục Quy Trình

IDQuy trìnhĐộ phức tạpTriggerTác nhânFR liên quan
P-01Vòng đời BookingCaoOTA sync / thao tác thủ côngHệ thống, U-04, U-05, U-01/02FR-03, FR-25–FR-30, FR-41
P-02Pipeline Đồng Bộ OTATrung bìnhTimer (BullMQ)Hệ thốngFR-03, FR-04
P-03Xử Lý AlertThấpHệ thống tạo alertU-04, U-05, U-01/02FR-07
P-04Quản Lý Khách HàngThấpThao tác CS thủ côngU-05, U-01/02FR-36–FR-38
P-05Onboarding OTATrung bìnhHành động AdminU-01/02FR-01, FR-02
P-06Thiết Lập PropertyTrung bìnhHành động Admin/importU-01/02, U-04FR-05, FR-31–FR-32

4. Định Nghĩa Quy Trình

P-01: Vòng Đời Booking

Trigger: Phát hiện booking mới qua OTA sync HOẶC thay đổi trạng thái thủ công
Thực thể: E-08 (Booking), E-07 (Availability), E-12 (AuditLog), E-15 (Transition), E-20 (OtaStatusDef)

Các bước:

#Loại BPMNTác nhânBướcThành phần
1Start EventHệ thốngOTA sync phát hiện booking mới/cập nhậtSyncEngine.pullBookings
2Service TaskHệ thốngUpsert booking với dedup (ota_booking_id)BookingsService.upsertFromOta
3Service TaskHệ thốngLưu raw OTA status string (chỉ xem)Booking.otaStatus field
4User TaskU-04/05Yêu cầu chuyển đổi trạng thái qua UIPATCH /bookings/:id/status
5XOR GatewayHệ thốngKiểm tra transition hợp lệ + vai trò được phépBookingStatusTransition check
6Parallel GatewayHệ thốngThực thi hooks đồng thờiPromise.all([audit, avail, notify])
7End EventĐạt trạng thái terminalBookingStatusDef.isTerminal

Ngoại lệ: Transition không hợp lệ → 400. Vai trò bị từ chối → 403. Hook lỗi → ghi log, không chặn transition.


P-02: Pipeline Đồng Bộ OTA

Trigger: BullMQ timer mỗi 2-3 phút
Thực thể: E-04 (OtaAccount), E-05 (OtaConnection), E-08 (Booking), E-07 (Availability), E-09 (SyncJob)

Các bước:

#Loại BPMNTác nhânBướcThành phần
1Timer StartHệ thốngBullMQ repeatable job kích hoạtPollingScheduler
2Service TaskHệ thốngTạo bản ghi SyncJob (pending)SyncJobsService
3Service TaskHệ thốngLấy OtaConnections đang hoạt độngOtaConnectionsService
4XOR GatewayHệ thốngKiểm tra tính hợp lệ session OtaAccountOtaAccount.status check
5Service TaskHệ thốngPull bookings qua OTA adapterOtaAdapter.fetchBookings
6Service TaskHệ thốngUpsert + dedup bookingsBookingsService.upsertFromOta
7Script TaskHệ thốngTính lại availability phòngAvailabilityCalc
8XOR GatewayHệ thốngKiểm tra nếu đã đặt > tổng phòngPhát hiện overbooking
9Service TaskHệ thốngĐẩy availability tới các OTA khácOtaAdapter.pushAvailability
10End EventHệ thốngĐánh dấu SyncJob completed/failedSyncJob.status update

Ngoại lệ: Session hết hạn → Alert + bỏ qua. Lỗi fetch → SyncJob failed + retry (3x backoff). Lỗi push → partial sync được ghi log.


P-03: Xử Lý Alert

Trigger: Hệ thống tạo alert (overbooking, lỗi đồng bộ, session hết hạn)
Thực thể: E-11 (Alert)

Các bước:

#Loại BPMNTác nhânBước
1Signal StartHệ thốngAlert được tạo (E-11) bởi sync engine hoặc kiểm tra availability
2Service TaskHệ thốngGửi thông báo (email/LINE)
3User TaskU-04/05Xem xét alert trên dashboard
4XOR GatewayU-04/05Quyết định: xử lý hoặc chuyển tiếp
5User TaskU-04/05Thêm ghi chú xử lý
6End EventAlert đánh dấu đã xử lý

P-04: Quản Lý Khách Hàng

Trigger: CS tạo hồ sơ khách hàng hoặc liên kết booking
Thực thể: E-19 (Customer), E-08 (Booking)

Các bước:

#Loại BPMNTác nhânBước
1User TaskU-05Tạo hồ sơ khách hàng
2User TaskU-05Tìm kiếm/chọn bookings chưa liên kết
3Service TaskHệ thốngGợi ý (fuzzy match tên/email)
4User TaskU-05Liên kết bookings đã chọn
5XOR GatewayU-05Phát hiện khách hàng trùng lặp
6User TaskU-05Xác nhận gộp
7Service TaskHệ thốngTransaction gộp nguyên tử

P-05: Onboarding OTA

Trigger: Admin kết nối tài khoản OTA mới
Thực thể: E-04 (OtaAccount), E-02 (Property), E-03 (RoomType), E-05 (OtaConnection), E-06 (OtaRoomMapping)

Các bước:

#Loại BPMNTác nhânBước
1User TaskU-01/02Chọn OTA, nhập thông tin đăng nhập
2XOR GatewayU-01/02Chọn phương thức 2FA
3Service TaskHệ thốngKiểm tra kết nối qua Playwright
4XOR GatewayHệ thốngKết nối thành công/thất bại
5Service TaskHệ thốngKhám phá properties từ OTA
6Script TaskHệ thốngĐối chiếu property cross-OTA
7User TaskU-01/02Chọn properties để import
8Service TaskHệ thốngTạo hàng loạt thực thể

P-06: Thiết Lập Property

Trigger: Admin tạo property thủ công hoặc import từ OTA
Thực thể: E-02 (Property), E-03 (RoomType), E-05 (OtaConnection), E-17 (SupplierRoomAllocation)

Các bước:

#Loại BPMNTác nhânBước
1User TaskU-01/02Nhập thông tin property
2User TaskU-01/02Thêm loại phòng
3XOR GatewayU-01/02Kết nối tới OTA?
4User TaskU-04Ánh xạ loại phòng tới OTA
5XOR GatewayU-01/02Phân bổ nhà cung cấp?
6User TaskU-01/02Đặt phân bổ nhà cung cấp
7XOR GatewayHệ thốngKiểm tra tổng phân bổ (cảnh báo nhẹ)

5. Ma Trận Tương Tác Quy Trình

NguồnĐíchCơ chế TriggerLuồng Dữ Liệu
P-05 → P-06Onboarding OTA → Thiết Lập PropertyImport property tạo thực thểE-02, E-03, E-05, E-06
P-05 → P-02Onboarding OTA → Đồng Bộ OTAOtaConnection mới kích hoạt pollingE-05 isActive=true
P-02 → P-01Đồng Bộ OTA → Vòng Đời BookingUpsert booking tạo/cập nhật E-08E-08 với status=confirmed
P-02 → P-03Đồng Bộ OTA → Xử Lý AlertPhát hiện lỗi sync hoặc overbookingE-11 Alert được tạo
P-01 → P-04Vòng Đời Booking → QL Khách HàngCS liên kết booking với hồ sơ kháchE-08.customerId được gán

6. Mức Độ Trưởng Thành & Tự Động Hóa

Quy trìnhTrạng thái hiện tạiMức tự động hóaEngine
P-01 Vòng Đời Booking✅ Đã triển khaiState machine + hooksBookingStatusTransition table
P-02 Pipeline Đồng Bộ OTA⚠️ Một phần (adapters stubbed)BullMQ job queuePollingScheduler + SyncEngine
P-03 Xử Lý Alert✅ Đã triển khaiThủ công (UI-driven)AlertsService.resolve
P-04 Quản Lý Khách Hàng✅ Đã triển khaiThủ công (UI-driven)CustomersService CRUD
P-05 Onboarding OTA⚠️ Một phần (connection stubbed)Wizard-guidedOtaAccountsService + S-06
P-06 Thiết Lập Property✅ Đã triển khaiThủ công (UI-driven)PropertiesService CRUD

7. Phase B: Workflow Engine Tổng Quát — ĐÃ TRIỂN KHAI

Phase B tổng quát hóa state machine booking để hỗ trợ nhiều loại quy trình:

7.1 Thực Thể Thêm Mới (Phase B)

Thực thểMục đích
ProcessTypeE-21Đăng ký định nghĩa quy trình (6 loại seed: booking, ota_sync, alert_resolution, customer_mgmt, ota_onboarding, property_setup)
ProcessInstanceE-22Theo dõi thực thi quy trình (đa hình: bất kỳ entity_type)

7.2 Thực Thể Nâng Cấp (Phase B)

  • BookingStatusDef — thêm FK processTypeKey, mặc định='booking' để tương thích ngược
  • BookingStatusTransition — thêm FK processTypeKey, mặc định='booking' để tương thích ngược

7.3 Trạng Thái Hoàn Thành Phase B

Thành phầnTrạng thái
Database schema (E-21, E-22)✅ Đã triển khai
API endpoints (/process-types, /process-status, /process-transitions, /process-instances)✅ Đã triển khai
Tab Workflow trong Settings (S-16)✅ Đã triển khai
Tab Process Management (S-28)✅ Đã triển khai
Trang Process Instances (S-29)✅ Đã triển khai
Đăng ký NestJS modules✅ Đã triển khai
BookingHooksService tổng quát hóa với hỗ trợ entityType✅ Đã triển khai

7.4 Tương Thích Ngược

Workflow booking hiện tại được bảo toàn qua processTypeKey = 'booking' mặc định trên tất cả bản ghi status/transition. Không có breaking changes cho quy trình P-01 Vòng Đời Booking.

Xem SRD.md FR-44 đến FR-47 để biết chi tiết yêu cầu.

PTX Channel Manager — Tài Liệu Nội Bộ