# Reporting

> Financial report generation including balance sheet, income statement, and cash flow. Use this skill when working with financial reports, multi-currency consolidation, or report calculations. Use when this capability is needed.

- Skill: `tomevault-io/reporting-2` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/reporting-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/reporting-2/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/reporting-2

---


# Financial Reporting

> **Core Definition**: Financial report generation logic, report types, and calculation rules.

## Report Types

### Balance Sheet
Shows assets, liabilities, and equity at a point in time.
- **Validation**: `Total Assets = Total Liabilities + Total Equity`

### Income Statement (P&L)
Shows income and expenses over a period.
- **Calculation**: `Net Income = Total Income - Total Expenses`

### Cash Flow Statement
Shows cash movements by category:
- Operating Activities
- Investing Activities
- Financing Activities

## Multi-Currency Consolidation

- **Base Currency**: User configurable (default: SGD)
- **Balance Sheet**: Use period-end FX rate
- **Income Statement**: Use average FX rate
- Record unrealized FX gains/losses separately

```python
def consolidate_amount(amount: Decimal, currency: str, target: str, date: date) -> Decimal:
    if currency == target:
        return amount
    rate = get_fx_rate(currency, target, date)
    return (amount * rate).quantize(Decimal("0.01"))
```

## Design Constraints

### Recommended Patterns
- Report generation is read-only, never modifies ledger
- Always validate accounting equation before rendering
- Cache report results with date-based invalidation
- Pre-fetch all FX rates in bulk to avoid N+1 queries
- Cap trend data points at 366 to prevent memory issues

### Prohibited Patterns
- **NEVER** hardcode account codes in report logic
- **NEVER** generate reports without FX rate data

## Source Files

- **Logic**: `apps/backend/src/services/reporting.py`
- **Templates**: `apps/frontend/src/app/reports/`
- **Charts**: `apps/frontend/src/components/charts/`

---
> Source: [wangzitian0/finance_report](https://github.com/wangzitian0/finance_report) — distributed by [TomeVault](https://tomevault.io).
<!-- tomevault:4.0:skill_md:2026-06-08 -->

