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

18 KiB

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

Corpus Check

  • 71 files · ~16,325 words
  • Verdict: corpus is large enough that graph structure adds value.

Summary

  • 467 nodes · 660 edges · 46 communities detected
  • Extraction: 73% EXTRACTED · 27% INFERRED · 0% AMBIGUOUS · INFERRED: 179 edges (avg confidence: 0.8)
  • Token cost: 0 input · 0 output

Community Hubs (Navigation)

God Nodes (most connected - your core abstractions)

  1. compute_depreciation_schedule() - 37 edges
  2. TestFusionAssetEngine - 14 edges
  3. post_depreciation_entry() - 14 edges
  4. predict_useful_life() - 13 edges
  5. TestAssetsController - 12 edges
  6. straight_line() - 11 edges
  7. TestFusionAsset - 10 edges
  8. TestAssetAnomalyDetection - 10 edges
  9. TestAssetEngineIntegration - 10 edges
  10. AssetsService - 10 edges

Surprising Connections (you probably didn't know these)

  • compute_schedule() --calls--> compute_depreciation_schedule() [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_assets/controllers/assets_controller.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_assets/models/fusion_asset_engine.py
  • suggest_useful_life() --calls--> predict_useful_life() [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_assets/controllers/assets_controller.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_assets/services/useful_life_predictor.py
  • test_straight_line_total_equals_cost_minus_salvage() --calls--> straight_line() [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_assets/tests/test_engine_property.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_assets/services/depreciation_methods.py
  • test_straight_line_book_value_decreasing() --calls--> straight_line() [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_assets/tests/test_engine_property.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_assets/services/depreciation_methods.py
  • test_declining_balance_never_below_salvage() --calls--> declining_balance() [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_assets/tests/test_engine_property.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_assets/services/depreciation_methods.py

Communities

Community 0 - "Community 0"

Cohesion: 0.09 Nodes (15): FusionDepreciationRunWizard, Manual depreciation run wizard. Operator picks a period_date and the wizard pos, compute_depreciation_schedule(), dispose_asset(), partial_sale(), pause_asset(), post_depreciation_entry(), The asset engine — orchestrator for all asset depreciation + lifecycle. 7-metho (+7 more)

Community 1 - "Community 1"

Cohesion: 0.07 Nodes (21): declining_balance(), DepreciationStep, Depreciation method primitives. Three methods supported: - straight_line: equal, Equal charge per period: (cost - salvage) / n_periods. Last period absorbs, Apply rate (e.g. 0.20 = 20%) to remaining book each period. Switches to s, Charge per period = (units_used / total_expected) * (cost - salvage)., straight_line(), units_of_production() (+13 more)

Community 2 - "Community 2"

Cohesion: 0.07 Nodes (19): AssetAnomaly, detect_low_utilization(), detect_schedule_variance(), Asset utilization anomaly detection. Flags assets where actual usage / posted d, Compare expected accumulated depreciation vs actual posted., For units-of-production assets: flag low actual usage., FusionAssetBookValuesMV, MV of per-asset book value snapshot. Refresh via cron or model._refresh(). (+11 more)

Community 3 - "Community 3"

Cohesion: 0.06 Nodes (10): AssetsAdapter wiring tests — fusion-mode dispatch., TestAssetsAdapter, TestAuditReport, TestFusionAssetCategory, TestFusionAssetDisposal, Integration tests verifying all 3 depreciation methods through the engine., TestDecliningBalanceIntegration, TestStraightLineIntegration (+2 more)

Community 4 - "Community 4"

Cohesion: 0.07 Nodes (5): AiUsefulLifePanel, AssetDashboard, AssetDetailPanel, AssetsService, DisposalDialog

Community 5 - "Community 5"

Cohesion: 0.08 Nodes (9): HttpCase, Controller tests using HttpCase., TestAssetsController, Python wrappers that run the OWL tours via HttpCase.start_tour. Tours require a, TestAssetsTours, Controller perf benchmarks tagged 'benchmark'. Engine-level benchmarks live in, TestAssetsControllerBenchmarks, Performance benchmarks tagged 'benchmark'. (+1 more)

Community 6 - "Community 6"

Cohesion: 0.09 Nodes (16): _detect_local_llm(), Local LLM compat smoke test for the useful_life_predictor service. Auto-detects, _server_reachable(), TestLocalLLMUsefulLife, TestUsefulLifePredictor, TestUsefulLifePrompt, _get_provider(), predict_useful_life() (+8 more)

Community 7 - "Community 7"

Cohesion: 0.12 Nodes (3): FusionAsset, Fusion Asset model. Lifecycle: draft -> running -> (paused -> running)* -> disp, TestFusionAsset

Community 8 - "Community 8"

Cohesion: 0.14 Nodes (6): FusionCreateAssetWizard, _onchange_category_id(), Create-asset-from-invoice-line wizard. Reads an account.move.line as the source, Create the fusion.asset record + link to source invoice line., Call AI useful-life predictor., TestCreateAssetWizard

Community 9 - "Community 9"

Cohesion: 0.23 Nodes (7): compute_salvage_value(), Salvage value (scrap value) calculation helpers. Most clients use straight % of, Compute end-of-life salvage value., Estimate remaining value if asset is sold/scrapped now., remaining_useful_life_value(), SalvageConfig, TestSalvageValue

Community 10 - "Community 10"

Cohesion: 0.22 Nodes (4): FusionAssetDepreciationLine, Per-period depreciation board lines for an asset., Mark this line as posted (without creating the journal entry yet — engin, TestFusionAssetDepreciationLine

Community 11 - "Community 11"

Cohesion: 0.21 Nodes (3): FusionAssetAnomaly, Persisted asset anomaly flags from the engine's variance detection., TestFusionAssetAnomaly

Community 12 - "Community 12"

Cohesion: 0.24 Nodes (4): prorate_factor(), Prorating helpers for first-period and last-period depreciation. When an asset, Return a 0..1 factor for how much of period's depreciation applies to an a, TestProrate

Community 13 - "Community 13"

Cohesion: 0.2 Nodes (6): FusionMigrationWizard, Assets-specific migration step. Backfills fusion.asset from existing account.as, Backfill fusion.asset from account.asset (Enterprise) if it exists., Override to add assets-bootstrap step., When Enterprise account.asset is NOT installed, step is a no-op., TestAssetsMigrationRoundTrip

Community 14 - "Community 14"

Cohesion: 0.18 Nodes (4): _compute_gain_loss(), FusionDisposalWizard, Asset disposal wizard (sale, scrap, donation, lost)., TestDisposalWizard

Community 15 - "Community 15"

Cohesion: 0.2 Nodes (4): _compute_sold_cost(), FusionPartialSaleWizard, Partial sale wizard (sell a portion of an asset). Splits the asset into a child, TestPartialSaleWizard

Community 16 - "Community 16"

Cohesion: 0.2 Nodes (7): compute_schedule(), dispose(), FusionAssetsController, _parse_date(), post_depreciation(), HTTP controller: 8 JSON-RPC endpoints for the OWL asset dashboard. All endpoint, suggest_useful_life()

Community 17 - "Community 17"

Cohesion: 0.18 Nodes (3): AccountMoveLine, Inherit account.move.line to link to fusion.asset records. Lets us trace assets, TestAccountMoveLineFusionAsset

Community 18 - "Community 18"

Cohesion: 0.25 Nodes (2): Tests for the 5 fusion-asset AI tools., TestFusionAssetTools

Community 19 - "Community 19"

Cohesion: 0.25 Nodes (3): Coexistence tests: fusion_accounting_assets menu only visible when Enterprise ac, Engine is registered regardless of Enterprise install state., TestAssetsCoexistence

Community 20 - "Community 20"

Cohesion: 0.5 Nodes (2): FusionAssetCategory, Asset categories with default settings (used as templates).

Community 21 - "Community 21"

Cohesion: 0.5 Nodes (2): FusionAssetDisposal, Asset disposal records (sale, scrap, donation).

Community 22 - "Community 22"

Cohesion: 0.5 Nodes (2): FusionAssetsMigrationAuditReport, QWeb PDF: migration audit report for fusion_accounting_assets.

Community 23 - "Community 23"

Cohesion: 0.67 Nodes (1): AnomalyStrip

Community 24 - "Community 24"

Cohesion: 0.67 Nodes (1): DepreciationBoard

Community 25 - "Community 25"

Cohesion: 1.0 Nodes (1): AssetCard

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 (1): For each running asset, post any due un-posted depreciation lines.

Community 35 - "Community 35"

Cohesion: 1.0 Nodes (1): Refresh the per-asset book value MV (hourly).

Community 36 - "Community 36"

Cohesion: 1.0 Nodes (1): For each running asset, compare expected accumulated depreciation vs pos

Community 37 - "Community 37"

Cohesion: 1.0 Nodes (1): Compute (or re-compute) the depreciation board for an asset. If recompu

Community 38 - "Community 38"

Cohesion: 1.0 Nodes (1): Post the next-due un-posted depreciation line. If period_date provided,

Community 39 - "Community 39"

Cohesion: 1.0 Nodes (1): Dispose an asset (sale, scrap, donation, lost).

Community 40 - "Community 40"

Cohesion: 1.0 Nodes (1): Partially dispose: split asset into two — sold child + remaining parent.

Community 41 - "Community 41"

Cohesion: 1.0 Nodes (1): Pause depreciation. Wraps asset.action_pause for API symmetry and to log

Community 42 - "Community 42"

Cohesion: 1.0 Nodes (1): Resume a paused asset.

Community 43 - "Community 43"

Cohesion: 1.0 Nodes (1): Reverse a disposal (rare — recovery from accidental sale entry).

Community 44 - "Community 44"

Cohesion: 1.0 Nodes (0):

Community 45 - "Community 45"

Cohesion: 1.0 Nodes (0):

Knowledge Gaps

  • 72 isolated node(s): Integration tests verifying all 3 depreciation methods through the engine., Property-based invariant tests for the asset engine. Hypothesis generates rando, Local LLM compat smoke test for the useful_life_predictor service. Auto-detects, Python wrappers that run the OWL tours via HttpCase.start_tour. Tours require a, Tests for the per-asset book value MV. (+67 more) These have ≤1 connection - possible missing edges or undocumented components.
  • Thin community Community 25 (2 nodes): AssetCard, asset_card.js 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): For each running asset, post any due un-posted depreciation lines. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 35 (1 nodes): Refresh the per-asset book value MV (hourly). Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 36 (1 nodes): For each running asset, compare expected accumulated depreciation vs pos Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 37 (1 nodes): Compute (or re-compute) the depreciation board for an asset. If recompu Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 38 (1 nodes): Post the next-due un-posted depreciation line. If period_date provided, Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 39 (1 nodes): Dispose an asset (sale, scrap, donation, lost). Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 40 (1 nodes): Partially dispose: split asset into two — sold child + remaining parent. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 41 (1 nodes): Pause depreciation. Wraps asset.action_pause for API symmetry and to log Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 42 (1 nodes): Resume a paused asset. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 43 (1 nodes): Reverse a disposal (rare — recovery from accidental sale entry). Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 44 (1 nodes): assets_tours.js Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 45 (1 nodes): asset_dashboard_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 compute_depreciation_schedule() connect Community 0 to Community 1, Community 2, Community 3, Community 5, Community 14, Community 15, Community 16? High betweenness centrality (0.101) - this node is a cross-community bridge.
  • Why does TestEngineBenchmarks connect Community 0 to Community 3, Community 5? High betweenness centrality (0.057) - this node is a cross-community bridge.
  • Why does TestFusionAssetEngine connect Community 0 to Community 3? High betweenness centrality (0.052) - this node is a cross-community bridge.
  • Are the 32 inferred relationships involving compute_depreciation_schedule() (e.g. with .test_straight_line_5yr_no_salvage() and .test_straight_line_10yr_with_salvage()) actually correct? compute_depreciation_schedule() has 32 INFERRED edges - model-reasoned connections that need verification.
  • Are the 12 inferred relationships involving post_depreciation_entry() (e.g. with .test_post_depreciation_entry_marks_line_posted() and .test_post_depreciation_only_after_running()) actually correct? post_depreciation_entry() has 12 INFERRED edges - model-reasoned connections that need verification.
  • Are the 9 inferred relationships involving predict_useful_life() (e.g. with .test_useful_life_with_local_llm() and .test_fallback_computer()) actually correct? predict_useful_life() has 9 INFERRED edges - model-reasoned connections that need verification.
  • What connects Integration tests verifying all 3 depreciation methods through the engine., Property-based invariant tests for the asset engine. Hypothesis generates rando, Local LLM compat smoke test for the useful_life_predictor service. Auto-detects to the rest of the system? 72 weakly-connected nodes found - possible documentation gaps or missing edges.