How report calculations work
The rules every report follows for counting bookings, summing revenue, and bucketing by date.
Every report in Resytech follows the same underlying rules for which bookings count, what "revenue" means, and which date drives the numbers. Understanding these rules makes it possible to reconcile numbers across reports and explain unexpected differences.
Booking statuses — what counts
A booking goes through these statuses over its lifetime:
| Status | Meaning |
|---|---|
| Draft | Pre-commit state — the customer has items in cart but hasn't completed checkout. Not yet a real booking. |
| Pending | Customer has completed the booking but an operator hasn't manually confirmed it (or no auto-confirm is set). The booking holds inventory and has generated an invoice. |
| Confirmed | The booking is fully accepted by the operator. |
| Canceled | The booking has been canceled (by the customer, an operator, or automatically). |
The revenue-recognition rule
Reports treat Confirmed and Pending as the bookings that count toward revenue, customer lifetime value, utilization, and similar money / activity metrics. Draft and Canceled are excluded.
Why Pending counts: a Pending booking is a real obligation. It holds inventory, the customer has paid (or owes), and the invoice is real. If a report excluded Pending from revenue while including it in AR Aging, the two reports could never reconcile. So Pending counts everywhere.
The "operationally active" rule
A few metrics (funnel counts, year-over-year Bookings Created) use a wider filter: everything except Draft. Canceled bookings still represent a customer who went through the booking flow, so they belong in the top of the funnel. This is called out per-report below.
The cancellation rule
The Operations report's Cancellation Analytics section deliberately filters to Canceled bookings only — the whole point is to measure cancellations.
What "revenue" means
There are several dollar amounts on a booking, and reports use specific ones.
| Field | Includes | Excludes |
|---|---|---|
| Subtotal | Activity price, equipment price, add-on price, coupon discount applied | Tips, fees, taxes, trip protection, gift cards |
| GrandTotal | Everything Subtotal includes, plus fees, taxes, trip protection, plus tip | Gift card credit (treated as a payment, not a price reduction) |
| TipAmount | The tip the customer added (pass-through to staff — never operator revenue) | — |
| PlatformFee | Resytech's per-booking platform fee | — |
Business revenue (what reports show)
Every revenue metric in every report (except the dedicated Tip Report) uses Business Revenue, which strips tips out:
Business Revenue = GrandTotal − TipAmountTips are pass-through to staff — they're not money the operator earned. Including them in revenue would silently inflate every per-activity, per-customer, and per-location number. The Tip Report tracks tips separately so staff payout reconciliation has its own dedicated view.
Net revenue
Reports that show a Net Revenue figure use:
Net Revenue = Subtotal − PlatformFeeThis represents what the operator actually keeps after Resytech's platform fee. Note that Subtotal already excludes tips (and excludes taxes and fees), so Net Revenue is naturally tip-free and tax-free.
For per-equipment and per-add-on dashboards, Net Revenue is calculated from the line item slice only — the equipment portion (or add-on portion) of the booking minus a pro-rata share of the platform fee:
Equipment Net = equipment_line_total − (PlatformFee × equipment_line_total / Subtotal)This means an equipment dashboard's Net Revenue can never exceed its Gross Revenue, even on multi-line bookings.
What's NOT in any revenue figure
- Gift cards — gift card credit reduces the amount due (i.e., it's a payment method), not a price. A booking paid by gift card still shows the full GrandTotal as revenue.
- Refunds — refunds are tracked as a separate Refund Amount on the Revenue Report. They are not subtracted from Gross Revenue. (See the known inconsistency below.)
- POS sales — the Reports section covers booking revenue only. POS sales are reported separately in Dashboard > POS > Reports.
Date axes — which date drives the numbers
Each booking has two dates that matter for reporting:
- CreatedAt — when the booking was made (the "booking-on" date)
- StartDateUtc — when the booking is scheduled to happen (the "service" date)
Most reports filter and bucket by CreatedAt because operators usually want to see "the bookings we made in May" rather than "the bookings serviced in May". The Year-over-Year and Tip reports are deliberately different — see their individual pages.
| Report | Filter date | Grouping date |
|---|---|---|
| Revenue | CreatedAt | CreatedAt |
| Booking Analytics | CreatedAt | CreatedAt for period histograms; StartDateUtc for day-of-week and time-slot analysis (when does the booking happen?) |
| Activity / Equipment / Customer / Location / Fiscal | CreatedAt | CreatedAt |
| Year-over-Year — Bookings Created | CreatedAt | CreatedAt |
| Year-over-Year — Bookings Serviced and Revenue | StartDateUtc | StartDateUtc (so the two lines on the chart reconcile) |
| Tip Report | CustomerPayment.Date | CustomerPayment.Date (cash-recording window — manual tips added later land in the period they were recorded) |
Refund-amount totals on the Revenue Report are an exception (see below).
Known inconsistencies
These are quirks that will affect numbers and that operators should know about. They are not bugs — they are deliberate trade-offs.
Revenue Report refunds use payment date, not booking date
Gross revenue on the Revenue Report is filtered by booking creation date. Refund totals on the same report are filtered by payment date (when the refund was actually issued).
The effect: a refund issued in May for a booking that was created in April shows up in the May Refund Amount but is not subtracted from any month's Gross Revenue (refunds aren't subtracted from gross anyway). The cell labels remain accurate but reconciling Refund Amount against Gross Revenue for the same period requires care.
If this becomes a frequent operator complaint, the underlying refund filter can be switched to booking creation date — file a request.
Tips appear in two places
Tips are not part of business revenue on any report, but every dollar a customer pays does include the tip portion. The Payment Method Distribution on the Revenue Report and the Tips Collected on the Tip Report both reflect the gross customer payment. Don't add them together — the tip portion of a credit-card transaction shows up in both views.
AR Aging snapshot vs date-range reports
The AR Aging section in the Operations Report is a snapshot at the moment the report runs — it shows every revenue-recognized booking with an outstanding balance, irrespective of the date filter on the rest of the report. The aging buckets compute days-outstanding from "now" against the booking's creation date.
Utilization metrics are simplified
The Utilization Rate shown on per-activity and per-equipment reports uses
a simplified denominator (30 slots/month for activities, quantity × 30 days
for equipment) rather than schedule-aware capacity math. Treat utilization as
a directional indicator, not a precise percentage. The number is most useful
when comparing items against each other within the same period.
Examples
"Why does my Activity Dashboard show different revenue than the Activity Report?"
Both reports use the same revenue recognition rule. The most likely cause is date axis: the Activity Dashboard's headline KPIs are a fixed 30-day window based on the booking creation date; the Activity Report uses your selected date range. If the windows differ, the numbers will differ.
"Why does my Revenue Report not match my POS report?"
The Reports section covers booking revenue (activity, equipment, add-ons, fees, taxes, trip protection). POS sales are tracked separately and don't appear in any booking-revenue report. To see total business revenue, combine the two.
"Why are my Confirmed-only numbers different than before?"
Resytech now counts both Confirmed and Pending bookings as revenue-recognized. Reports that historically showed Confirmed only will appear higher by the value of pending bookings in the period. AR Aging and Revenue can now reconcile, where previously they could not.
