Billing Logic
The authoritative reference for all billing formulas, plan rules, and test environment configuration. All dev work must conform to these specifications.
Plan Overview
Monthly Plan
$109/cycle
Commitment: No commitment — cancel anytime
Charges: Indefinite charges every 28 days
Cancellation stops all future charges immediately.
3-Month Plan
$89/cycle
Commitment: 3-charge commitment
Charges: C1, C2, C3 — all 3 fire regardless of cancellation
Customer can cancel anytime but all 3 charges still fire. Access ends C3 + 35 days.
6-Month Plan
$74/cycle
Commitment: 6-charge commitment
Charges: C1–C6 — all 6 fire regardless of cancellation
Customer can cancel anytime but all 6 charges still fire. Access ends C6 + 35 days.
Charge Schedule
| Event | Formula | Notes |
|---|---|---|
| Charge 1 (C1) | Payment date — fires when customer signs up | Always precedes the start date. |
| Charge 2 (C2) | Start Date + 21 days | Anchored to program start date, NOT to C1 payment date. This is the most commonly misunderstood rule. |
| Charge 3+ (C3–C6) | Previous charge + 28 days | Each subsequent charge is exactly 28 days after the prior one. |
| Access Window | Final charge date + 35 days (5 weeks) | Applies to all plans. After this date, access is revoked. |
Correct Implementation
Correct formula — all plans
Known Wrong Formulas (Do Not Use)
Bug Pattern A — calendar months (older accounts)
Bug Pattern B — off-by-one day (newer accounts)
Key Rules
Payment precedes start date
The customer pays at signup and then selects their program start date. The billing cycle is anchored to the start date, not the payment date.
C2 is anchored to Start Date, not C1
This is the most commonly implemented incorrectly. C2 = Start Date + 21 days. It is NOT C1 + 21 days or C1 + 28 days.
Commitment charges fire regardless of cancellation
On 3-Month and 6-Month plans, all commitment charges fire even if the customer cancels on Day 1. The cancellation only prevents auto-renewal after the commitment period ends.
Expiry = Final Charge + 35 days
This applies to all plans. 35 days = 5 weeks. This is not 30 days, not 1 calendar month, not the start date + N months.
Monthly plan has no commitment
Monthly customers can cancel anytime and the next charge simply does not fire. No commitment period applies.
Grandfathered Premium accounts
Accounts created before the new pricing launched are on the old Premium plan. They are unaffected by the new billing system and should not be modified.
Final week meal selection rule
In the last 7 days before expiry, 'Next Week' meal selection is blocked. 'This Week' remains accessible until expiry.
Meal preview rule
Customers can preview meals 7 days before their program Start Date.
Test Environment Configuration
1 real day = 7 days (1 week) in the test environment
All billing formulas are preserved — the clock just runs 7× faster. No formulas are bypassed or approximated.
| Acceleration | 1 real day = 7 days (1 week) in the test environment |
| Why it works | All real billing formulas are preserved. The clock just runs 7× faster — no formulas are bypassed. |
| C2 in test env | Fires 3 real days after Start Date (21 ÷ 7 = 3) |
| C3+ in test env | Each subsequent charge fires 4 real days after the previous (28 ÷ 7 = 4) |
| Expiry in test env | Fires 5 real days after the last charge (35 ÷ 7 = 5) |
| Full 6-Month lifecycle | ~24 real days to complete (C1 → C6 → Expiry) |
| Full 3-Month lifecycle | ~16 real days to complete (C1 → C3 → Expiry) |
| Dataset size | Keep staging dataset small — cron job timed out with too many records, causing late-firing charges in previous testing. |
| Test start date | All new test accounts use Start Date: April 27, 2026 so all charges fire on the same timeline. |
Macrofit Internal — Billing Logic Reference · For dev team use only