294 lines
16 KiB
Markdown
294 lines
16 KiB
Markdown
# Graph Report - /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai (2026-04-22)
|
|
|
|
## Corpus Check
|
|
- 61 files · ~40,430 words
|
|
- Verdict: corpus is large enough that graph structure adds value.
|
|
|
|
## Summary
|
|
- 602 nodes · 894 edges · 40 communities detected
|
|
- Extraction: 79% EXTRACTED · 21% INFERRED · 0% AMBIGUOUS · INFERRED: 192 edges (avg confidence: 0.71)
|
|
- Token cost: 0 input · 0 output
|
|
|
|
## Community Hubs (Navigation)
|
|
- [[_COMMUNITY_Community 0|Community 0]]
|
|
- [[_COMMUNITY_Community 1|Community 1]]
|
|
- [[_COMMUNITY_Community 2|Community 2]]
|
|
- [[_COMMUNITY_Community 3|Community 3]]
|
|
- [[_COMMUNITY_Community 4|Community 4]]
|
|
- [[_COMMUNITY_Community 5|Community 5]]
|
|
- [[_COMMUNITY_Community 6|Community 6]]
|
|
- [[_COMMUNITY_Community 7|Community 7]]
|
|
- [[_COMMUNITY_Community 8|Community 8]]
|
|
- [[_COMMUNITY_Community 9|Community 9]]
|
|
- [[_COMMUNITY_Community 10|Community 10]]
|
|
- [[_COMMUNITY_Community 11|Community 11]]
|
|
- [[_COMMUNITY_Community 12|Community 12]]
|
|
- [[_COMMUNITY_Community 13|Community 13]]
|
|
- [[_COMMUNITY_Community 14|Community 14]]
|
|
- [[_COMMUNITY_Community 15|Community 15]]
|
|
- [[_COMMUNITY_Community 16|Community 16]]
|
|
- [[_COMMUNITY_Community 17|Community 17]]
|
|
- [[_COMMUNITY_Community 18|Community 18]]
|
|
- [[_COMMUNITY_Community 19|Community 19]]
|
|
- [[_COMMUNITY_Community 20|Community 20]]
|
|
- [[_COMMUNITY_Community 21|Community 21]]
|
|
- [[_COMMUNITY_Community 22|Community 22]]
|
|
- [[_COMMUNITY_Community 23|Community 23]]
|
|
- [[_COMMUNITY_Community 24|Community 24]]
|
|
- [[_COMMUNITY_Community 25|Community 25]]
|
|
- [[_COMMUNITY_Community 26|Community 26]]
|
|
- [[_COMMUNITY_Community 27|Community 27]]
|
|
- [[_COMMUNITY_Community 28|Community 28]]
|
|
- [[_COMMUNITY_Community 29|Community 29]]
|
|
- [[_COMMUNITY_Community 30|Community 30]]
|
|
- [[_COMMUNITY_Community 31|Community 31]]
|
|
- [[_COMMUNITY_Community 32|Community 32]]
|
|
- [[_COMMUNITY_Community 33|Community 33]]
|
|
- [[_COMMUNITY_Community 34|Community 34]]
|
|
- [[_COMMUNITY_Community 35|Community 35]]
|
|
- [[_COMMUNITY_Community 36|Community 36]]
|
|
- [[_COMMUNITY_Community 37|Community 37]]
|
|
- [[_COMMUNITY_Community 38|Community 38]]
|
|
- [[_COMMUNITY_Community 39|Community 39]]
|
|
|
|
## God Nodes (most connected - your core abstractions)
|
|
1. `FusionChatPanel` - 38 edges
|
|
2. `DataAdapter` - 38 edges
|
|
3. `get_adapter()` - 37 edges
|
|
4. `FollowupAdapter` - 28 edges
|
|
5. `ReportsAdapter` - 27 edges
|
|
6. `FusionAccountingAgent` - 22 edges
|
|
7. `FusionInteractiveTable` - 21 edges
|
|
8. `BankRecAdapter` - 20 edges
|
|
9. `AssetsAdapter` - 15 edges
|
|
10. `AdapterMode` - 14 edges
|
|
|
|
## Surprising Connections (you probably didn't know these)
|
|
- `Community shape + fusion AI fields (top suggestion, band, attachments).` --uses--> `DataAdapter` [INFERRED]
|
|
/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/data_adapters/bank_rec.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/data_adapters/base.py
|
|
- `Return AI suggestions per bank line. Shape: ``{line_id: [{'id', 'rank',` --uses--> `DataAdapter` [INFERRED]
|
|
/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/data_adapters/bank_rec.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/data_adapters/base.py
|
|
- `Accept a fusion AI suggestion and reconcile against its proposal. Retur` --uses--> `DataAdapter` [INFERRED]
|
|
/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/data_adapters/bank_rec.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/data_adapters/base.py
|
|
- `Reverse a reconciliation by partial IDs. Returns ``{'unreconciled_line_` --uses--> `DataAdapter` [INFERRED]
|
|
/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/data_adapters/bank_rec.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/data_adapters/base.py
|
|
- `Engine-free unreconcile for installs without fusion_accounting_bank_rec.` --uses--> `DataAdapter` [INFERRED]
|
|
/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/data_adapters/bank_rec.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/data_adapters/base.py
|
|
|
|
## Communities
|
|
|
|
### Community 0 - "Community 0"
|
|
Cohesion: 0.04
|
|
Nodes (6): FusionApprovalCard, FusionChatPanel, inlineFormat(), mdToHtml(), parseFusionTableBlock(), FusionInteractiveTable
|
|
|
|
### Community 1 - "Community 1"
|
|
Cohesion: 0.05
|
|
Nodes (21): _compute_display_label(), _compute_tool_display_name(), FusionAccountingMatchHistory, FusionAccountingRule, FusionAccountingAgent, Build a one-line summary of what a tool call did, for the collapsed tool log., Build a rich approval payload so the UI can show exactly what's being approved., Smart model routing: Haiku for routine tool calling, Sonnet for complex analysis (+13 more)
|
|
|
|
### Community 2 - "Community 2"
|
|
Cohesion: 0.04
|
|
Nodes (39): BankRecAdapter, Return AI suggestions per bank line. Shape: ``{line_id: [{'id', 'rank',, Accept a fusion AI suggestion and reconcile against its proposal. Retur, Reverse a reconciliation by partial IDs. Returns ``{'unreconciled_line_, Engine-free unreconcile for installs without fusion_accounting_bank_rec., Community shape + fusion AI fields (top suggestion, band, attachments)., check_recurring_pattern(), _extract_partner_from_ref() (+31 more)
|
|
|
|
### Community 3 - "Community 3"
|
|
Cohesion: 0.05
|
|
Nodes (37): get_ap_aging(), Return AP aging buckets. Routed through FollowupAdapter for tri-mode consistency, get_ar_aging(), get_followup_report(), get_overdue_invoices(), get_partner_balance(), Return the follow-up report HTML for a partner. Routed through FollowupAdapter., Return overdue customer invoices. Routed through FollowupAdapter. (+29 more)
|
|
|
|
### Community 4 - "Community 4"
|
|
Cohesion: 0.07
|
|
Nodes (30): Assets data adapter — routes asset queries through fusion engine if installed., Bank reconciliation data adapter. Routes bank-rec data lookups across: - FUSION, Return unreconciled bank statement lines. All filter params are optiona, AdapterMode, DataAdapter, Base class. Subclasses set FUSION_MODEL and ENTERPRISE_MODULE class attrs an, Pick FUSION if the model is loaded, else ENTERPRISE if the module is ins, Follow-up data adapter. Routes follow-up / aged-balance / collections data look (+22 more)
|
|
|
|
### Community 5 - "Community 5"
|
|
Cohesion: 0.05
|
|
Nodes (27): audit_account_balances(), audit_reconciliation_integrity(), audit_tax_compliance(), check_hash_chain(), check_sequence_gaps(), get_audit_report(), run_full_audit(), fusion_generate_followup_text() (+19 more)
|
|
|
|
### Community 6 - "Community 6"
|
|
Cohesion: 0.07
|
|
Nodes (14): Look up <method_name>_via_<mode> on self and call it. E.g. method_name=, _company_id(), fusion_compare_periods(), fusion_drill_down_report_line(), fusion_generate_commentary(), fusion_get_anomalies(), fusion_run_report(), Fusion-engine-routed AI tools for financial reports. These 5 tools route throug (+6 more)
|
|
|
|
### Community 7 - "Community 7"
|
|
Cohesion: 0.08
|
|
Nodes (14): LLMProvider, LLMProvider contract - every adapter must conform. Phase 1 generalisation: make, Contract every LLM backend must satisfy. Adapters declare capabilities as cl, Plain text completion. Required for ALL providers. Returns: {'content':, Tool-calling completion. Optional - caller checks supports_tool_calling first., Embeddings. Optional - caller checks supports_embeddings first. Returns, ClaudeAdapter, FusionAccountingAdapterClaude (+6 more)
|
|
|
|
### Community 8 - "Community 8"
|
|
Cohesion: 0.11
|
|
Nodes (13): FusionAccountingSession, get_execution_state(), Get the current execution state for a session (called by polling endpoint)., approve_action(), approve_all(), chat(), chat_status(), close_session() (+5 more)
|
|
|
|
### Community 9 - "Community 9"
|
|
Cohesion: 0.1
|
|
Nodes (13): AccountMoveAuditHook, create_vendor_bill(), find_similar_bank_lines(), Search for partners/vendors by name keyword., Find past reconciled bank lines with similar description to suggest coding patte, [Tier 3] Create a vendor bill (account.move with move_type='in_invoice'). Re, [Tier 3] Register payment on a posted vendor bill and optionally reconcile to ba, register_bill_payment() (+5 more)
|
|
|
|
### Community 10 - "Community 10"
|
|
Cohesion: 0.13
|
|
Nodes (3): _bucket_for_days(), FollowupAdapter, Shared aging-bucket implementation for receivable/payable accounts. Ret
|
|
|
|
### Community 11 - "Community 11"
|
|
Cohesion: 0.12
|
|
Nodes (5): fusion_dispose_asset(), fusion_suggest_asset_useful_life(), Fusion-engine-routed AI tools for asset management., AssetsAdapter, DataAdapter
|
|
|
|
### Community 12 - "Community 12"
|
|
Cohesion: 0.14
|
|
Nodes (10): create_payroll_journal_entry(), get_cra_remittance_due(), get_cra_remittance_status(), get_payroll_cost_report(), get_payroll_entries(), prepare_cra_payment(), Resolve an account code or ID to a valid account ID. Accepts: integer ID, st, _resolve_account_id() (+2 more)
|
|
|
|
### Community 13 - "Community 13"
|
|
Cohesion: 0.2
|
|
Nodes (1): FusionAccountingDashboard
|
|
|
|
### Community 14 - "Community 14"
|
|
Cohesion: 0.25
|
|
Nodes (2): Register payments for a batch of ADP invoices from a remittance advice. Tak, register_adp_batch_payment()
|
|
|
|
### Community 15 - "Community 15"
|
|
Cohesion: 0.33
|
|
Nodes (1): FusionDashboard
|
|
|
|
### Community 16 - "Community 16"
|
|
Cohesion: 0.4
|
|
Nodes (2): get_inventory_turnover(), get_stock_valuation()
|
|
|
|
### Community 17 - "Community 17"
|
|
Cohesion: 0.5
|
|
Nodes (2): FusionVendorTaxProfile, Rebuild all vendor tax profiles from posted bill history. Called by cron
|
|
|
|
### Community 18 - "Community 18"
|
|
Cohesion: 0.5
|
|
Nodes (2): FusionRecurringPattern, Scan reconciled bank lines for recurring patterns and cache how they were coded.
|
|
|
|
### Community 19 - "Community 19"
|
|
Cohesion: 0.5
|
|
Nodes (1): FusionHealthCard
|
|
|
|
### Community 20 - "Community 20"
|
|
Cohesion: 0.5
|
|
Nodes (3): build_prompt(), Bank reconciliation AI re-rank prompt. Used by fusion_accounting_bank_rec/servi, Build (system_prompt, user_prompt) for AI re-rank. Args: statement_
|
|
|
|
### Community 21 - "Community 21"
|
|
Cohesion: 0.67
|
|
Nodes (1): Reassign ir_model_data ownership from fusion_accounting to fusion_accounting_ai.
|
|
|
|
### Community 22 - "Community 22"
|
|
Cohesion: 0.67
|
|
Nodes (1): FusionRuleWizard
|
|
|
|
### Community 23 - "Community 23"
|
|
Cohesion: 1.0
|
|
Nodes (0):
|
|
|
|
### Community 24 - "Community 24"
|
|
Cohesion: 1.0
|
|
Nodes (1): FusionAccountingTool
|
|
|
|
### Community 25 - "Community 25"
|
|
Cohesion: 1.0
|
|
Nodes (1): ResConfigSettings
|
|
|
|
### 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 (0):
|
|
|
|
### Community 34 - "Community 34"
|
|
Cohesion: 1.0
|
|
Nodes (0):
|
|
|
|
### Community 35 - "Community 35"
|
|
Cohesion: 1.0
|
|
Nodes (1): Poll the live execution state of a running chat — returns thinking text,
|
|
|
|
### Community 36 - "Community 36"
|
|
Cohesion: 1.0
|
|
Nodes (1): Live search for matching journal items — called directly by the reconcil
|
|
|
|
### Community 37 - "Community 37"
|
|
Cohesion: 1.0
|
|
Nodes (1): List recent sessions for the session picker dropdown.
|
|
|
|
### Community 38 - "Community 38"
|
|
Cohesion: 1.0
|
|
Nodes (1): Automatically reconcile inter-account credit card payments. When a paym
|
|
|
|
### Community 39 - "Community 39"
|
|
Cohesion: 1.0
|
|
Nodes (1): Reconcile payroll cheque bank lines using writeoff to Payroll Liabilities (2201)
|
|
|
|
## Knowledge Gaps
|
|
- **86 isolated node(s):** `Reassign ir_model_data ownership from fusion_accounting to fusion_accounting_ai.`, `Verify ir_model_data ownership transferred from fusion_accounting to fusion_acco`, `No fusion-related model/view/data record should still claim module='fusion_accou`, `Spot-check that key xml-ids are reachable under the new module name.`, `FusionAccountingTool` (+81 more)
|
|
These have ≤1 connection - possible missing edges or undocumented components.
|
|
- **Thin community `Community 23`** (2 nodes): `get_db_param()`, `test_claude_api.py`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 24`** (2 nodes): `FusionAccountingTool`, `accounting_tool.py`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 25`** (2 nodes): `ResConfigSettings`, `accounting_config.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): `__init__.py`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 33`** (1 nodes): `__manifest__.py`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 34`** (1 nodes): `test_api_live.py`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 35`** (1 nodes): `Poll the live execution state of a running chat — returns thinking text,`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 36`** (1 nodes): `Live search for matching journal items — called directly by the reconcil`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 37`** (1 nodes): `List recent sessions for the session picker dropdown.`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 38`** (1 nodes): `Automatically reconcile inter-account credit card payments. When a paym`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 39`** (1 nodes): `Reconcile payroll cheque bank lines using writeoff to Payroll Liabilities (2201)`
|
|
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 `get_audit_report()` connect `Community 5` to `Community 1`?**
|
|
_High betweenness centrality (0.205) - this node is a cross-community bridge._
|
|
- **Why does `FusionInteractiveTable` connect `Community 0` to `Community 1`?**
|
|
_High betweenness centrality (0.184) - this node is a cross-community bridge._
|
|
- **Why does `get_adapter()` connect `Community 3` to `Community 2`, `Community 4`, `Community 5`, `Community 6`, `Community 11`?**
|
|
_High betweenness centrality (0.168) - this node is a cross-community bridge._
|
|
- **Are the 33 inferred relationships involving `DataAdapter` (e.g. with `TestDataAdapterBase` and `TestBankRecAdapter`) actually correct?**
|
|
_`DataAdapter` has 33 INFERRED edges - model-reasoned connections that need verification._
|
|
- **Are the 35 inferred relationships involving `get_adapter()` (e.g. with `.test_list_unreconciled_returns_our_test_line()` and `.test_trial_balance_returns_rows_in_pure_community()`) actually correct?**
|
|
_`get_adapter()` has 35 INFERRED edges - model-reasoned connections that need verification._
|
|
- **What connects `Reassign ir_model_data ownership from fusion_accounting to fusion_accounting_ai.`, `Verify ir_model_data ownership transferred from fusion_accounting to fusion_acco`, `No fusion-related model/view/data record should still claim module='fusion_accou` to the rest of the system?**
|
|
_86 weakly-connected nodes found - possible documentation gaps or missing edges._
|
|
- **Should `Community 0` be split into smaller, more focused modules?**
|
|
_Cohesion score 0.04 - nodes in this community are weakly interconnected._ |