Extract all invoiced or charged amounts with billing_date, service_start_date, service_end_date, and amount from your billing system via API or data export.
For each charge, compute the daily or monthly recognition rate: recognition_rate = amount / number_of_service_days (or months); store the rate alongside the charge record.
Build a period matrix: for each fiscal period from the earliest service_start_date to the latest service_end_date, calculate the portion of each charge that falls within the period using date overlap logic (min(service_end, period_end) - max(service_start, period_start)).
Aggregate by period to produce the waterfall: deferred_revenue_opening = sum of unrecognized amounts at period start, recognized_in_period = sum of period allocations, deferred_revenue_closing = opening + new_billings - recognized.
Reconcile the closing deferred revenue balance against the GL deferred revenue account for each period and flag variances exceeding a configurable materiality threshold for investigation.
Output the waterfall as a structured report (JSON, CSV, or directly as GL journal entries) organized by product line or customer segment for management and auditor review.
Known gotchas
Prorations and mid-period amendments (upgrades, downgrades, cancellations) require retroactive adjustment to the original charge's service window; failing to recompute the original record's recognition schedule creates a waterfall that does not foot to billed amounts.
Leap years and months of varying length introduce rounding differences in daily-rate calculations; use a calendar-aware date library and accumulate remainders to a single period rather than rounding each period independently.
Credits and refunds must be modeled as negative charges with their own service windows; netting them against a positive charge before waterfall computation loses the period-level detail needed for proper deferred revenue movement reporting.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp