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

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)

God Nodes (most connected - your core abstractions)

  1. create() - 71 edges
  2. Candidate - 54 edges
  3. make_bank_line() - 41 edges
  4. MultiInvoiceStrategy - 37 edges
  5. AmountExactStrategy - 36 edges
  6. FIFOStrategy - 35 edges
  7. BankRecStatementLine - 33 edges
  8. BankReconciliationService - 31 edges
  9. reconcile_one() - 30 edges
  10. BankRecButtonList - 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.py
  • bulk_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.py
  • 4-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.py
  • Score 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.py
  • How 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.js Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 41 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 42 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 43 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 44 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 45 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 46 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 47 (1 nodes): __manifest__.py Too 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 sugge Too 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 t Too 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 REFRES Too 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 hav Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 53 (1 nodes): bank_rec_tours.js Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 54 (1 nodes): bank_reconciliation_service.js Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 55 (1 nodes): bank_rec_kanban_view.js Too 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() connect Community 0 to Community 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() connect Community 7 to Community 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. with TestConfidenceScoring and When no AI provider config, score_ai_rerank stays at 0.0.) actually correct? Candidate has 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. with TestMatchingStrategyInvariants and TestReconcileEngineInvariants) actually correct? MultiInvoiceStrategy has 33 INFERRED edges - model-reasoned connections that need verification.
  • Are the 33 inferred relationships involving AmountExactStrategy (e.g. with TestMatchingStrategyInvariants and TestReconcileEngineInvariants) actually correct? AmountExactStrategy has 33 INFERRED edges - model-reasoned connections that need verification.