# StatementOfChangesInEquity

> The fourth statement. Equity components across, movements down.

Source: https://lopifi.com/components/statement-of-changes-in-equity
Part of: Lopifi — US GAAP books on autopilot, checked by a CPA (https://lopifi.com)

---

- **Family:** Statements — **The largest gap in the market.** Nothing else has these.
- **Status:** Implemented
- **Spec:** https://lopifi.com/docs/catalog/06-statements

## Install

```bash
npx shadcn@latest add @lopifi/theme
npx shadcn@latest add @lopifi/statement-of-changes-in-equity
```

## Specification

The fourth statement. Equity components across (common stock, additional paid-in capital, retained earnings, accumulated other comprehensive income, treasury stock, non-controlling interests, total), movements down (opening balance, net income, other comprehensive income, dividends, share issuances, buybacks, share-based compensation, closing balance).

```
                                Common   APIC    Retained   AOCI   Treasury   Total
                                stock            earnings          stock      equity
  Balance as of 31 Aug 2026      1,200  138,800   81,000    1,600      —     222,600
  Net income                       —       —      82,880      —        —      82,880
  Foreign currency translation     —       —        —        460       —         460
  Dividends declared               —       —     (66,580)     —        —     (66,580)
  …                             ─────── ─────── ───────── ─────── ───────── ────────
  Balance as of 30 Sep 2026      1,215  152,065   97,300    2,060   (4,200)  248,440
                                ═══════ ═══════ ═════════ ═══════ ═════════ ════════
```

- **It foots both ways, and shows it.** Each column walks opening plus movements and is proved against the closing balance the ledger reports (`closing` is an input, never derived, so the check can fail). Each row sums across into the total column. The cross-foot proves the total column's walk equals the closing balances summed across. All of it renders as checks under the grid.
- **A column that misses gets an "Unexplained difference" row in the grid**, in the column that misses, the way a roll-forward's difference owns the screen.
- **Ties to the other statements when given:** `tieOut.netIncome` asserts the net income row against the P&L, and `tieOut.balanceSheetEquity` asserts closing total equity against the balance sheet.
- **Non-controlling interests** (`nonControlling: true`) total after an "Attributable to parent" subtotal, and the net income row still ties to consolidated net income in total.
- **Sparse by nature, never zero by accident.** An absent component in a movement is no movement and renders `—`; `null` is unknown, renders `n/a`, and blocks every sum it touches.
- Amounts are signed as they move equity: a buyback is negative in treasury stock, a dividend negative in retained earnings. Treasury stock sits in its natural position, parenthesized.
- The opening date is the day before the period starts, stated in the row. Movements and components take an optional `note`, rendered as a `NoteRef`. Composes `ReportHeader`; server-safe.

## Rules this component obeys

Money is minor units, never floats. `null` is not `0` and neither is redacted. Negatives render in accounting parentheses with the parenthesis column reserved on both sides. Debit and credit are two columns. Per-currency decimal places. Polarity is explicit — up is not always good. Every figure states its period, entity, currency, basis and as-of.
