Files
Odoo-Modules/fusion_accounting_reports/graphify-out/GRAPH_REPORT.md
gsinghpal 41d0908ade changes
2026-04-24 21:04:38 -04:00

16 KiB

Graph Report - /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_reports (2026-04-22)

Corpus Check

  • 66 files · ~18,059 words
  • Verdict: corpus is large enough that graph structure adds value.

Summary

  • 457 nodes · 729 edges · 38 communities detected
  • Extraction: 69% EXTRACTED · 31% INFERRED · 0% AMBIGUOUS · INFERRED: 229 edges (avg confidence: 0.71)
  • Token cost: 0 input · 0 output

Community Hubs (Navigation)

God Nodes (most connected - your core abstractions)

  1. Period - 78 edges
  2. TotalLine - 31 edges
  3. compute_pnl() - 17 edges
  4. TestFusionReportEngine - 14 edges
  5. compute_balance_sheet() - 13 edges
  6. TestReportsController - 12 edges
  7. TestDatePeriods - 12 edges
  8. TestSeededReports - 11 edges
  9. compute_trial_balance() - 11 edges
  10. run() - 11 edges

Surprising Connections (you probably didn't know these)

  • Local LLM compat smoke for the commentary generator. Auto-detects an LM Studio --uses--> Period [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_reports/tests/test_local_llm_compat.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_reports/services/date_periods.py
  • Return (base_url, default_model) for the first reachable server, or (None, N --uses--> Period [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_reports/tests/test_local_llm_compat.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_reports/services/date_periods.py
  • Performance benchmarks with P95 targets, tagged 'benchmark'. These tests are no --uses--> Period [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_reports/tests/test_performance_benchmarks.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_reports/services/date_periods.py
  • Verify the seeded fusion.report definitions load and compute sensibly. --uses--> Period [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_reports/tests/test_seeded_reports.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_reports/services/date_periods.py
  • Unit tests for date_periods, account_hierarchy, totaling services. --uses--> Period [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_reports/tests/test_services_unit.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_reports/services/date_periods.py

Communities

Community 0 - "Community 0"

Cohesion: 0.05 Nodes (46): Period, compute_balance_sheet(), compute_gl(), compute_pnl(), compute_trial_balance(), drill_down(), FusionReportEngine, The reports engine - orchestrator for all report computation. 5-method public A (+38 more)

Community 1 - "Community 1"

Cohesion: 0.05 Nodes (14): Coexistence tests for fusion_accounting_reports. Mirrors Phase 1's coexistence, The engine is registered regardless of Enterprise install state., TestReportsCoexistence, Tests for fusion.report.commentary cache model., TestFusionReportCommentary, Tests for fusion.report definition model., TestFusionReport, Tests for the 5 fusion AI tools registered in TOOL_DISPATCH. (+6 more)

Community 2 - "Community 2"

Cohesion: 0.08 Nodes (19): comparison_period(), fiscal_year_bounds(), month_bounds(), quarter_bounds(), Date period math for financial reports. Pure-Python helpers that compute: - Fis, Return the fiscal year period containing reference_date. Default: calenda, Return the calendar month containing reference_date., Return the calendar quarter containing reference_date. (+11 more)

Community 3 - "Community 3"

Cohesion: 0.07 Nodes (4): PeriodFilter, ReportTable, ReportViewer, ReportsService

Community 4 - "Community 4"

Cohesion: 0.1 Nodes (12): Anomaly, detect(), Anomaly detection for financial reports. Compares each row's current-period amo, Detect anomalies in a report_result dict (engine output). Returns list of a, _cron_anomaly_scan(), _cron_mv_refresh(), FusionReportsCron, Cron handlers for fusion_accounting_reports. Two scheduled jobs: - _cron_anomal (+4 more)

Community 5 - "Community 5"

Cohesion: 0.11 Nodes (14): generate_commentary(), _get_provider(), AI-generated narrative commentary for financial reports. Takes a report_result, Generate narrative commentary via LLM. Returns dict per the contract. If no, No-LLM fallback that produces a basic narrative from the report data., Look up provider for 'reports_commentary' feature; return None if not configured, _templated_fallback(), Tests for commentary_generator service. (+6 more)

Community 6 - "Community 6"

Cohesion: 0.14 Nodes (7): HttpCase, _percentile(), Performance benchmarks with P95 targets, tagged 'benchmark'. These tests are no, TestControllerBenchmarks, TestEngineBenchmarks, Python wrappers that run the OWL tours via HttpCase.start_tour. Tours require a, TestReportsTours

Community 7 - "Community 7"

Cohesion: 0.18 Nodes (10): AccountNode, build_tree(), filter_by_account_type(), Account hierarchy walker. Given a flat list of accounts with parent_id pointers, Build a forest from a flat list of account dicts. Each dict must have keys:, Depth-first walk yielding (node, depth, ancestors)., Return all nodes whose account_type starts with type_prefix (e.g. 'asset_' r, walk() (+2 more)

Community 8 - "Community 8"

Cohesion: 0.17 Nodes (10): test_aggregate_sum_equals_input_sum(), test_balanced_iff_debits_equal_credits(), TestTotaling, aggregate(), aggregate_per_account(), is_balanced(), Move-line aggregation primitives for report totaling. Pure-Python helpers - cal, Aggregate a list of move-line dicts into a TotalLine. Each dict must have: (+2 more)

Community 9 - "Community 9"

Cohesion: 0.22 Nodes (11): compute_partner_grouped(), _build_period(), compare_periods(), drill_down(), export_xlsx(), FusionReportsController, get_anomalies(), get_commentary() (+3 more)

Community 10 - "Community 10"

Cohesion: 0.17 Nodes (8): ConversionRate, convert_amount(), fetch_rates(), Multi-currency conversion for financial reports. Converts move-line amounts to, Convert amount from source to target at the given date. rates is a dict, Fetch all relevant rates from res.currency.rate as of a given date. Returns, Unit tests for currency_conversion service., TestCurrencyConversion

Community 11 - "Community 11"

Cohesion: 0.19 Nodes (4): FusionReportAnomaly, Persisted anomaly flags from the engine's variance detection. Each row captures, Tests for fusion.report.anomaly model., TestFusionReportAnomaly

Community 12 - "Community 12"

Cohesion: 0.26 Nodes (2): Controller tests using HttpCase for the 8 JSON-RPC endpoints., TestReportsController

Community 13 - "Community 13"

Cohesion: 0.23 Nodes (6): DrillDownRow, fetch_drill_down(), Drill-down: from a report line to its underlying journal items. Given an accoun, Fetch journal items for an account within a date range. Returns flat list o, Tests for drill_down_resolver., TestDrillDownResolver

Community 14 - "Community 14"

Cohesion: 0.22 Nodes (5): build_prompt(), LLM prompt for AI report commentary. Provider-agnostic system + user prompt bui, Build (system_prompt, user_prompt) tuple., Tests for commentary_prompt module., TestCommentaryPrompt

Community 15 - "Community 15"

Cohesion: 0.2 Nodes (6): FusionMigrationWizard, Reports-specific migration step. Ensures the 4 CORE report definitions are pres, Verify all 4 CORE report definitions exist., Override to add reports-bootstrap step at the end of the chain., Tests for the reports-bootstrap migration step., TestMigrationRoundTrip

Community 16 - "Community 16"

Cohesion: 0.22 Nodes (5): FusionAccountBalanceMV, Materialized view of per-account-per-month balances. Created lazily by init() (, _refresh(), Tests for fusion_account_balance MV., TestAccountBalanceMV

Community 17 - "Community 17"

Cohesion: 0.22 Nodes (2): Verify the seeded fusion.report definitions load and compute sensibly., TestSeededReports

Community 18 - "Community 18"

Cohesion: 0.25 Nodes (4): Tests for XLSX export wizard., TestXlsxExport, FusionXlsxExportWizard, XLSX export wizard for fusion financial reports.

Community 19 - "Community 19"

Cohesion: 0.5 Nodes (1): DrillDownDialog

Community 20 - "Community 20"

Cohesion: 0.5 Nodes (1): AnomalyStrip

Community 21 - "Community 21"

Cohesion: 0.67 Nodes (1): Pre-migration: convert legacy act_window report actions to client actions. In 1

Community 22 - "Community 22"

Cohesion: 0.67 Nodes (2): FusionReport, Persistent definition of a Fusion financial report. Each report (P&L, balance s

Community 23 - "Community 23"

Cohesion: 0.67 Nodes (2): FusionReportCommentary, Cached AI-generated commentary for a report run. One row per (report, period_fr

Community 24 - "Community 24"

Cohesion: 1.0 Nodes (1): AiCommentaryPanel

Community 25 - "Community 25"

Cohesion: 1.0 Nodes (0):

Community 26 - "Community 26"

Cohesion: 1.0 Nodes (0):

Community 27 - "Community 27"

Cohesion: 1.0 Nodes (0):

Community 28 - "Community 28"

Cohesion: 1.0 Nodes (0):

Community 29 - "Community 29"

Cohesion: 1.0 Nodes (0):

Community 30 - "Community 30"

Cohesion: 1.0 Nodes (0):

Community 31 - "Community 31"

Cohesion: 1.0 Nodes (0):

Community 32 - "Community 32"

Cohesion: 1.0 Nodes (0):

Community 33 - "Community 33"

Cohesion: 1.0 Nodes (1): Run last-month P&L vs prior-year-same-month and persist anomalies.

Community 34 - "Community 34"

Cohesion: 1.0 Nodes (1): REFRESH CONCURRENTLY via dedicated autocommit cursor. REFRESH MATERIALI

Community 35 - "Community 35"

Cohesion: 1.0 Nodes (1): Refresh the MV. Falls back to non-concurrent if CONCURRENTLY fails. REF

Community 36 - "Community 36"

Cohesion: 1.0 Nodes (0):

Community 37 - "Community 37"

Cohesion: 1.0 Nodes (0):

Knowledge Gaps

  • 66 isolated node(s): Pre-migration: convert legacy act_window report actions to client actions. In 1, Unit tests for anomaly_detection service., Tests for commentary_prompt module., Tests for the PDF export., Tests for fusion.report.commentary cache model. (+61 more) These have ≤1 connection - possible missing edges or undocumented components.
  • Thin community Community 24 (2 nodes): AiCommentaryPanel, ai_commentary_panel.js Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 25 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 26 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 27 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 28 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 29 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 30 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 31 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 32 (1 nodes): __manifest__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 33 (1 nodes): Run last-month P&L vs prior-year-same-month and persist anomalies. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 34 (1 nodes): REFRESH CONCURRENTLY via dedicated autocommit cursor. REFRESH MATERIALI Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 35 (1 nodes): Refresh the MV. Falls back to non-concurrent if CONCURRENTLY fails. REF Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 36 (1 nodes): reports_tours.js Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 37 (1 nodes): report_viewer_view.js Too small to be a meaningful cluster - may be noise or needs more connections extracted.

Suggested Questions

Questions this graph is uniquely positioned to answer:

  • Why does Period connect Community 0 to Community 2, Community 5, Community 6, Community 7, Community 8, Community 9, Community 17, Community 18? High betweenness centrality (0.301) - this node is a cross-community bridge.
  • Why does TestControllerBenchmarks connect Community 6 to Community 0? High betweenness centrality (0.085) - this node is a cross-community bridge.
  • Why does TestCurrencyConversion connect Community 10 to Community 1? High betweenness centrality (0.055) - this node is a cross-community bridge.
  • Are the 72 inferred relationships involving Period (e.g. with TestServiceInvariants and TestLineResolverInvariants) actually correct? Period has 72 INFERRED edges - model-reasoned connections that need verification.
  • Are the 29 inferred relationships involving TotalLine (e.g. with TestServiceInvariants and TestLineResolverInvariants) actually correct? TotalLine has 29 INFERRED edges - model-reasoned connections that need verification.
  • Are the 14 inferred relationships involving compute_pnl() (e.g. with .test_commentary_with_local_llm() and .test_compute_pnl_p95()) actually correct? compute_pnl() has 14 INFERRED edges - model-reasoned connections that need verification.
  • What connects Pre-migration: convert legacy act_window report actions to client actions. In 1, Unit tests for anomaly_detection service., Tests for commentary_prompt module. to the rest of the system? 66 weakly-connected nodes found - possible documentation gaps or missing edges.