Dues

Filter cycle dues, manage auto-pay enrollments, review the all-payments ledger, record manual payments, exempt a member from one cycle's dues, and open payment history from a member profile.

Filter dues by cycle

  1. Open Dues from the admin sidebar.
  2. Stay on the By Cycle tab.
  3. Choose a Season filter when you need a season other than the default.
  4. Turn on Show archived when you need cycles from archived seasons.
  5. Open a cycle name to review per-member payment status for that program.

The index shows Paid / required as the number of required members who have paid, out of all members required to pay for each cycle.

Review determinations

  1. Open Dues and choose Determinations.
  2. Review the current season by default, or choose another Season. Search by Player or concert cycle, then filter by Determination or Reason.
  3. Read the page lead and the two notes at the top: this page shows the history of dues determinations. Opal uses a player's current designation and dues exemption for today and future cycles, and fills in missing determinations automatically. Past cycles keep the decision recorded at the time. Frozen history is never rewritten here, even when it differs from current policy. Reason shows why dues were or weren't required. Designation at the time shows the designation used for that decision.
  4. Read Required if playing or Not required, the Reason, the Designation at the time, and Last written time. Past rows show Locked with the explanation “Won’t recalculate — this cycle is in the past.” Archived players, cycles, and seasons remain visible when their determinations match the selected season or search.
  5. Review Missing determinations above the stored determinations table. A missing row means no stored decision exists for a past rostered player and concert cycle. A healthy page says No past determinations are missing and does not offer reconstruction. Required because active player means the normal dues rule requires payment. Exempt because inactive, Exempt because conductor, and Exempt because substitute come from the captured designation. Exempt because admin override comes from the player-level dues exemption flag on Active members. Exempt for this cycle comes from a per-cycle exemption set on the cycle's Dues table or the member's Concert cycles or Dues tab; see Players. When an admin added an internal note, a speech bubble follows the reason. Hover over or select it to read the note.
  6. Review Stale determinations next. A stale row means a current or future stored decision no longer matches the player's designation or dues exemption. These rows appear even when Missing determinations is zero and even when the player is unrostered. A healthy page says No current or future determinations are stale. Repair is an operator CLI step, not an automatic job; see the dues determinations check runbook.
  7. When an interrupted update, import, or other data issue left a past determination missing, the missing section explains that Opal won't guess at past cycles. Choose Reconstruct history and confirm the approximate total. The reconstruction uses each player's current details, leaves existing determinations unchanged, and records the repair in the audit log. It does not rewrite stale current or future rows.

Deployment creates determinations automatically, so admins do not perform routine reconciliation after ordinary profile edits, self-reactivation, bulk designation changes, or undo. Those designation changes refresh today and future determinations in the same save and leave past determinations locked. Reconstructing a past-cycle gap uses current Player data; the confirmation calls out that historical limitation.

Review all payments

  1. Open Dues and choose the All payments tab.
  2. Choose a Season filter when you need a season other than the default.
  3. Choose a Status filter when you need to narrow the ledger. By default, it includes Pending, Succeeded, Failed, Refunded, and Voided, and excludes Abandoned.
  4. Choose an archived season from Season when you need its payments; archived seasons are included when selected.
  5. Scan Player, Amount, Kind, Payment method, Status, Season, Cycle, and Paid. The payment method distinguishes Automatic payment, Online payment, Manual payment, and Imported payment.
  6. Open a name in the Player column to jump to that member’s Dues tab for the payment’s season.
  7. For a failed or abandoned online payment, open its row actions and choose Remove from ledger. Confirm to permanently delete the unused payment row. Imported and auto-pay rows cannot be removed this way.

Yearly payments show — in the Cycle column. Sort by Paid, Amount, Player, Status, or Kind when you need a different order.

Review active auto-pay enrollments

  1. Open Dues and choose the Auto-pay tab.
  2. Review whether Auto-pay is available for new member opt-ins in the page summary.
  3. Open the page actions menu and choose Edit settings to control the organization-wide service and charge timing, including Sync Auto-pay with Stripe when Stripe already charged but Opal has not yet shown the Automatic payment receipt.
  4. Review each enrolled member and the date they authorized auto-pay.
  5. To stop future charges, select one or more members, choose Cancel auto-pay, enter an internal reason, and confirm.

Pausing Auto-pay prevents new member opt-ins organization-wide. Existing enrollments keep running until a member or admin cancels them.

Understand how auto-pay stays in sync

For each enrolled member, the app keeps scheduled Stripe draft charges in sync with who still owes dues for upcoming concerts.

That sync creates missing drafts for eligible concerts, updates drafts when the amount, label, or charge date changes, and removes drafts that should no longer exist — for example after Cancel auto-pay, a recorded manual payment, a removed card, or when the member is no longer signed up for that concert.

Review per-player status and ledger

  1. Open Dues and choose a concert cycle.
  2. On the cycle Dues tab, scan Signup for Signed up, Not playing, Not sure, or No response, then Dues status for Awaiting response, Not required, Unpaid, Paid, or Refunded.
  3. Use Search players, Section, Designation, Signup, and Dues status filters to narrow the table. On a narrow screen, open Filters and Table Options beside search, then choose a filter to see its choices. Choose Sort there to group players by Signup response.
  4. Open row actions on any row. Choose Go to player dues to open that member’s Dues tab with this cycle’s season already selected.
  5. Choose Reset to clear filters. On a narrow screen, choose Reset filters in Filters and Table Options.

Awaiting response means the member has not answered or chose Not sure; it is not an unpaid balance. Unpaid means a signed-up member still owes dues. The signup badge shows the current response independently of payment history, so a member can show Not playing and Paid together. The summary line shows how many members paid and how many remain unpaid on the roster. Row actions also offer Record payment, Refund auto-pay invoice, or Void auto-pay invoice when that member is eligible.

Admin cycle dues ledger

Review per-member dues status and ledger entries for the cycle.

Record a manual payment

Payment typeWhen to use
YearlyCover the full season in one payment
Per cyclePay for this concert cycle only
Remaining seasonPay for all unpaid cycles left in the season
  1. On a cycle Dues tab, find a row with Unpaid status.
  2. Open row actions and choose Record payment.
  3. Select Payment type and confirm the Amount.
  4. Add optional Notes such as a check or wire reference.
  5. Choose Record payment.

Manual payments must match the list price exactly. Online card payments from members appear automatically after Stripe checkout.

Record manual payment dialog

Record check, cash, or other offline payments in Record payment.

Review payment history from player detail

  1. Open Players and choose a member, or choose Go to player dues from a cycle Dues row.
  2. On the member profile, choose the Dues tab.
  3. In Concert cycles, choose a Season when you need a season other than the default current season.
  4. Review Auto-pay, then Payments, then cycle status for that season. Auto-pay shows whether enrollment is on, off, or was never set up, with authorization or disabled details when available.
  5. Review each cycle for scheduled, processing, paid, failed, or voided automatic-payment state. Payment scheduled and Processing replace Unpaid when a healthy automatic payment owns the balance. A scheduled row also shows the charge date. Completed ledger rows are labeled Automatic payment.
  6. On a payment row, open actions when they appear:
    • Succeeded manual payments offer Edit notes and Void payment (confirmation only).
    • Failed or abandoned online payments offer Remove from ledger (confirmation only).
    • Pending Stripe Checkout rows offer Resolve checkout.
    • Eligible auto-pay rows offer Refund auto-pay invoice (paid Stripe invoice) or Void auto-pay invoice (finalized open invoice), each with an internal reason and acknowledgement.
  7. Choose Record payment to add a check, cash, or other offline payment.

The Dues tab on the member profile mirrors the same ledger as the cycle Dues tab. Manual void and Stripe refund/void are separate rails — do not use one in place of the other. For the full profile tab workflow across tabs, see Players.

Exempt a member from dues for one cycle

Use a per-cycle exemption when one member shouldn't owe dues for a single concert cycle, such as a member helping with production instead of playing. To waive dues for every cycle, use the member's dues exemption on their profile instead.

  1. Open Dues, choose a concert cycle, and find the member on its Dues tab. You can also open Players, choose the member, and use their Concert cycles or Dues tab.
  2. Find a member whose cycle dues are required. On a member profile, the cycle shows Required if playing.
  3. Open the row's actions menu and choose Exempt from dues for this cycle.
  4. Optionally add an Internal reason (optional). Only admins see it.
  5. Choose Exempt from dues.

The cycle dues and signup tables show an Exempt badge for that cycle only. On the member profile, the cycle shows Not required with the reason Exempt for this cycle. Existing payments stay in the ledger, so refund or void them separately if needed. Any open Auto-pay invoice for the cycle is voided and future drafts for it are removed, but the member's Auto-pay enrollment stays on. Past cycles are allowed, and the confirmation notes that the change rewrites dues history.

Later changes to the member's designation or dues exemption don't affect an exempted cycle. To undo it, open the same actions menu, choose Remove dues exemption, and confirm. Opal recalculates that cycle from the member's current designation and dues exemption.

When an internal reason exists, a speech bubble follows Exempt for this cycle on the member's Dues tab and on Determinations. Hover over or select it to read the full note. Members see only that the cycle's dues aren't required, not the reason.

Common questions

What is the difference between missing, stale, and frozen determinations?

Missing means no stored decision exists for a past rostered player and concert cycle. Opal will not guess at that history until an admin reconstructs it. Stale means a current or future stored decision no longer matches the player's designation or dues exemption, including unrostered players. Frozen means the concert date is already in the past in New York, so that row stays as written even when current policy differs. A per-cycle exemption is the one exception: an admin can set or remove it on a past cycle, and stale checks never report it. Repairing stale rows does not rewrite frozen history, payments, or Auto-pay enrollment.

How is a per-cycle exemption different from a member's dues exemption?

A member's dues exemption on their profile waives dues for every current and future cycle until an admin turns it off. A per-cycle exemption waives dues for one concert cycle only and stays in place even when the member's designation or dues exemption changes. See Exempt a member from dues for one cycle.

What does auto-pay keep in sync?

For each enrolled member, the app matches scheduled draft charges in Stripe to the concerts that member still owes. It creates, updates, or removes those drafts when signup, payment, enrollment, or card status changes. Paid Stripe invoices are recorded on the Opal ledger as Automatic payment and mark the cycle paid. Sync Auto-pay with Stripe (under Edit settings on the Auto-pay tab) repairs drift when Stripe already charged but Opal has not yet shown the receipt.