# Juniper Workspace Cloud: subscription billing, dunning, usage and revenue documents

A full subscription billing cycle: the invoice register across three months, the September invoices with a mid-cycle upgrade and downgrade prorated to the day, the dunning sequence that ends in a cancellation, metered usage billed on a three-band rate card, the revenue recognition schedule that carries an annual prepayment as deferred revenue, and the MRR movement report that has to reconcile to all of it.

All parties, amounts and identifiers are fictional. Fixed snapshot: 2026-09-08. Every record is derived from the shared operating model `saas-subscriptions`, so identifiers join across this set and across the business-kit fixtures that use the same model.

## Reconciliation identities this set asserts

- The recurring lines of the September invoices sum to 235.00, which is opening monthly recurring revenue.
- Opening 235.00 plus expansion 50.00 minus contraction 30.00 minus churn 19.00 equals closing 236.00.
- Closing MRR also equals the sum of the end-of-cycle plan rates in mrr-closing-by-account.csv, 236.00.
- Every proration amount equals plan_rate * 15 / 30 rounded half up.
- The tiered rate card applied to the raw usage events reproduces the 24.54 usage bill exactly.
- Cumulative billings equal cumulative recognition at 1963.20 by the end of the schedule, and the deferred balance returns to 0.00.

## Files

| File | Format | Validity | What it is |
| --- | --- | --- | --- |
| `invoice-register.csv` | csv | valid | Subscription invoice register |
| `invoice-lines-2026-09.csv` | csv | valid | September invoice lines with mid-cycle proration |
| `invoices-2026-09.json` | json | valid | September invoices with proration as JSON |
| `invoice-register-wide.csv` | csv | valid | Invoice register widened to 40 columns |
| `mrr-movement.csv` | csv | valid | MRR movement report |
| `mrr-closing-by-account.csv` | csv | valid | Closing MRR by account |
| `mrr-movement.json` | json | valid | MRR movement report JSON |
| `mrr-movement-unreconciled.csv` | csv | invalid | MRR movement report that does not reconcile |
| `dunning-sequence.csv` | csv | valid | Dunning sequence |
| `dunning-sequence.json` | json | valid | Dunning sequence JSON |
| `payment-attempts.csv` | csv | valid | Failed payment attempt log |
| `usage-events.csv` | csv | valid | Raw metered usage events |
| `usage-rate-card.csv` | csv | reference | Tiered usage rate card |
| `usage-billing-tiered.csv` | csv | valid | Tiered usage bill |
| `usage-billing-tiered.json` | json | valid | Tiered usage bill JSON |
| `revenue-recognition-schedule.csv` | csv | valid | Revenue recognition and deferred revenue schedule |
| `revenue-recognition-schedule.json` | json | valid | Revenue recognition schedule JSON |
| `plan-catalog.csv` | csv | reference | Subscription plan catalog |
| `subscription-events.csv` | csv | valid | Subscription lifecycle events |
| `invoice-INV-2609-02-proration.pdf` | pdf | valid | Mid-cycle upgrade invoice PDF |
| `annual-contract-invoice-INV-ANN-01.pdf` | pdf | valid | Annual contract invoice PDF |
| `billing-reconciliation.json` | json | reference | Billing reconciliation assertions |
| `subscription-billing.xlsx` | xlsx | valid | Subscription billing workbook |

## Deliberate defects

These files are broken on purpose. Each one is a single named mutation of a correct file in the same directory, so a parser under test can be checked against both.

- **`mrr-movement-unreconciled.csv`** The movement rows sum to 246.00 but the closing row states 236.00, an unexplained -10.00 difference. The contraction row is also internally inconsistent: Team 49.00 to Basic 19.00 is -30.00, not -20.00.

## Notes and limits

- The September cycle is modelled as a fixed 30 days so the proration fractions are exact. A real calendar month would need a day count per month and the fixtures would no longer have clean halves.
- Opening MRR excludes the account that was already cancelled before the cycle opened, which is why it is 235.00 and not 334.00.
- The annual contract is billed in September for a service period starting in October. That is the only reason the deferred revenue balance is ever non-zero here.
- These are billing fixtures. They are not accounting advice and the revenue treatment is a simplified straight line, not a full ASC 606 or IFRS 15 allocation.
