Skip to content

link-entity-taxonomy with basis='reporting' silently renders empty statements (no framework-match validation) #784

Description

@jfrench9

Summary

A tenant can link a custom_ontology / reporting_extension taxonomy as the reporting basis via link-entity-taxonomy (basis='reporting', is_primary=True) and the call succeeds — but it does not drive rendering. The renderer selects networks off Graph.reporting_style_id, never EntityTaxonomy, so the statements render empty with no error.

This is a latent UX trap: it bites whenever someone links a non-rs-gaap taxonomy as the reporting basis (the self-service / custom-framework path). It is independent of, and exists prior to, the post-launch custom-framework work tracked in local/RoboSystems/specs/taxonomy-block-framework-authoring.md.

Impact

Low (latent). No current rs-gaap user hits it; it surfaces as soon as a non-rs-gaap reporting taxonomy is linked. Failure mode is silent-empty — the worst kind: no error, just blank statements.

Environment

Production (code-level; present in all environments, reachable only via the non-standard link path).

Steps to Reproduce

  1. Author an in-graph taxonomy with a non-rs-gaap namespace (a custom_ontology / reporting_extension Taxonomy Block).
  2. Call link-entity-taxonomy with basis='reporting', is_primary=True for that taxonomy — it is accepted (no validation rejects it).
  3. Render the entity's financial statements (e.g. live-financial-statement / a report build).

Expected Behavior

Either the link is rejected (or render fails) with a clear, actionable error — e.g. "this taxonomy has no renderable Reporting Style / framework mismatch" — so the user understands why the statements can't render.

Actual Behavior

The link succeeds and the statements render empty, with no error or diagnostic. The renderer never consults the linked EntityTaxonomy; it walks reporting_style_networks for Graph.reporting_style_id (which still points at the rs-gaap default), and the rs-gaap namespace pins find nothing for the foreign framework.

Error Messages / Logs

(none — that is the bug: empty output, no error raised)

Additional Context

Evidence (verified against source):

  • link_entity_taxonomy checks only entity-exists / taxonomy-exists / dedup on (entity, taxonomy, basis) and clears the prior primary — there is no validation tying basis to the taxonomy's taxonomy_type: robosystems/operations/roboledger/commands/taxonomies.py (link_entity_taxonomy, ~:513-579).
  • basis CHECK ∈ ('reporting','chart_of_accounts','mapping','schedule'), with no taxonomy_type correlation: robosystems/models/extensions/entity_taxonomy.py:57-60.
  • The render path reads graphs.reporting_style_id from the platform DB and joins reporting_style_networks ⋈ structures on (reporting_style_id, statement_type) — it never consults EntityTaxonomy: robosystems/operations/roboledger/reports/network_picker.py:48-101.
  • Compounding factor: the renderer also has ~6 hardcoded rs-gaap namespace pins on its derivation paths (subtotal persistence, NetIncome/PP&E synthesis, cash-flow attribution, close-to-equity, reachability validation), so a foreign-namespace framework renders empty even if Style selection were wired — e.g. robosystems/operations/roboledger/reads/taxonomies.py:934-939 (_CANONICAL_ROOTS).

Suggested fix (small, standalone — does NOT require the custom-framework work): at link time and/or render time, validate that the render target's framework matches the active Reporting Style's framework, and surface a clear "framework not renderable / no matching reporting style for this taxonomy" error instead of returning empty output. A guard rail, not a feature. Same failure class as the reachability "looks fine but the report is empty" traps.

References: local/RoboSystems/specs/taxonomy-block-framework-authoring.md §1, §5, §8 (surfaced during the framework-authoring research).

Metadata

Metadata

Assignees

No one assigned

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions