Skip to content

fix(dashboard): rebuild the booking funnel on the real bookings-status lifecycle

Administrator requested to merge main into production

The admin dashboard still measured in-chat booking off the dead events-funnel query (always zero) and treated link_issued as the only success, so paid, confirmed, and e-ticketed bookings never showed and conversation.html painted delivered red as if it were an error.

  • Replace the events-based sub-funnel with booking_status_counts (GROUP BY status) and rebuild funnel() as a monotonic cumulative funnel over the status lifecycle: Reached checkout -> Paid -> Order confirmed -> E-ticket delivered, with failed/expired shown as drops and a per-status breakdown + paid/delivery rates.
  • Success now means status IN (link_issued, processing, confirmed, delivered) across reached_booking / totals.bookings_issued / per-thread conversations; add bookings_paid + bookings_delivered totals and a "Paid bookings" KPI card.
  • conversation.html: colour the booking pill by meaning (delivered/confirmed green, failed/expired red) instead of "!= link_issued", and show language.
  • Widen the booking status Literals to include confirmed/expired.
  • Cover the new funnel math (monotonic buckets, drops, rates, empty-safe).

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

Merge request reports

Loading