Sync Upstream
nyaruka/phonenumbers
Sync this Go port with a new upstream google/libphonenumber release — regenerate the embedded metadata and reconcile the ported Java logic.
ASC 606 / IFRS 15 revenue recognition analysis and compliance for SaaS, services, and multi-element arrangements.
$ npx skills add LeoYeAI/openclaw-master-skills --skill revenue-recognition-agent -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills revenue-recognition-agent --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/revenue-recognition-agent .claude/skills/revenue-recognition-agent && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "revenue-recognition-agent" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/revenue-recognition-agent into .claude/skills/revenue-recognition-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revenue-recognition-agent", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/revenue-recognition-agentType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add LeoYeAI/openclaw-master-skills --skill revenue-recognition-agent -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills revenue-recognition-agent --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/revenue-recognition-agent .agents/skills/revenue-recognition-agent && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "revenue-recognition-agent" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/revenue-recognition-agent into .agents/skills/revenue-recognition-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revenue-recognition-agent", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill revenue-recognition-agent -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills revenue-recognition-agent --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/revenue-recognition-agent .cursor/skills/revenue-recognition-agent && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "revenue-recognition-agent" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/revenue-recognition-agent into .cursor/skills/revenue-recognition-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revenue-recognition-agent", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/LeoYeAI/openclaw-master-skills.git --path skills/revenue-recognition-agent--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add LeoYeAI/openclaw-master-skills --skill revenue-recognition-agent -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills revenue-recognition-agent --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/revenue-recognition-agent .gemini/skills/revenue-recognition-agent && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "revenue-recognition-agent" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/revenue-recognition-agent into .gemini/skills/revenue-recognition-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revenue-recognition-agent", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install LeoYeAI/openclaw-master-skills revenue-recognition-agentInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add LeoYeAI/openclaw-master-skills --skill revenue-recognition-agent -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/revenue-recognition-agent .github/skills/revenue-recognition-agent && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "revenue-recognition-agent" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/revenue-recognition-agent into .github/skills/revenue-recognition-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revenue-recognition-agent", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill revenue-recognition-agent -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills revenue-recognition-agent --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/revenue-recognition-agent .opencode/skills/revenue-recognition-agent && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "revenue-recognition-agent" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/revenue-recognition-agent into .opencode/skills/revenue-recognition-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revenue-recognition-agent", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
revenue-recognition-agentASC 606 / IFRS 15 revenue recognition analysis and compliance for SaaS, services, and multi-element arrangements.
Revenue Recognition Agent is an agent skill from LeoYeAI/openclaw-master-skills. ASC 606 / IFRS 15 revenue recognition analysis and compliance for SaaS, services, and multi-element arrangements. Guides the 5-step recognition model, identifies performance obligations, determines transaction prices, allocates revenue across obligations, and tracks deferred/contract revenue. Produces journal entries, deferred revenue schedules, and disclosure checklists for audit-ready financials. Use when: recognizing revenue for contracts with customers, reviewing SaaS subscription treatment, analyzing…
Its SKILL.md is about 5.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `_meta.json`).
It sits in Business, Finance & HR, covering Accounting and bookkeeping. The repository describes itself as: 🧠 Curated collection of 1209+ best OpenClaw skills — weekly updated by MyClaw.ai. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e5199b5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are python).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Revenue Recognition Agent loads about 5.5k tokens when it runs. Until then it costs about 190 tokens; SKILL.md has 957 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from LeoYeAI/openclaw-master-skills at commit e5199b5, republished under its MIT licence (© LeoYeAI). 957 words, ~5,537 tokens.
.claude/skills/revenue-recognition-agent/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.ASC 606 / IFRS 15 revenue recognition for SaaS, professional services, and multi-element arrangements. Covers the full 5-step model, deferred revenue scheduling, journal entries, and audit disclosure checklists.
Trigger phrases:
NOT for:
All revenue recognition flows through these five steps:
STEP 1: Identify the contract(s) with a customer
STEP 2: Identify the performance obligations in the contract
STEP 3: Determine the transaction price
STEP 4: Allocate the transaction price to the performance obligations
STEP 5: Recognize revenue when (or as) each obligation is satisfiedA contract exists when ALL of these are met:
CONTRACT CRITERIA CHECKLIST (ASC 606-10-25-1)
─────────────────────────────────────────────
□ Parties have approved the contract (written, oral, or implied)
□ Each party's rights regarding goods/services are identifiable
□ Payment terms for the goods/services are identifiable
□ Contract has commercial substance
□ It is probable the entity will collect the considerationCollection probability assessment:
Contract modifications:
A performance obligation is a promise to transfer a distinct good or service.
Distinct test (both criteria must be met):
1. CAPABLE OF BEING DISTINCT: Customer can benefit from
the good/service on its own or with readily available resources.
2. DISTINCT WITHIN THE CONTRACT: Promise is separately
identifiable from other promises in the contract.Common SaaS / services obligations:
| Arrangement Element | Typically Distinct? | Notes |
|---|---|---|
| SaaS subscription | Yes (standalone) | Recognize ratably over term |
| Implementation/setup | Maybe | If customer can't benefit without SaaS → not distinct → combine |
| Training | Usually yes | Can purchase separately |
| Premium support | Yes | Separately priced, standalone value |
| Professional services (scoped) | Usually yes | Separate SOW |
| Professional services (highly integrated) | No | Combine with software |
| Content/data licenses | Yes | Distinct IP license |
| Hardware bundled with SaaS | Usually yes | Can use hardware independently |
Series of distinct services:
Transaction price = consideration the entity expects to be entitled to.
Components to analyze:
Transaction Price Components
─────────────────────────────────────────────
1. FIXED CONSIDERATION
→ Contract price net of discounts
2. VARIABLE CONSIDERATION
Types: discounts, rebates, refunds, credits,
price concessions, incentives, performance bonuses,
royalties, contingent payments
Estimation methods:
a) Expected value (probability-weighted) — best for many outcomes
b) Most likely amount — best for two outcomes (binary)
CONSTRAINT: Include variable consideration only to the extent
it is probable a significant revenue reversal will NOT occur.
3. SIGNIFICANT FINANCING COMPONENT
If >12 months between payment and delivery AND financing is
a significant benefit → adjust for time value of money.
Practical expedient: If contract < 1 year, ignore financing.
4. NON-CASH CONSIDERATION
Measure at fair value of non-cash consideration received.
5. CONSIDERATION PAYABLE TO CUSTOMER
(Discounts, coupons, rebates)
→ Reduce transaction price unless payment is for distinct good/serviceAllocate based on Standalone Selling Price (SSP) of each performance obligation.
SSP determination methods (in order of preference):
1. OBSERVABLE PRICE
→ Actual price when entity sells the good/service separately.
→ Best evidence. Use when available.
2. ADJUSTED MARKET ASSESSMENT APPROACH
→ Price the market would pay for the good/service.
→ Research competitor pricing, customer willingness to pay.
3. EXPECTED COST PLUS MARGIN APPROACH
→ Forecast costs to satisfy the obligation + appropriate margin.
4. RESIDUAL APPROACH (limited use)
→ SSP = Transaction price - sum of SSPs of other obligations.
→ Only permitted if SSP is highly variable or uncertain.Allocation example:
Contract: $12,000 annual SaaS deal
Includes: SaaS license + Implementation + Training
Element SSP Allocation % Allocated Price
─────────────────────────────────────────────────────────
SaaS License $10,000 71.4% $8,571
Implementation $2,500 17.9% $2,143
Training $1,500 10.7% $1,286
─────────────────────────────────────────────
Total SSP $14,000 100% $12,000
Note: Contract price ($12k) is less than total SSP ($14k) —
the $2,000 discount is allocated proportionally across all obligations.Over time (straight-line or input/output method) when ANY criterion is met:
□ Customer simultaneously receives and consumes the benefits
(→ SaaS subscriptions, most services)
□ Entity's performance creates or enhances an asset the
customer controls (→ customized software for customer)
□ Entity's performance creates no alternative use AND entity
has right to payment for work completed to date (→ custom dev)At a point in time (when control transfers) for all other obligations:
Indicators of control transfer:
□ Entity has right to payment
□ Customer has legal title
□ Entity has transferred physical possession
□ Customer has significant risks and rewards
□ Customer has accepted the assetCommon patterns:
| Obligation Type | Recognition Pattern | Measure |
|---|---|---|
| SaaS subscription | Over time | Straight-line over term |
| Professional services (T&M) | Over time | Hours incurred / total estimated |
| Fixed-fee project | Over time | % complete (input method) |
| Software license (functional IP) | Point in time | License delivery date |
| Software license (symbolic IP) | Over time | Ratably |
| Training (one-time) | Point in time | Date training is delivered |
| Hardware sale | Point in time | Delivery / acceptance |
For a $12,000 annual contract starting March 1, 2026 (fiscal year = calendar):
CONTRACT REVENUE SCHEDULE
─────────────────────────────────────────────────────────────
Contract: Acme Corp — Annual SaaS License
Period: March 1, 2026 – February 28, 2027
ARR: $12,000 | MRR: $1,000
─────────────────────────────────────────────────────────────
Month Days Recognized Cumulative Deferred
─────────────────────────────────────────────────────────────
Mar 2026 31 $1,000 $1,000 $11,000
Apr 2026 30 $1,000 $2,000 $10,000
May 2026 31 $1,000 $3,000 $9,000
Jun 2026 30 $1,000 $4,000 $8,000
Jul 2026 31 $1,000 $5,000 $7,000
Aug 2026 31 $1,000 $6,000 $6,000
Sep 2026 30 $1,000 $7,000 $5,000
Oct 2026 31 $1,000 $8,000 $4,000
Nov 2026 30 $1,000 $9,000 $3,000
Dec 2026 31 $1,000 $10,000 $2,000
Jan 2027 31 $1,000 $11,000 $1,000
Feb 2027 28 $1,000 $12,000 $0
─────────────────────────────────────────────────────────────
TOTAL $12,000Balance sheet classification:
from dataclasses import dataclass
from datetime import date, timedelta
from typing import List, Optional
import math
@dataclass
class PerformanceObligation:
name: str
allocated_price: float
recognition_pattern: str # "point_in_time" | "over_time_straight_line" | "over_time_pct_complete"
start_date: Optional[date] = None
end_date: Optional[date] = None
completion_date: Optional[date] = None # for point in time
pct_complete: float = 0.0 # for % complete method (0.0-1.0)
def calculate_recognized_revenue(
obligation: PerformanceObligation,
as_of_date: date
) -> float:
"""
Calculate cumulative revenue recognized for an obligation as of a date.
Examples:
# SaaS subscription (over time, straight-line)
sub = PerformanceObligation(
name="SaaS License",
allocated_price=8571,
recognition_pattern="over_time_straight_line",
start_date=date(2026, 3, 1),
end_date=date(2027, 2, 28)
)
recognized = calculate_recognized_revenue(sub, date(2026, 6, 30))
# → $2,857 (4 months of 12)
# Training (point in time)
training = PerformanceObligation(
name="Training",
allocated_price=1286,
recognition_pattern="point_in_time",
completion_date=date(2026, 3, 15)
)
recognized = calculate_recognized_revenue(training, date(2026, 4, 1))
# → $1,286 (training already delivered)
"""
if obligation.recognition_pattern == "point_in_time":
if obligation.completion_date and as_of_date >= obligation.completion_date:
return obligation.allocated_price
return 0.0
elif obligation.recognition_pattern == "over_time_straight_line":
if not obligation.start_date or not obligation.end_date:
raise ValueError("start_date and end_date required for straight-line")
total_days = (obligation.end_date - obligation.start_date).days
elapsed_days = min(
(as_of_date - obligation.start_date).days,
total_days
)
elapsed_days = max(0, elapsed_days)
return obligation.allocated_price * (elapsed_days / total_days)
elif obligation.recognition_pattern == "over_time_pct_complete":
return obligation.allocated_price * min(obligation.pct_complete, 1.0)
return 0.0
def deferred_revenue_balance(
obligations: List[PerformanceObligation],
invoiced_amount: float,
as_of_date: date
) -> dict:
"""
Calculate deferred revenue and recognized revenue balances.
Returns:
total_recognized, total_deferred, per_obligation breakdown
"""
results = []
total_recognized = 0.0
for ob in obligations:
recognized = calculate_recognized_revenue(ob, as_of_date)
deferred = ob.allocated_price - recognized
total_recognized += recognized
results.append({
"obligation": ob.name,
"allocated_price": ob.allocated_price,
"recognized": round(recognized, 2),
"deferred": round(deferred, 2),
})
return {
"as_of_date": as_of_date.isoformat(),
"invoiced": invoiced_amount,
"total_recognized": round(total_recognized, 2),
"total_deferred": round(invoiced_amount - total_recognized, 2),
"obligations": results,
}On invoice / cash receipt (upfront annual):
DR Cash / Accounts Receivable $12,000
CR Deferred Revenue $12,000
(Record contract liability at contract start)Monthly revenue recognition:
DR Deferred Revenue $1,000
CR Revenue — SaaS Subscriptions $1,000
(Recognize ratably each month over 12-month term)Contract signed, invoice sent — $12,000:
DR Accounts Receivable $12,000
CR Deferred Revenue — SaaS $8,571
CR Deferred Revenue — Implementation $2,143
CR Deferred Revenue — Training $1,286
(Allocate to performance obligation buckets at contract inception)Training delivered (March 15):
DR Deferred Revenue — Training $1,286
CR Revenue — Professional Services $1,286
(Recognize at point in time — training delivered)Implementation complete (March 31):
DR Deferred Revenue — Implementation $2,143
CR Revenue — Professional Services $2,143
(Recognize at point in time — implementation accepted)Monthly SaaS recognition:
DR Deferred Revenue — SaaS $714.25
CR Revenue — SaaS Subscriptions $714.25
($8,571 ÷ 12 months = $714.25/month)When variable consideration is constrained:
DR Revenue $500
CR Refund Liability $500
(Constrain estimated refunds — reverse when constraint resolved)Facts: $24,000/year, January 1 start, pure SaaS, no other elements.
Treatment:
Facts: 3-year deal, Year 1: $10k, Year 2: $12k, Year 3: $14k. Total: $36k.
Treatment options:
Apply judgment test:
Facts: 30-day free trial, then $500/month subscription.
Treatment:
Facts: $100k implementation contract + $20k bonus if customer hits adoption KPI.
Treatment:
Facts: Original: $1,000/month. Month 6, customer upgrades to $1,500/month for remainder (6 months left) at standalone pricing.
Treatment (new contract method):
Treatment (prospective modification):
Required footnote disclosures for annual financial statements:
ASC 606 DISCLOSURE CHECKLIST
─────────────────────────────────────────────
DISAGGREGATION OF REVENUE (ASC 606-10-50-5)
□ Revenue by product/service line
□ Revenue by geography (if material)
□ Revenue by customer type (enterprise vs. SMB)
□ Revenue by recognition timing (point in time vs. over time)
CONTRACT BALANCES (ASC 606-10-50-8)
□ Opening and closing balances of:
- Receivables
- Contract assets (unbilled revenue)
- Contract liabilities (deferred revenue)
□ Revenue recognized from prior-period contract liabilities
□ Revenue recognized from contract assets
PERFORMANCE OBLIGATIONS (ASC 606-10-50-12)
□ Description of promises and when satisfied
□ Significant payment terms
□ Nature of goods/services transferred
□ Obligations for returns, refunds, warranties
TRANSACTION PRICE ALLOCATION (ASC 606-10-50-17)
□ Aggregate amount allocated to remaining unsatisfied obligations
□ When entity expects to recognize this amount (quantitative or qualitative)
□ Practical expedients applied (if any):
- Portfolio approach
- Practical expedient for contracts ≤1 year
- Sales-based/usage-based royalty exemption
SIGNIFICANT JUDGMENTS (ASC 606-10-50-17)
□ Methods used to recognize revenue over time
□ Methods to determine SSP
□ Variable consideration estimation approach
□ Significant constraints appliedRED FLAG: Booking gross vs. net incorrectly
─────────────────────────────────────────────
Agent vs. Principal analysis:
- Principal: Controls good/service before transfer → GROSS revenue
- Agent: Arranges for another entity → NET (commission only)
Key question: Who bears inventory/credit risk?
RED FLAG: Revenue pulled forward on renewal
─────────────────────────────────────────────
Auto-renewals are new contracts, not continuations.
Do not accelerate deferred revenue into earlier periods.
RED FLAG: Implementation fees recognized at go-live
─────────────────────────────────────────────────────
If implementation is NOT distinct (bundled with SaaS):
→ Allocate to SaaS obligation, recognize over service term.
→ NOT at the go-live date.
RED FLAG: Gross-up for non-refundable activation fees
──────────────────────────────────────────────────────
One-time upfront fees (activation, setup) with no stand-alone value:
→ Defer and recognize over expected customer relationship.
→ NOT as immediate revenue at contract start.
RED FLAG: Variable consideration not constrained
─────────────────────────────────────────────────
If usage-based or contingent fees are included:
→ Only include if highly probable no significant reversal.
→ Reassess each reporting period.WHAT IS IT? HOW TO RECOGNIZE
────────────────────────────────────────────────────────────
Monthly SaaS subscription Ratably over term (monthly)
Annual SaaS (upfront) Ratably monthly; defer upfront
Multi-year SaaS (flat pricing) Ratably over total term
Multi-year SaaS (escalating) At stated amounts if = SSP
Implementation (not distinct) Ratably over SaaS term
Implementation (distinct) % complete (input method)
Training At delivery (point in time)
Software license (functional IP) At delivery (point in time)
Software license (symbolic IP) Ratably over license term
T&M professional services As hours/costs incurred
Fixed-fee project % complete
Usage/consumption fees As used/consumed
Minimum guarantees + overages Guarantee ratably; overage as earned
Refundable deposits Liability until non-refundable
Non-refundable setup fees Defer over customer relationshipstartup-financial-model — Feed recognized revenue into P&L projections and MRR modelsqbo-automation — Sync deferred revenue schedules with QuickBooks chart of accountskpi-alert-system — Alert when deferred revenue balance drops unexpectedlycrypto-tax-agent — For token/crypto revenue requiring separate tax treatmentcap-table-manager — Coordinate when equity-linked consideration is part of a contract© LeoYeAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/revenue-recognition-agent of LeoYeAI/openclaw-master-skills.
Open the folder on GitHubat commit e5199b5
Revenue Recognition Agent next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Revenue Recognition Agent this skillLeoYeAI/openclaw-master-skills | 2.2k | — | ~5.5k | Automated safety check: Pass | MIT | |
| Sync Upstreamnyaruka/phonenumbers | 1.6k | — | ~2.8k | Automated safety check: Pass | MIT | |
| Radiology Tablehuang-sir1/radiology-skills | 1.9k | — | ~1.3k | Automated safety check: Pass | Custom licence | |
| ERPClaw ERP Controlleravansaber/erpclaw | 116 | — | ~18k | Automated safety check: Pass | GPL-3.0 | |
| Odoo Agency Fleet Reviewerpipe-org/mcp-odoo | 421 | — | ~699 | Automated safety check: Pass | MIT | |
| Beancount Closebex-co/beancount-io | 297 | — | ~1.4k | Automated safety check: Pass | MIT |
nyaruka/phonenumbers
Sync this Go port with a new upstream google/libphonenumber release — regenerate the embedded metadata and reconcile the ported Java logic.
huang-sir1/radiology-skills
Create/audit editable publication tables with source reconciliation; not figures or statistical inference.
avansaber/erpclaw
Operates the ERPClaw self-hosted ERP in plain language: accounting, invoicing, inventory, purchasing, tax, HR, payroll and reports, treating the ERP as the single source of truth.
erpipe-org/mcp-odoo
Review many client Odoo databases at once through odoo-mcp's cross-instance tools — fleet-wide accounting health, per-client aging, partial-failure triage — for agencies and partners managing 5–50…
bex-co/beancount-io
Close an accounting period in a Beancount ledger by reconciling each active account through beancount-reconcile, checking assertions and recurring gaps, reviewing flags, then proposing a commit with…
Vuk97/forward-implementation-first
Keeps an agent building and validating real output instead of servicing its own bookkeeping.
LeoYeAI/openclaw-master-skills
Manages pipelines on a DevOps quality and efficiency platform through its OpenAPI: list workspaces and templates, create, update, run and cancel pipelines, and read run records.
LeoYeAI/openclaw-master-skills
Patches OpenClaw's Feishu extension so an edited document triggers an isolated agent session that reads the doc and replies inline, turning it into a live chat space.
LeoYeAI/openclaw-master-skills
Multi-context memory management system for OpenClaw agents with group-isolated storage, global shared memory, workspace organization, and group-specific skills isolation.
LeoYeAI/openclaw-master-skills
Runs a brand's AI-search visibility work end to end: diagnosing how AI platforms represent it, repositioning it, producing AI-optimized content and monitoring ongoing mentions.
LeoYeAI/openclaw-master-skills
Installs and authenticates the gws CLI, then automates Gmail, Drive, Sheets, Calendar, Docs, Chat and Tasks with ready-made recipes, persona bundles and security audits.
LeoYeAI/openclaw-master-skills
Runs four advisor roles, a fitness coach, nutritionist, data analyst and TCM practitioner, to build a health profile and track workouts, diet and wellness over time.
Categories
ASC 606 / IFRS 15 revenue recognition analysis and compliance for SaaS, services, and multi-element arrangements. Revenue Recognition Agent is an agent skill from LeoYeAI/openclaw-master-skills. ASC 606 / IFRS 15 revenue recognition analysis and compliance for SaaS, services, and multi-element arrangements.
Revenue Recognition Agent fits situations like: : recognizing revenue for contracts with customers; reviewing SaaS subscription treatment; analyzing multi-element bundles; booking deferred revenue.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill revenue-recognition-agent -a claude-code`. Or copy the skill folder (skills/revenue-recognition-agent in LeoYeAI/openclaw-master-skills) into .claude/skills/revenue-recognition-agent in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill revenue-recognition-agent -a codex`. Or copy the skill folder (skills/revenue-recognition-agent in LeoYeAI/openclaw-master-skills) into .agents/skills/revenue-recognition-agent in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LeoYeAI/openclaw-master-skills --skill revenue-recognition-agent -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/revenue-recognition-agent, .gemini/skills/revenue-recognition-agent, .github/skills/revenue-recognition-agent and .opencode/skills/revenue-recognition-agent in your project.
SKILL.md names no scripts, command-line tools or credentials: Revenue Recognition Agent is instructions for the agent only. Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Revenue Recognition Agent is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.5k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Revenue Recognition Agent: Sync Upstream (nyaruka/phonenumbers, 1.6k stars), Radiology Table (huang-sir1/radiology-skills, 1.9k stars), ERPClaw ERP Controller (avansaber/erpclaw, 116 stars) and Odoo Agency Fleet Review (erpipe-org/mcp-odoo, 421 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LeoYeAI (a GitHub user) maintains it in LeoYeAI/openclaw-master-skills, which has 2,161 GitHub stars. The repository holds 1,235 skills in this directory. The repository was last updated on July 20, 2026.
Source: LeoYeAI/openclaw-master-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.