332 lines
18 KiB
Markdown
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._ |