# 6. Revenue Reporting — Test Cases

User Type: **Super Administrator**
Source: *Mi Digital Academy - Education CRM Features Document*
Spec: revenue_reporting.md — every feature, sub-feature, and rule covered

---

## Test Execution Policy
- Zero tolerance: any deviation from documented behavior = FAILED = bug
- Every bug is immediately logged/reported (Bug ID, feature, sub-feature,
  expected vs actual, severity) and fixed 100% before the group passes
- Feature group passes only at 100% test pass rate

## Coverage Matrix
| Feature | Sub-feature / Rule | Test IDs |
|---------|--------------------|----------|
| 6.1 Revenue Reports by Course, Time Period, Region | Revenue report: the report (the report, the course, the period, the region, the amount) | TC-SA-16-06-001 |
| 6.1 Revenue Reports by Course, Time Period, Region | Report by course: the report (the report, the course, the amount) | TC-SA-16-06-002 |
| 6.1 Revenue Reports by Course, Time Period, Region | Report by time period: the report (the report, the period, the amount) | TC-SA-16-06-003 |
| 6.1 Revenue Reports by Course, Time Period, Region | Report by region: the report (the report, the region, the amount) | TC-SA-16-06-004 |
| 6.1 Revenue Reports by Course, Time Period, Region | Report generation: the generation (the report is generated, the course, the period, the region) | TC-SA-16-06-005 |
| 6.1 Revenue Reports by Course, Time Period, Region | Report export: the export (the report, the format, the period) | TC-SA-16-06-006 |
| 6.1 Revenue Reports by Course, Time Period, Region | Report record: the record (the report, the course, the period, the region, the amount) | TC-SA-16-06-007 |
| 6.1 Revenue Reports by Course, Time Period, Region | Audit logging of the revenue report generation | TC-SA-16-06-008 |
| 6.1 Revenue Reports by Course, Time Period, Region | Rule: the revenue report is the document (the report, the course, the period, the region, the amount); the report is the proof | TC-SA-16-06-001 |
| 6.1 Revenue Reports by Course, Time Period, Region | Rule: the report by course is the detail (the report, the course, the amount); the report is the segment | TC-SA-16-06-002 |
| 6.1 Revenue Reports by Course, Time Period, Region | Rule: the report by time period is the detail (the report, the period, the amount); the report is the segment | TC-SA-16-06-003 |
| 6.1 Revenue Reports by Course, Time Period, Region | Rule: the report by region is the detail (the report, the region, the amount); the report is the segment | TC-SA-16-06-004 |
| 6.1 Revenue Reports by Course, Time Period, Region | Rule: the revenue is visible (the revenue, the courses, the periods, the regions); the reporting is managed | TC-SA-16-06-001 |
| 6.1 Revenue Reports by Course, Time Period, Region | Rule: revenue report generation is audit-logged with the course, period, and timestamp | TC-SA-16-06-008 |
| 6.2 Subscription Revenue vs. One-Time Revenue | Subscription revenue: the revenue (the subscription revenue, the amount) | TC-SA-16-06-009 |
| 6.2 Subscription Revenue vs. One-Time Revenue | One-time revenue: the revenue (the one-time revenue, the amount) | TC-SA-16-06-010 |
| 6.2 Subscription Revenue vs. One-Time Revenue | Revenue split: the split (the split of the revenue, the subscription, the one-time) | TC-SA-16-06-011 |
| 6.2 Subscription Revenue vs. One-Time Revenue | Split comparison: the comparison (the comparison of the revenue, the subscription, the one-time) | TC-SA-16-06-012 |
| 6.2 Subscription Revenue vs. One-Time Revenue | Split period: the period (the period of the split, e.g., the monthly, the quarterly) | TC-SA-16-06-013 |
| 6.2 Subscription Revenue vs. One-Time Revenue | Split export: the export (the split, the format, the period) | TC-SA-16-06-014 |
| 6.2 Subscription Revenue vs. One-Time Revenue | Split record: the record (the subscription, the one-time, the amount, the period) | TC-SA-16-06-015 |
| 6.2 Subscription Revenue vs. One-Time Revenue | Audit logging of the revenue split reporting | TC-SA-16-06-016 |
| 6.2 Subscription Revenue vs. One-Time Revenue | Rule: the subscription revenue is the recurring (the subscription revenue, the amount); the revenue is the ongoing | TC-SA-16-06-009 |
| 6.2 Subscription Revenue vs. One-Time Revenue | Rule: the one-time revenue is the one-off (the one-time revenue, the amount); the revenue is the single | TC-SA-16-06-010 |
| 6.2 Subscription Revenue vs. One-Time Revenue | Rule: the revenue split is the detail (the split of the revenue, the subscription, the one-time); the split is the segment | TC-SA-16-06-011 |
| 6.2 Subscription Revenue vs. One-Time Revenue | Rule: the split comparison is the analysis (the comparison of the revenue, the subscription, the one-time); the comparison is the insight | TC-SA-16-06-012 |
| 6.2 Subscription Revenue vs. One-Time Revenue | Rule: the revenue is visible (the subscription, the one-time, the amounts, the period); the reporting is managed | TC-SA-16-06-011 |
| 6.2 Subscription Revenue vs. One-Time Revenue | Rule: revenue split reporting is audit-logged with the split, period, and timestamp | TC-SA-16-06-016 |
| 6.3 Churn Impact on Revenue | Churn: the churn (the churn, the cancelled subscriptions, the count) | TC-SA-16-06-017 |
| 6.3 Churn Impact on Revenue | Lost revenue: the revenue (the lost revenue, the amount) | TC-SA-16-06-018 |
| 6.3 Churn Impact on Revenue | Churn impact: the impact (the impact of the churn, the lost revenue, the amount) | TC-SA-16-06-019 |
| 6.3 Churn Impact on Revenue | Impact period: the period (the period of the impact, e.g., the monthly, the quarterly) | TC-SA-16-06-020 |
| 6.3 Churn Impact on Revenue | Impact comparison: the comparison (the comparison of the impact, the periods) | TC-SA-16-06-021 |
| 6.3 Churn Impact on Revenue | Impact export: the export (the impact, the format, the period) | TC-SA-16-06-022 |
| 6.3 Churn Impact on Revenue | Impact record: the record (the churn, the lost revenue, the amount, the period) | TC-SA-16-06-023 |
| 6.3 Churn Impact on Revenue | Audit logging of the churn impact reporting | TC-SA-16-06-024 |
| 6.3 Churn Impact on Revenue | Rule: the churn is the loss (the churn, the cancelled subscriptions, the count); the churn is the departure | TC-SA-16-06-017 |
| 6.3 Churn Impact on Revenue | Rule: the lost revenue is the value (the lost revenue, the amount); the revenue is the measure | TC-SA-16-06-018 |
| 6.3 Churn Impact on Revenue | Rule: the churn impact is the measure (the impact of the churn, the lost revenue, the amount); the impact is the effect | TC-SA-16-06-019 |
| 6.3 Churn Impact on Revenue | Rule: the impact comparison is the analysis (the comparison of the impact, the periods); the comparison is the insight | TC-SA-16-06-021 |
| 6.3 Churn Impact on Revenue | Rule: the churn is visible (the churn, the lost revenue, the amounts, the period); the reporting is managed | TC-SA-16-06-019 |
| 6.3 Churn Impact on Revenue | Rule: churn impact reporting is audit-logged with the churn, impact, and timestamp | TC-SA-16-06-024 |

## 6.1 Revenue Reports by Course, Time Period, Region

### TC-SA-16-06-001 — Revenue report: the report (the report, the course, the period, the region, the amount); the report is the proof
**Type:** Positive
**Covers:** 6.1 → Revenue report: the report (the report, the course, the period, the region, the amount); Rule: the revenue report is the document (the report, the course, the period, the region, the amount); the report is the proof; Rule: the revenue is visible (the revenue, the courses, the periods, the regions); the reporting is managed
**Preconditions:** Revenue exists for multiple courses, periods, and regions.
**Steps:**
1. Generate the revenue report: the report (the report, the course, the period, the region, the amount), the period (the period of the report), and the region (the region of the report).
2. View the report — verify the report shows the course, the period, the region, and the amount.
3. Verify the revenue is visible for the courses, the periods, and the regions.
**Expected Result:** The revenue report is shown — the report, the course, the period, the region, and the amount are the proof.
**Priority:** Critical

### TC-SA-16-06-002 — Report by course: the report (the report, the course, the amount); the report is the segment
**Type:** Positive
**Covers:** 6.1 → Report by course: the report (the report, the course, the amount); Rule: the report by course is the detail (the report, the course, the amount); the report is the segment
**Preconditions:** Revenue exists for multiple courses.
**Steps:**
1. Generate the report by course: the report (the report, the course, the amount) — verify the report is the detail.
2. Verify the revenue is shown per course.
**Expected Result:** The report by course is shown — the report, the course, and the amount are the segment.
**Priority:** High

### TC-SA-16-06-003 — Report by time period: the report (the report, the period, the amount); the report is the segment
**Type:** Positive
**Covers:** 6.1 → Report by time period: the report (the report, the period, the amount); Rule: the report by time period is the detail (the report, the period, the amount); the report is the segment
**Preconditions:** Revenue exists across multiple time periods.
**Steps:**
1. Generate the report by time period: the report (the report, the period, the amount) — verify the report is the detail.
2. Verify the revenue is shown per period (monthly, quarterly).
**Expected Result:** The report by time period is shown — the report, the period, and the amount are the segment.
**Priority:** High

### TC-SA-16-06-004 — Report by region: the report (the report, the region, the amount); the report is the segment
**Type:** Negative
**Covers:** 6.1 → Report by region: the report (the report, the region, the amount); Rule: the report by region is the detail (the report, the region, the amount); the report is the segment
**Preconditions:** Revenue exists across multiple regions; a region with no revenue also exists.
**Steps:**
1. Generate the report by region: the report (the report, the region, the amount) — verify the report is the detail.
2. Verify the revenue is shown per region.
3. Generate a report for a region with no revenue — verify an empty result is shown (no error).
**Expected Result:** The report by region is shown — the report, the region, and the amount are the segment; a region with no revenue is handled.
**Priority:** High

### TC-SA-16-06-005 — Report generation: the generation (the report is generated, the course, the period, the region); the generation is the action
**Type:** Edge
**Covers:** 6.1 → Report generation: the generation (the report is generated, the course, the period, the region)
**Preconditions:** Revenue exists for a period; a period with no revenue also exists.
**Steps:**
1. Generate the report: the generation (the report is generated, the course, the period, the region) — verify the generation is the action.
2. Verify the report is generated with the course, the period, and the region.
3. Generate a report for a period with no revenue — verify an empty report is generated (no error).
**Expected Result:** The report generation works — the report is generated for the course, the period, and the region; an empty period is handled.
**Priority:** High

### TC-SA-16-06-006 — Report export: the export (the report, the format, the period); the export is the record
**Type:** Positive
**Covers:** 6.1 → Report export: the export (the report, the format, the period)
**Preconditions:** A revenue report has been generated.
**Steps:**
1. Export the report: the export (the report, the format, the period).
2. Verify the export is generated in the selected format.
3. Verify the exported data matches the report.
**Expected Result:** The report is exported — the report in the selected format for the period is generated.
**Priority:** Medium

### TC-SA-16-06-007 — Report record: the record (the report, the course, the period, the region, the amount); the record is the proof
**Type:** Positive
**Covers:** 6.1 → Report record: the record (the report, the course, the period, the region, the amount)
**Preconditions:** A revenue report has been generated.
**Steps:**
1. Open the report record.
2. Verify it shows the report, the course, the period, the region, and the amount.
**Expected Result:** The report is recorded — the report, the course, the period, the region, and the amount are shown.
**Priority:** High

### TC-SA-16-06-008 — Revenue report generation is audit-logged with the course, period, and timestamp
**Type:** Positive
**Covers:** 6.1 → Audit logging of the revenue report generation; Rule: revenue report generation is audit-logged with the course, period, and timestamp
**Preconditions:** Revenue reports have been generated.
**Steps:**
1. Open the audit trail and filter by "revenue report".
2. Verify entries show the course, the period, and the timestamp.
**Expected Result:** The revenue report generation is audit-logged with the course, period, and timestamp.
**Priority:** Critical

## 6.2 Subscription Revenue vs. One-Time Revenue

### TC-SA-16-06-009 — Subscription revenue: the revenue (the subscription revenue, the amount); the revenue is the ongoing
**Type:** Positive
**Covers:** 6.2 → Subscription revenue: the revenue (the subscription revenue, the amount); Rule: the subscription revenue is the recurring (the subscription revenue, the amount); the revenue is the ongoing
**Preconditions:** Subscription revenue exists across a period.
**Steps:**
1. View the revenue split: the subscription revenue (the subscription revenue, the amount), the one-time revenue (the one-time revenue, the amount), and the period (the period of the split).
2. View the subscription revenue: the revenue (the subscription revenue, the amount) — verify the revenue is the recurring.
3. Verify the subscription revenue is the ongoing.
**Expected Result:** The subscription revenue is shown — the subscription revenue and the amount are the ongoing.
**Priority:** Critical

### TC-SA-16-06-010 — One-time revenue: the revenue (the one-time revenue, the amount); the revenue is the single
**Type:** Positive
**Covers:** 6.2 → One-time revenue: the revenue (the one-time revenue, the amount); Rule: the one-time revenue is the one-off (the one-time revenue, the amount); the revenue is the single
**Preconditions:** One-time revenue exists across a period.
**Steps:**
1. View the one-time revenue: the revenue (the one-time revenue, the amount) — verify the revenue is the one-off.
2. Verify the one-time revenue is the single.
3. Verify the one-time revenue is shown separately from the subscription revenue.
**Expected Result:** The one-time revenue is shown — the one-time revenue and the amount are the single.
**Priority:** High

### TC-SA-16-06-011 — Revenue split: the split (the split of the revenue, the subscription, the one-time); the split is the segment
**Type:** Positive
**Covers:** 6.2 → Revenue split: the split (the split of the revenue, the subscription, the one-time); Rule: the revenue split is the detail (the split of the revenue, the subscription, the one-time); the split is the segment; Rule: the revenue is visible (the subscription, the one-time, the amounts, the period); the reporting is managed
**Preconditions:** Both subscription and one-time revenue exist across a period.
**Steps:**
1. View the revenue split: the split (the split of the revenue, the subscription, the one-time) — verify the split is the detail.
2. Verify the split shows the subscription and the one-time amounts.
3. Verify the revenue is visible for the subscription, the one-time, the amounts, and the period.
**Expected Result:** The revenue split is shown — the split of the revenue, the subscription, and the one-time are the segment.
**Priority:** Critical

### TC-SA-16-06-012 — Split comparison: the comparison (the comparison of the revenue, the subscription, the one-time); the comparison is the insight
**Type:** Positive
**Covers:** 6.2 → Split comparison: the comparison (the comparison of the revenue, the subscription, the one-time); Rule: the split comparison is the analysis (the comparison of the revenue, the subscription, the one-time); the comparison is the insight
**Preconditions:** Both subscription and one-time revenue exist across multiple periods.
**Steps:**
1. Compare the split: the comparison (the comparison of the revenue, the subscription, the one-time) — verify the comparison is the analysis.
2. Verify the comparison shows the subscription vs. one-time revenue across the periods.
**Expected Result:** The split comparison works — the comparison of the revenue, the subscription, and the one-time is the insight.
**Priority:** Medium

### TC-SA-16-06-013 — Split period: the period (the period of the split, e.g., the monthly, the quarterly); the period is the scope
**Type:** Positive
**Covers:** 6.2 → Split period: the period (the period of the split, e.g., the monthly, the quarterly)
**Preconditions:** Revenue exists across monthly and quarterly periods.
**Steps:**
1. Set the split period: the period (the period of the split, e.g., the monthly, the quarterly) — verify the period is the scope.
2. View the split for a monthly period and a quarterly period — verify each covers the correct period.
**Expected Result:** The split period is set — the period of the split (the monthly, the quarterly) is the scope.
**Priority:** High

### TC-SA-16-06-014 — Split export: the export (the split, the format, the period); the export is the record
**Type:** Positive
**Covers:** 6.2 → Split export: the export (the split, the format, the period)
**Preconditions:** Revenue split exists for a period.
**Steps:**
1. Export the split: the export (the split, the format, the period).
2. Verify the export is generated in the selected format.
3. Verify the exported data matches the split view.
**Expected Result:** The split is exported — the split in the selected format for the period is generated.
**Priority:** Medium

### TC-SA-16-06-015 — Split record: the record (the subscription, the one-time, the amount, the period); the record is the proof
**Type:** Positive
**Covers:** 6.2 → Split record: the record (the subscription, the one-time, the amount, the period)
**Preconditions:** Revenue split exists.
**Steps:**
1. Open the split record.
2. Verify it shows the subscription, the one-time, the amount, and the period.
**Expected Result:** The split is recorded — the subscription, the one-time, the amount, and the period are shown.
**Priority:** High

### TC-SA-16-06-016 — Revenue split reporting is audit-logged with the split, period, and timestamp
**Type:** Positive
**Covers:** 6.2 → Audit logging of the revenue split reporting; Rule: revenue split reporting is audit-logged with the split, period, and timestamp
**Preconditions:** Revenue split reporting events have occurred.
**Steps:**
1. Open the audit trail and filter by "revenue split".
2. Verify entries show the split, the period, and the timestamp.
**Expected Result:** The revenue split reporting is audit-logged with the split, period, and timestamp.
**Priority:** Critical

## 6.3 Churn Impact on Revenue

### TC-SA-16-06-017 — Churn: the churn (the churn, the cancelled subscriptions, the count); the churn is the departure
**Type:** Positive
**Covers:** 6.3 → Churn: the churn (the churn, the cancelled subscriptions, the count); Rule: the churn is the loss (the churn, the cancelled subscriptions, the count); the churn is the departure
**Preconditions:** Subscriptions have been cancelled across a period.
**Steps:**
1. View the churn impact: the churn (the churn, the cancelled subscriptions, the count), the lost revenue (the lost revenue, the amount), and the period (the period of the impact).
2. View the churn: the churn (the churn, the cancelled subscriptions, the count) — verify the churn is the loss.
3. Verify the churn is the departure and the count is correct.
**Expected Result:** The churn is shown — the churn, the cancelled subscriptions, and the count are the departure.
**Priority:** Critical

### TC-SA-16-06-018 — Lost revenue: the revenue (the lost revenue, the amount); the revenue is the measure
**Type:** Edge
**Covers:** 6.3 → Lost revenue: the revenue (the lost revenue, the amount); Rule: the lost revenue is the value (the lost revenue, the amount); the revenue is the measure
**Preconditions:** Subscriptions have been cancelled across a period.
**Steps:**
1. View the lost revenue: the revenue (the lost revenue, the amount) — verify the revenue is the value.
2. Verify the lost revenue amount is correct (the sum of the cancelled subscriptions' recurring value).
3. Verify the revenue is the measure.
**Expected Result:** The lost revenue is shown — the lost revenue and the amount are the measure.
**Priority:** High

### TC-SA-16-06-019 — Churn impact: the impact (the impact of the churn, the lost revenue, the amount); the impact is the effect
**Type:** Positive
**Covers:** 6.3 → Churn impact: the impact (the impact of the churn, the lost revenue, the amount); Rule: the churn impact is the measure (the impact of the churn, the lost revenue, the amount); the impact is the effect; Rule: the churn is visible (the churn, the lost revenue, the amounts, the period); the reporting is managed
**Preconditions:** Churn has occurred across a period.
**Steps:**
1. View the churn impact: the impact (the impact of the churn, the lost revenue, the amount) — verify the impact is the measure.
2. Verify the impact shows the lost revenue and the amount.
3. Verify the churn is visible for the churn, the lost revenue, the amounts, and the period.
**Expected Result:** The churn impact is shown — the impact of the churn, the lost revenue, and the amount are the effect.
**Priority:** Critical

### TC-SA-16-06-020 — Impact period: the period (the period of the impact, e.g., the monthly, the quarterly); the period is the scope
**Type:** Positive
**Covers:** 6.3 → Impact period: the period (the period of the impact, e.g., the monthly, the quarterly)
**Preconditions:** Churn has occurred across monthly and quarterly periods.
**Steps:**
1. Set the impact period: the period (the period of the impact, e.g., the monthly, the quarterly) — verify the period is the scope.
2. View the impact for a monthly period and a quarterly period — verify each covers the correct period.
**Expected Result:** The impact period is set — the period of the impact (the monthly, the quarterly) is the scope.
**Priority:** High

### TC-SA-16-06-021 — Impact comparison: the comparison (the comparison of the impact, the periods); the comparison is the insight
**Type:** Positive
**Covers:** 6.3 → Impact comparison: the comparison (the comparison of the impact, the periods); Rule: the impact comparison is the analysis (the comparison of the impact, the periods); the comparison is the insight
**Preconditions:** Churn has occurred across multiple periods.
**Steps:**
1. Compare the impact: the comparison (the comparison of the impact, the periods) — verify the comparison is the analysis.
2. Verify the comparison shows the churn impact across the selected periods.
**Expected Result:** The impact comparison works — the comparison of the impact across the periods is the insight.
**Priority:** Medium

### TC-SA-16-06-022 — Impact export: the export (the impact, the format, the period); the export is the record
**Type:** Positive
**Covers:** 6.3 → Impact export: the export (the impact, the format, the period)
**Preconditions:** Churn impact exists for a period.
**Steps:**
1. Export the impact: the export (the impact, the format, the period).
2. Verify the export is generated in the selected format.
3. Verify the exported data matches the impact view.
**Expected Result:** The impact is exported — the impact in the selected format for the period is generated.
**Priority:** Medium

### TC-SA-16-06-023 — Impact record: the record (the churn, the lost revenue, the amount, the period); the record is the proof
**Type:** Positive
**Covers:** 6.3 → Impact record: the record (the churn, the lost revenue, the amount, the period)
**Preconditions:** Churn impact exists.
**Steps:**
1. Open the impact record.
2. Verify it shows the churn, the lost revenue, the amount, and the period.
**Expected Result:** The impact is recorded — the churn, the lost revenue, the amount, and the period are shown.
**Priority:** High

### TC-SA-16-06-024 — Churn impact reporting is audit-logged with the churn, impact, and timestamp
**Type:** Positive
**Covers:** 6.3 → Audit logging of the churn impact reporting; Rule: churn impact reporting is audit-logged with the churn, impact, and timestamp
**Preconditions:** Churn impact reporting events have occurred.
**Steps:**
1. Open the audit trail and filter by "churn impact".
2. Verify entries show the churn, the impact, and the timestamp.
**Expected Result:** The churn impact reporting is audit-logged with the churn, impact, and timestamp.
**Priority:** Critical
