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

442 lines
23 KiB
Markdown

# 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 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]]
- [[_COMMUNITY_Community 40|Community 40]]
- [[_COMMUNITY_Community 41|Community 41]]
- [[_COMMUNITY_Community 42|Community 42]]
- [[_COMMUNITY_Community 43|Community 43]]
- [[_COMMUNITY_Community 44|Community 44]]
- [[_COMMUNITY_Community 45|Community 45]]
- [[_COMMUNITY_Community 46|Community 46]]
- [[_COMMUNITY_Community 47|Community 47]]
- [[_COMMUNITY_Community 48|Community 48]]
- [[_COMMUNITY_Community 49|Community 49]]
- [[_COMMUNITY_Community 50|Community 50]]
- [[_COMMUNITY_Community 51|Community 51]]
- [[_COMMUNITY_Community 52|Community 52]]
- [[_COMMUNITY_Community 53|Community 53]]
- [[_COMMUNITY_Community 54|Community 54]]
- [[_COMMUNITY_Community 55|Community 55]]
- [[_COMMUNITY_Community 56|Community 56]]
- [[_COMMUNITY_Community 57|Community 57]]
- [[_COMMUNITY_Community 58|Community 58]]
- [[_COMMUNITY_Community 59|Community 59]]
- [[_COMMUNITY_Community 60|Community 60]]
- [[_COMMUNITY_Community 61|Community 61]]
- [[_COMMUNITY_Community 62|Community 62]]
- [[_COMMUNITY_Community 63|Community 63]]
- [[_COMMUNITY_Community 64|Community 64]]
- [[_COMMUNITY_Community 65|Community 65]]
## 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._