# Graph Report - /Users/gurpreet/Github/Odoo-Modules/fusion_ringcentral (2026-04-22) ## Corpus Check - 18 files · ~9,229 words - Verdict: corpus is large enough that graph structure adds value. ## Summary - 220 nodes · 293 edges · 38 communities detected - Extraction: 89% EXTRACTED · 11% INFERRED · 0% AMBIGUOUS · INFERRED: 32 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]] ## God Nodes (most connected - your core abstractions) 1. `RcConfig` - 22 edges 2. `RcVoicemail` - 18 edges 3. `RcCallHistory` - 12 edges 4. `_get_active_config()` - 12 edges 5. `RcCallDashboard` - 11 edges 6. `FusionFaxRC` - 9 edges 7. `create()` - 8 edges 8. `_run_backfill_voicemail_media()` - 7 edges 9. `RcSystrayItem` - 7 edges 10. `create()` - 4 edges ## Surprising Connections (you probably didn't know these) - `_run_backfill_voicemail_media()` --calls--> `_get_active_config()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_ringcentral/models/rc_voicemail.py → /Users/gurpreet/Github/Odoo-Modules/fusion_ringcentral/models/rc_config.py - `_cron_sync_call_history()` --calls--> `_get_active_config()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_ringcentral/models/rc_call_history.py → /Users/gurpreet/Github/Odoo-Modules/fusion_ringcentral/models/rc_config.py - `_cron_daily_catchup_sync()` --calls--> `_get_active_config()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_ringcentral/models/rc_call_history.py → /Users/gurpreet/Github/Odoo-Modules/fusion_ringcentral/models/rc_config.py - `_cron_fetch_transcripts()` --calls--> `_get_active_config()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_ringcentral/models/rc_call_history.py → /Users/gurpreet/Github/Odoo-Modules/fusion_ringcentral/models/rc_config.py - `_run_historical_fax_import()` --calls--> `_get_active_config()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_ringcentral/models/fusion_fax.py → /Users/gurpreet/Github/Odoo-Modules/fusion_ringcentral/models/rc_config.py ## Communities ### Community 0 - "Community 0" Cohesion: 0.09 Nodes (19): Revoke tokens and disconnect., Exchange authorization code for access/refresh tokens., Refresh the access token using the refresh token. Uses SELECT ... FOR U, Ensure we have a valid access token, refreshing proactively., Return authorization headers for API calls., Make an authenticated GET request with rate-limit handling., Central API request method with automatic rate-limit retry. RingCentral, Fetch the connected user's extension info. (+11 more) ### Community 1 - "Community 1" Cohesion: 0.09 Nodes (15): _build_timeline(), create(), _cron_transcribe_voicemails(), _match_voicemail_partner(), _normalize_phone(), Process one page of voicemail records with bulk dedup., Import a single voicemail message and download its audio., Download voicemail transcription text from RC. (+7 more) ### Community 2 - "Community 2" Cohesion: 0.08 Nodes (17): create(), _cron_daily_catchup_sync(), _cron_sync_call_history(), _match_partner(), _normalize_phone(), Open the linked contact., Open sale orders for the linked contact., Open invoices for the linked contact. (+9 more) ### Community 3 - "Community 3" Cohesion: 0.11 Nodes (13): create(), FusionFaxRC, _match_fax_partner(), _normalize_fax_phone(), Open Send Fax wizard with this fax's documents pre-attached., Open Send Fax wizard pre-filled with this fax's contact info., Extend fusion.fax with contact matching, smart buttons, forward fax, and sen, Fetch faxes (inbound + outbound) from RC message-store via OAuth. (+5 more) ### Community 4 - "Community 4" Cohesion: 0.1 Nodes (4): Open the RingCentral dialer via the Embeddable widget., Open the RingCentral SMS compose via the Embeddable widget., Open the Send Fax wizard., RcCallDashboard ### Community 5 - "Community 5" Cohesion: 0.16 Nodes (11): _cron_refresh_tokens(), _get_active_config(), _run_historical_import(), _cron_daily_voicemail_catchup(), _cron_sync_voicemails(), Fetch voicemails from RC Message Store for a date range., _run_historical_voicemail_import(), RcRecordingController (+3 more) ### Community 6 - "Community 6" Cohesion: 0.25 Nodes (5): _cron_fetch_transcripts(), _cron_renew_webhooks(), Make an authenticated POST request with rate-limit handling., Renew the webhook subscription., Send an SMS via the RingCentral REST API. :param str to_number: Recipie ### Community 7 - "Community 7" Cohesion: 0.25 Nodes (1): RcSystrayItem ### Community 8 - "Community 8" Cohesion: 0.33 Nodes (2): Placeholder for click-to-call -- actual dialing is handled by the JS widget., ResPartner ### Community 9 - "Community 9" Cohesion: 0.67 Nodes (2): loadRcWidget(), start() ### Community 10 - "Community 10" Cohesion: 0.67 Nodes (2): oauth_callback(), RcOAuthController ### Community 11 - "Community 11" Cohesion: 1.0 Nodes (1): ResConfigSettings ### Community 12 - "Community 12" Cohesion: 1.0 Nodes (0): ### Community 13 - "Community 13" Cohesion: 1.0 Nodes (0): ### Community 14 - "Community 14" Cohesion: 1.0 Nodes (0): ### Community 15 - "Community 15" Cohesion: 1.0 Nodes (0): ### Community 16 - "Community 16" Cohesion: 1.0 Nodes (0): ### Community 17 - "Community 17" Cohesion: 1.0 Nodes (1): Incremental sync: fetch voicemails since last sync. ### Community 18 - "Community 18" Cohesion: 1.0 Nodes (1): Re-scan past 3 days for any missed voicemails. ### Community 19 - "Community 19" Cohesion: 1.0 Nodes (1): Re-fetch audio and transcription for records missing them. Called via c ### Community 20 - "Community 20" Cohesion: 1.0 Nodes (1): Background job: import up to 12 months of voicemails in monthly chunks. ### Community 21 - "Community 21" Cohesion: 1.0 Nodes (1): Build a timeline string from Whisper segments showing silence gaps. Exa ### Community 22 - "Community 22" Cohesion: 1.0 Nodes (1): Batch-transcribe voicemails that have audio but no transcript. ### Community 23 - "Community 23" Cohesion: 1.0 Nodes (1): Auto-link a call to a partner by matching phone numbers. For outbound c ### Community 24 - "Community 24" Cohesion: 1.0 Nodes (1): Strip a phone number to last 10 digits for comparison. ### Community 25 - "Community 25" Cohesion: 1.0 Nodes (1): Incremental sync: only fetch calls since last successful sync. Uses `fu ### Community 26 - "Community 26" Cohesion: 1.0 Nodes (1): Daily catchup: re-scan the past 3 days to catch anything missed. Covers ### Community 27 - "Community 27" Cohesion: 1.0 Nodes (1): Fetch AI transcripts for calls that have recordings but no transcript. ### Community 28 - "Community 28" Cohesion: 1.0 Nodes (1): Match a fax to a contact by fax number, phone, or mobile. ### Community 29 - "Community 29" Cohesion: 1.0 Nodes (1): Background job: import up to 12 months of faxes in monthly chunks. ### Community 30 - "Community 30" Cohesion: 1.0 Nodes (1): Return the first connected config, or False. ### Community 31 - "Community 31" Cohesion: 1.0 Nodes (1): Background job: import up to 12 months of call history. Tracks which mo ### Community 32 - "Community 32" Cohesion: 1.0 Nodes (1): Refresh tokens for connected configs nearing expiry and recover error configs. ### Community 33 - "Community 33" Cohesion: 1.0 Nodes (1): Renew webhook subscriptions for all connected configs. ### Community 34 - "Community 34" Cohesion: 1.0 Nodes (1): Return RingCentral widget configuration for the JS frontend. ### Community 35 - "Community 35" Cohesion: 1.0 Nodes (1): Receive webhook events from RingCentral. ### Community 36 - "Community 36" Cohesion: 1.0 Nodes (1): Proxy a call recording from RingCentral with authentication. ### Community 37 - "Community 37" Cohesion: 1.0 Nodes (1): Handle the OAuth redirect from RingCentral after user authorizes. ## Knowledge Gaps - **76 isolated node(s):** `Incremental sync: fetch voicemails since last sync.`, `Re-scan past 3 days for any missed voicemails.`, `Re-fetch audio and transcription for records missing them. Called via c`, `Background job: import up to 12 months of voicemails in monthly chunks.`, `Fetch voicemails from RC Message Store for a date range.` (+71 more) These have ≤1 connection - possible missing edges or undocumented components. - **Thin community `Community 11`** (2 nodes): `ResConfigSettings`, `res_config_settings.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 12`** (2 nodes): `onClickCall()`, `rc_click_to_dial.js` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 13`** (1 nodes): `__init__.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 14`** (1 nodes): `__init__.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 15`** (1 nodes): `__init__.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 16`** (1 nodes): `__manifest__.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 17`** (1 nodes): `Incremental sync: fetch voicemails since last sync.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 18`** (1 nodes): `Re-scan past 3 days for any missed voicemails.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 19`** (1 nodes): `Re-fetch audio and transcription for records missing them. Called via c` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 20`** (1 nodes): `Background job: import up to 12 months of voicemails in monthly chunks.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 21`** (1 nodes): `Build a timeline string from Whisper segments showing silence gaps. Exa` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 22`** (1 nodes): `Batch-transcribe voicemails that have audio but no transcript.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 23`** (1 nodes): `Auto-link a call to a partner by matching phone numbers. For outbound c` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 24`** (1 nodes): `Strip a phone number to last 10 digits for comparison.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 25`** (1 nodes): `Incremental sync: only fetch calls since last successful sync. Uses `fu` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 26`** (1 nodes): `Daily catchup: re-scan the past 3 days to catch anything missed. Covers` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 27`** (1 nodes): `Fetch AI transcripts for calls that have recordings but no transcript.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 28`** (1 nodes): `Match a fax to a contact by fax number, phone, or mobile.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 29`** (1 nodes): `Background job: import up to 12 months of faxes in monthly chunks.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 30`** (1 nodes): `Return the first connected config, or False.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 31`** (1 nodes): `Background job: import up to 12 months of call history. Tracks which mo` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 32`** (1 nodes): `Refresh tokens for connected configs nearing expiry and recover error configs.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 33`** (1 nodes): `Renew webhook subscriptions for all connected configs.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 34`** (1 nodes): `Return RingCentral widget configuration for the JS frontend.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 35`** (1 nodes): `Receive webhook events from RingCentral.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 36`** (1 nodes): `Proxy a call recording from RingCentral with authentication.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 37`** (1 nodes): `Handle the OAuth redirect from RingCentral after user authorizes.` 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 `RcConfig` connect `Community 0` to `Community 5`, `Community 6`?** _High betweenness centrality (0.112) - this node is a cross-community bridge._ - **Why does `RcVoicemail` connect `Community 1` to `Community 0`, `Community 5`?** _High betweenness centrality (0.079) - this node is a cross-community bridge._ - **Are the 10 inferred relationships involving `_get_active_config()` (e.g. with `_cron_sync_voicemails()` and `_cron_daily_voicemail_catchup()`) actually correct?** _`_get_active_config()` has 10 INFERRED edges - model-reasoned connections that need verification._ - **What connects `Incremental sync: fetch voicemails since last sync.`, `Re-scan past 3 days for any missed voicemails.`, `Re-fetch audio and transcription for records missing them. Called via c` to the rest of the system?** _76 weakly-connected nodes found - possible documentation gaps or missing edges._ - **Should `Community 0` be split into smaller, more focused modules?** _Cohesion score 0.09 - nodes in this community are weakly interconnected._ - **Should `Community 1` be split into smaller, more focused modules?** _Cohesion score 0.09 - nodes in this community are weakly interconnected._ - **Should `Community 2` be split into smaller, more focused modules?** _Cohesion score 0.08 - nodes in this community are weakly interconnected._