Skip to main content

Viewing and managing patient transactions

The Glovora CRM keeps a record of every payment processed through the platform. This article explains where to find those records, what each column means, how transaction statuses work (including refunded), and how to issue a refund directly from the CRM without logging in to Stripe.


How to access the transactions list

Transactions are displayed at the bottom of the Revenue page.

  1. Sign in to the CRM.
  2. In the left-hand sidebar, click Revenue under the Money group.
  3. Scroll past the summary cards and the sales chart.
  4. The Transactions list section shows your most recent payments.

The list loads your 50 most recent transactions by default. There are no date range or status filters on this view — it is a live snapshot of recent activity. If you need to find a specific patient's payment history in detail, the most efficient route is through Client Profiles (see below).

tip

If you are looking for a particular transaction and cannot see it in the list, open the patient's profile in Client Profiles. The Purchase History panel in the patient drawer gives you a full, itemised breakdown of everything that patient has paid, grouped by order, including any discounts applied and refund status.


What each column in the transactions list means

ColumnWhat it shows
ClientThe patient's full name, or a partial ID if the patient record is not linked
TypeThe category of the transaction — for example, membership, treatment, or product
AmountThe monetary value of the transaction in your clinic's configured currency
Payment MethodHow the patient paid — for example, Stripe or Card
StatusThe current state of the transaction (see status definitions below)
DateThe date the transaction was created

Transaction statuses

Every transaction has one of four possible statuses. Understanding these is important when reconciling your records or investigating a payment.

Succeeded

The payment was processed and confirmed by Stripe. The funds are on their way to your connected Stripe account. A transaction with this status is counted in your Total Sales since starting figure on the Revenue dashboard.

Failed

The payment attempt did not complete. This can happen when a card is declined, when 3D Secure authentication is not completed by the patient, or when there is a network error during checkout. A failed transaction is not counted in revenue. No money has been taken from the patient.

Cancelled

The payment was initiated but then cancelled before it was completed — for example, if the patient abandoned the checkout flow or if the payment intent was explicitly cancelled. Like failed transactions, cancelled transactions are not counted in revenue.

Refunded

The payment originally succeeded, but a full refund has since been issued. When a refund is processed through Stripe — either via the CRM or directly through Stripe — the transaction record is automatically updated to refunded status via the Stripe webhook. A refunded transaction is excluded from all revenue calculations on the dashboard.

warning

The Total Sales since starting figure on the Revenue dashboard counts only transactions with a succeeded status. Refunded transactions are excluded once their status updates to refunded. If a refund is issued but the status has not yet updated (for example, if there is a delay in the Stripe webhook), the figure may temporarily overstate your net revenue. It corrects itself automatically once the webhook is processed.


Viewing an individual transaction's detail

There is no separate transaction detail page or modal accessible from the main transactions list. The list shows the summary columns only.

For a full breakdown of a payment — including the items purchased, discounts applied, payment reference, and refund status — open the patient's profile in Client Profiles:

  1. Click Client Profiles in the sidebar.
  2. Find the patient using the search bar or browse the grid.
  3. Click the menu on the patient card and select View details, or click directly on the patient card.
  4. In the detail panel that slides out from the right, scroll down to the Purchase History section.

The Purchase History shows every order grouped together, with:

  • The date and total amount of the order
  • Each line item with its name and charged price
  • Discount badges showing whether a membership or offer was applied, including the percentage saved and the original price struck through
  • A Refunded badge on any order that has been refunded
  • A Refund button on orders that are eligible to be refunded

How to issue a refund from the CRM

Refunds can be issued directly from the patient's Purchase History in the CRM without needing to log in to Stripe separately. Only users with the Owner or Manager role can issue refunds.

  1. Open the patient's detail panel (Client Profiles → patient → View details).
  2. Scroll to the Purchase History section.
  3. Find the order you want to refund and click the Refund button on the right side of the order header.
  4. A confirmation modal appears showing the full amount that will be refunded.
  5. Enter a reason for the refund in the text field — this field is required.
  6. Click Confirm Refund.

A success message confirms: "Refund issued — patient will receive funds in 3–10 business days."

Once the refund is processed:

  • The Refund button on that order is replaced by a Refunded badge.
  • The order status in the database is set to refunded.
  • The Stripe webhook updates the corresponding transaction record's status to refunded.
  • The patient receives the funds back to their original payment card within 3–10 business days, depending on their bank.
warning

Refunds issued from the CRM are full refunds only — it is not currently possible to issue a partial refund (for example, refunding one item from a multi-item order) through the CRM interface. If you need to issue a partial refund, you must do so directly in your Stripe dashboard, using the charge reference for that payment. The transaction status in Glovora will update automatically via the webhook when Stripe processes the partial refund.

tip

The reason you enter for a refund is stored internally in your records. It is not shown to the patient. Use it to record the clinical or administrative reason — for example, "Treatment cancelled at patient's request" or "Duplicate payment processed" — so that your records are clear if the transaction is reviewed later.


How to find a specific patient's transaction history

The quickest way to see everything a patient has paid is through their profile in Client Profiles — not through the Revenue page.

  1. Click Client Profiles in the sidebar under the Core group.
  2. Search for the patient by name using the search bar at the top.
  3. Open the patient's detail panel.
  4. The Purchase History section shows all completed orders for that patient, grouped by checkout session, with full line-item and discount detail.

The Purchase History is separate from the main Transactions list on the Revenue page. It draws on the orders and order items records, so it includes pricing snapshots — the original price, any discount applied, and the final charged amount — rather than just the top-level transaction total.


What each field means

Client (transactions list) The name of the patient who made the payment. If the patient account is not linked to a Glovora profile, this falls back to a partial internal ID.

Type (transactions list) The category assigned to the transaction when it was created. Common values include membership (for subscription payments), treatment (for booked and paid appointments), and product (for retail or e-commerce purchases made through the patient app).

Amount (transactions list) The total value of the transaction in the clinic's configured currency. For orders where a discount was applied, this is the final charged amount — not the original list price.

Payment Method (transactions list) The payment processor or method used. Stripe indicates the patient paid by card through your connected Stripe account.

Status (transactions list) One of four values: succeeded (paid), failed (payment not completed), cancelled (abandoned or cancelled before completion), or refunded (original payment reversed). See the status definitions above for full details.

Date (transactions list) The date the transaction record was created — which corresponds to when the patient initiated and completed the checkout.

Refunded badge (Purchase History in Client Profiles) Appears on an order header when the full order has been refunded. The original Refund button is replaced by this badge automatically.

Refund button (Purchase History in Client Profiles) Visible on orders with a succeeded status that have not yet been refunded. Clicking it opens the Confirm Refund modal. This button is only visible to users with the Owner or Manager role.


Common mistakes

Expecting filters on the transactions list. The Transactions list on the Revenue page does not have date range, status, or type filter controls. It shows your 50 most recent transactions in reverse chronological order. If you need to filter by patient, open Client Profiles and view their Purchase History. If you need to filter by date or review a specific period's transactions, use the Sales over time chart on the Revenue page with the appropriate period selected, then cross-reference with the transactions list.

Assuming a refunded transaction still appears in Total Sales. Once a refund is processed and the Stripe webhook updates the transaction status to refunded, that transaction is excluded from the Total Sales calculation. If you process a refund and notice the Total Sales figure has not yet dropped, allow a short time for the webhook to process — it typically completes within seconds but can take longer under load. The figure will correct itself automatically.

Looking for partial refund functionality in the CRM. The CRM Refund button always issues a full refund for the entire order. It is not possible to refund a single line item or a partial amount from within Glovora. For partial refunds, use the Stripe dashboard directly — Stripe provides a refund interface where you can specify the exact amount. The Stripe webhook will update the transaction status in Glovora automatically once the partial refund is processed.

Issuing a refund without logging the reason. The Reason for refund field in the Confirm Refund modal is required — you cannot confirm a refund without entering something. This is intentional: your internal records should always document why a refund was issued. If you are processing multiple refunds in a session, take a moment to enter a meaningful reason for each one rather than entering a placeholder, as these notes may be useful for accounting or dispute purposes later.