# Graph Report - /Users/gurpreet/Github/Odoo-Modules/fusion_tasks (2026-04-22) ## Corpus Check - 13 files · ~20,730 words - Verdict: corpus is large enough that graph structure adds value. ## Summary - 320 nodes · 505 edges · 47 communities detected - Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 20 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]] - [[_COMMUNITY_Community 46|Community 46]] ## God Nodes (most connected - your core abstractions) 1. `FusionTechnicianTask` - 66 edges 2. `FusionTaskMapController` - 38 edges 3. `FusionTaskSyncConfig` - 14 edges 4. `create()` - 10 edges 5. `_float_to_time_str()` - 10 edges 6. `FusionEmailBuilderMixin` - 9 edges 7. `create()` - 7 edges 8. `_check_no_overlap()` - 6 edges 9. `_get_tech_start_locations()` - 6 edges 10. `_cron_check_late_arrivals()` - 6 edges ## Surprising Connections (you probably didn't know these) - `log_location()` --calls--> `create()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/technician_location.py → /Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_partner.py - `create()` --calls--> `_push_tasks()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/technician_task.py → /Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/task_sync.py - `get_map_data()` --calls--> `get_latest_locations()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/technician_task.py → /Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/technician_location.py - `register_subscription()` --calls--> `create()` [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py → /Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_partner.py ## Communities ### Community 0 - "Community 0" Cohesion: 0.04 Nodes (38): create(), _fill_address_vals(), FusionTechnicianTask, _onchange_is_in_store(), Populate address fields from a partner record., Hook: fill address from linked records during create. Base implementati, Hook: post-create side-effects for linked records. Override in fusion_c, Create or update a linked calendar.event for external calendar sync. On (+30 more) ### Community 1 - "Community 1" Cohesion: 0.07 Nodes (12): classifyDate(), classifyTask(), extractTechnicians(), floatToTime12(), FusionMapArchParser, FusionTaskMapController, groupTasks(), initialsOf() (+4 more) ### Community 2 - "Community 2" Cohesion: 0.09 Nodes (22): FusionPushSubscription, register_subscription(), create(), ResPartner, _cron_pull_remote_tasks(), FusionTaskSyncConfig, _push_shadow_status(), _push_tasks() (+14 more) ### Community 3 - "Community 3" Cohesion: 0.08 Nodes (20): _check_no_overlap(), _compute_datetimes(), _compute_prev_task_summary(), _compute_schedule_info(), _compute_time_displays(), default_get(), _float_to_time_str(), _maps_api_headers() (+12 more) ### Community 4 - "Community 4" Cohesion: 0.09 Nodes (22): FusionTechnicianLocation, get_latest_locations(), log_location(), _cron_calculate_travel_times(), _cron_check_late_arrivals(), _cron_send_push_notifications(), _get_clock_in_locations(), get_map_data() (+14 more) ### Community 5 - "Community 5" Cohesion: 0.14 Nodes (9): FusionEmailBuilderMixin, Build a labeled details table section. Args: heading: Secti, Build a left-border accent note block., Build a centered CTA button., Build a dashed-border attachment callout. Args: description, Return an inline status badge/pill HTML snippet., Return company name, phone, email for email templates., Check if email notifications are enabled in settings. (+1 more) ### Community 6 - "Community 6" Cohesion: 0.15 Nodes (8): Check that all earlier tasks for the same technician+date are completed., Write GPS coordinates from context onto the task record., Mark task as En Route., Mark task as In Progress., Cancel the task. Sends cancellation email and runs cancel hooks., Hook: additional side-effects after task cancellation. Override in fusio, Post a status change message to the task chatter., Send cancellation email. Base: no-op. Override in fusion_claims. ### Community 7 - "Community 7" Cohesion: 1.0 Nodes (2): _fusion_tasks_post_init(), Post-install hook for fusion_tasks. 1. Sets default ICP values (upsert - sa ### Community 8 - "Community 8" Cohesion: 1.0 Nodes (1): ResCompany ### Community 9 - "Community 9" Cohesion: 1.0 Nodes (1): ResUsers ### Community 10 - "Community 10" Cohesion: 1.0 Nodes (1): ResConfigSettings ### 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 (1): Log the current user's location. Called from portal JS. ### Community 14 - "Community 14" Cohesion: 1.0 Nodes (1): Get the most recent location for each technician (for map view). Includ ### Community 15 - "Community 15" Cohesion: 1.0 Nodes (1): Remove location logs based on configurable retention setting. Setting ( ### Community 16 - "Community 16" Cohesion: 1.0 Nodes (1): Register or update a push subscription. ### Community 17 - "Community 17" Cohesion: 1.0 Nodes (1): Generate 12-hour time slots every 15 minutes, store hours only (9 AM - 6 PM). ### Community 18 - "Community 18" Cohesion: 1.0 Nodes (1): Sync the 12h selection fields from the raw float values. ### Community 19 - "Community 19" Cohesion: 1.0 Nodes (1): Convert float hours to readable time strings. ### Community 20 - "Community 20" Cohesion: 1.0 Nodes (1): Set default duration based on task type. ### Community 21 - "Community 21" Cohesion: 1.0 Nodes (1): Auto-compute end time from start + duration. Also run overlap check. ### Community 22 - "Community 22" Cohesion: 1.0 Nodes (1): Combine date + float time into proper Datetime fields for calendar. time ### Community 23 - "Community 23" Cohesion: 1.0 Nodes (1): Show booked + available time slots for the technician on the selected date. ### Community 24 - "Community 24" Cohesion: 1.0 Nodes (1): Show previous task info + travel time warning with color coding. ### Community 25 - "Community 25" Cohesion: 1.0 Nodes (1): Auto-fill company address when task is marked as in-store. ### Community 26 - "Community 26" Cohesion: 1.0 Nodes (1): Auto-fill address fields from the selected client's address. ### Community 27 - "Community 27" Cohesion: 1.0 Nodes (1): Non-in-store tasks must have a geocoded address. ### Community 28 - "Community 28" Cohesion: 1.0 Nodes (1): Prevent overlapping bookings for the same technician on the same date. ### Community 29 - "Community 29" Cohesion: 1.0 Nodes (1): Auto-set start/end time to the first available slot when tech+date change. ### Community 30 - "Community 30" Cohesion: 1.0 Nodes (1): Handle calendar time range selection: pre-fill date + times from context. ### Community 31 - "Community 31" Cohesion: 1.0 Nodes (1): Helper to fill address vals dict from a partner record. ### Community 32 - "Community 32" Cohesion: 1.0 Nodes (1): Return task data, technician locations, and Google Maps API key. Args: ### Community 33 - "Community 33" Cohesion: 1.0 Nodes (1): Build a dict of technician start locations for route origins. Priority ### Community 34 - "Community 34" Cohesion: 1.0 Nodes (1): Get today's clock-in lat/lng from fusion_clock if installed. Uses the t ### Community 35 - "Community 35" Cohesion: 1.0 Nodes (1): Build request headers for the FusionMaps gateway. When fusion_tasks.map ### Community 36 - "Community 36" Cohesion: 1.0 Nodes (1): Query OSRM /route for driving time + distance. Returns (minutes, km) or ### Community 37 - "Community 37" Cohesion: 1.0 Nodes (1): Query Nominatim /search for address → (lat, lng). Returns (0.0, 0.0) on ### Community 38 - "Community 38" Cohesion: 1.0 Nodes (1): Cron job: Refresh travel times for TODAY's active tasks only. Future-da ### Community 39 - "Community 39" Cohesion: 1.0 Nodes (1): Cron: detect tasks where the technician hasn't started and the scheduled ### Community 40 - "Community 40" Cohesion: 1.0 Nodes (1): Cron: Send push notifications for upcoming tasks. ### Community 41 - "Community 41" Cohesion: 1.0 Nodes (1): Convert float hours to time string like '9:30 AM'. ### Community 42 - "Community 42" Cohesion: 1.0 Nodes (1): Push local task changes to all active remote instances. Called from tech ### Community 43 - "Community 43" Cohesion: 1.0 Nodes (1): Push local status changes on shadow tasks back to their source instance. ### Community 44 - "Community 44" Cohesion: 1.0 Nodes (1): Push a technician's location update to all remote instances. Called whe ### Community 45 - "Community 45" Cohesion: 1.0 Nodes (1): Cron job: pull tasks and technician locations from all active remote instances. ### Community 46 - "Community 46" Cohesion: 1.0 Nodes (1): Remove shadow tasks older than 30 days (completed/cancelled). ## Knowledge Gaps - **123 isolated node(s):** `Post-install hook for fusion_tasks. 1. Sets default ICP values (upsert - sa`, `FusionTechnicianLocation`, `Log the current user's location. Called from portal JS.`, `Get the most recent location for each technician (for map view). Includ`, `Remove location logs based on configurable retention setting. Setting (` (+118 more) These have ≤1 connection - possible missing edges or undocumented components. - **Thin community `Community 8`** (2 nodes): `ResCompany`, `res_company.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 9`** (2 nodes): `ResUsers`, `res_users.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 10`** (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 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): `__manifest__.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 13`** (1 nodes): `Log the current user's location. Called from portal JS.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 14`** (1 nodes): `Get the most recent location for each technician (for map view). Includ` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 15`** (1 nodes): `Remove location logs based on configurable retention setting. Setting (` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 16`** (1 nodes): `Register or update a push subscription.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 17`** (1 nodes): `Generate 12-hour time slots every 15 minutes, store hours only (9 AM - 6 PM).` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 18`** (1 nodes): `Sync the 12h selection fields from the raw float values.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 19`** (1 nodes): `Convert float hours to readable time strings.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 20`** (1 nodes): `Set default duration based on task type.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 21`** (1 nodes): `Auto-compute end time from start + duration. Also run overlap check.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 22`** (1 nodes): `Combine date + float time into proper Datetime fields for calendar. time` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 23`** (1 nodes): `Show booked + available time slots for the technician on the selected date.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 24`** (1 nodes): `Show previous task info + travel time warning with color coding.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 25`** (1 nodes): `Auto-fill company address when task is marked as in-store.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 26`** (1 nodes): `Auto-fill address fields from the selected client's address.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 27`** (1 nodes): `Non-in-store tasks must have a geocoded address.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 28`** (1 nodes): `Prevent overlapping bookings for the same technician on the same date.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 29`** (1 nodes): `Auto-set start/end time to the first available slot when tech+date change.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 30`** (1 nodes): `Handle calendar time range selection: pre-fill date + times from context.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 31`** (1 nodes): `Helper to fill address vals dict from a partner record.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 32`** (1 nodes): `Return task data, technician locations, and Google Maps API key. Args:` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 33`** (1 nodes): `Build a dict of technician start locations for route origins. Priority` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 34`** (1 nodes): `Get today's clock-in lat/lng from fusion_clock if installed. Uses the t` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 35`** (1 nodes): `Build request headers for the FusionMaps gateway. When fusion_tasks.map` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 36`** (1 nodes): `Query OSRM /route for driving time + distance. Returns (minutes, km) or` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 37`** (1 nodes): `Query Nominatim /search for address → (lat, lng). Returns (0.0, 0.0) on` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 38`** (1 nodes): `Cron job: Refresh travel times for TODAY's active tasks only. Future-da` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 39`** (1 nodes): `Cron: detect tasks where the technician hasn't started and the scheduled` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 40`** (1 nodes): `Cron: Send push notifications for upcoming tasks.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 41`** (1 nodes): `Convert float hours to time string like '9:30 AM'.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 42`** (1 nodes): `Push local task changes to all active remote instances. Called from tech` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 43`** (1 nodes): `Push local status changes on shadow tasks back to their source instance.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 44`** (1 nodes): `Push a technician's location update to all remote instances. Called whe` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 45`** (1 nodes): `Cron job: pull tasks and technician locations from all active remote instances.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 46`** (1 nodes): `Remove shadow tasks older than 30 days (completed/cancelled).` 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 `FusionTechnicianTask` connect `Community 0` to `Community 3`, `Community 4`, `Community 6`?** _High betweenness centrality (0.328) - this node is a cross-community bridge._ - **Why does `_push_shadow_status()` connect `Community 2` to `Community 4`, `Community 6`?** _High betweenness centrality (0.030) - this node is a cross-community bridge._ - **Why does `_push_tasks()` connect `Community 2` to `Community 0`, `Community 4`?** _High betweenness centrality (0.027) - this node is a cross-community bridge._ - **What connects `Post-install hook for fusion_tasks. 1. Sets default ICP values (upsert - sa`, `FusionTechnicianLocation`, `Log the current user's location. Called from portal JS.` to the rest of the system?** _123 weakly-connected nodes found - possible documentation gaps or missing edges._ - **Should `Community 0` be split into smaller, more focused modules?** _Cohesion score 0.04 - nodes in this community are weakly interconnected._ - **Should `Community 1` be split into smaller, more focused modules?** _Cohesion score 0.07 - nodes in this community are weakly interconnected._ - **Should `Community 2` be split into smaller, more focused modules?** _Cohesion score 0.09 - nodes in this community are weakly interconnected._