Skip to main content

Self Topup Settings: Recurring vs Non-recurring SKUs

Jira: BIF-8788 · Epic: BIF-7797

Part of the Self Top-up Improvement initiative. This is a Self Topup Settings story, separate from the topup-flow stories in self-topup.md (STP-S01–S09). Moved here from adhoc-q3-2026 on 2026-07-16 after confirming BIF-8788 is a child of the self-topup Epic BIF-7797, not the adhoc Epic BIF-8695.

Overview

Flag each Self Topup SKU as Recurring or Non-recurring so checkout pricing is computed correctly: recurring SKUs are prorated by subscription months remaining; non-recurring SKUs are a flat per-unit charge.

Scope Changes

  • Backend — SKU recurring/non-recurring flag and pricing calculation.
  • Frontend — settings toggle; checkout total display.

8. User Stories + Acceptance Criteria

User StoryImportanceMockup / Technical NotesAcceptance Criteria
[RECUR-S01] — Recurring vs Non-recurring pricing

As a billing admin configuring Self Topup SKUs, I want to flag each SKU as Recurring or Non-recurring, so that checkout pricing is calculated correctly.
Should HaveRecurring: P × M × Q (M = months left, rounded up). Non-recurring: P × Q.— Happy Path —
• AC-1: Given a SKU in Self Topup settings, when an admin edits it, then it can be set to "Recurring" or "Non-recurring".
• AC-2: Given a Recurring SKU (e.g. User Quota) at price P with M months left, when a customer purchases quantity Q, then total = P × M × Q (example: P=200, M=2, Q=5 → 2,000).
• AC-3: Given the subscription has a partial month remaining, when computing M for a recurring SKU, then round up to the next whole month (e.g. 1.5 months → M = 2).
• AC-4: Given a Non-recurring SKU (e.g. Topup MUV) at price P, when a customer purchases quantity Q, then total = P × Q, independent of months remaining (example: P=200, Q=5 → 1,000).
• AC-5: Given either SKU type, when the customer reaches checkout, then the computed total is shown (and, for recurring, reflects the months-remaining basis).

Open questions

  1. How is "months left" measured — from purchase date to subscription end_date?
  2. Default type for existing SKUs on rollout (Recurring or Non-recurring)?