# Graph Report - /Users/gurpreet/Github/Odoo-Modules/fusion_schedule (2026-04-22) ## Corpus Check - 14 files · ~13,839 words - Verdict: corpus is large enough that graph structure adds value. ## Summary - 207 nodes · 322 edges · 45 communities detected - Extraction: 87% EXTRACTED · 13% INFERRED · 0% AMBIGUOUS · INFERRED: 42 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]] ## God Nodes (most connected - your core abstractions) 1. `FusionCalendarAccount` - 35 edges 2. `PortalSchedule` - 17 edges 3. `create()` - 10 edges 4. `oauth_callback()` - 8 edges 5. `navigateWeek()` - 6 edges 6. `schedule_ai_suggest()` - 6 edges 7. `formatDateStr()` - 5 edges 8. `renderWeekCalendar()` - 5 edges 9. `schedule_page()` - 5 edges 10. `schedule_book_submit()` - 5 edges ## Surprising Connections (you probably didn't know these) - `oauth_callback()` --calls--> `_fetch_google_email()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_schedule/controllers/portal_schedule.py → /Users/gurpreet/Github/Odoo-Modules/fusion_schedule/models/fusion_calendar_account.py - `oauth_callback()` --calls--> `_fetch_microsoft_email()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_schedule/controllers/portal_schedule.py → /Users/gurpreet/Github/Odoo-Modules/fusion_schedule/models/fusion_calendar_account.py - `oauth_callback()` --calls--> `create()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_schedule/controllers/portal_schedule.py → /Users/gurpreet/Github/Odoo-Modules/fusion_schedule/models/res_users.py - `schedule_book_submit()` --calls--> `create()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_schedule/controllers/portal_schedule.py → /Users/gurpreet/Github/Odoo-Modules/fusion_schedule/models/res_users.py - `public_book_submit()` --calls--> `create()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_schedule/controllers/portal_schedule.py → /Users/gurpreet/Github/Odoo-Modules/fusion_schedule/models/res_users.py ## Communities ### Community 0 - "Community 0" Cohesion: 0.09 Nodes (30): CustomerPortal, connect_google(), connect_microsoft(), _format_hour(), PortalSchedule, public_available_slots(), public_booking_page(), public_manage_page() (+22 more) ### Community 1 - "Community 1" Cohesion: 0.09 Nodes (16): FusionCalendarAccount, Return a valid access token, refreshing if necessary., Refresh the access token using the refresh token., Refresh Google OAuth token., Refresh Microsoft OAuth token., Exchange Google auth code for tokens., Exchange Microsoft auth code for tokens., Convert Microsoft Graph API event dict to Odoo calendar.event vals. (+8 more) ### Community 2 - "Community 2" Cohesion: 0.13 Nodes (12): Context flags to suppress all email notifications during sync., Find an existing calendar event matching name+start+stop to avoid duplicates., Create or update a link between an Odoo event and an external event. If, Process a single Google Calendar event., Convert Google Calendar event dict to Odoo calendar.event vals., Process a single Microsoft Calendar event., public_book_submit(), After booking, calculate travel time from/to adjacent appointments and c (+4 more) ### Community 3 - "Community 3" Cohesion: 0.12 Nodes (11): _cron_sync_all_accounts(), _fetch_google_email(), _fetch_microsoft_email(), Push Odoo-native events to the FIRST active external calendar only. Onl, Pull events from the external calendar into Odoo., Pull events from Google Calendar., GET request with automatic retry on 429 / 503 and connection errors., sync_current_user() (+3 more) ### Community 4 - "Community 4" Cohesion: 0.13 Nodes (11): CalendarEvent, Check if Fusion Schedule should skip syncing (native Odoo sync active)., On delete, also remove from all linked external calendars., On update, push changes to all linked external calendars., Disconnect this calendar account and clean up., Delete an event from Google Calendar., Delete an event from Microsoft Calendar., public_manage_cancel() (+3 more) ### Community 5 - "Community 5" Cohesion: 0.35 Nodes (11): addDays(), fetchAiSuggestions(), fetchSlots(), fetchWeekEvents(), formatDateStr(), getAppointmentTypeId(), getMonday(), navigateWeek() (+3 more) ### Community 6 - "Community 6" Cohesion: 0.29 Nodes (0): ### Community 7 - "Community 7" Cohesion: 0.4 Nodes (2): _loadFusionAccounts(), onFusionSyncNow() ### Community 8 - "Community 8" Cohesion: 0.5 Nodes (2): Pull events from Microsoft Calendar., GET request with automatic retry on 429 / 503 and connection errors. ### Community 9 - "Community 9" Cohesion: 0.5 Nodes (1): ResConfigSettings ### Community 10 - "Community 10" Cohesion: 1.0 Nodes (1): FusionCalendarEventLink ### Community 11 - "Community 11" Cohesion: 1.0 Nodes (0): ### 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 (1): Get the email of the authenticated Google account. ### Community 17 - "Community 17" Cohesion: 1.0 Nodes (1): Get the email of the authenticated Microsoft account. ### Community 18 - "Community 18" Cohesion: 1.0 Nodes (1): Return connected calendar accounts for the current user (called from backend cal ### Community 19 - "Community 19" Cohesion: 1.0 Nodes (1): Trigger immediate sync for the current user's accounts (called from backend cale ### Community 20 - "Community 20" Cohesion: 1.0 Nodes (1): Cron entry point: sync all active accounts. ### Community 21 - "Community 21" Cohesion: 1.0 Nodes (1): Schedule overview: upcoming appointments, connected calendars, and shareable lin ### Community 22 - "Community 22" Cohesion: 1.0 Nodes (1): Save the user's schedule preferences. ### Community 23 - "Community 23" Cohesion: 1.0 Nodes (1): Booking form for a new appointment. ### Community 24 - "Community 24" Cohesion: 1.0 Nodes (1): Convert a decimal hour (e.g. 13.5) to '1:30 PM'. ### Community 25 - "Community 25" Cohesion: 1.0 Nodes (1): JSON-RPC endpoint: return available time slots for a date. ### Community 26 - "Community 26" Cohesion: 1.0 Nodes (1): Return the user's calendar events for the Mon-Sun week containing selected_date. ### Community 27 - "Community 27" Cohesion: 1.0 Nodes (1): Process the booking form submission. ### Community 28 - "Community 28" Cohesion: 1.0 Nodes (1): Cancel (delete) a calendar event owned by the current user. ### Community 29 - "Community 29" Cohesion: 1.0 Nodes (1): Reschedule a calendar event to a new date/time. ### Community 30 - "Community 30" Cohesion: 1.0 Nodes (1): Public page for visitors to view/manage their booked appointment. ### Community 31 - "Community 31" Cohesion: 1.0 Nodes (1): Public cancel -- visitor cancels their appointment via token. ### Community 32 - "Community 32" Cohesion: 1.0 Nodes (1): Public reschedule -- visitor picks a new slot via token. ### Community 33 - "Community 33" Cohesion: 1.0 Nodes (1): Return available slots for the staff user tied to this event. ### Community 34 - "Community 34" Cohesion: 1.0 Nodes (1): AI-powered slot suggestions considering travel and schedule. ### Community 35 - "Community 35" Cohesion: 1.0 Nodes (1): AI-powered schedule optimization for an entire day. ### Community 36 - "Community 36" Cohesion: 1.0 Nodes (1): Start Google OAuth flow to connect a Google Calendar account. ### Community 37 - "Community 37" Cohesion: 1.0 Nodes (1): Start Microsoft OAuth flow to connect an Outlook Calendar account. ### Community 38 - "Community 38" Cohesion: 1.0 Nodes (1): Handle OAuth callback from Google or Microsoft. ### Community 39 - "Community 39" Cohesion: 1.0 Nodes (1): Disconnect a calendar account. ### Community 40 - "Community 40" Cohesion: 1.0 Nodes (1): Trigger immediate sync for a calendar account. ### Community 41 - "Community 41" Cohesion: 1.0 Nodes (1): Public booking page — no login required. ### Community 42 - "Community 42" Cohesion: 1.0 Nodes (1): Public endpoint: return available slots for a date (no login needed). ### Community 43 - "Community 43" Cohesion: 1.0 Nodes (1): Process public booking form submission. ### Community 44 - "Community 44" Cohesion: 1.0 Nodes (1): Enable or disable public booking page. ## Knowledge Gaps - **79 isolated node(s):** `Return a valid access token, refreshing if necessary.`, `Refresh the access token using the refresh token.`, `Refresh Google OAuth token.`, `Refresh Microsoft OAuth token.`, `Exchange Google auth code for tokens.` (+74 more) These have ≤1 connection - possible missing edges or undocumented components. - **Thin community `Community 10`** (2 nodes): `FusionCalendarEventLink`, `fusion_calendar_event_link.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 11`** (1 nodes): `__init__.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 12`** (1 nodes): `__init__.py` 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): `__manifest__.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): `Get the email of the authenticated Google account.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 17`** (1 nodes): `Get the email of the authenticated Microsoft account.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 18`** (1 nodes): `Return connected calendar accounts for the current user (called from backend cal` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 19`** (1 nodes): `Trigger immediate sync for the current user's accounts (called from backend cale` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 20`** (1 nodes): `Cron entry point: sync all active accounts.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 21`** (1 nodes): `Schedule overview: upcoming appointments, connected calendars, and shareable lin` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 22`** (1 nodes): `Save the user's schedule preferences.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 23`** (1 nodes): `Booking form for a new appointment.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 24`** (1 nodes): `Convert a decimal hour (e.g. 13.5) to '1:30 PM'.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 25`** (1 nodes): `JSON-RPC endpoint: return available time slots for a date.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 26`** (1 nodes): `Return the user's calendar events for the Mon-Sun week containing selected_date.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 27`** (1 nodes): `Process the booking form submission.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 28`** (1 nodes): `Cancel (delete) a calendar event owned by the current user.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 29`** (1 nodes): `Reschedule a calendar event to a new date/time.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 30`** (1 nodes): `Public page for visitors to view/manage their booked appointment.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 31`** (1 nodes): `Public cancel -- visitor cancels their appointment via token.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 32`** (1 nodes): `Public reschedule -- visitor picks a new slot via token.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 33`** (1 nodes): `Return available slots for the staff user tied to this event.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 34`** (1 nodes): `AI-powered slot suggestions considering travel and schedule.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 35`** (1 nodes): `AI-powered schedule optimization for an entire day.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 36`** (1 nodes): `Start Google OAuth flow to connect a Google Calendar account.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 37`** (1 nodes): `Start Microsoft OAuth flow to connect an Outlook Calendar account.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 38`** (1 nodes): `Handle OAuth callback from Google or Microsoft.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 39`** (1 nodes): `Disconnect a calendar account.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 40`** (1 nodes): `Trigger immediate sync for a calendar account.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 41`** (1 nodes): `Public booking page — no login required.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 42`** (1 nodes): `Public endpoint: return available slots for a date (no login needed).` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 43`** (1 nodes): `Process public booking form submission.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 44`** (1 nodes): `Enable or disable public booking page.` 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 `FusionCalendarAccount` connect `Community 1` to `Community 8`, `Community 2`, `Community 3`, `Community 4`?** _High betweenness centrality (0.133) - this node is a cross-community bridge._ - **Why does `PortalSchedule` connect `Community 0` to `Community 2`, `Community 3`?** _High betweenness centrality (0.063) - this node is a cross-community bridge._ - **Why does `create()` connect `Community 2` to `Community 1`, `Community 3`?** _High betweenness centrality (0.056) - this node is a cross-community bridge._ - **Are the 8 inferred relationships involving `create()` (e.g. with `._upsert_event_link()` and `._process_google_event()`) actually correct?** _`create()` has 8 INFERRED edges - model-reasoned connections that need verification._ - **Are the 6 inferred relationships involving `oauth_callback()` (e.g. with `._exchange_google_code()` and `_fetch_google_email()`) actually correct?** _`oauth_callback()` has 6 INFERRED edges - model-reasoned connections that need verification._ - **What connects `Return a valid access token, refreshing if necessary.`, `Refresh the access token using the refresh token.`, `Refresh Google OAuth token.` to the rest of the system?** _79 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._