revenue-recognition-requirements
Use this skill to configure and troubleshoot Salesforce Billing revenue recognition rules, schedules, and GL transaction generation in compliance with ASC 606. Triggers: 'revenue schedule not generated after order activation', 'blng__RevenueSchedule__c records missing', 'how to configure blng__RevenueRecognitionRule__c on a product', 'Finance Periods not set up before revenue schedule generation', 'revenue schedule did not update after contract amendment', 'performance obligation allocation for bundled products', 'distribution method for revenue spread', 'ASC 606 implementation in Salesforce Billing'. NOT for billing schedule setup (see billing-schedule-setup skill), NOT for standard Salesforce CPQ quoting, NOT for OpportunityLineItem native Revenue Schedules (standard platform feature unrelated to Salesforce Billing), NOT for Salesforce Revenue Cloud (Revenue Lifecycle Management).
Best use case
revenue-recognition-requirements is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Use this skill to configure and troubleshoot Salesforce Billing revenue recognition rules, schedules, and GL transaction generation in compliance with ASC 606. Triggers: 'revenue schedule not generated after order activation', 'blng__RevenueSchedule__c records missing', 'how to configure blng__RevenueRecognitionRule__c on a product', 'Finance Periods not set up before revenue schedule generation', 'revenue schedule did not update after contract amendment', 'performance obligation allocation for bundled products', 'distribution method for revenue spread', 'ASC 606 implementation in Salesforce Billing'. NOT for billing schedule setup (see billing-schedule-setup skill), NOT for standard Salesforce CPQ quoting, NOT for OpportunityLineItem native Revenue Schedules (standard platform feature unrelated to Salesforce Billing), NOT for Salesforce Revenue Cloud (Revenue Lifecycle Management).
Teams using revenue-recognition-requirements should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/revenue-recognition-requirements/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How revenue-recognition-requirements Compares
| Feature / Agent | revenue-recognition-requirements | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Use this skill to configure and troubleshoot Salesforce Billing revenue recognition rules, schedules, and GL transaction generation in compliance with ASC 606. Triggers: 'revenue schedule not generated after order activation', 'blng__RevenueSchedule__c records missing', 'how to configure blng__RevenueRecognitionRule__c on a product', 'Finance Periods not set up before revenue schedule generation', 'revenue schedule did not update after contract amendment', 'performance obligation allocation for bundled products', 'distribution method for revenue spread', 'ASC 606 implementation in Salesforce Billing'. NOT for billing schedule setup (see billing-schedule-setup skill), NOT for standard Salesforce CPQ quoting, NOT for OpportunityLineItem native Revenue Schedules (standard platform feature unrelated to Salesforce Billing), NOT for Salesforce Revenue Cloud (Revenue Lifecycle Management).
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Revenue Recognition Requirements
This skill activates when a practitioner needs to configure Salesforce Billing revenue recognition rules, schedules, and GL transaction generation for ASC 606 compliance — from Finance Period setup through blng__RevenueTransaction__c posting and amendment handling.
---
## Before Starting
Gather this context before working on anything in this domain:
- Confirm the Salesforce Billing managed package (namespace prefix `blng__`) is installed. Revenue recognition objects live entirely within this managed package — they do not exist in standard Salesforce or CPQ alone.
- Confirm **Finance Periods are configured** in Salesforce Billing setup. Finance Periods are a hard prerequisite: the Billing engine cannot generate `blng__RevenueSchedule__c` records if no Finance Periods exist that overlap the Order's service date range.
- Identify the required recognition treatment for each product: Immediate Recognition, Straight-Line (rateable), Event-Based, or a custom distribution schedule.
- Know whether products are sold as bundles that require separate performance obligation allocation under ASC 606 rules — bundle components may need individual `blng__RevenueRecognitionRule__c` records.
- Confirm the GL account mapping requirements — `blng__RevenueTransaction__c` records feed downstream ERP integrations and must carry the correct GL account codes.
---
## Core Concepts
### Object Chain: Rule → Schedule → Transaction
Salesforce Billing implements ASC 606 through a three-level object chain. All three objects live in the `blng__` namespace:
```
blng__RevenueRecognitionRule__c (configured on Product2)
↓ (triggers at Order activation)
blng__RevenueSchedule__c (one per OrderProduct; holds the recognition schedule)
↓ (generated as Finance Periods close or revenue events fire)
blng__RevenueTransaction__c (individual GL events: earned revenue and deferred revenue movements)
```
**blng__RevenueRecognitionRule__c** is the configuration object. It is set as a lookup on the Product2 record and defines the recognition treatment (how revenue is spread) and the distribution method (what period boundaries drive the spread). It does not hold amounts — amounts are computed at schedule generation time.
**blng__RevenueSchedule__c** is the computed schedule. One record is created per OrderProduct when the Order is activated. It holds the total contract value to be recognized and the breakdown of that value across Finance Periods. Unlike billing schedules, revenue schedules use Finance Periods — not calendar months — as their period boundary.
**blng__RevenueTransaction__c** represents individual GL events. Each transaction record marks a movement of revenue from deferred to earned status, or a reversal. These are the records that feed ERP and GL integrations. They are generated when a Finance Period closes or when a revenue event triggers recognition.
### Finance Periods: Hard Prerequisite for Schedule Generation
Finance Periods (`blng__FinancePeriod__c`) define the accounting calendar used by the revenue recognition engine. They must be created and activated in Salesforce Billing setup before any `blng__RevenueSchedule__c` records can be generated.
The revenue engine calculates how revenue is distributed across Finance Periods. If no Finance Periods exist that overlap an Order's service dates, the engine cannot allocate revenue and the schedule record is not created — with no error surfaced to the end user. This is a silent failure.
Finance Periods do not auto-generate. An admin must explicitly create them for all periods that will have active revenue schedules, including future periods for multi-year subscriptions.
### Revenue Distribution Methods
The `blng__DistributionMethod__c` field on `blng__RevenueRecognitionRule__c` controls how contract revenue is spread across Finance Periods. Salesforce Billing supports:
| Distribution Method | Behavior |
|---|---|
| Daily Proration | Revenue allocated proportionally to the number of days in each Finance Period that overlap the service date range |
| Equal Distribution | Revenue divided equally across all Finance Periods in the service range, regardless of period length |
| Percent Distribution | Admin defines a custom percentage per period on the rule |
| Single Period | Full amount recognized in one Finance Period (immediate recognition) |
For SaaS annual subscriptions, Daily Proration is the most common choice because it correctly handles partial-month periods at subscription start and end.
### Revenue Recognition Treatments
The `blng__RecognitionTreatment__c` field on `blng__RevenueRecognitionRule__c` defines the trigger for recognition:
| Treatment | Behavior |
|---|---|
| Immediate | Revenue is recognized at Order activation. Used for one-time products delivered at point of sale. |
| Rateable | Revenue is spread ratably over the service period. The most common treatment for subscription SaaS products (ASC 606 §606-10-25-27 performance obligation satisfied over time). |
| Event-Based | Revenue is recognized when a specified event occurs (e.g., delivery confirmation, milestone completion). Requires an event record to trigger the recognition. |
| Custom | Admin-defined schedule; rarely used. |
### Contract Amendments Do Not Auto-Update Revenue Schedules
When a contract is amended (Order amendment or replacement order in CPQ Billing), the **existing `blng__RevenueSchedule__c` record is not automatically updated**. The revenue engine does not re-compute previously generated schedules. The practitioner must:
1. Cancel or close the existing revenue schedule manually.
2. Ensure the amendment order generates a new `blng__RevenueSchedule__c` for the amended terms.
3. Reconcile any periods already recognized under the old schedule.
This is a critical difference from billing schedules, which handle amendments through a separate amendment order product. Revenue schedules require explicit manual intervention to align with amended contract values.
### Performance Obligation Allocation for Bundles
Under ASC 606, bundled products that contain multiple distinct performance obligations must have revenue allocated to each obligation based on standalone selling price (SSP). In Salesforce Billing:
- Each bundle component Product2 that is a distinct performance obligation should have its own `blng__RevenueRecognitionRule__c`.
- The `blng__StandaloneSellingPrice__c` field on the bundle component drives the allocation ratio.
- If SSP fields are not populated, the Billing engine defaults to allocating revenue based on the list price ratio, which may not comply with ASC 606 SSP requirements.
---
## Common Patterns
### Pattern 1: SaaS Annual Subscription — Monthly Revenue Spread
**When to use:** A SaaS product is sold as a 12-month subscription. Revenue must be recognized ratably month by month, not at invoice date.
**How it works:**
1. Create a `blng__RevenueRecognitionRule__c` with `blng__RecognitionTreatment__c = Rateable` and `blng__DistributionMethod__c = Daily Proration`.
2. Set the rule as the `blng__RevenueRecognitionRule__c` lookup on the Product2 record.
3. Confirm Finance Periods exist for all 12 months of the subscription service period.
4. Activate the Order — one `blng__RevenueSchedule__c` is created per OrderProduct, pre-calculated across each Finance Period.
5. As each Finance Period closes, `blng__RevenueTransaction__c` GL event records are generated for the earned portion.
**Why not the alternative:** Using Immediate recognition for a 12-month subscription recognizes the full contract value at activation. This violates ASC 606 §606-10-25-27 (performance obligation satisfied over time) and misstates deferred revenue on the balance sheet.
### Pattern 2: Amendment Requires Manual Revenue Schedule Reconciliation
**When to use:** A customer upgrades a subscription mid-term (e.g., adds seats at month 6 of a 12-month contract). The existing revenue schedule must be reconciled against the amended terms.
**How it works:**
1. The CPQ amendment order creates a new OrderProduct representing the uplift.
2. At activation of the amendment order, a new `blng__RevenueSchedule__c` is created for the uplift delta only.
3. The original `blng__RevenueSchedule__c` is NOT modified — it continues to recognize revenue based on the original contract value.
4. Finance team must confirm whether the two schedules produce the correct cumulative GL entries. In some cases, the original schedule must be manually closed and a net-new schedule created for the full amended value.
**Why not the alternative:** Attempting to edit `blng__RevenueSchedule__c` records directly corrupts the recognition timeline and produces double-counting in GL entries. The object is system-managed — treat it as read-only after generation.
---
## Decision Guidance
| Situation | Recommended Approach | Reason |
|---|---|---|
| SaaS subscription, recognize ratably | Rateable treatment + Daily Proration distribution | Compliant with ASC 606 over-time recognition; handles partial months correctly |
| One-time product delivered at sale | Immediate treatment + Single Period distribution | Full amount earned at point of sale; no deferred revenue balance required |
| Professional services, milestone-based | Event-Based treatment | Ties recognition to delivery event, not calendar; supports ASC 606 point-in-time obligation |
| Bundle with distinct performance obligations | Separate blng__RevenueRecognitionRule__c per component with SSP allocation | ASC 606 requires SSP-based allocation across distinct obligations |
| Mid-term amendment (upgrade/downgrade) | Generate new schedule for delta; manually close and reconcile original if needed | Revenue engine does not auto-update existing schedules; manual reconciliation required |
| Finance Periods missing for service dates | Create Finance Periods first; then re-trigger schedule generation | Silent failure: schedules do not generate without Finance Periods covering the date range |
---
## Recommended Workflow
Step-by-step instructions for an AI agent or practitioner working on this task:
1. **Verify Finance Period prerequisites** — Navigate to Salesforce Billing setup and confirm that Finance Periods (`blng__FinancePeriod__c`) exist and are Active for all calendar periods that overlap the Order's service date range. Create missing Finance Periods before proceeding. Without this step, revenue schedule generation silently fails.
2. **Configure blng__RevenueRecognitionRule__c on Product2** — Create or confirm the Revenue Recognition Rule with the correct `blng__RecognitionTreatment__c` (Rateable, Immediate, Event-Based) and `blng__DistributionMethod__c` (Daily Proration, Equal Distribution, Single Period). Assign the rule to the `blng__RevenueRecognitionRule__c` lookup on each in-scope Product2 record.
3. **For bundles, configure SSP allocation** — For each bundle component Product2 that is a distinct ASC 606 performance obligation, set `blng__StandaloneSellingPrice__c`. Confirm the allocation ratios sum correctly across all components.
4. **Activate the Order** — Change Order Status to Activated. Confirm that `blng__RevenueSchedule__c` records are created — one per OrderProduct with a Revenue Recognition Rule. If records are missing, verify Finance Period coverage and the Product2 rule lookup.
5. **Validate revenue schedule line distribution** — Open each `blng__RevenueSchedule__c` record and review the child line records. Confirm amounts are distributed correctly across Finance Periods with expected proration logic.
6. **Confirm blng__RevenueTransaction__c GL event generation** — After Finance Periods close (or event-based triggers fire), confirm that `blng__RevenueTransaction__c` records are created with the correct GL account codes, amounts, and period references. These feed downstream ERP integrations.
7. **For amendments: reconcile manually** — If an Order amendment changes contract value, confirm the amendment order generates a new `blng__RevenueSchedule__c` for the delta. Coordinate with Finance on whether the original schedule requires manual closure and replacement. Document the reconciliation in the Finance Period notes.
---
## Review Checklist
Run through these before marking work in this area complete:
- [ ] Finance Periods exist and are Active for all service date periods covered by the Order
- [ ] Every in-scope Product2 has `blng__RevenueRecognitionRule__c` lookup populated with the correct rule
- [ ] Recognition treatment (Rateable/Immediate/Event-Based) matches the ASC 606 performance obligation type for each product
- [ ] Distribution method matches contract and Finance reporting requirements (Daily Proration for partial-month accuracy)
- [ ] For bundles: `blng__StandaloneSellingPrice__c` is set on each distinct performance obligation component
- [ ] `blng__RevenueSchedule__c` records were auto-generated at Order activation (not manually created)
- [ ] Revenue schedule line amounts sum to the correct total contract value
- [ ] `blng__RevenueTransaction__c` GL events carry correct GL account codes for the downstream ERP integration
- [ ] For amendments: original revenue schedule has been reviewed; manual reconciliation was performed if contract value changed
---
## Salesforce-Specific Gotchas
Non-obvious platform behaviors that cause real production problems:
1. **Finance Periods are a silent hard prerequisite** — If Finance Periods do not exist for the Order's service date range, `blng__RevenueSchedule__c` records are not generated when the Order activates. No error is thrown, no warning appears — the system simply skips schedule creation. Always verify Finance Periods before activating Orders or debugging "missing revenue schedule" issues.
2. **Revenue schedules do not auto-update on contract amendment** — Unlike CRM contract fields that update when an amendment record is saved, `blng__RevenueSchedule__c` records are immutable after generation. An amendment order generates a new delta schedule; it does not revise the original. Finance teams that expect the original schedule to reflect the amended contract value will find a persistent discrepancy until the original is manually reconciled.
3. **blng__RevenueSchedule__c and OpportunityLineItem Revenue Schedules are completely different objects** — Standard Salesforce allows "Revenue Schedules" to be enabled in Setup > Products > Schedule Settings, which populates the `Revenue Schedules` related list on OpportunityLineItems. This is a standard CRM feature for splitting opportunity revenue across periods for forecasting. It has no relationship to `blng__RevenueSchedule__c`, does not interact with the Salesforce Billing engine, and does not generate GL transactions. Enabling or populating standard Revenue Schedules has zero effect on Salesforce Billing recognition behavior.
4. **SSP defaults to list price ratio if unset** — For bundle products, if `blng__StandaloneSellingPrice__c` is not populated on bundle components, the engine allocates revenue using list price ratios. List price ratios may not equal the SSP ratios required by ASC 606, creating an audit finding. This mismatch is not flagged by the platform.
5. **blng__RevenueTransaction__c records are system-created; manual edits corrupt GL integrity** — Revenue Transaction records are created by the Billing engine as Finance Periods close. Direct edits via data loader or Apex bypass the engine's internal consistency checks and can produce GL balances that do not reconcile to the revenue schedule totals. Treat these records as read-only.
---
## Output Artifacts
| Artifact | Description |
|---|---|
| `blng__RevenueRecognitionRule__c` record | Configuration record defining treatment and distribution method; set on Product2 |
| `blng__RevenueSchedule__c` records | Auto-generated at Order activation; one per OrderProduct; holds recognition timeline |
| `blng__RevenueTransaction__c` records | GL event records generated as Finance Periods close; feed ERP integrations |
| Finance Period records (`blng__FinancePeriod__c`) | Accounting calendar prerequisite; must exist before schedules can generate |
---
## Related Skills
- `admin/billing-schedule-setup` — Configure billing schedules and invoice runs (separate from revenue recognition; both may apply to the same product)
- `admin/cpq-order-management` — Understand how CPQ Quote-to-Order flow creates OrderProducts that drive both billing and revenue schedule generationRelated Skills
revenue-lifecycle-management
Use this skill when implementing or troubleshooting Salesforce Revenue Lifecycle Management (RLM) — the native Revenue Cloud product covering order-to-cash lifecycle, Dynamic Revenue Orchestrator (DRO) fulfillment plan design, asset amendments, billing schedule creation via Connect API, and invoice management. Triggers on: Dynamic Revenue Orchestrator, RLM order decomposition, DRO fulfillment swimlanes, native Revenue Cloud billing schedule, asset lifecycle management Salesforce. NOT for CPQ quoting or pricing rules (use cpq-* skills), not for the legacy Salesforce Billing managed package with blng__* objects (different product entirely), not for standard Order objects without Revenue Cloud features.
volunteer-management-requirements
Use when designing or implementing volunteer management in Salesforce for nonprofits using NPSP or Nonprofit Cloud — covers V4S managed package objects vs. NPC-native volunteer objects, hours tracking, scheduling, and recognition workflows. NOT for HR systems, commercial employee volunteering programs, or Field Service Lightning crew management.
revenue-cloud-data-model
Use this skill when querying, integrating with, or troubleshooting the native Salesforce Revenue Cloud (RLM) data model — including BillingSchedule, BillingScheduleGroup, Invoice, InvoiceLine, Payment, PaymentLineInvoice, and FinanceTransaction standard objects and their relationships. Triggers on: Revenue Cloud object relationships, BillingSchedule data model, native Revenue Cloud SOQL, FinanceTransaction object, Invoice object Revenue Cloud, PaymentLineInvoice relationship. NOT for the legacy Salesforce Billing managed package data model (blng__BillingSchedule__c, blng__Invoice__c — use billing-data-reconciliation skill for that), not for CPQ data model (SBQQ__* objects).
revenue-cloud-architecture
Architecting on Salesforce Revenue Cloud (Revenue Lifecycle Management — RLM, the successor to CPQ-Plus + Billing). Covers the five RLM domains (Product Catalog & Pricing, Transaction Management, Contract Lifecycle Management, Order-to-Cash, Billing), the canonical data model (Product2 / PricebookEntry / Quote / Order / OrderItem / Contract / Asset / BillingSchedule / Invoice / LegalEntity), multi-entity scoping via LegalEntity, the RLM ↔ ERP integration patterns (CDC + MuleSoft preferred over point-to-point trigger callouts), and the disambiguation between native RLM and the legacy `blng__` Salesforce Billing managed package and `SBQQ__` CPQ classic. NOT for declarative CPQ classic config (see omnistudio/cpq-classic-config), NOT for Subscription Management billing patterns predating RLM (see architect/cpq-architecture-patterns).
agent-console-requirements
Use when gathering and documenting requirements for a Lightning Service Console deployment: agent workspace layout, page template selection, utility bar composition, macro requirements, case handling workflows, split-view navigation design, and licensing requirements. Triggers: service console requirements, agent workspace design, console page layout, utility bar planning, console licensing. NOT for console configuration steps or click-by-click setup (use admin/case-management), NOT for Omni-Channel routing model design (use architect/service-cloud-architecture), NOT for CTI telephony integration details.
wealth-management-requirements
Use this skill when gathering, structuring, and documenting requirements for a Financial Services Cloud (FSC) wealth management implementation — including financial planning workflow discovery, portfolio review process mapping, client lifecycle requirements, advisor tooling needs, and FSC architecture determination (managed package vs. FSC Core). Trigger keywords: wealth management requirements, FSC requirements gathering, financial planning workflow, portfolio review process, advisor tools setup, FSC data model scoping, wealth management process mapping. NOT for implementation, configuration, or code — use financial-account-setup, fsc-action-plans, or apex/fsc-financial-calculations for those. NOT for FSC architecture decisions — use architect/wealth-management-architecture. NOT for Health Cloud or NPSP requirements.
territory-design-requirements
Use this skill when gathering or evaluating requirements for a Salesforce Enterprise Territory Management (ETM) territory design: alignment criteria, coverage model selection, assignment rule logic, geographic considerations, hierarchy depth and breadth, and user-to-territory ratios. Trigger keywords: territory design, territory alignment, territory model requirements, sales coverage model, territory criteria, geographic territory, named account territory, overlay territory. NOT for ETM configuration or setup steps — use enterprise-territory-management for that. NOT for role hierarchy design — use sharing-and-visibility.
subscription-lifecycle-requirements
Use when documenting, reviewing, or gathering requirements for Salesforce CPQ subscription lifecycle behavior: how amendments, renewals, upgrades, downgrades, and cancellations must work for a specific business. Trigger keywords: subscription requirements, amendment requirements, renewal requirements, proration requirements, co-termination, subscription ledger, upgrade downgrade policy. NOT for CPQ setup or configuration, not for Apex amendment API implementation, and not for Revenue Cloud advanced order management.
revenue-intelligence-setup
Revenue Intelligence setup: pipeline inspection, deal insights, forecast accuracy analytics, Einstein analytics for sales leaders. NOT for CRM Analytics platform admin (use analytics-studio-admin). NOT for forecasting category setup only (use forecasting-and-quotas).
requirements-traceability-matrix
Use this skill when building or maintaining a Requirements Traceability Matrix (RTM) on a Salesforce project: one row per requirement, columns for source, user-story id(s), test-case id(s), defect id(s), sprint, release, and status. Covers forward traceability (req → story → code → test) and backward traceability (test → req). Trigger keywords: RTM, requirements traceability matrix, audit trail for salesforce delivery, traceability for steerco, deferred requirement tracking, regulatory traceability. NOT for requirements elicitation (use requirements-gathering-for-sf). NOT for user-story authoring (use user-story-writing-for-salesforce). NOT for UAT test design (use uat-test-case-design). NOT for Apex test design (use agents/test-generator/AGENT.md). NOT for backlog prioritization (use moscow-prioritization-for-sf-backlog).
requirements-gathering-for-sf
Use this skill when eliciting, documenting, and structuring requirements for a Salesforce implementation or enhancement: writing Salesforce-specific user stories with acceptance criteria, mapping As-Is and To-Be business processes, conducting stakeholder discovery interviews, and performing gap analysis against standard Salesforce capabilities. Trigger keywords: requirements gathering, user story, As-Is To-Be, gap analysis, stakeholder interview, process mapping, business requirements, fit gap. NOT for technical design decisions (use solution-design-patterns). NOT for automation implementation (use flow/* or apex/* skills). NOT for data model design (use data-model-design-patterns or object-creation-and-design).
quote-to-cash-requirements
Use when gathering, designing, or validating the end-to-end quote-to-cash process on standard Salesforce: Opportunity to Quote (with line items) to Synced Quote to Approval Process to Quote PDF to Order creation. Trigger keywords: quote approval, discount policy, quote PDF limits, order from quote, quote sync, quote template. NOT for CPQ/Revenue Cloud pricing rules, discount schedules, or guided selling — use CPQ skills for those.