# Subscriptions

**Summary:** A subscription records a member’s products, recurring agreement, payment provider and lifecycle state. Payment, renewal and access are separate.

- Role: [Technical Support](https://www.subrite.no/technical-support)
- Source: https://www.subrite.no/technical-support/subscriptions
- Updated: 2026-09-28
- Markdown index: https://www.subrite.no/technical-support/llms.txt

<a id="find-the-right-subscription-and-person"></a>
## Find the right subscription and person

The internal subscription entity is `MemberPackage`. It links a payer to a product package and subscription plan, with subscribed products and optional recipient seats.

The package defines the starting offer. The plan defines recurring terms. The subscription stores its own prices, dates, renewal flag and state.

A payer can own several subscriptions. A recipient can receive access through somebody else’s subscription.

Under **Members & lists** \> **Subscriptions**, the payer link opens their member record. The **Subscription** tab contains their subscriptions; **See group details** links a recipient’s view to the payer.

Viewing needs Members read permission and the subscription feature. Changes need Members update permission.

Source: [subscription read model](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/product/services/member-package-read.service.ts#L70). For lookup steps, use [Subscriptions in Administrators](https://www.subrite.no/administrators/subscriptions?md=true).

<a id="subscription-states"></a>
## Subscription states

Use activity records to identify the event behind a state:

| State | Meaning and diagnostic implication |
| --- | --- |
| Active | Eligible to provide access through its products. Payment and recipient access still need separate checks. |
| Inactive | No active access from this subscription. Causes include exhausted retries, unpaid-invoice deactivation and cancellation before activation. |
| Pending | Used for initial e-invoice subscriptions configured to activate on payment. Check activation policy and invoice period. |
| Paused | Payment-retry state without active access. It is not a customer-requested holiday pause. |
| Stopped | Immediate stop ended the subscription. Payments are not automatically refunded; pending charges need a separate check. |
| Expired | Expiry processing ended a subscription with renewal off. Check the period, invoice rules and actual processing. |
| Waiting for activation | Has not started, for example a gift subscription. Check whether a start date exists. |

External is the payment provider for manually recorded payments.

External subscriptions and e-invoice subscriptions configured to activate on order can be Active before payment. Free subscriptions are Active too.

Conversely, paying an e-invoice for an ended period does not restart the subscription. The [reactivation guard](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/payment/services/subscription-state.service.ts#L385) checks the paid period before restoring Active status.

Fresh digital-access queries require an Active subscription. A payer also needs owner access on the subscribed product; a recipient needs an accepted seat. Another Active subscription can independently provide access.

For example, a company pays for an Active subscription while staff receive the seats. An employee with an unaccepted invitation lacks access through that seat.

A status update and the website’s access response can differ while cached information or external integrations update.

See [initial activation rules](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/payment/transactions/faktura-package.transaction.ts#L576), [access queries](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/product/repositories/product.repository.ts#L29) and [expiry processing](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/payment/services/subscription-lifecycle.service.ts#L44).

<a id="dates-and-amounts"></a>
## Dates and amounts

| Display | Actual meaning |
| --- | --- |
| **Next renewal** / **Expiration date** | The same stored `nextRenewal` value; the label changes when renewal is off. |
| **Current period** | Displays `currentPeriodStart` through `nextRenewal`; these dates can change without payment. |
| **Subscription active since** | Subscription creation time, not the latest activation or reactivation. |
| **Ended on** | Last departure from Active; falls back to `nextRenewal` when that timestamp is missing. |
| **Start date** | Scheduled activation date for a waiting subscription. |
| **Active days** | Days since creation while Active with no recorded end timestamp; otherwise zero. Not cumulative service. |
| **Past Due** | An Active subscription whose renewal timestamp is past. Not proof of an overdue invoice. |
| **Last paid amount** | Latest successful linked payment by accounting date. Zero can mean no matching payment was found. |
| **Recurring price** | Stored renewal price. It can differ from the starting payment or latest payment. |

Subscription `currentPrice` is separate from subscriber-product `price`. Renewal updates `currentPrice`; recurring orders use subscriber-product `recurringPrice`.

**Forced stop date** is the threshold used by the e-invoice stopping rule. Compare it with the invoice’s covered period and due date.

Background selection excludes Paid invoices covering a future period, but queued expiry execution does not repeat that exclusion. See the [e-invoice stop calculation](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/common/utils/billing-period.util.ts#L258-L279) and [expiry selection](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/product/repositories/member-package.repository.ts#L810-L884).

If an apparently paid future period expires, compare when payment was recorded, when expiry was selected, and when it executed.

Calendar-day rules use Oslo time in the inspected lifecycle code. Browser displays can hide the time component. Record timestamps and timezone when a boundary matters.

See [date and price mapping](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/product/services/member-package-read.service.ts#L386) and [latest-payment selection](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/member/services/member.service.ts#L505). For plan-price propagation, use [Subscription plans](https://www.subrite.no/technical-support/subscription-plans?md=true).

<a id="end-renewal-or-stop-immediately"></a>
## End renewal or stop immediately

| Effect | Turn renewal off | **Cancel subscription now** |
| --- | --- | --- |
| Subscription | Changes `autoRenew`; does not directly stop an Active subscription. | Sets Stopped, or Inactive for Waiting for activation; moves `nextRenewal` to now. |
| Renewal flag | Becomes false. | Can remain true. Vipps charge cancellation can turn it off before the stop. |
| Existing payment | No automatic refund. | No automatic refund or proration. In-flight payment needs a separate check. |
| E-invoice | Can fully credit the last eligible next-period invoice if Unpaid or Overdue. | Does not automatically credit or reduce invoice amounts. |
| Records | Keeps the member, subscription and history. | Keeps the member, subscription and history. |

The automatic e-invoice credit excludes Partially paid, Partially credited and Paid invoices. Turning renewal back on can queue a new invoice when its order date has passed.

Onboarding mode is a publisher setup hold that suppresses selected actions, including this invoice credit/reissue. Operations can check `tenant_settings.isOnboarding` and the action’s `onboarding_mode.suppressed` log. See the [onboarding gate](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/shared/services/tenant-onboarding.service.ts#L40).

Renewal-off can trigger configured Automation for the payer. The immediate-stop path does not itself send a fixed cancellation email. A successful pending Vipps-charge cancellation can also trigger renewal-off processing.

A Stopped subscription can retain **Auto renew**. Check the stop event before treating the flag as a failed cancellation.

See [renewal changes](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/product/services/member-package-lifecycle.service.ts#L105) and [immediate stop](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/product/services/member-package-lifecycle.service.ts#L549).

<a id="provider-and-date-change-boundaries"></a>
## Provider and date-change boundaries

Vipps blocks renewal changes for due charges or renewal dates from today through two calendar days ahead. This uses Oslo day boundaries, not a rolling 48-hour window.

Turning renewal on also requires a stored payment credential for providers that use one.

Immediate cancellation first attempts to cancel a pending Vipps charge. It can still stop the subscription after `chargeNotFound` or `chargeCannotBeCancelled`.

`chargeNotFound` also covers provider lookup failures. Check the provider record before concluding that no charge exists.

Check the provider payment and current subscription state after cancellation. The success response’s `pendingChargeCancelled` flag distinguishes confirmed cancellation from a subscription-only result.

For Stripe, Nets and SwedbankPay, stop attempts to cancel recurring retry work without reversing processed charges. SwedbankPay termination also clears the stored credential.

Moving renewal to tomorrow or later can reactivate a subscription without collecting payment. The date edit does not refund, credit or cancel an existing charge.

See [cancellation handling](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/payment/services/subscription-cancellation.service.ts#L38), [Vipps lookup handling](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/payment/services/payment-providers/vipps-payment.provider.ts#L982) and [date edits](https://github.com/subrite/subrite-crm/blob/6cd1850569be3b1702ca736a19320c7626efb7bc/api-server/src/modules/product/services/member-package-lifecycle.service.ts#L237).

<a id="diagnose-a-subscription-case"></a>
## Diagnose a subscription case

1. Identify the subscription, payer, recipient, products, provider and deployed revision.
2. Compare status, renewal flag and activity timestamps to establish the event order.
3. Check payments and invoices separately, including covered periods and pending provider charges.
4. For access, check owner access or accepted seats, other subscriptions and the affected website’s current response.
5. For unavailable controls, check role, pending changes, status and the displayed payment/provider restriction.
6. Include identifiers, error codes, expected outcome and observed state when escalating conflicting evidence.

A pending change disables **Edit subscription** for non-External providers.

<a id="verification-limits"></a>
## Verification limits

Source checked on 28 September 2026 at `6cd1850569be3b1702ca736a19320c7626efb7bc`. The 27 September owner-session walkthrough covered the empty overview and filters; record screens, ordinary roles and provider outcomes remain untested.

Engineering must still test late Vipps settlement after stopping, renewal-anchor changes during reactivation, and rescheduling after activation was queued.

Worker timing, recipient/website access propagation and the support UI for checking onboarding mode remain unverified.

## Related pages

- [Subscriptions](https://www.subrite.no/administrators/subscriptions?md=true): A subscription records what a member receives, its price, access and renewal.
