Problem Statement 1 — Eligibility
Revenue should only be recognized for invoices that have been successfully fully paid (or partially paid, TBD); unpaid or failed invoices must not contribute to recognized revenue.
Problem Statement 2 — Timing
Revenue recognition must begin on the invoice payment date, not on the invoice creation date, when payment succeeds after an initial failure.
Problem Statement 3 — Subscription Access & Term Alignment
Subscription access and the subscription term must begin on the payment success date; if payment succeeds after the initial subscription attempt, the subscription start and renewal dates should shift to align with the payment date.
User Story 1 — Revenue Eligibility
As a finance user, I want revenue to be recognized only for invoices that are paid, so that unpaid or failed invoices do not count toward recognized revenue.
User Story 2 — Revenue Timing
As a finance user, I want revenue recognition to start on the invoice payment date, not the invoice creation date, so that revenue timing reflects when payment actually succeeds.
User Story 3 — Subscription Access & Term Start
As a subscriber, I want my subscription access and renewal period to begin when my payment succeeds, so that my access duration aligns with when I actually paid.
Solution 1: Revenue recognition (Problem 1)
Revenue is recognized only for invoices with status = paid (Partial payments: TBD). No revenue is recognized for unpaid or failed invoices, and no revenue is backdated to periods before payment.
Solution 2: Subscription term alignment (Problem 2)
On the first successful payment, the subscription term is anchored to the payment date by setting invoice.current_period_start = invoice.paid_at and invoice.current_period_end = invoice.paid_at + plan_interval, and copying these values to the subscription. This ensures access starts when the user actually pays and renewals align to that date (e.g., Jan 7 → Feb 7).
Solution 3: Subscription activation & access (Problem 3)
When a subscription is created, payment is attempted immediately, but the subscription remains incomplete and grants no access until the first payment succeeds. If payment fails, the subscription stays pending. When payment succeeds (invoice.paid_at), the subscription becomes active.
Configuration
A new product-level dropdown labeled “Revenue recognition strategy” exists on the Product configuration page.
The dropdown has two options:
Invoice-creation-based (default) — preserves existing behavior.
Invoice-payment-based — enables payment-anchored behavior.
All existing products default to Invoice-creation-based with no behavior change.
Invoice creation date (Default)
Revenue recognition behavior remains unchanged.
Unpaid or failed invoices continue to be treated according to current logic.
Subscription activation, access, and term dates behave exactly as today.
Payment creation date (New)
Only invoices with status = paid are included in revenue recognition.
Unpaid or failed invoices are automatically excluded from revenue reports.
Revenue recognition starts at invoice.current_period_start.
invoice.current_period_start is set to invoice.paid_at.
invoice.current_period_end is set to invoice.paid_at + plan_interval.
Subscription activation occurs only after the first invoice is paid.
Subscription current_period_start and current_period_end match the invoice period.
Subscriber access begins at current_period_start.
Backward Compatibility
No breaking changes are introduced.
Existing products and subscriptions continue to use Invoice-based behavior unless explicitly updated.
Acceptance Criteria
Switching a product to Invoice-payment-based immediately enforces payment-anchored access, term dates, and revenue filtering.
Revenue reports correctly exclude unpaid invoices for Payment-based products.
Revenue reports remain unchanged for Invoice-based products.
Please authenticate to join the conversation.
In Progress
Pelcro Product
14 days ago

Rana Haleem
Get notified by email when there are changes.
In Progress
Pelcro Product
14 days ago

Rana Haleem
Get notified by email when there are changes.