Skip to main content

Refunds & Cancellations

How refunds are processed when bookings are cancelled.

Overview

DigiWedge TeeTime includes a multi-method refund engine that automatically processes refunds based on configurable policies. The system supports multiple refund destinations with automatic fallback.

Refund Methods

MethodDescriptionUse Case
WalletCredit to player's digital walletMembers with active wallet accounts
VoucherIssue a booking voucherGuests, expired wallet, promotional credits
PSPRefund to original payment methodCard payments via Stripe/Peach/etc.
ManualFlag for staff processingEdge cases, disputes, partial refunds

Refund Flow

flowchart TD
A[Booking Cancelled] --> B{Policy Allows Refund?}
B -->|No| C[No Refund - Log Reason]
B -->|Yes| D{Determine Method}
D --> E{Try Primary Method}
E -->|Success| F[Refund Complete]
E -->|Fail| G{Fallback Available?}
G -->|Yes| H[Try Fallback Method]
H --> E
G -->|No| I[Mark for Manual Review]

Refund Policies

Policy Configuration

Each course can configure:

  • Auto-refund enabled: Process automatically or require approval
  • Primary refund method: Default destination (WALLET, VOUCHER, PSP)
  • Fallback methods: Ordered list if primary fails
  • Per-player-type overrides: Different rules for members vs visitors

Example Policy

{
"autoRefund": true,
"method": "WALLET",
"fallbackMethods": ["VOUCHER", "PSP"],
"perType": {
"member": {
"autoRefund": true,
"method": "WALLET",
"fallbackMethods": ["VOUCHER"]
},
"visitor": {
"autoRefund": true,
"method": "PSP",
"fallbackMethods": ["VOUCHER"]
}
}
}

Wallet Refunds

Refunds to the player's digital wallet account:

Requirements

  • Player must have an active wallet account
  • Wallet must be linked to the same club/tenant
  • Wallet currency must match booking currency
  • Wallet status must be OPEN (not CLOSED or SUSPENDED)

Failure Reasons

ReasonMeaning
wallet_requires_emailPlayer email required for lookup
member_not_found_for_emailNo member record found
wallet_account_missingMember exists but no wallet
wallet_club_missingWallet not linked to this club
wallet_tenant_mismatchMulti-tenant mismatch
wallet_closedWallet is closed or suspended
wallet_currency_mismatchDifferent currencies

When wallet refund fails, the system automatically tries fallback methods.

Voucher Refunds

Issues a booking voucher for future use:

Requirements

  • Club must have voucher system enabled
  • Player email required for voucher delivery

Voucher Details

  • Voucher value equals refund amount
  • Validity period set by club policy
  • Single-use or multi-use configurable
  • Sent via email with redemption code

PSP Refunds

Refunds to the original payment method:

Requirements

  • Original payment must have PSP transaction reference
  • Payment provider must support refunds
  • Refund must be within provider's refund window

Supported Providers

  • Stripe
  • Peach Payments
  • Rapyd
  • Braintree

Partial Cancellations

When players are removed from a booking (not full cancellation):

  • Refund calculated for removed players only
  • Pro-rata calculation based on player count
  • Same method cascade applies
  • Booking continues for remaining players

Cancellation Timeline

Refund amounts often depend on notice period:

Notice PeriodTypical Refund
48+ hours100%
24-48 hours75%
12-24 hours50%
Under 12 hours0% (or credit only)
note

Each club configures their own cancellation policy. The above are typical values.

Admin Override

Club administrators can:

  • Force a specific refund method
  • Override policy for individual cancellations
  • Process manual refunds
  • View refund audit trail

Refund Status

StatusMeaning
PENDINGRefund queued for processing
PROCESSINGCurrently being executed
COMPLETEDSuccessfully refunded
FAILEDAll methods failed - needs manual review
MANUALFlagged for staff action

Metrics & Reporting

The refund engine tracks:

  • Refund outcomes by method
  • Fallback rates
  • Processing times
  • Failure reasons

Access via Reports > Refunds in the admin portal.

Environment Configuration

VariableDescriptionDefault
TEETIME_ENABLE_WALLET_AUTO_REFUNDSEnable wallet refundstrue
PAYMENTS_API_BASE_URLPayments service URLRequired for PSP

Troubleshooting

Refund Not Processing

  1. Check booking has payment transaction
  2. Verify refund policy allows auto-refund
  3. Check player has valid refund destination
  4. Review fallback methods configured

Wrong Refund Destination

  1. Check per-player-type overrides
  2. Verify primary method requirements met
  3. Review fallback cascade order

Partial Refund Issues

  1. Verify correct player count in cancellation
  2. Check pro-rata calculation
  3. Review any rounding rules

API Reference

Cancel Booking with Refund

DELETE /api/bookings/{bookingId}

Response includes refund decision:

{
"cancelled": true,
"refund": {
"action": "wallet",
"amountCents": 45000,
"walletAccountId": "wa_xxx",
"status": "completed"
}
}

Check Refund Status

GET /api/bookings/{bookingId}/refund

Returns current refund status and audit trail.