Skip to content

Booking Workflow Statuses — 4-Axis System

Created: 2026-03-17 | Updated: 2026-03-24 | Status: 🔄 Upgrading (Approach A Retrofit)

Overview

4-axis booking workflow status system per workflow_ptx.md SOP, retrofitting the original 3-track to a full 4-axis model. Each axis managed by a specific department. Uses existing BPM models (ProcessType, BookingStatusDef, BookingStatusTransition, ProcessInstance).

Change from v1: Added Track 3 (booking_source) as new independent axis. Renamed booking_purchasingbooking_accounting with expanded statuses. Added 6 missing statuses to booking_order.

Architecture

Status Definitions

Track 1: CS Status (booking_order)

Managed by CS Department. Tracks guest service lifecycle.

StepKeyLabelColorTerminalDescription
0not_startedNot Started#94A3B8NoNEW — Booking synced, CS chưa xử lý
1contactedContacted (A)#3B82F6NoCS đã liên hệ được với khách hàng
1bcannot_contactCannot Contact#F97316NoNEW — Không liên hệ được khách
2aconfirmed_checkin_timeConfirmed Check-in Time#8B5CF6NoĐã xác nhận thời gian nhận phòng cụ thể
2bcancelled_guest_faultCancelled (Guest Fault)#EF4444Hủy do lỗi từ phía khách hàng
2ccancelled_ptx_problemCancelled (PTX Problem)#DC2626Hủy do lỗi phía công ty
3cfm_aptCFM APT#F59E0BNoXác nhận chốt căn hộ
3brelocateRelocate#D946EFNoNEW — Chuyển phòng/căn hộ
4acheckin_alreadyChecked-In (C)#22C55ENoKhách đã nhận phòng thành công
4bno_show_guest_faultNo-Show (Guest Fault)#64748BKhách không đến, không thông báo trước
5checked_outChecked-Out (D)#10B981NoKhách đã hoàn tất trả phòng
5bcancel_report_commissionCancel Report Commission#B91C1CNoNEW — Hủy báo cáo hoa hồng
5ckeep_part_paymentKeep Part Payment#EA580CNoNEW — Giữ lại 1 phần thanh toán
6review_orderReview Order#6B7280NEW — Đơn hàng đã hoàn tất review

Track 2: Payment Status (booking_payment)

Managed by Finance/Treasury. Tracks money flow from guest/OTA to company. No changes from v1.

StepKeyLabelColorTerminalDescription
1fully_paidFully Paid#22C55EĐã thanh toán đầy đủ
2cancelled_fully_paidCancelled + Fully Paid#F59E0BHủy nhưng đã thu toàn bộ tiền
3cancelled_auto_refundCancelled + Auto Refund#EF4444Hủy, nền tảng tự hoàn tiền
4cancelled_manual_refundCancelled + Manual Refund#DC2626NoHủy, kế toán phải hoàn tiền thủ công
5manual_fully_paidFully Paid (Manual)#16A34AThủ quỹ xác nhận thu đủ tiền
6not_paidNot Paid (Manual)#F97316NoChưa thu được tiền
7cancelled_not_paidCancelled + Not Paid#9CA3AFHủy khi chưa thanh toán

Track 3: Source Status (booking_source) — NEW

Managed by Source Department / PO. Tracks supplier confirmation status. New track per workflow_ptx.md §5.2.

StepKeyLabelColorTerminalDescription
1src_confirmedSource Confirmed#22C55ENoNCC xác nhận có phòng, booking OK
2src_relocateSource Relocate#F59E0BNoCần relocate — NCC đổi phòng/căn hộ
3src_no_roomSource No Room#EF4444NCC báo hết phòng — cần cancel hoặc relocate
4src_cancelledSource Cancelled#9CA3AFBooking bị hủy phía source

Track 4: Accounting Status (booking_accounting) — REPLACES booking_purchasing

Managed by PO + Finance/Treasury. Tracks supplier purchasing and payment lifecycle. Replaces old booking_purchasing track.

StepKeyLabelColorTerminalDescription
1acc_not_requiredNot Required#94A3B8NoChưa cần xử lý thanh toán NCC
2acc_deposit_pendingDeposit Pending#F97316NoCần đặt cọc cho NCC, đang chờ
3acc_deposit_paidDeposit Paid#3B82F6NoĐã đặt cọc cho NCC
3bacc_deposit_failedDeposit Failed#EF4444NoĐặt cọc thất bại (chuyển tiền lỗi)
4acc_hold_confirmedHold Confirmed#8B5CF6NoNCC xác nhận giữ phòng sau khi nhận cọc
5acc_payment_pendingPayment Pending#F59E0BNoCần thanh toán còn lại cho NCC
6acc_payment_paidPayment Paid#22C55EĐã thanh toán đầy đủ cho NCC
6bacc_partial_paymentPartial Payment#10B981NoThanh toán 1 phần cho NCC
7acc_payment_adjustedPayment Adjusted#06B6D4Điều chỉnh thanh toán (bù trừ, chênh lệch)
8aacc_cancelled_no_paymentCancelled No Payment#9CA3AFHủy, không cần thanh toán
8bacc_deposit_lostDeposit Lost#DC2626Mất cọc do hủy/no-show
8cacc_deposit_refundedDeposit Refunded#16A34ANCC đã hoàn lại tiền cọc

Cross-Axis Validation Rules (FR-50)

Per workflow_ptx.md §5.6:

RuleTypeLogic
R1Hard BlockCheck-in (booking_ordercheckin_already) requires SOURCE = src_confirmed
R2AlertCheck-in alert if ACCOUNTING = acc_deposit_pending and check-in < 6h
R3Hard BlockHost payment (booking_accountingacc_payment_paid) requires CS = checked_out
R4Hard BlockClose order (booking_orderreview_order) requires Payment + Accounting terminal
R5AutoAuto-risk flag generation on any ProcessInstance transition

Role-Based Transition Permissions

TrackAllowed RolesEst. Transitions
Order (CS)cs, admin, manager~15
Paymentfin, admin, manager9 (unchanged)
Sourcepo, cs, admin, manager~5
Accountingpo, fin, admin, manager~14

Technical Implementation

Database Models Used

  • process_types — 4 entries: booking_order, booking_payment, booking_source (NEW), booking_accounting (replaces booking_purchasing)
  • booking_status_def — ~37 statuses (was 21) with processTypeKey linking to process type
  • booking_status_transition — ~43 transitions (was 27) with allowedRoles + hooks JSON

Migration from v1

  1. Rename booking_purchasing ProcessType key → booking_accounting
  2. Update existing ProcessInstance records: processTypeKey = 'booking_purchasing''booking_accounting'
  3. Map old purchasing statuses to new accounting statuses where possible
  4. Create booking_source ProcessType + seed new statuses
  5. Add 6 new statuses to booking_order track

Seed File

  • File: packages/database/prisma/seed-booking-workflow.ts
  • Called from main seed.ts via seedBookingWorkflow(prisma)
  • Uses upsert pattern — safe to re-run

Backward Compatibility

Original 3 statuses (confirmed, cancelled, no_show) under booking process type are untouched. Existing Booking.status FK still references these. Workflow statuses are tracked via ProcessInstance records per axis.

PTX Channel Manager — Internal Documentation