Skip to content
Back to skills

Per Entity Dashboard

ASecurity

Render a close-package JSON (controller_cycle.py --out-json) into a self-contained, CSP-safe, theme-aware per-entity dashboard — headline KPIs (revenue, net income, gross margin, current ratio, DSO), IS/BS summaries, reconciliation exceptions, top flux, and close-state + traceability/self-certified badges. Runs scripts/entity_dashboard.py. Used by `controller`.

  • 7 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 23, 2026
ai-agentspythongoshellapisecurity

Works with

  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 23, 2026

npx -y skills add mcorbett51090/RavenClaude --skill per-entity-dashboard --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Per Entity Dashboard?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Per Entity Dashboard
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mcorbett51090-per-entity-dashboard/badge)](https://www.skillsdirectory.com/skills/mcorbett51090-per-entity-dashboard)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: per-entity-dashboard
description: "Render a close-package JSON (controller_cycle.py --out-json) into a self-contained, CSP-safe, theme-aware per-entity dashboard — headline KPIs (revenue, net income, gross margin, current ratio, DSO), IS/BS summaries, reconciliation exceptions, top flux, and close-state + traceability/self-certified badges. Runs scripts/entity_dashboard.py. Used by `controller`."
---

# Skill: per-entity-dashboard

**Purpose:** Turn the close package `controller_cycle.py` already produced into a single, self-contained per-entity dashboard a controller or a reviewer opens offline — a **presentation surface over the governed close, not a second source of truth**. It recomputes no statement math beyond a few ratio derivations; every number, badge, and materiality suppression flows through from the package unchanged.

Engine: [`../../scripts/entity_dashboard.py`](../../scripts/entity_dashboard.py) (stdlib only, Python 3.8+).

## When to use

- You have a close-package JSON from `controller_cycle.py --out-json` (shape: `entity` / `period` / `currency` / `statements{income_statement, balance_sheet, cash_flow}` / `reconciliation` / `flux` / `workflow_state`).
- You want the reviewer's or the controller's one-screen read of the period: KPIs at the top, statements + exceptions + flux below, governance state on the header.
- This is the productized **presentation** step that sits *after* the cycle, distinct from the reviewer-facing HTML `controller_cycle.py` emits inline.

## Run it

```shell
# 1. produce a close package
python3 scripts/controller_cycle.py --entity entity.json --coa coa-mapping.csv \
    --tb tb-2026-06.csv --prior-tb tb-2026-05.csv --subledger subledger.csv \
    --gl-detail gl-detail.csv --run-dir ./run --out-json close-package.json

# 2. render the per-entity dashboard from it
python3 scripts/entity_dashboard.py --package close-package.json \
    --out dashboard.html
```

A worked sample rendered from the committed `produce-gaap-statements/examples/` inputs lives at [`examples/sample-entity-dashboard.html`](examples/sample-entity-dashboard.html).

## What it shows

| Block | Source in the package | Notes |
|---|---|---|
| Headline KPIs | IS subtotals + BS subtotals + reasoning trail | revenue, net income, gross margin %, net margin %, current ratio, DSO |
| Income statement | `statements.income_statement.subtotals` | revenue → gross profit → operating income → net income |
| Balance sheet | `statements.balance_sheet.subtotals` | current assets, total assets/liabilities/equity, balance check |
| Cash flow | `statements.cash_flow` | carried through with its `unaudited_draft` label + caveat |
| Reconciliation exceptions | `reconciliation.accounts` | FLAG rows surfaced; pass / self-supported counted |
| Top flux movements | `flux.material_movements` | top 8 by absolute movement (already materiality-suppressed upstream) |
| Governance | `workflow_state` + `statements.traceability_badge` | close state, traceability badge, self-certified banner |

## The disciplines that make it honest

1. **KPIs are derived, not asserted — and absent inputs show `n/a`, never a plug.** Revenue / net income / gross margin come straight from the IS subtotals. The **current ratio** needs current liabilities, which the BS subtotals do not carry, so it is recovered from the statement reasoning trail's `CurrentLiabilities` section — using the same **presentation-signed** convention `statement_engine.py` uses (section-natural side, so contra-accounts stay correct), *not* the account normal_balance. If the trail is absent, the KPI is shown `n/a`. **DSO** is an explicit single-period proxy: AR (the BS line whose name carries "receivable") over the period's own revenue times the period's own day count, labeled as such — never silently annualized.
2. **It inherits upstream honesty; it does not manufacture it.** The traceability badge (`TB-only` vs `GL-detail-traced`), the cash-flow `unaudited_draft` label, and the `self-certified / single-actor` governance banner are carried through verbatim. A green KPI on a self-certified, un-locked package is still self-certified, and the banner says so.
3. **Self-contained + CSP-safe.** Inline CSS/JS only, zero external requests (no CDN font, no remote image, no fetch), so it opens from disk and is safe to email to a reviewer. Light + dark via `prefers-color-scheme` with a `data-theme` override; `tabular-nums` so figures align.

## Scope caveat — single-entity tier (read this)

This is the **single-entity, file-in / file-out** tier. The recurring, warehouse-backed, **multi-tenant** version (many entities, row-level isolation, a live embedded dashboard) is **not** this skill and is deliberately not reimplemented here. It reuses `data-platform`'s row-level security and signed-JWT embed work — skills [`rls-policy-authoring`](../../../data-platform/skills/rls-policy-authoring/SKILL.md) and [`jwt-embed-issuance`](../../../data-platform/skills/jwt-embed-issuance/SKILL.md). **Auth, tenant isolation, and token issuance are that plugin's owned surface — do not hand-roll them here.** (Cross-plugin reference is soft/optional per the marketplace's graceful-degradation convention; if `data-platform` is not installed, treat those two skills as the design pointer for the warehouse tier.)

## Honest limitations

- The dashboard is **decision-support**, not an accounting / audit / tax opinion. It presents what the governed cycle produced; it does not attest to it.
- KPIs are only as good as the package. DSO on a single period is a proxy, not a working-capital trend; a `TB-only` package's numbers are not audit-traceable no matter how clean the KPIs look.
- It renders one entity, one period. Consolidation, intercompany elimination, and multi-period trends are out of scope (roadmap: the warehouse tier above).

Files in this skill

  • SKILL.md5.7 KB
  • examples/sample-entity-dashboard.html10.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…