23 KiB
Graph Report - /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_bank_rec (2026-04-22)
Corpus Check
- 85 files · ~29,014 words
- Verdict: corpus is large enough that graph structure adds value.
Summary
- 792 nodes · 1381 edges · 66 communities detected
- Extraction: 65% EXTRACTED · 35% INFERRED · 0% AMBIGUOUS · INFERRED: 482 edges (avg confidence: 0.71)
- Token cost: 0 input · 0 output
Community Hubs (Navigation)
- _COMMUNITY_Community 0
- _COMMUNITY_Community 1
- _COMMUNITY_Community 2
- _COMMUNITY_Community 3
- _COMMUNITY_Community 4
- _COMMUNITY_Community 5
- _COMMUNITY_Community 6
- _COMMUNITY_Community 7
- _COMMUNITY_Community 8
- _COMMUNITY_Community 9
- _COMMUNITY_Community 10
- _COMMUNITY_Community 11
- _COMMUNITY_Community 12
- _COMMUNITY_Community 13
- _COMMUNITY_Community 14
- _COMMUNITY_Community 15
- _COMMUNITY_Community 16
- _COMMUNITY_Community 17
- _COMMUNITY_Community 18
- _COMMUNITY_Community 19
- _COMMUNITY_Community 20
- _COMMUNITY_Community 21
- _COMMUNITY_Community 22
- _COMMUNITY_Community 23
- _COMMUNITY_Community 24
- _COMMUNITY_Community 25
- _COMMUNITY_Community 26
- _COMMUNITY_Community 27
- _COMMUNITY_Community 28
- _COMMUNITY_Community 29
- _COMMUNITY_Community 30
- _COMMUNITY_Community 31
- _COMMUNITY_Community 32
- _COMMUNITY_Community 33
- _COMMUNITY_Community 34
- _COMMUNITY_Community 35
- _COMMUNITY_Community 36
- _COMMUNITY_Community 37
- _COMMUNITY_Community 38
- _COMMUNITY_Community 39
- _COMMUNITY_Community 40
- _COMMUNITY_Community 41
- _COMMUNITY_Community 42
- _COMMUNITY_Community 43
- _COMMUNITY_Community 44
- _COMMUNITY_Community 45
- _COMMUNITY_Community 46
- _COMMUNITY_Community 47
- _COMMUNITY_Community 48
- _COMMUNITY_Community 49
- _COMMUNITY_Community 50
- _COMMUNITY_Community 51
- _COMMUNITY_Community 52
- _COMMUNITY_Community 53
- _COMMUNITY_Community 54
- _COMMUNITY_Community 55
- _COMMUNITY_Community 56
- _COMMUNITY_Community 57
- _COMMUNITY_Community 58
- _COMMUNITY_Community 59
- _COMMUNITY_Community 60
- _COMMUNITY_Community 61
- _COMMUNITY_Community 62
- _COMMUNITY_Community 63
- _COMMUNITY_Community 64
- _COMMUNITY_Community 65
God Nodes (most connected - your core abstractions)
create()- 71 edgesCandidate- 54 edgesmake_bank_line()- 41 edgesMultiInvoiceStrategy- 37 edgesAmountExactStrategy- 36 edgesFIFOStrategy- 35 edgesBankRecStatementLine- 33 edgesBankReconciliationService- 31 edgesreconcile_one()- 30 edgesBankRecButtonList- 29 edges
Surprising Connections (you probably didn't know these)
reconcile_manual()--calls-->reconcile_one()[INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_bank_rec/controllers/bank_rec_controller.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_bank_rec/models/fusion_reconcile_engine.pybulk_reconcile()--calls-->reconcile_batch()[INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_bank_rec/controllers/bank_rec_controller.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_bank_rec/models/fusion_reconcile_engine.py4-pass confidence scoring pipeline. Pass 1: SQL filter — partner match + reconc--uses-->Candidate[INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_bank_rec/services/confidence_scoring.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_bank_rec/services/matching_strategies.pyScore and rank candidate matches for a statement line. Args: env: O--uses-->Candidate[INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_bank_rec/services/confidence_scoring.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_bank_rec/services/matching_strategies.pyHow well does this candidate fit the partner's typical pattern?--uses-->Candidate[INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_bank_rec/services/confidence_scoring.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_bank_rec/services/matching_strategies.py
Communities
Community 0 - "Community 0"
Cohesion: 0.03 Nodes (52): create(), suggest_matches(), FusionBulkReconcileWizard, Bulk reconcile wizard — operates on user-selected records. Reads active_ids fro, _ensure_test_product(), make_bank_journal(), make_bank_line(), make_bank_statement() (+44 more)
Community 1 - "Community 1"
Cohesion: 0.09
Nodes (42): FusionReconcileEngine, The reconcile engine — orchestrator for all bank-line reconciliations. Public A, Bulk-reconcile a recordset using the chosen strategy. Returns: {'reco, Compute and persist AI suggestions per line. Returns: dict mapping li, User clicked Accept on a suggestion -> reconcile via its proposal. Retu, Create a write-off move + reconcile the bank line against it. Returns:, Reverse a reconciliation. Handles full vs. partial chains. Because ``re, Phase 2: structural + safety checks. (+34 more)
Community 2 - "Community 2"
Cohesion: 0.04 Nodes (3): BankRecButtonList, BankRecLineToReconcile, BankRecReconciledLineName
Community 3 - "Community 3"
Cohesion: 0.04 Nodes (5): AiAlternativesPanel, AiSuggestionStrip, BankRecKanbanController, BankReconciliationService, BatchActionBar
Community 4 - "Community 4"
Cohesion: 0.06 Nodes (25): _ai_rerank(), _build_reasoning(), _get_provider(), _pattern_score(), _precedent_score(), 4-pass confidence scoring pipeline. Pass 1: SQL filter — partner match + reconc, How similar is this candidate to past precedents?, Look up provider name from per-feature config; instantiate adapter. Returns (+17 more)
Community 5 - "Community 5"
Cohesion: 0.08 Nodes (23): accept_suggestion(), _adapter(), bulk_reconcile(), FusionBankRecController, list_unreconciled(), HTTP controller: 10 JSON-RPC endpoints for the OWL bank-rec widget. All endpoin, Resolve the bank-rec data adapter from fusion_accounting_ai., JSON-RPC surface consumed by the OWL bank-reconciliation widget. All routes (+15 more)
Community 6 - "Community 6"
Cohesion: 0.08 Nodes (22): make_reconcileable_pair(), Create a bank line + a customer invoice with the same partner+amount. Return, accept_suggestion(), reconcile_batch(), reconcile_one(), write_off(), Tests verifying legacy tools route through fusion.reconcile.engine when present., When engine is present, match_bank_line_to_payments must produce a parti (+14 more)
Community 7 - "Community 7"
Cohesion: 0.06 Nodes (2): useBankReconciliation(), BankRecStatementLine
Community 8 - "Community 8"
Cohesion: 0.11 Nodes (6): AccountReconcileModel, Apply the reconciliation model lines to the statement line passed as parameter., FusionAutoReconcileWizard, Auto-reconcile wizard. Lets the user pick filters (journal, date range, strateg, The fusion.reconcile.suggestion state machine + computed band., TestSuggestionLifecycle
Community 9 - "Community 9"
Cohesion: 0.09
Nodes (13): Tests for BankRecAdapter's fusion paths., Smoke tests for the 5 new fusion bank-rec AI tools., Tests for fusion.bulk.reconcile.wizard., Tests for the fusion bank-rec HTTP controller (Task 26). Uses HttpCase so w, Smoke tests for the cron handler methods. We don't test the Odoo cron scheduler, Smoke tests verifying the factories produce usable records. Not testing factory, _detect_local_llm(), Local LLM compatibility test (LM Studio, Ollama, etc.). Skips if no local OpenA (+5 more)
Community 10 - "Community 10"
Cohesion: 0.15 Nodes (9): _cron_refresh_mv(), FusionBankRecCron, Cron handler model for fusion_accounting_bank_rec. Three scheduled jobs: - _cro, _amounts_concentrated(), extract_pattern_for_partner(), Aggregate per-partner reconciliation patterns from precedent rows. Computes typ, Compute the pattern aggregate for one (company, partner) pair. Returns vals, True if amounts cluster around a few values (suggests exact-amount strategy). (+1 more)
Community 11 - "Community 11"
Cohesion: 0.13 Nodes (9): create(), FusionReconcileSuggestion, Persisted AI suggestions for bank line reconciliations. One row per (statement_, Best-effort MV refresh; never poison the originating transaction. Uses, FusionUnreconciledBankLineMV, Materialized view exposing pre-aggregated unreconciled-bank-line data. The MV i, Create the MV if missing. Reads create_mv_unreconciled_bank_line.sql an, _refresh() (+1 more)
Community 12 - "Community 12"
Cohesion: 0.12 Nodes (1): BankReconciliationService
Community 13 - "Community 13"
Cohesion: 0.2 Nodes (9): AccountAutoReconcileWizard, default_get(), _get_default_wizard_values(), Auto-reconcile with one-to-one strategy: We will reconcile 2 amls togeth, Auto-reconcile with zero balance strategy: We will reconcile all amls gr, Automatically reconcile amls given wizard's parameters. :return: an acti, Get the current configuration of the wizard as a dict of values. :return, This wizard is used to automatically reconcile account.move.line. It is acce (+1 more)
Community 14 - "Community 14"
Cohesion: 0.22 Nodes (8): compute_exchange_diff(), ExchangeDiffResult, Exchange-difference calculation helper. Pure-Python FX gain/loss computation. T, Compute whether an exchange-diff move is needed and its magnitude. Args:, USD invoice posted at 1.35, USD bank line settled at 1.40 -> diff exists., USD invoice at 1.40, settled at 1.35 -> loss, Tiny FX rounding under 0.005 should NOT trigger a diff move., TestExchangeDiff
Community 15 - "Community 15"
Cohesion: 0.16 Nodes (6): Coexistence tests: fusion_accounting_bank_rec menus only visible when Enterprise, When account_accountant is installed, group should be empty., When account_accountant is uninstalled, all internal users get the group., The fusion bank-rec root menu must have the coexistence group attached., The reconcile engine must work even when Enterprise is installed (it's t, TestCoexistence
Community 16 - "Community 16"
Cohesion: 0.17 Nodes (1): BankRecLineInfoPopOver
Community 17 - "Community 17"
Cohesion: 0.22 Nodes (6): FusionMigrationWizard, Bank-rec specific migration step. Hooks into fusion.migration.wizard (defined b, Override the migration entry-point to add the bank-rec step. Calls supe, _identify_bank_side(), Pure-Python helpers for backfilling fusion.reconcile.precedent from existing acc, Return (bank_move_line, counterpart_move_line, statement_line_id) or (None,
Community 18 - "Community 18"
Cohesion: 0.25 Nodes (2): Python wrappers that run the OWL tours via HttpCase.start_tour. Tours require a, TestBankRecTours
Community 19 - "Community 19"
Cohesion: 0.25 Nodes (2): BankRecListController, BankRecListRenderer
Community 20 - "Community 20"
Cohesion: 0.29 Nodes (1): BankRecSelectCreateDialog
Community 21 - "Community 21"
Cohesion: 0.4 Nodes (2): BankRecEditLineFormController, BankRecFormDialog
Community 22 - "Community 22"
Cohesion: 0.4 Nodes (1): BankRecWidgetApplyAmountHtmlField
Community 23 - "Community 23"
Cohesion: 0.33 Nodes (2): BankRecReconcileDialogListController, BankRecReconcileDialogListRenderer
Community 24 - "Community 24"
Cohesion: 0.4 Nodes (2): AccountBankStatementLine, Inherit account.bank.statement.line to add Phase 1 widget compute fields. These
Community 25 - "Community 25"
Cohesion: 0.4 Nodes (3): FusionBankRecWidget, Per-request widget state. Holds the kanban-load response shape so the controller, Return a window action opening the OWL kanban for this journal.
Community 26 - "Community 26"
Cohesion: 0.5 Nodes (1): ReconcileModelPicker
Community 27 - "Community 27"
Cohesion: 0.5 Nodes (1): AttachmentStrip
Community 28 - "Community 28"
Cohesion: 0.5 Nodes (1): BankRecFileUploader
Community 29 - "Community 29"
Cohesion: 0.5 Nodes (2): BankRecQuickCreate, BankRecQuickCreateController
Community 30 - "Community 30"
Cohesion: 0.5 Nodes (1): PartnerHistoryPanel
Community 31 - "Community 31"
Cohesion: 0.5 Nodes (2): FusionMigrationAuditReport, QWeb PDF report: summary of bank-rec migration outcomes. Triggered from the mig
Community 32 - "Community 32"
Cohesion: 0.67 Nodes (2): FusionReconcilePrecedent, Per-historical-decision reconciliation memory. One row per past reconciliation.
Community 33 - "Community 33"
Cohesion: 0.67 Nodes (2): FusionReconcilePattern, Per-partner bank reconciliation pattern aggregate. One row per (company_id, par
Community 34 - "Community 34"
Cohesion: 0.67 Nodes (2): AccountReconcileModel, Inherit account.reconcile.model to add Phase 1 AI integration hooks. This is a
Community 35 - "Community 35"
Cohesion: 0.67 Nodes (1): AiReasoningTooltip
Community 36 - "Community 36"
Cohesion: 0.67 Nodes (1): BankRecChatter
Community 37 - "Community 37"
Cohesion: 0.67 Nodes (1): BankRecButton
Community 38 - "Community 38"
Cohesion: 0.67 Nodes (1): BankRecStatementSummary
Community 39 - "Community 39"
Cohesion: 0.67 Nodes (1): BankRecMany2OneMultiID
Community 40 - "Community 40"
Cohesion: 1.0 Nodes (1): BankRecLineCard
Community 41 - "Community 41"
Cohesion: 1.0 Nodes (0):
Community 42 - "Community 42"
Cohesion: 1.0 Nodes (0):
Community 43 - "Community 43"
Cohesion: 1.0 Nodes (0):
Community 44 - "Community 44"
Cohesion: 1.0 Nodes (0):
Community 45 - "Community 45"
Cohesion: 1.0 Nodes (0):
Community 46 - "Community 46"
Cohesion: 1.0 Nodes (0):
Community 47 - "Community 47"
Cohesion: 1.0 Nodes (0):
Community 48 - "Community 48"
Cohesion: 1.0 Nodes (1): For each unreconciled bank line that doesn't have a recent pending sugge
Community 49 - "Community 49"
Cohesion: 1.0 Nodes (1): For each (company, partner) pair with precedents, recompute and upsert t
Community 50 - "Community 50"
Cohesion: 1.0 Nodes (1): Refresh the materialized view CONCURRENTLY using an autocommit cursor.
Community 51 - "Community 51"
Cohesion: 1.0
Nodes (1): Refresh the MV. If concurrently=True (default), uses REFRES
Community 52 - "Community 52"
Cohesion: 1.0 Nodes (1): Derive a preset configuration based on amls. For example if all amls hav
Community 53 - "Community 53"
Cohesion: 1.0 Nodes (0):
Community 54 - "Community 54"
Cohesion: 1.0 Nodes (0):
Community 55 - "Community 55"
Cohesion: 1.0 Nodes (0):
Community 56 - "Community 56"
Cohesion: 1.0 Nodes (1): Return the journal summary that seeds the kanban widget.
Community 57 - "Community 57"
Cohesion: 1.0 Nodes (1): Return enriched, paginated unreconciled bank lines.
Community 58 - "Community 58"
Cohesion: 1.0 Nodes (1): Return full detail for one line including pending suggestions.
Community 59 - "Community 59"
Cohesion: 1.0 Nodes (1): Trigger AI suggest for one or more statement lines.
Community 60 - "Community 60"
Cohesion: 1.0 Nodes (1): Accept a fusion suggestion. Returns the partial IDs created.
Community 61 - "Community 61"
Cohesion: 1.0 Nodes (1): Reconcile a line against an explicit set of journal items.
Community 62 - "Community 62"
Cohesion: 1.0 Nodes (1): Reverse one or more partial reconciles.
Community 63 - "Community 63"
Cohesion: 1.0 Nodes (1): Apply a write-off against a bank statement line.
Community 64 - "Community 64"
Cohesion: 1.0 Nodes (1): Batch auto-reconcile. Returns counts + per-line errors.
Community 65 - "Community 65"
Cohesion: 1.0 Nodes (1): Return a partner's reconcile history + learned pattern.
Knowledge Gaps
- 115 isolated node(s):
Smoke tests for the fusion_unreconciled_bank_line_mv materialized view. Notes o,Tests for fusion.bulk.reconcile.wizard.,Local LLM compatibility test (LM Studio, Ollama, etc.). Skips if no local OpenA,Return (base_url, model_name) tuple, or (None, None) if no server. Tries LM,Smoke tests for the 5 new fusion bank-rec AI tools.(+110 more) These have ≤1 connection - possible missing edges or undocumented components. - Thin community
Community 40(2 nodes):BankRecLineCard,bank_rec_kanban_renderer.jsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 41(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 42(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 43(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 44(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 45(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 46(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 47(1 nodes):__manifest__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 48(1 nodes):For each unreconciled bank line that doesn't have a recent pending suggeToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 49(1 nodes):For each (company, partner) pair with precedents, recompute and upsert tToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 50(1 nodes):Refresh the materialized view CONCURRENTLY using an autocommit cursor.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 51(1 nodes):Refresh the MV. If ``concurrently=True`` (default), uses REFRESToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 52(1 nodes):Derive a preset configuration based on amls. For example if all amls havToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 53(1 nodes):bank_rec_tours.jsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 54(1 nodes):bank_reconciliation_service.jsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 55(1 nodes):bank_rec_kanban_view.jsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 56(1 nodes):Return the journal summary that seeds the kanban widget.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 57(1 nodes):Return enriched, paginated unreconciled bank lines.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 58(1 nodes):Return full detail for one line including pending suggestions.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 59(1 nodes):Trigger AI suggest for one or more statement lines.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 60(1 nodes):Accept a fusion suggestion. Returns the partial IDs created.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 61(1 nodes):Reconcile a line against an explicit set of journal items.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 62(1 nodes):Reverse one or more partial reconciles.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 63(1 nodes):Apply a write-off against a bank statement line.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 64(1 nodes):Batch auto-reconcile. Returns counts + per-line errors.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 65(1 nodes):Return a partner's reconcile history + learned pattern.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
create()connectCommunity 0toCommunity 1,Community 4,Community 5,Community 6,Community 8,Community 10,Community 11,Community 18? High betweenness centrality (0.179) - this node is a cross-community bridge. - Why does
useBankReconciliation()connectCommunity 7toCommunity 2? High betweenness centrality (0.112) - this node is a cross-community bridge. - Are the 69 inferred relationships involving
create()(e.g. with.setUp()and.setUp()) actually correct?create()has 69 INFERRED edges - model-reasoned connections that need verification. - Are the 53 inferred relationships involving
Candidate(e.g. withTestConfidenceScoringandWhen no AI provider config, score_ai_rerank stays at 0.0.) actually correct?Candidatehas 53 INFERRED edges - model-reasoned connections that need verification. - Are the 37 inferred relationships involving
make_bank_line()(e.g. with.test_mv_includes_unreconciled_line()and.test_mv_confidence_band_high_for_high_conf_suggestion()) actually correct?make_bank_line()has 37 INFERRED edges - model-reasoned connections that need verification. - Are the 33 inferred relationships involving
MultiInvoiceStrategy(e.g. withTestMatchingStrategyInvariantsandTestReconcileEngineInvariants) actually correct?MultiInvoiceStrategyhas 33 INFERRED edges - model-reasoned connections that need verification. - Are the 33 inferred relationships involving
AmountExactStrategy(e.g. withTestMatchingStrategyInvariantsandTestReconcileEngineInvariants) actually correct?AmountExactStrategyhas 33 INFERRED edges - model-reasoned connections that need verification.