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

332 lines
18 KiB
Markdown

# 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)
- [[_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]]
## 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._