{"components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"JWT","description":"JWT dari POST /api/v1/auth/login","scheme":"bearer","type":"http"}}},"info":{"contact":{"name":"SanoCare Tech","url":"https://safencare.work"},"description":"Operational intelligence API for SanoCare field service management. Connects to Kelava live database for real-time technician, customer, and visit data.","title":"SanoCare KIL API","version":"2.2.0"},"openapi":"3.0.3","paths":{"/":{"get":{"operationId":"web_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Redirect to Enterprise Dashboard","tags":["Web"]}},"/api/v1/auth/change-password":{"post":{"operationId":"auth_api_change_password_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Change password for current user.","tags":["Auth Api"]}},"/api/v1/auth/login":{"post":{"operationId":"auth_api_login_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Authenticate with ID Pekerja / email + password, receive JWT tokens.","tags":["Auth Api"]}},"/api/v1/auth/logout":{"post":{"operationId":"auth_api_logout_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Revoke current refresh token.","tags":["Auth Api"]}},"/api/v1/auth/me":{"get":{"operationId":"auth_api_get_me_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Get current authenticated user profile.","tags":["Auth Api"]}},"/api/v1/auth/refresh":{"post":{"operationId":"auth_api_refresh_token_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Exchange refresh token for new access + refresh tokens.","tags":["Auth Api"]}},"/api/v1/auth/verify":{"get":{"operationId":"auth_api_verify_token_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Quick token verification endpoint.","tags":["Auth Api"]}},"/api/v1/docs":{"get":{"operationId":"api_docs_api_endpoint_list_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"List all API endpoints grouped by blueprint (simple JSON for Explorer UI).","tags":["Api Docs"]}},"/api/v1/enterprise/absence/cascade/summary":{"get":{"operationId":"absence_cascade_cascade_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Summary cascade events for a month. ?month=YYYY-MM","tags":["Absence Cascade"]}},"/api/v1/enterprise/absence/{absence_id}/cascade":{"get":{"operationId":"absence_cascade_get_cascade_log_get","parameters":[{"in":"path","name":"absence_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"absence_cascade.get_cascade_log","tags":["Absence Cascade"]},"post":{"operationId":"absence_cascade_post_cascade_post","parameters":[{"in":"path","name":"absence_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"absence_cascade.post_cascade","tags":["Absence Cascade"]}},"/api/v1/enterprise/absence/{absence_id}/cascade/revert":{"post":{"operationId":"absence_cascade_post_revert_post","parameters":[{"in":"path","name":"absence_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"absence_cascade.post_revert","tags":["Absence Cascade"]}},"/api/v1/enterprise/accurate/download":{"get":{"operationId":"accurate_export_download_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"GET /accurate/download?month=YYYY-MM \u2014 download CSV for Accurate import.","tags":["Accurate Export"]}},"/api/v1/enterprise/accurate/preview":{"get":{"operationId":"accurate_export_preview_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"GET /accurate/preview?month=YYYY-MM \u2014 preview completed visits for a month.","tags":["Accurate Export"]}},"/api/v1/enterprise/accurate/summary":{"get":{"operationId":"accurate_export_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"GET /accurate/summary?months=3 \u2014 monthly roll-up for the last N months.","tags":["Accurate Export"]}},"/api/v1/enterprise/attendance/devices":{"get":{"operationId":"attendance_list_devices_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all registered attendance devices.","tags":["Attendance"]},"post":{"operationId":"attendance_register_device_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Register a new attendance device.","tags":["Attendance"]}},"/api/v1/enterprise/attendance/devices/{device_id}":{"patch":{"operationId":"attendance_update_device_patch","parameters":[{"in":"path","name":"device_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Update device details.","tags":["Attendance"]}},"/api/v1/enterprise/attendance/history":{"get":{"operationId":"attendance_attendance_history_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Historical attendance logs.","tags":["Attendance"]}},"/api/v1/enterprise/attendance/stats":{"get":{"operationId":"attendance_attendance_stats_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Attendance statistics for a date range.","tags":["Attendance"]}},"/api/v1/enterprise/attendance/today":{"get":{"operationId":"attendance_attendance_today_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Today's attendance board: who's checked in, who hasn't.","tags":["Attendance"]}},"/api/v1/enterprise/attendance/user-map":{"get":{"operationId":"attendance_list_user_map_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List fingerprint user \u2192 technician mappings.","tags":["Attendance"]},"post":{"operationId":"attendance_create_user_map_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Map a fingerprint user ID to a SanoCare technician.","tags":["Attendance"]}},"/api/v1/enterprise/attendance/user-map/{mapping_id}":{"delete":{"operationId":"attendance_delete_user_map_delete","parameters":[{"in":"path","name":"mapping_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Remove a fingerprint user mapping.","tags":["Attendance"]}},"/api/v1/enterprise/audit-log":{"get":{"operationId":"audit_log_list_audit_logs_get","parameters":[{"description":"module, action, entity_type, actor_id, days, page, per_page, q","in":"query","name":"Params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Query audit logs with filters.","tags":["Audit Log"]}},"/api/v1/enterprise/audit-log/entity/{entity_type}/{entity_id}":{"get":{"operationId":"audit_log_entity_history_get","parameters":[{"in":"path","name":"entity_type","required":true,"schema":{"type":"string"}},{"in":"path","name":"entity_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get full audit history for a specific entity.","tags":["Audit Log"]}},"/api/v1/enterprise/audit-log/stats":{"get":{"operationId":"audit_log_audit_stats_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Audit log statistics for the dashboard.","tags":["Audit Log"]}},"/api/v1/enterprise/audit/action":{"post":{"operationId":"audit_log_supervisory_action_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Log a supervisory action on any entity.","tags":["Audit"]}},"/api/v1/enterprise/audit/actions/{entity_type}/{entity_id}":{"get":{"operationId":"audit_get_entity_actions_get","parameters":[{"in":"path","name":"entity_type","required":true,"schema":{"type":"string"}},{"in":"path","name":"entity_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get all supervisory actions for a specific entity.","tags":["Audit"]}},"/api/v1/enterprise/audit/blockers/{month}":{"get":{"operationId":"audit_v2_blockers_get","parameters":[{"in":"path","name":"month","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"audit_v2.blockers","tags":["Audit V2"]}},"/api/v1/enterprise/audit/compare/list":{"get":{"operationId":"audit_compare_list_uploads_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"audit_compare.list_uploads","tags":["Audit Compare"]}},"/api/v1/enterprise/audit/compare/row/{row_id}/resolve":{"post":{"operationId":"audit_compare_resolve_row_post","parameters":[{"in":"path","name":"row_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"audit_compare.resolve_row","tags":["Audit Compare"]}},"/api/v1/enterprise/audit/compare/upload":{"post":{"operationId":"audit_compare_upload_xlsx_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"audit_compare.upload_xlsx","tags":["Audit Compare"]}},"/api/v1/enterprise/audit/compare/{upload_id}":{"get":{"operationId":"audit_compare_get_compare_get","parameters":[{"in":"path","name":"upload_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"audit_compare.get_compare","tags":["Audit Compare"]}},"/api/v1/enterprise/audit/dashboard":{"get":{"operationId":"audit_audit_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Supervisory overview: open reviews, escalation counts, recent activity.","tags":["Audit"]}},"/api/v1/enterprise/audit/feed":{"get":{"operationId":"audit_activity_feed_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Unified activity feed across all modules:","tags":["Audit"]}},"/api/v1/enterprise/audit/layer/calendar-count/{month}":{"get":{"operationId":"audit_v2_layer_calendar_count_get","parameters":[{"in":"path","name":"month","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"audit_v2.layer_calendar_count","tags":["Audit V2"]}},"/api/v1/enterprise/audit/layer/contract-coverage/{month}":{"get":{"operationId":"audit_v2_layer_contract_coverage_get","parameters":[{"in":"path","name":"month","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"SSOT contract coverage check for target month.","tags":["Audit V2"]}},"/api/v1/enterprise/audit/layer/duplicates/{month}":{"get":{"operationId":"audit_v2_layer_duplicates_get","parameters":[{"in":"path","name":"month","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"audit_v2.layer_duplicates","tags":["Audit V2"]}},"/api/v1/enterprise/audit/layer/tech-assignment/{month}":{"get":{"operationId":"audit_v2_layer_tech_assignment_get","parameters":[{"in":"path","name":"month","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"audit_v2.layer_tech_assignment","tags":["Audit V2"]}},"/api/v1/enterprise/audit/publish-gate/{month}":{"post":{"operationId":"audit_v2_publish_gate_post","parameters":[{"in":"path","name":"month","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"audit_v2.publish_gate","tags":["Audit V2"]}},"/api/v1/enterprise/audit/readiness/{month}":{"get":{"operationId":"audit_v2_readiness_get","parameters":[{"in":"path","name":"month","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"audit_v2.readiness","tags":["Audit V2"]}},"/api/v1/enterprise/barcode/scan":{"post":{"operationId":"barcode_checklist_scan_unit_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Technician scans a unit barcode during visit.","tags":["Barcode Checklist"]}},"/api/v1/enterprise/barcode/units":{"get":{"operationId":"barcode_checklist_list_units_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List units for a customer. Query: customer_id (required).","tags":["Barcode Checklist"]},"post":{"operationId":"barcode_checklist_register_unit_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Register a new unit with barcode.","tags":["Barcode Checklist"]}},"/api/v1/enterprise/barcode/units/bulk":{"post":{"operationId":"barcode_checklist_bulk_register_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Bulk register units.","tags":["Barcode Checklist"]}},"/api/v1/enterprise/barcode/units/{unit_id}/history":{"get":{"operationId":"barcode_checklist_unit_history_get","parameters":[{"in":"path","name":"unit_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Scan history for a specific unit.","tags":["Barcode Checklist"]}},"/api/v1/enterprise/barcode/visit-checklist/{road_plan_id}":{"get":{"operationId":"barcode_checklist_visit_checklist_get","parameters":[{"in":"path","name":"road_plan_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get checklist status for a visit: which units were scanned, which weren't.","tags":["Barcode Checklist"]}},"/api/v1/enterprise/briefing/today":{"get":{"operationId":"briefing_today_briefing_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Morning briefing: everything admin needs to know today.","tags":["Briefing"]}},"/api/v1/enterprise/calendar/approve-draft":{"post":{"operationId":"schedule_draft_approve_draft_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"POST body: { \"month\": \"2026-06\", \"notes\": \"...\" }","tags":["Schedule Draft"]}},"/api/v1/enterprise/calendar/cancel":{"post":{"operationId":"calendar_calendar_cancel_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Cancel a Kelava road plan from the dashboard (without rescheduling).","tags":["Calendar"]}},"/api/v1/enterprise/calendar/conflicts":{"get":{"operationId":"calendar_calendar_conflicts_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Detect scheduling conflicts (double bookings, overload).","tags":["Calendar"]}},"/api/v1/enterprise/calendar/day-summary":{"get":{"operationId":"calendar_calendar_day_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get summary for a specific day - useful for calendar header.","tags":["Calendar"]}},"/api/v1/enterprise/calendar/detect-patterns":{"post":{"operationId":"schedule_draft_detect_patterns_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Analisa snc_schedule_events untuk satu bulan (atau multi-bulan lookback).","tags":["Schedule Draft"]}},"/api/v1/enterprise/calendar/diff":{"get":{"operationId":"schedule_diff_calendar_diff_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"schedule_diff.calendar_diff","tags":["Schedule Diff"]}},"/api/v1/enterprise/calendar/draft":{"get":{"operationId":"schedule_draft_get_draft_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"GET /calendar/draft?month=2026-06","tags":["Schedule Draft"]}},"/api/v1/enterprise/calendar/draft-event/{event_id}":{"delete":{"operationId":"schedule_draft_delete_draft_event_delete","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Remove a single draft event (supervisor review: reject this slot).","tags":["Schedule Draft"]}},"/api/v1/enterprise/calendar/draft/latest":{"get":{"operationId":"schedule_calendar_latest_batch_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"schedule_calendar.latest_batch","tags":["Schedule Calendar"]}},"/api/v1/enterprise/calendar/draft/{batch_id}/approve-clean-days":{"post":{"operationId":"schedule_calendar_approve_clean_days_post","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"schedule_calendar.approve_clean_days","tags":["Schedule Calendar"]}},"/api/v1/enterprise/calendar/draft/{batch_id}/approve-day":{"post":{"operationId":"schedule_calendar_approve_day_post","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"schedule_calendar.approve_day","tags":["Schedule Calendar"]}},"/api/v1/enterprise/calendar/draft/{batch_id}/audit":{"get":{"operationId":"schedule_calendar_get_audit_get","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"schedule_calendar.get_audit","tags":["Schedule Calendar"]}},"/api/v1/enterprise/calendar/draft/{batch_id}/conflicts":{"get":{"operationId":"schedule_calendar_list_conflicts_get","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"schedule_calendar.list_conflicts","tags":["Schedule Calendar"]}},"/api/v1/enterprise/calendar/draft/{batch_id}/conflicts/{conflict_id}":{"get":{"operationId":"schedule_calendar_conflict_detail_get","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"conflict_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"schedule_calendar.conflict_detail","tags":["Schedule Calendar"]}},"/api/v1/enterprise/calendar/draft/{batch_id}/conflicts/{conflict_id}/apply-fix":{"post":{"operationId":"schedule_calendar_apply_fix_post","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"conflict_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"schedule_calendar.apply_fix","tags":["Schedule Calendar"]}},"/api/v1/enterprise/calendar/draft/{batch_id}/day":{"get":{"operationId":"schedule_calendar_day_schedule_get","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"schedule_calendar.day_schedule","tags":["Schedule Calendar"]}},"/api/v1/enterprise/calendar/draft/{batch_id}/detect-conflicts":{"post":{"operationId":"schedule_calendar_detect_conflicts_endpoint_post","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"schedule_calendar.detect_conflicts_endpoint","tags":["Schedule Calendar"]}},"/api/v1/enterprise/calendar/draft/{batch_id}/kpi":{"get":{"operationId":"schedule_calendar_kpi_get","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"schedule_calendar.kpi","tags":["Schedule Calendar"]}},"/api/v1/enterprise/calendar/draft/{batch_id}/panels":{"get":{"operationId":"schedule_calendar_panels_get","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"integer"}},{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"day|week|month (default: month)","in":"query","name":"scope","required":false,"schema":{"type":"string"}},{"description":"YYYY-MM-DD (required for day/week scope)","in":"query","name":"date","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Returns 3 side panels in one call:","tags":["Schedule Calendar"]}},"/api/v1/enterprise/calendar/draft/{batch_id}/publish":{"post":{"operationId":"schedule_calendar_publish_schedule_post","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"schedule_calendar.publish_schedule","tags":["Schedule Calendar"]}},"/api/v1/enterprise/calendar/draft/{batch_id}/summary":{"get":{"operationId":"schedule_calendar_summary_get","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"schedule_calendar.summary","tags":["Schedule Calendar"]}},"/api/v1/enterprise/calendar/draft/{target_month}/export.xlsx":{"get":{"operationId":"schedule_draft_export_draft_xlsx_get","parameters":[{"in":"path","name":"target_month","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"GET /calendar/draft/2026-07/export.xlsx","tags":["Schedule Draft"]}},"/api/v1/enterprise/calendar/generate-draft":{"post":{"operationId":"schedule_draft_generate_draft_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Generate draft schedule_events untuk target_month.","tags":["Schedule Draft"]}},"/api/v1/enterprise/calendar/patterns":{"get":{"operationId":"schedule_draft_get_patterns_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"GET /calendar/patterns?month=2026-05","tags":["Schedule Draft"]}},"/api/v1/enterprise/calendar/reschedule":{"post":{"operationId":"calendar_calendar_reschedule_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Reschedule a Kelava road plan from the dashboard.","tags":["Calendar"]}},"/api/v1/enterprise/calendar/schedule":{"get":{"operationId":"calendar_calendar_schedule_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"YYYY-MM-DD (default: today)","in":"query","name":"- start_date","required":false,"schema":{"type":"string"}},{"description":"YYYY-MM-DD (default: start + 6 days)","in":"query","name":"- end_date","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get weekly schedule grid: technicians \u00d7 time slots.","tags":["Calendar"]}},"/api/v1/enterprise/calendar/technician/{tech_id}/slots":{"get":{"operationId":"calendar_technician_slots_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}},{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"YYYY-MM-DD (default: today)","in":"query","name":"- date","required":false,"schema":{"type":"string"}},{"description":"number of days to check (default: 7)","in":"query","name":"- days","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get available slots for a specific technician.","tags":["Calendar"]}},"/api/v1/enterprise/chemicals/catalog":{"get":{"operationId":"chemical_tracking_list_catalog_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all chemicals in catalog.","tags":["Chemical Tracking"]},"post":{"operationId":"chemical_tracking_add_chemical_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Add a chemical to the catalog.","tags":["Chemical Tracking"]}},"/api/v1/enterprise/chemicals/log":{"post":{"operationId":"chemical_tracking_log_usage_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Log chemical usage for a visit.","tags":["Chemical Tracking"]}},"/api/v1/enterprise/chemicals/summary":{"get":{"operationId":"chemical_tracking_usage_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Aggregate chemical usage by type/chemical for reporting.","tags":["Chemical Tracking"]}},"/api/v1/enterprise/chemicals/usage":{"get":{"operationId":"chemical_tracking_usage_history_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Chemical usage history. Filters: customer_id, technician_id, days.","tags":["Chemical Tracking"]}},"/api/v1/enterprise/client-portal/tokens":{"get":{"operationId":"client_portal_list_tokens_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all portal tokens (admin view).","tags":["Client Portal"]},"post":{"operationId":"client_portal_create_token_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create a shareable portal token for a customer.","tags":["Client Portal"]}},"/api/v1/enterprise/client-portal/tokens/{token_id}/revoke":{"post":{"operationId":"client_portal_revoke_token_post","parameters":[{"in":"path","name":"token_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Revoke a portal token.","tags":["Client Portal"]}},"/api/v1/enterprise/client-portal/view":{"get":{"operationId":"client_portal_portal_view_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Public client portal view. Accessed via token query parameter.","tags":["Client Portal"]}},"/api/v1/enterprise/complaints":{"get":{"operationId":"complaints_list_complaints_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List complaints with optional filters.","tags":["Complaints"]},"post":{"operationId":"complaints_create_complaint_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create a new complaint ticket.","tags":["Complaints"]}},"/api/v1/enterprise/complaints/customers/search":{"get":{"operationId":"complaints_search_customers_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Quick customer search for the complaint form.","tags":["Complaints"]}},"/api/v1/enterprise/complaints/sla-status":{"get":{"operationId":"complaints_sla_status_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"SLA health: counts of breached, at-risk (< 4h left), and on-track open tickets.","tags":["Complaints"]}},"/api/v1/enterprise/complaints/technicians":{"get":{"operationId":"complaints_list_technicians_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List technicians for assignment dropdown.","tags":["Complaints"]}},"/api/v1/enterprise/complaints/{complaint_id}":{"get":{"operationId":"complaints_complaint_detail_get","parameters":[{"in":"path","name":"complaint_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get complaint detail.","tags":["Complaints"]},"patch":{"operationId":"complaints_update_complaint_patch","parameters":[{"in":"path","name":"complaint_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Update complaint: status, assignment, resolution, etc.","tags":["Complaints"]}},"/api/v1/enterprise/completion-gate/pending":{"get":{"operationId":"completion_gate_pending_completions_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get list of visits that have check-in but are not yet complete.","tags":["Completion Gate"]}},"/api/v1/enterprise/completion-gate/stats":{"get":{"operationId":"completion_gate_completion_stats_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get completion gate statistics for today.","tags":["Completion Gate"]}},"/api/v1/enterprise/contracts":{"get":{"operationId":"contracts_list_contracts_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Search by contract name, customer name","in":"query","name":"search","required":false,"schema":{"type":"string"}},{"description":"active, expired, expiring_30d, expiring_60d","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Pagination","in":"query","name":"page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all contracts with search and filters.","tags":["Contracts"]}},"/api/v1/enterprise/contracts/alerts":{"get":{"operationId":"contracts_renewal_alerts_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get contracts requiring renewal action.","tags":["Contracts"]}},"/api/v1/enterprise/contracts/all":{"get":{"operationId":"customers_write_list_contracts_merged_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"int (optional, Kelava ID)","in":"query","name":"customer_id","required":false,"schema":{"type":"string"}},{"description":"int (optional, SNC ID)","in":"query","name":"snc_customer_id","required":false,"schema":{"type":"string"}},{"description":"bool (default true)","in":"query","name":"active_only","required":false,"schema":{"type":"string"}},{"description":"int \u2014 contracts expiring within N days","in":"query","name":"expiring_days","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Merged contracts: Kelava + SNC.","tags":["Customers Write"]}},"/api/v1/enterprise/contracts/create":{"post":{"operationId":"customers_write_create_contract_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create new service contract.","tags":["Customers Write"]}},"/api/v1/enterprise/contracts/dashboard":{"get":{"operationId":"contracts_contract_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Contract portfolio overview.","tags":["Contracts"]}},"/api/v1/enterprise/contracts/snc/{contract_id}":{"put":{"operationId":"customers_write_update_contract_put","parameters":[{"in":"path","name":"contract_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Update a SNC contract (dates, nilai, notes, is_active).","tags":["Customers Write"]}},"/api/v1/enterprise/contracts/snc/{contract_id}/renew":{"post":{"operationId":"customers_write_renew_contract_post","parameters":[{"in":"path","name":"contract_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Renew a SNC contract \u2014 deactivate old, create new with updated dates.","tags":["Customers Write"]}},"/api/v1/enterprise/contracts/{contract_id}":{"get":{"operationId":"contracts_contract_detail_get","parameters":[{"in":"path","name":"contract_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Full contract detail with areas, subareas, and service history.","tags":["Contracts"]}},"/api/v1/enterprise/contracts/{contract_id}/churn-reason":{"get":{"operationId":"contracts_get_churn_reasons_get","parameters":[{"in":"path","name":"contract_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get churn/non-renewal reasons for a contract.","tags":["Contracts"]},"post":{"operationId":"contracts_add_churn_reason_post","parameters":[{"in":"path","name":"contract_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Add a churn/non-renewal reason to a contract.","tags":["Contracts"]}},"/api/v1/enterprise/contracts/{contract_id}/churn-reason/{reason_id}":{"delete":{"operationId":"contracts_delete_churn_reason_delete","parameters":[{"in":"path","name":"contract_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"reason_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Delete a churn reason.","tags":["Contracts"]}},"/api/v1/enterprise/contracts/{contract_id}/complaints":{"get":{"operationId":"contracts_contract_complaints_get","parameters":[{"in":"path","name":"contract_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get complaints related to this contract's customer.","tags":["Contracts"]}},"/api/v1/enterprise/contracts/{contract_id}/extend":{"post":{"operationId":"contracts_extend_contract_post","parameters":[{"in":"path","name":"contract_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Extend a contract's end date.","tags":["Contracts"]}},"/api/v1/enterprise/contracts/{contract_id}/health":{"get":{"operationId":"contracts_contract_health_get","parameters":[{"in":"path","name":"contract_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Calculate a contract health score based on visit completion,","tags":["Contracts"]}},"/api/v1/enterprise/contracts/{contract_id}/renewal-note":{"post":{"operationId":"contracts_add_renewal_note_post","parameters":[{"in":"path","name":"contract_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Add a renewal tracking note to a contract.","tags":["Contracts"]}},"/api/v1/enterprise/contracts/{contract_id}/terminate":{"post":{"operationId":"contracts_terminate_contract_post","parameters":[{"in":"path","name":"contract_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Early terminate a contract.","tags":["Contracts"]}},"/api/v1/enterprise/csat/customers/{customer_id}":{"get":{"operationId":"csat_customer_csat_get","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"CSAT history for a specific customer.","tags":["Csat"]}},"/api/v1/enterprise/csat/dashboard":{"get":{"operationId":"csat_csat_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"CSAT overview with aggregated metrics.","tags":["Csat"]}},"/api/v1/enterprise/csat/feedback":{"get":{"operationId":"csat_recent_feedback_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Recent ratings with comments for review.","tags":["Csat"]}},"/api/v1/enterprise/csat/submit":{"post":{"operationId":"csat_submit_rating_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Submit a CSAT rating for a visit.","tags":["Csat"]}},"/api/v1/enterprise/csat/technicians":{"get":{"operationId":"csat_technician_csat_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"CSAT ranking by technician.","tags":["Csat"]}},"/api/v1/enterprise/customers":{"get":{"operationId":"customers_customers_list_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Search by name, code, phone","in":"query","name":"search","required":false,"schema":{"type":"string"}},{"description":"Filter by segment","in":"query","name":"segment_id","required":false,"schema":{"type":"string"}},{"description":"Smart filter (under_sla, at_risk, dormant, high_frequency)","in":"query","name":"status_filter","required":false,"schema":{"type":"string"}},{"description":"Pagination","in":"query","name":"page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get paginated list of customers with search and filters.","tags":["Customers"]}},"/api/v1/enterprise/customers/all":{"get":{"operationId":"customers_write_list_customers_merged_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"search by name (optional)","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"int (default 100)","in":"query","name":"limit","required":false,"schema":{"type":"string"}},{"description":"'all' | 'kelava' | 'snc'","in":"query","name":"source","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Merged customer list: Kelava active + SNC new.","tags":["Customers Write"]}},"/api/v1/enterprise/customers/create":{"post":{"operationId":"customers_write_create_customer_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create new customer in SNC DB.","tags":["Customers Write"]}},"/api/v1/enterprise/customers/segments":{"get":{"operationId":"customers_customer_segments_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get list of customer segments for filtering.","tags":["Customers"]}},"/api/v1/enterprise/customers/snc/{customer_id}":{"put":{"operationId":"customers_write_update_snc_customer_put","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Update a SNC customer record.","tags":["Customers Write"]}},"/api/v1/enterprise/customers/{customer_id}":{"get":{"operationId":"customers_customer_detail_get","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"SAP-Grade Account Control View.","tags":["Customers"]}},"/api/v1/enterprise/customers/{customer_id}/contracts":{"get":{"operationId":"customers_customer_contracts_get","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get all contracts for a customer.","tags":["Customers"]}},"/api/v1/enterprise/customers/{customer_id}/visits":{"get":{"operationId":"customers_customer_visits_get","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get paginated visit history for a customer.","tags":["Customers"]}},"/api/v1/enterprise/daily-digest/generate":{"post":{"operationId":"daily_digest_generate_digest_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Generate daily digest for a given date.","tags":["Daily Digest"]}},"/api/v1/enterprise/daily-digest/history":{"get":{"operationId":"daily_digest_digest_history_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List generated digests. Query params: days (default 30)","tags":["Daily Digest"]}},"/api/v1/enterprise/daily-digest/latest":{"get":{"operationId":"daily_digest_latest_digest_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get the most recent daily digest.","tags":["Daily Digest"]}},"/api/v1/enterprise/daily-digest/preview":{"get":{"operationId":"daily_digest_preview_digest_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Preview today's digest without saving.","tags":["Daily Digest"]}},"/api/v1/enterprise/dashboard-stats":{"get":{"operationId":"dashboard_stats_get_stats_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Single endpoint returning all dashboard KPIs.","tags":["Dashboard Stats"]}},"/api/v1/enterprise/drift/alerts":{"get":{"operationId":"drift_detection_list_alerts_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List drift alerts with filters.","tags":["Drift Detection"]}},"/api/v1/enterprise/drift/alerts/{alert_id}/resolve":{"post":{"operationId":"drift_detection_resolve_alert_post","parameters":[{"in":"path","name":"alert_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Resolve a drift alert.","tags":["Drift Detection"]}},"/api/v1/enterprise/drift/config":{"get":{"operationId":"drift_detection_list_configs_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all customer GPS configurations.","tags":["Drift Detection"]},"post":{"operationId":"drift_detection_set_config_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Set GPS drift config for a customer.","tags":["Drift Detection"]}},"/api/v1/enterprise/drift/config/bulk-import":{"post":{"operationId":"drift_detection_bulk_import_configs_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Auto-populate customer GPS configs from visit check-in history.","tags":["Drift Detection"]}},"/api/v1/enterprise/drift/scan":{"post":{"operationId":"drift_detection_run_drift_scan_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Run GPS drift detection scan for recent visits.","tags":["Drift Detection"]}},"/api/v1/enterprise/drift/scores":{"get":{"operationId":"drift_detection_drift_scores_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"GPS compliance score per technician (last 30 days).","tags":["Drift Detection"]}},"/api/v1/enterprise/due-visits":{"get":{"operationId":"watchlist_due_visits_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"forecast horizon in days (default 30, max 90)","in":"query","name":"days","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Customers whose scheduled visit is due within the next N days.","tags":["Watchlist"]}},"/api/v1/enterprise/escalate":{"post":{"operationId":"governance_escalate_account_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Move escalation level: WATCH -> ATTENTION -> ESCALATED.","tags":["Governance"]}},"/api/v1/enterprise/exceptions/by-technician":{"get":{"operationId":"exceptions_exceptions_by_technician_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get exception counts grouped by technician.","tags":["Exceptions"]}},"/api/v1/enterprise/exceptions/queue":{"get":{"operationId":"exceptions_exceptions_queue_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get full exception queue - all issues requiring attention.","tags":["Exceptions"]}},"/api/v1/enterprise/exceptions/summary":{"get":{"operationId":"exceptions_exceptions_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get exception summary for dashboard widget.","tags":["Exceptions"]}},"/api/v1/enterprise/executive/attention-required":{"get":{"operationId":"executive_attention_required_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get items requiring immediate attention for Ops Head.","tags":["Executive"]}},"/api/v1/enterprise/executive/briefing-widgets":{"get":{"operationId":"executive_briefing_widgets_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Four operational briefing widgets for the executive dashboard.","tags":["Executive"]}},"/api/v1/enterprise/executive/contracts/expiring":{"get":{"operationId":"executive_contracts_expiring_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Days to look ahead (default: 30)","in":"query","name":"days","required":false,"schema":{"type":"string"}},{"description":"Max results (default: 50)","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get contracts expiring within 30 days.","tags":["Executive"]}},"/api/v1/enterprise/executive/kpis":{"get":{"operationId":"executive_executive_kpis_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"ISO date string (default: 7 days ago)","in":"query","name":"start_date","required":false,"schema":{"type":"string"}},{"description":"ISO date string (default: today)","in":"query","name":"end_date","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get executive-level KPI summary.","tags":["Executive"]}},"/api/v1/enterprise/executive/leaderboard-mini":{"get":{"operationId":"executive_leaderboard_mini_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Top 5 technicians by completed visits this calendar month.","tags":["Executive"]}},"/api/v1/enterprise/executive/trends":{"get":{"operationId":"executive_executive_trends_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Number of days to look back (default: 7)","in":"query","name":"days","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get daily trend of planned vs executed visits.","tags":["Executive"]}},"/api/v1/enterprise/executive/visits-by-type":{"get":{"operationId":"executive_visits_by_type_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Date range","in":"query","name":"start_date","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get breakdown of visits by type.","tags":["Executive"]}},"/api/v1/enterprise/export":{"get":{"operationId":"export_list_exports_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List available export endpoints.","tags":["Export"]}},"/api/v1/enterprise/export/audit-log":{"get":{"operationId":"export_export_audit_log_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Export audit log as CSV. Query params: days (default 30)","tags":["Export"]}},"/api/v1/enterprise/export/complaints":{"get":{"operationId":"export_export_complaints_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Export complaints as CSV. Query params: status, date_from, date_to","tags":["Export"]}},"/api/v1/enterprise/export/contracts":{"get":{"operationId":"export_export_contracts_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Export contract summary as CSV.","tags":["Export"]}},"/api/v1/enterprise/export/csat":{"get":{"operationId":"export_export_csat_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Export CSAT ratings as CSV.","tags":["Export"]}},"/api/v1/enterprise/export/leaderboard":{"get":{"operationId":"export_export_leaderboard_get","parameters":[{"description":"date_from, date_to","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Export technician performance leaderboard as CSV.","tags":["Export"]}},"/api/v1/enterprise/export/visits":{"get":{"operationId":"export_export_visits_get","parameters":[{"description":"date_from, date_to (YYYY-MM-DD), technician_id","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Export visit data as CSV.","tags":["Export"]}},"/api/v1/enterprise/gps-live/activity":{"get":{"operationId":"gps_live_activity_summary_get","parameters":[{"description":"date (YYYY-MM-DD, default: today)","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Field activity summary for a date.","tags":["Gps Live"]}},"/api/v1/enterprise/gps-live/atrisk-locations":{"get":{"operationId":"gps_live_atrisk_locations_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"AT_RISK / OVERDUE / P1 customers with last-known GPS coordinates.","tags":["Gps Live"]}},"/api/v1/enterprise/gps-live/available-dates":{"get":{"operationId":"gps_live_available_dates_get","parameters":[{"description":"months (int, default: 3)","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Return dates that have GPS/visit data, for the calendar picker.","tags":["Gps Live"]}},"/api/v1/enterprise/gps-live/positions":{"get":{"operationId":"gps_live_latest_positions_get","parameters":[{"description":"date (YYYY-MM-DD, default: today)","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get the most recent GPS position for each active technician.","tags":["Gps Live"]}},"/api/v1/enterprise/gps-live/timeline/{tech_id}":{"get":{"operationId":"gps_live_tech_timeline_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}},{"description":"date (YYYY-MM-DD, default: today)","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Full day visit timeline for one technician.","tags":["Gps Live"]}},"/api/v1/enterprise/gps-live/today-route":{"get":{"operationId":"gps_live_today_route_get","parameters":[{"description":"date (YYYY-MM-DD, default: today)","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"All planned visits for a date with last-known GPS coordinates per stop.","tags":["Gps Live"]}},"/api/v1/enterprise/gps-live/trail/{tech_id}":{"get":{"operationId":"gps_live_technician_trail_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get GPS trail for a specific technician on a given date.","tags":["Gps Live"]}},"/api/v1/enterprise/health/deep":{"get":{"operationId":"health_deep_health_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Comprehensive health check with DB, disk, uploads diagnostics.","tags":["Health"]}},"/api/v1/enterprise/health/history":{"get":{"operationId":"health_health_history_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get recent health check history.","tags":["Health"]}},"/api/v1/enterprise/health/ping":{"get":{"operationId":"health_ping_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Quick liveness probe (no auth).","tags":["Health"]}},"/api/v1/enterprise/health/reset-circuit-breaker":{"post":{"operationId":"health_reset_kelava_circuit_breaker_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Manually reset Kelava circuit breaker after DB comes back online.","tags":["Health"]}},"/api/v1/enterprise/health/status":{"get":{"operationId":"health_status_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Compact status for dashboard embedding.","tags":["Health"]}},"/api/v1/enterprise/history/{customer_id}":{"get":{"operationId":"governance_get_governance_history_get","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get audit trail for the courtroom view.","tags":["Governance"]}},"/api/v1/enterprise/invoice-lock/contracts":{"get":{"operationId":"invoice_lock_list_contract_readiness_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List contracts with their readiness for invoicing based on visit execution proof.","tags":["Invoice Lock"]}},"/api/v1/enterprise/invoice-lock/contracts/{contract_id}/readiness":{"get":{"operationId":"invoice_lock_contract_readiness_detail_get","parameters":[{"in":"path","name":"contract_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Detailed checklist of why a contract is locked or ready for invoicing.","tags":["Invoice Lock"]}},"/api/v1/enterprise/libur":{"get":{"operationId":"client_suppression_list_all_suppressions_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"client_suppression.list_all_suppressions","tags":["Client Suppression"]}},"/api/v1/enterprise/libur/{supp_id}":{"delete":{"operationId":"client_suppression_delete_suppression_delete","parameters":[{"in":"path","name":"supp_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"client_suppression.delete_suppression","tags":["Client Suppression"]},"put":{"operationId":"client_suppression_update_suppression_put","parameters":[{"in":"path","name":"supp_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"client_suppression.update_suppression","tags":["Client Suppression"]}},"/api/v1/enterprise/lokasi":{"get":{"operationId":"lokasi_lokasi_list_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Paginated customer list with filters.","tags":["Lokasi"]}},"/api/v1/enterprise/lokasi/filters":{"get":{"operationId":"lokasi_lokasi_filters_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Distinct values for filter dropdowns.","tags":["Lokasi"]}},"/api/v1/enterprise/lokasi/{client_id}/libur":{"get":{"operationId":"client_suppression_list_client_suppressions_get","parameters":[{"in":"path","name":"client_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"client_suppression.list_client_suppressions","tags":["Client Suppression"]},"post":{"operationId":"client_suppression_create_suppression_post","parameters":[{"in":"path","name":"client_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"client_suppression.create_suppression","tags":["Client Suppression"]}},"/api/v1/enterprise/mom/meetings":{"get":{"operationId":"mom_list_meetings_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List meetings with pagination and search.","tags":["Mom"]},"post":{"operationId":"mom_create_meeting_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create a new meeting record.","tags":["Mom"]}},"/api/v1/enterprise/mom/meetings/{meeting_id}":{"delete":{"operationId":"mom_delete_meeting_delete","parameters":[{"in":"path","name":"meeting_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Delete a meeting (admin only).","tags":["Mom"]},"get":{"operationId":"mom_meeting_detail_get","parameters":[{"in":"path","name":"meeting_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get meeting detail with transcript, summary, and action items.","tags":["Mom"]}},"/api/v1/enterprise/mom/meetings/{meeting_id}/actions/{action_id}":{"patch":{"operationId":"mom_update_action_item_patch","parameters":[{"in":"path","name":"meeting_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"action_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Update action item status or details.","tags":["Mom"]}},"/api/v1/enterprise/mom/meetings/{meeting_id}/audio":{"post":{"operationId":"mom_upload_audio_post","parameters":[{"in":"path","name":"meeting_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Upload audio recording for a meeting.","tags":["Mom"]}},"/api/v1/enterprise/mom/meetings/{meeting_id}/distributions":{"get":{"operationId":"mom_distribution_history_get","parameters":[{"in":"path","name":"meeting_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get send history for a meeting.","tags":["Mom"]}},"/api/v1/enterprise/mom/meetings/{meeting_id}/send":{"post":{"operationId":"mom_send_mom_post","parameters":[{"in":"path","name":"meeting_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Send MOM summary via WhatsApp.","tags":["Mom"]}},"/api/v1/enterprise/mom/meetings/{meeting_id}/summarize":{"post":{"operationId":"mom_summarize_meeting_post","parameters":[{"in":"path","name":"meeting_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Generate structured MOM summary using Gemini.","tags":["Mom"]}},"/api/v1/enterprise/mom/meetings/{meeting_id}/transcribe":{"post":{"operationId":"mom_transcribe_meeting_post","parameters":[{"in":"path","name":"meeting_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Transcribe meeting audio using Google Gemini.","tags":["Mom"]}},"/api/v1/enterprise/mom/meetings/{meeting_id}/transcript":{"patch":{"operationId":"mom_edit_transcript_patch","parameters":[{"in":"path","name":"meeting_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Edit/correct the transcript manually.","tags":["Mom"]}},"/api/v1/enterprise/notifications":{"get":{"operationId":"notifications_list_notifications_get","parameters":[{"description":"unread_only (bool), category, page, per_page","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get notifications for current user.","tags":["Notifications"]}},"/api/v1/enterprise/notifications/generate":{"post":{"operationId":"notifications_generate_notifications_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Scan for operational issues and create notifications.","tags":["Notifications"]}},"/api/v1/enterprise/notifications/read-all":{"post":{"operationId":"notifications_mark_all_read_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Mark all notifications as read for current user.","tags":["Notifications"]}},"/api/v1/enterprise/notifications/summary":{"get":{"operationId":"notifications_notification_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Quick unread count per category for badge display.","tags":["Notifications"]}},"/api/v1/enterprise/notifications/{notif_id}/read":{"post":{"operationId":"notifications_mark_read_post","parameters":[{"in":"path","name":"notif_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Mark a notification as read.","tags":["Notifications"]}},"/api/v1/enterprise/ontology/objects/customer/{customer_id}":{"get":{"operationId":"ontology_customer_object_get","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Full customer ontology object.","tags":["Ontology"]}},"/api/v1/enterprise/ontology/objects/technician/{tech_id}":{"get":{"operationId":"ontology_technician_object_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Full technician ontology object.","tags":["Ontology"]}},"/api/v1/enterprise/ontology/schema":{"get":{"operationId":"ontology_schema_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Return the ontology schema \u2014 object types and their properties/links.","tags":["Ontology"]}},"/api/v1/enterprise/ontology/search":{"get":{"operationId":"ontology_search_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Cross-object search across customers and technicians.","tags":["Ontology"]}},"/api/v1/enterprise/operations/exceptions":{"get":{"operationId":"operations_operations_exceptions_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get exception counts (overdue, missing data, etc.).","tags":["Operations"]}},"/api/v1/enterprise/operations/exceptions/table":{"get":{"operationId":"operations_operations_exceptions_table_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Exception type (overdue, missing_checkout, short_visit)","in":"query","name":"type","required":false,"schema":{"type":"string"}},{"description":"Page number (default: 1)","in":"query","name":"page","required":false,"schema":{"type":"string"}},{"description":"Items per page (default: 20)","in":"query","name":"per_page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get paginated list of road plans needing attention.","tags":["Operations"]}},"/api/v1/enterprise/operations/road-plans":{"get":{"operationId":"operations_operations_road_plans_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Target date (default: today)","in":"query","name":"date","required":false,"schema":{"type":"string"}},{"description":"Filter by status","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Filter by type","in":"query","name":"type","required":false,"schema":{"type":"string"}},{"description":"Pagination","in":"query","name":"page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get paginated list of road plans with filters.","tags":["Operations"]}},"/api/v1/enterprise/operations/workload":{"get":{"operationId":"operations_operations_workload_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Target date (default: today)","in":"query","name":"date","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get today's workload summary.","tags":["Operations"]}},"/api/v1/enterprise/pipeline/funnel":{"get":{"operationId":"pipeline_pipeline_funnel_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Funnel counts per channel and overall, plus survey stats.","tags":["Pipeline"]}},"/api/v1/enterprise/pipeline/hubexo/companies":{"get":{"operationId":"pipeline_hubexo_companies_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Enriched company directory.","tags":["Pipeline"]}},"/api/v1/enterprise/pipeline/hubexo/contacts":{"get":{"operationId":"pipeline_hubexo_contacts_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Enriched contact list with combined emails + LinkedIn.","tags":["Pipeline"]}},"/api/v1/enterprise/pipeline/hubexo/enrichment-stats":{"get":{"operationId":"pipeline_hubexo_enrichment_stats_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Coverage metrics for Hubexo enrichment KPI cards.","tags":["Pipeline"]}},"/api/v1/enterprise/pipeline/hubexo/export":{"get":{"operationId":"pipeline_hubexo_export_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"CSV export of enriched Hubexo contacts for CRM import.","tags":["Pipeline"]}},"/api/v1/enterprise/pipeline/hubexo/map-data":{"get":{"operationId":"pipeline_hubexo_map_data_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"GeoJSON FeatureCollection for Leaflet.js map.","tags":["Pipeline"]}},"/api/v1/enterprise/pipeline/hubexo/projects":{"get":{"operationId":"pipeline_hubexo_projects_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Enriched project list with geo + classification.","tags":["Pipeline"]}},"/api/v1/enterprise/pipeline/insights":{"get":{"operationId":"pipeline_pipeline_insights_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Actionable insights: stale leads, hot prospects, closed lost analysis.","tags":["Pipeline"]}},"/api/v1/enterprise/pipeline/leads":{"get":{"operationId":"pipeline_pipeline_leads_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Paginated lead list with search/filter/sort.","tags":["Pipeline"]}},"/api/v1/enterprise/pipeline/leads/{lead_id}":{"get":{"operationId":"pipeline_pipeline_lead_detail_get","parameters":[{"in":"path","name":"lead_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Single lead detail.","tags":["Pipeline"]}},"/api/v1/enterprise/pipeline/sdr-performance":{"get":{"operationId":"pipeline_sdr_performance_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"SDR performance from Survey data.","tags":["Pipeline"]}},"/api/v1/enterprise/pipeline/trends":{"get":{"operationId":"pipeline_pipeline_trends_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Monthly outreach activity trends per channel.","tags":["Pipeline"]}},"/api/v1/enterprise/policies/explain":{"get":{"operationId":"governance_explain_policy_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get text justification for a rule code.","tags":["Governance"]}},"/api/v1/enterprise/punctuality/daily":{"get":{"operationId":"punctuality_daily_punctuality_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"YYYY-MM-DD (default: today)","in":"query","name":"date","required":false,"schema":{"type":"string"}},{"description":"Filter by segment","in":"query","name":"segment","required":false,"schema":{"type":"string"}},{"description":"true to show only late check-ins","in":"query","name":"late_only","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get punctuality report for a specific date.","tags":["Punctuality"]}},"/api/v1/enterprise/punctuality/ranking":{"get":{"operationId":"punctuality_lateness_ranking_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Look-back period (default: 7)","in":"query","name":"days","required":false,"schema":{"type":"string"}},{"description":"Filter by segment","in":"query","name":"segment","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Rank technicians by lateness frequency.","tags":["Punctuality"]}},"/api/v1/enterprise/punctuality/technician/{tech_id}":{"get":{"operationId":"punctuality_technician_punctuality_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}},{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Date range (default: last 30 days)","in":"query","name":"start_date","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Punctuality history for a specific technician.","tags":["Punctuality"]}},"/api/v1/enterprise/punctuality/yesterday":{"get":{"operationId":"punctuality_yesterday_report_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Quick report: Who was late yesterday?","tags":["Punctuality"]}},"/api/v1/enterprise/rapor/generate":{"post":{"operationId":"daily_rapor_generate_rapor_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Generate daily KPI rapor for all technicians on a given date.","tags":["Daily Rapor"]}},"/api/v1/enterprise/rapor/leaderboard":{"get":{"operationId":"daily_rapor_leaderboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"KPI leaderboard for a date range.","tags":["Daily Rapor"]}},"/api/v1/enterprise/rapor/monthly/{tech_id}":{"get":{"operationId":"daily_rapor_monthly_summary_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Monthly aggregated KPI for a technician.","tags":["Daily Rapor"]}},"/api/v1/enterprise/rapor/technician/{tech_id}":{"get":{"operationId":"daily_rapor_tech_rapor_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get rapor history for a technician.","tags":["Daily Rapor"]}},"/api/v1/enterprise/recurring-rules":{"get":{"operationId":"recurring_rules_list_rules_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Query params:","tags":["Recurring Rules"]},"post":{"operationId":"recurring_rules_create_rule_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"recurring_rules.create_rule","tags":["Recurring Rules"]}},"/api/v1/enterprise/recurring-rules/bulk-import":{"post":{"operationId":"recurring_rules_bulk_import_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Body: { \"rules\": [ {...rule1...}, {...rule2...} ] }","tags":["Recurring Rules"]}},"/api/v1/enterprise/recurring-rules/clients":{"get":{"operationId":"recurring_rules_list_clients_for_rules_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"recurring_rules.list_clients_for_rules","tags":["Recurring Rules"]}},"/api/v1/enterprise/recurring-rules/derive/{client_id}":{"get":{"operationId":"recurring_rules_derive_from_pattern_get","parameters":[{"in":"path","name":"client_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Suggest a rule from detected patterns for this client.","tags":["Recurring Rules"]}},"/api/v1/enterprise/recurring-rules/log":{"get":{"operationId":"recurring_rules_get_log_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"recurring_rules.get_log","tags":["Recurring Rules"]}},"/api/v1/enterprise/recurring-rules/stats":{"get":{"operationId":"recurring_rules_get_stats_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"recurring_rules.get_stats","tags":["Recurring Rules"]}},"/api/v1/enterprise/recurring-rules/technicians":{"get":{"operationId":"recurring_rules_list_technicians_for_rules_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"recurring_rules.list_technicians_for_rules","tags":["Recurring Rules"]}},"/api/v1/enterprise/recurring-rules/{rule_id}":{"delete":{"operationId":"recurring_rules_deactivate_rule_delete","parameters":[{"in":"path","name":"rule_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"recurring_rules.deactivate_rule","tags":["Recurring Rules"]},"get":{"operationId":"recurring_rules_get_rule_get","parameters":[{"in":"path","name":"rule_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"recurring_rules.get_rule","tags":["Recurring Rules"]},"put":{"operationId":"recurring_rules_update_rule_put","parameters":[{"in":"path","name":"rule_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"recurring_rules.update_rule","tags":["Recurring Rules"]}},"/api/v1/enterprise/review/close":{"post":{"operationId":"governance_close_review_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Transition account from OPEN -> CLOSED (RESOLVED or ACCEPTED_RISK).","tags":["Governance"]}},"/api/v1/enterprise/schedule-gen/gaps":{"get":{"operationId":"schedule_generator_schedule_gaps_get","parameters":[{"description":"month (int), year (int)","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Find scheduling gaps: customers with active contracts but no visits scheduled.","tags":["Schedule Generator"]}},"/api/v1/enterprise/schedule-gen/generate":{"post":{"operationId":"schedule_generator_generate_schedule_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Auto-generate t_road_plan entries from schedule_templates.","tags":["Schedule Generator"]}},"/api/v1/enterprise/schedule-gen/move":{"put":{"operationId":"schedule_generator_move_visit_put","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Move a road plan to a different date and/or technician (drag-and-drop).","tags":["Schedule Generator"]}},"/api/v1/enterprise/schedule-gen/swap":{"put":{"operationId":"schedule_generator_swap_visits_put","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Swap two road plans' technician assignments.","tags":["Schedule Generator"]}},"/api/v1/enterprise/schedule-templates":{"get":{"operationId":"schedule_templates_list_templates_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all schedule templates, optionally filtered by technician.","tags":["Schedule Templates"]},"post":{"operationId":"schedule_templates_create_template_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create a schedule template.","tags":["Schedule Templates"]}},"/api/v1/enterprise/schedule-templates/technicians":{"get":{"operationId":"schedule_templates_search_technicians_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Quick technician search for template forms.","tags":["Schedule Templates"]}},"/api/v1/enterprise/schedule-templates/{tpl_id}":{"delete":{"operationId":"schedule_templates_delete_template_delete","parameters":[{"in":"path","name":"tpl_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Delete a schedule template.","tags":["Schedule Templates"]},"get":{"operationId":"schedule_templates_template_detail_get","parameters":[{"in":"path","name":"tpl_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get template with all items.","tags":["Schedule Templates"]},"put":{"operationId":"schedule_templates_update_template_put","parameters":[{"in":"path","name":"tpl_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Replace template items entirely.","tags":["Schedule Templates"]}},"/api/v1/enterprise/schedule-templates/{tpl_id}/apply":{"post":{"operationId":"schedule_templates_apply_template_post","parameters":[{"in":"path","name":"tpl_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Apply a template to generate road_plan entries for a given week.","tags":["Schedule Templates"]}},"/api/v1/enterprise/scheduling/apply-patterns":{"post":{"operationId":"scheduling_apply_patterns_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create templates from detected patterns.","tags":["Scheduling"]}},"/api/v1/enterprise/scheduling/assign":{"post":{"operationId":"scheduling_assign_technician_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Assign a technician to a schedule template (drag-and-drop).","tags":["Scheduling"]}},"/api/v1/enterprise/scheduling/auto-assign":{"post":{"operationId":"scheduling_auto_assign_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Auto-assign unassigned templates to technicians using load balancing.","tags":["Scheduling"]}},"/api/v1/enterprise/scheduling/board":{"get":{"operationId":"scheduling_assignment_board_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"YYYY-MM-DD (default: Monday of current week)","in":"query","name":"start_date","required":false,"schema":{"type":"string"}},{"description":"number of days (default: 7)","in":"query","name":"days","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"The \"Plants vs Zombies\" scheduling board.","tags":["Scheduling"]}},"/api/v1/enterprise/scheduling/detect-patterns":{"post":{"operationId":"scheduling_detect_patterns_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"AI-powered pattern detection from historical visit data.","tags":["Scheduling"]}},"/api/v1/enterprise/scheduling/fcm-token":{"post":{"operationId":"scheduling_write_register_fcm_token_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Register or update FCM token for push notifications.","tags":["Scheduling Write"]}},"/api/v1/enterprise/scheduling/road-plans":{"get":{"operationId":"scheduling_write_list_road_plans_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"YYYY-MM-DD (default today)","in":"query","name":"date","required":false,"schema":{"type":"string"}},{"description":"filter by technician","in":"query","name":"p_user_id","required":false,"schema":{"type":"string"}},{"description":"filter by status","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"'kelava' | 'snc' | 'all' (default all)","in":"query","name":"source","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all road plans (merged: Kelava live + SNC-created).","tags":["Scheduling Write"]},"post":{"operationId":"scheduling_write_create_road_plan_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create a new road plan (stored in enterprise DB).","tags":["Scheduling Write"]}},"/api/v1/enterprise/scheduling/road-plans/{plan_id}":{"put":{"operationId":"scheduling_write_update_road_plan_put","parameters":[{"in":"path","name":"plan_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Update a SNC road plan status, date, or remarks.","tags":["Scheduling Write"]}},"/api/v1/enterprise/scheduling/road-plans/{plan_id}/cancel":{"post":{"operationId":"scheduling_write_cancel_road_plan_post","parameters":[{"in":"path","name":"plan_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Cancel a SNC road plan.","tags":["Scheduling Write"]}},"/api/v1/enterprise/scheduling/road-plans/{plan_id}/checkin":{"post":{"operationId":"scheduling_write_snc_checkin_post","parameters":[{"in":"path","name":"plan_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Technician check-in for a SNC road plan.","tags":["Scheduling Write"]}},"/api/v1/enterprise/scheduling/road-plans/{plan_id}/checkout":{"post":{"operationId":"scheduling_write_snc_checkout_post","parameters":[{"in":"path","name":"plan_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Technician check-out for a SNC road plan.","tags":["Scheduling Write"]}},"/api/v1/enterprise/scheduling/technicians-list":{"get":{"operationId":"scheduling_technicians_list_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Simple technician list for dropdowns (id + name + segment).","tags":["Scheduling"]}},"/api/v1/enterprise/scheduling/templates":{"get":{"operationId":"scheduling_list_templates_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Filter by technician","in":"query","name":"technician_id","required":false,"schema":{"type":"string"}},{"description":"Filter by customer","in":"query","name":"customer_id","required":false,"schema":{"type":"string"}},{"description":"Filter by day (0-6)","in":"query","name":"day_of_week","required":false,"schema":{"type":"string"}},{"description":"true (default) to show only active templates","in":"query","name":"active_only","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all schedule templates with filters.","tags":["Scheduling"]},"post":{"operationId":"scheduling_create_template_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create a new schedule template.","tags":["Scheduling"]}},"/api/v1/enterprise/scheduling/templates/{template_id}":{"delete":{"operationId":"scheduling_deactivate_template_delete","parameters":[{"in":"path","name":"template_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Deactivate (soft-delete) a schedule template.","tags":["Scheduling"]},"patch":{"operationId":"scheduling_update_template_patch","parameters":[{"in":"path","name":"template_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Update a schedule template.","tags":["Scheduling"]}},"/api/v1/enterprise/segments":{"get":{"operationId":"segments_list_segments_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all technicians with their segments and KPI summary.","tags":["Segments"]},"post":{"operationId":"segments_assign_segment_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Assign or update a technician's segment.","tags":["Segments"]}},"/api/v1/enterprise/segments/batch":{"post":{"operationId":"segments_batch_assign_segments_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Batch assign segments to multiple technicians.","tags":["Segments"]}},"/api/v1/enterprise/segments/kpi-rules":{"get":{"operationId":"segments_list_kpi_rules_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get all KPI rules grouped by segment.","tags":["Segments"]}},"/api/v1/enterprise/segments/kpi-rules/{rule_id}":{"patch":{"operationId":"segments_update_kpi_rule_patch","parameters":[{"in":"path","name":"rule_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Update KPI rule thresholds (green/yellow/red).","tags":["Segments"]}},"/api/v1/enterprise/segments/leaderboard":{"get":{"operationId":"segments_segment_leaderboard_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Filter to one segment","in":"query","name":"segment","required":false,"schema":{"type":"string"}},{"description":"Period in days (default: 30)","in":"query","name":"days","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Leaderboard split by segment.","tags":["Segments"]}},"/api/v1/enterprise/segments/unassigned":{"get":{"operationId":"segments_unassigned_technicians_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List technicians who haven't been assigned to any segment yet.","tags":["Segments"]}},"/api/v1/enterprise/segments/{tech_id}":{"get":{"operationId":"segments_get_technician_segment_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get segment info and KPI rules for a specific technician.","tags":["Segments"]}},"/api/v1/enterprise/service-form":{"get":{"operationId":"service_form_list_forms_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List service forms with filters.","tags":["Service Form"]},"post":{"operationId":"service_form_create_form_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create or submit a service form.","tags":["Service Form"]}},"/api/v1/enterprise/service-form/customer/{customer_id}/history":{"get":{"operationId":"service_form_customer_history_get","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Service form history for a customer (for client-facing reports).","tags":["Service Form"]}},"/api/v1/enterprise/service-form/{form_id}":{"get":{"operationId":"service_form_form_detail_get","parameters":[{"in":"path","name":"form_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get service form detail.","tags":["Service Form"]},"patch":{"operationId":"service_form_update_form_patch","parameters":[{"in":"path","name":"form_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Update a draft service form.","tags":["Service Form"]}},"/api/v1/enterprise/snc-lokasi":{"get":{"operationId":"snc_lokasi_list_lokasi_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"snc_lokasi.list_lokasi","tags":["Snc Lokasi"]},"post":{"operationId":"snc_lokasi_create_lokasi_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"snc_lokasi.create_lokasi","tags":["Snc Lokasi"]}},"/api/v1/enterprise/snc-lokasi/{client_id}":{"delete":{"operationId":"snc_lokasi_deactivate_lokasi_delete","parameters":[{"in":"path","name":"client_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"snc_lokasi.deactivate_lokasi","tags":["Snc Lokasi"]},"get":{"operationId":"snc_lokasi_get_lokasi_get","parameters":[{"in":"path","name":"client_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"snc_lokasi.get_lokasi","tags":["Snc Lokasi"]},"put":{"operationId":"snc_lokasi_update_lokasi_put","parameters":[{"in":"path","name":"client_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"snc_lokasi.update_lokasi","tags":["Snc Lokasi"]}},"/api/v1/enterprise/snc-lokasi/{client_id}/reactivate":{"post":{"operationId":"snc_lokasi_reactivate_lokasi_post","parameters":[{"in":"path","name":"client_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"snc_lokasi.reactivate_lokasi","tags":["Snc Lokasi"]}},"/api/v1/enterprise/staff-photos":{"get":{"operationId":"staff_photos_list_photos_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all staff photos with metadata.","tags":["Staff Photos"]}},"/api/v1/enterprise/staff-photos/{p_user_id}":{"delete":{"operationId":"staff_photos_delete_photo_delete","parameters":[{"in":"path","name":"p_user_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Delete staff photo for a technician.","tags":["Staff Photos"]},"post":{"operationId":"staff_photos_upload_photo_post","parameters":[{"in":"path","name":"p_user_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Upload/replace staff photo for a technician.","tags":["Staff Photos"]}},"/api/v1/enterprise/supervisory/actions":{"get":{"operationId":"supervisory_list_actions_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Filter by type","in":"query","name":"action_type","required":false,"schema":{"type":"string"}},{"description":"Filter by supervisor","in":"query","name":"supervisor_id","required":false,"schema":{"type":"string"}},{"description":"Filter by target technician","in":"query","name":"target_technician_id","required":false,"schema":{"type":"string"}},{"description":"Filter by status (default: SCHEDULED,IN_PROGRESS)","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Date range","in":"query","name":"start_date","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List supervisory actions with filters.","tags":["Supervisory"]},"post":{"operationId":"supervisory_create_action_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create a supervisory action.","tags":["Supervisory"]}},"/api/v1/enterprise/supervisory/actions/pending":{"get":{"operationId":"supervisory_pending_approvals_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all actions pending koordinator approval.","tags":["Supervisory"]}},"/api/v1/enterprise/supervisory/actions/{action_id}/approve":{"post":{"operationId":"supervisory_approve_action_post","parameters":[{"in":"path","name":"action_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Koordinator approves a pending supervisory action (sidak/SP).","tags":["Supervisory"]}},"/api/v1/enterprise/supervisory/actions/{action_id}/cancel":{"post":{"operationId":"supervisory_cancel_action_post","parameters":[{"in":"path","name":"action_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Cancel a scheduled supervisory action.","tags":["Supervisory"]}},"/api/v1/enterprise/supervisory/actions/{action_id}/complete":{"post":{"operationId":"supervisory_complete_action_post","parameters":[{"in":"path","name":"action_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Complete a supervisory action with findings.","tags":["Supervisory"]}},"/api/v1/enterprise/supervisory/actions/{action_id}/reject":{"post":{"operationId":"supervisory_reject_action_post","parameters":[{"in":"path","name":"action_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Koordinator rejects a pending supervisory action.","tags":["Supervisory"]}},"/api/v1/enterprise/supervisory/calendar/{supervisor_id}":{"get":{"operationId":"supervisory_supervisor_calendar_get","parameters":[{"in":"path","name":"supervisor_id","required":true,"schema":{"type":"integer"}},{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"YYYY-MM-DD","in":"query","name":"start_date","required":false,"schema":{"type":"string"}},{"description":"YYYY-MM-DD","in":"query","name":"end_date","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get supervisor's calendar with all actions.","tags":["Supervisory"]}},"/api/v1/enterprise/supervisory/reports":{"post":{"operationId":"supervisory_create_supervision_report_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Submit a supervision/QC report.","tags":["Supervisory"]}},"/api/v1/enterprise/supervisory/reports/technician/{tech_id}":{"get":{"operationId":"supervisory_technician_reports_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get all supervision reports for a technician.","tags":["Supervisory"]}},"/api/v1/enterprise/supervisory/sidak-candidates":{"get":{"operationId":"supervisory_sidak_candidates_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Suggest technicians that should be inspected based on:","tags":["Supervisory"]}},"/api/v1/enterprise/supervisory/trigger-sidak":{"post":{"operationId":"supervisory_trigger_sidak_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Trigger a sidak (surprise inspection) for a technician.","tags":["Supervisory"]}},"/api/v1/enterprise/tech-availability":{"get":{"operationId":"tech_availability_list_availability_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"tech_availability.list_availability","tags":["Tech Availability"]},"post":{"operationId":"tech_availability_create_availability_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"tech_availability.create_availability","tags":["Tech Availability"]}},"/api/v1/enterprise/tech-availability/calendar":{"get":{"operationId":"tech_availability_calendar_view_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"tech_availability.calendar_view","tags":["Tech Availability"]}},"/api/v1/enterprise/tech-availability/{status_id}":{"delete":{"operationId":"tech_availability_delete_availability_delete","parameters":[{"in":"path","name":"status_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"tech_availability.delete_availability","tags":["Tech Availability"]},"put":{"operationId":"tech_availability_update_availability_put","parameters":[{"in":"path","name":"status_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"tech_availability.update_availability","tags":["Tech Availability"]}},"/api/v1/enterprise/technician-issues/":{"get":{"operationId":"technician_issues_list_issues_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all open technician issues with optional filters.","tags":["Technician Issues"]}},"/api/v1/enterprise/technician-issues/auto-escalate":{"post":{"operationId":"technician_issues_auto_escalate_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Cron endpoint: Auto-escalate issues past SLA threshold.","tags":["Technician Issues"]}},"/api/v1/enterprise/technician-issues/create":{"post":{"operationId":"technician_issues_create_issue_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create a new technician issue (usually called by the rule engine).","tags":["Technician Issues"]}},"/api/v1/enterprise/technician-issues/summary":{"get":{"operationId":"technician_issues_get_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get summary counts for dashboard display.","tags":["Technician Issues"]}},"/api/v1/enterprise/technician-issues/technician/{technician_id}":{"get":{"operationId":"technician_issues_get_technician_issues_get","parameters":[{"in":"path","name":"technician_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get all issues for a specific technician.","tags":["Technician Issues"]}},"/api/v1/enterprise/technician-issues/{issue_id}":{"get":{"operationId":"technician_issues_get_issue_get","parameters":[{"in":"path","name":"issue_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get issue details with full action history.","tags":["Technician Issues"]}},"/api/v1/enterprise/technician-issues/{issue_id}/add-note":{"post":{"operationId":"technician_issues_add_note_post","parameters":[{"in":"path","name":"issue_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Add a supervisory note to an issue without resolving it.","tags":["Technician Issues"]}},"/api/v1/enterprise/technician-issues/{issue_id}/escalate":{"post":{"operationId":"technician_issues_escalate_issue_post","parameters":[{"in":"path","name":"issue_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Manually escalate an issue to the next level.","tags":["Technician Issues"]}},"/api/v1/enterprise/technician-issues/{issue_id}/resolve":{"post":{"operationId":"technician_issues_resolve_issue_post","parameters":[{"in":"path","name":"issue_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Resolve an issue with mandatory resolution type and note.","tags":["Technician Issues"]}},"/api/v1/enterprise/technicians/active-today":{"get":{"operationId":"technicians_active_today_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Technicians who have checked in today.","tags":["Technicians"]}},"/api/v1/enterprise/technicians/kpi-archive":{"get":{"operationId":"technicians_fleet_kpi_archive_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Year-month (default: current month, e.g., \"2026-02\")","in":"query","name":"month","required":false,"schema":{"type":"string"}},{"description":"visits_per_day, completion_rate, grade (default: completion_rate)","in":"query","name":"sort_by","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Fleet-wide KPI archive for a specific month.","tags":["Technicians"]}},"/api/v1/enterprise/technicians/kpi-archive/available-months":{"get":{"operationId":"technicians_available_kpi_months_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get list of months that have KPI archive data.","tags":["Technicians"]}},"/api/v1/enterprise/technicians/kpi-archive/recompute":{"post":{"operationId":"technicians_recompute_current_month_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Recompute KPI archive for current month (or specified month).","tags":["Technicians"]}},"/api/v1/enterprise/technicians/leaderboard":{"get":{"operationId":"technicians_technicians_leaderboard_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Date range","in":"query","name":"start_date","required":false,"schema":{"type":"string"}},{"description":"Max results (default: 50)","in":"query","name":"limit","required":false,"schema":{"type":"string"}},{"description":"Sorting field (completion_rate, avg_duration, total_visits)","in":"query","name":"sort_by","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get technician performance leaderboard.","tags":["Technicians"]}},"/api/v1/enterprise/technicians/recommend":{"get":{"operationId":"technicians_recommend_technicians_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Recommend best technicians for a job based on:","tags":["Technicians"]}},"/api/v1/enterprise/technicians/{tech_id}":{"get":{"operationId":"technicians_technician_detail_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get detailed profile for a specific technician.","tags":["Technicians"]}},"/api/v1/enterprise/technicians/{tech_id}/kpi-history":{"get":{"operationId":"technicians_technician_kpi_history_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}},{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Number of months to look back (default: 12)","in":"query","name":"months","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get archived KPI history for a technician.","tags":["Technicians"]}},"/api/v1/enterprise/technicians/{tech_id}/rapor":{"get":{"operationId":"technicians_technician_rapor_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}},{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Number of months to look back (default: 3)","in":"query","name":"months","required":false,"schema":{"type":"string"}},{"description":"Specific month YYYY-MM (overrides months param for KPI scoring)","in":"query","name":"month","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Comprehensive report card for a technician.","tags":["Technicians"]}},"/api/v1/enterprise/technicians/{tech_id}/visits":{"get":{"operationId":"technicians_technician_visits_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}},{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"Pagination","in":"query","name":"page","required":false,"schema":{"type":"string"}},{"description":"Date filter","in":"query","name":"start_date","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get paginated visit history for a technician.","tags":["Technicians"]}},"/api/v1/enterprise/tracking/position":{"post":{"operationId":"tracking_receive_position_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Receive high-frequency GPS position from technician app.","tags":["Tracking"]}},"/api/v1/enterprise/trends/comparison":{"get":{"operationId":"trends_technician_comparison_get","parameters":[{"description":"days (default 30)","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Compare all technicians' performance for a given period.","tags":["Trends"]}},"/api/v1/enterprise/trends/coverage":{"get":{"operationId":"trends_coverage_trend_get","parameters":[{"description":"months (default 6)","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Monthly customer coverage: how many unique customers visited vs total.","tags":["Trends"]}},"/api/v1/enterprise/trends/technician/{tech_id}":{"get":{"operationId":"trends_technician_trend_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}},{"description":"weeks (default 12)","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Performance trend for a specific technician.","tags":["Trends"]}},"/api/v1/enterprise/trends/weekly":{"get":{"operationId":"trends_weekly_trends_get","parameters":[{"description":"weeks (default 12)","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Overall weekly completion trends for the past N weeks.","tags":["Trends"]}},"/api/v1/enterprise/users/":{"get":{"operationId":"user_mgmt_list_users_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all enterprise users with filtering.","tags":["User Mgmt"]},"post":{"operationId":"user_mgmt_create_user_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create a new enterprise user.","tags":["User Mgmt"]}},"/api/v1/enterprise/users/auth-log":{"get":{"operationId":"user_mgmt_auth_audit_log_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"View system-wide auth audit log.","tags":["User Mgmt"]}},"/api/v1/enterprise/users/stats":{"get":{"operationId":"user_mgmt_user_stats_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"User management overview stats.","tags":["User Mgmt"]}},"/api/v1/enterprise/users/{user_id}":{"get":{"operationId":"user_mgmt_get_user_get","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get detailed user info including recent auth activity.","tags":["User Mgmt"]},"patch":{"operationId":"user_mgmt_update_user_patch","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Update user profile (role, name, active status).","tags":["User Mgmt"]}},"/api/v1/enterprise/users/{user_id}/reset-password":{"post":{"operationId":"user_mgmt_reset_password_post","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Admin reset - set a new password for a user.","tags":["User Mgmt"]}},"/api/v1/enterprise/users/{user_id}/unlock":{"post":{"operationId":"user_mgmt_unlock_account_post","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Unlock a locked-out user account.","tags":["User Mgmt"]}},"/api/v1/enterprise/verification/anomalies":{"get":{"operationId":"verification_anomalies_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List visits with anomaly flags.","tags":["Verification"]}},"/api/v1/enterprise/verification/dashboard":{"get":{"operationId":"verification_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Verification dashboard overview with anomaly counts and trends.","tags":["Verification"]}},"/api/v1/enterprise/verification/flag":{"post":{"operationId":"verification_create_flag_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Manually flag a visit for review.","tags":["Verification"]}},"/api/v1/enterprise/verification/flag/{flag_id}/resolve":{"post":{"operationId":"verification_resolve_flag_post","parameters":[{"in":"path","name":"flag_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Mark a flag as resolved with notes.","tags":["Verification"]}},"/api/v1/enterprise/verification/photo-proxy":{"get":{"operationId":"verification_photo_proxy_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"photo path from t_road_plan_foto.path","in":"query","name":"path","required":false,"schema":{"type":"string"}},{"description":"thumb (300px) | medium (800px) | full (1600px), default=medium","in":"query","name":"size","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Proxy and compress photos from Kelava server.","tags":["Verification"]}},"/api/v1/enterprise/verification/photos/{road_plan_id}":{"get":{"operationId":"verification_visit_photos_get","parameters":[{"in":"path","name":"road_plan_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get all photos for a road plan.","tags":["Verification"]}},"/api/v1/enterprise/verification/scan":{"post":{"operationId":"verification_run_scan_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Run anomaly detection scan for recent visits and auto-create flags.","tags":["Verification"]}},"/api/v1/enterprise/verification/scorecards":{"get":{"operationId":"verification_scorecards_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Technician compliance scorecards (30-day window).","tags":["Verification"]}},"/api/v1/enterprise/verification/visit/{visit_id}":{"get":{"operationId":"verification_visit_detail_get","parameters":[{"in":"path","name":"visit_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Full verification detail for a single visit: GPS, photos, flags.","tags":["Verification"]}},"/api/v1/enterprise/visits/{visit_id}/completion-status":{"get":{"operationId":"completion_gate_visit_completion_status_get","parameters":[{"in":"path","name":"visit_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get completion checklist status for a specific visit.","tags":["Completion Gate"]}},"/api/v1/enterprise/visits/{visit_id}/validate":{"post":{"operationId":"completion_gate_validate_visit_completion_post","parameters":[{"in":"path","name":"visit_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Attempt to validate a visit for completion.","tags":["Completion Gate"]}},"/api/v1/enterprise/wa-bot/log":{"get":{"operationId":"wa_bot_message_log_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Query WA message log.","tags":["Wa Bot"]}},"/api/v1/enterprise/wa-bot/send":{"post":{"operationId":"wa_bot_send_message_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Send a WA message manually.","tags":["Wa Bot"]}},"/api/v1/enterprise/wa-bot/send-bulk":{"post":{"operationId":"wa_bot_send_bulk_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Send WA message to multiple recipients.","tags":["Wa Bot"]}},"/api/v1/enterprise/wa-bot/send-schedule-reminder":{"post":{"operationId":"wa_bot_send_schedule_reminder_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Send tomorrow's schedule to all technicians via WA.","tags":["Wa Bot"]}},"/api/v1/enterprise/wa-bot/templates":{"get":{"operationId":"wa_bot_list_templates_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List available message templates.","tags":["Wa Bot"]}},"/api/v1/enterprise/wa-bot/webhook":{"get":{"operationId":"wa_bot_webhook_verify_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Webhook verification (for Fonnte/Meta setup).","tags":["Wa Bot"]},"post":{"operationId":"wa_bot_webhook_receive_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Receive incoming WA messages and process commands.","tags":["Wa Bot"]}},"/api/v1/enterprise/watchlist":{"get":{"operationId":"watchlist_priority_watchlist_get","parameters":[{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"P1 | P2  (filter)","in":"query","name":"priority","required":false,"schema":{"type":"string"}},{"description":"AT_RISK | OVERDUE | INACTIVE  (filter)","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"max rows (default 200)","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Priority watchlist: all P1/P2 customers OR account_status AT_RISK/OVERDUE.","tags":["Watchlist"]}},"/api/v1/enterprise/webhooks/bioclock/push":{"post":{"operationId":"attendance_bioclock_webhook_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Receive attendance push events from BioClock.id.","tags":["Attendance"]}},"/api/v1/enterprise/weekly-report/generate":{"post":{"operationId":"weekly_report_generate_report_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Generate a weekly report for the given week.","tags":["Weekly Report"]}},"/api/v1/enterprise/weekly-report/history":{"get":{"operationId":"weekly_report_report_history_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all generated weekly reports.","tags":["Weekly Report"]}},"/api/v1/enterprise/weekly-report/latest":{"get":{"operationId":"weekly_report_latest_report_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get the most recent weekly report.","tags":["Weekly Report"]}},"/api/v1/enterprise/weekly-report/preview":{"get":{"operationId":"weekly_report_preview_report_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Preview this week's report without saving.","tags":["Weekly Report"]}},"/api/v1/enterprise/weekly-report/{report_id}":{"get":{"operationId":"weekly_report_get_report_get","parameters":[{"in":"path","name":"report_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get a specific weekly report by ID.","tags":["Weekly Report"]}},"/api/v1/enterprise/winback/campaigns":{"get":{"operationId":"winback_list_campaigns_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all winback campaigns with summary stats.","tags":["Winback"]},"post":{"operationId":"winback_create_campaign_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Create a new winback campaign.","tags":["Winback"]}},"/api/v1/enterprise/winback/campaigns/{campaign_id}":{"get":{"operationId":"winback_campaign_detail_get","parameters":[{"in":"path","name":"campaign_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get campaign detail with all entries.","tags":["Winback"]}},"/api/v1/enterprise/winback/campaigns/{campaign_id}/activate":{"post":{"operationId":"winback_activate_campaign_post","parameters":[{"in":"path","name":"campaign_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Transition campaign: DRAFT \u2192 ACTIVE.","tags":["Winback"]}},"/api/v1/enterprise/winback/campaigns/{campaign_id}/complete":{"post":{"operationId":"winback_complete_campaign_post","parameters":[{"in":"path","name":"campaign_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Transition campaign: ACTIVE \u2192 COMPLETED.","tags":["Winback"]}},"/api/v1/enterprise/winback/eligible":{"get":{"operationId":"winback_eligible_customers_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get list of customers eligible for winback.","tags":["Winback"]}},"/api/v1/enterprise/winback/entries/{entry_id}/activity":{"get":{"operationId":"winback_entry_activity_get","parameters":[{"in":"path","name":"entry_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get full activity log for a winback entry.","tags":["Winback"]}},"/api/v1/enterprise/winback/entries/{entry_id}/assign":{"patch":{"operationId":"winback_assign_entry_patch","parameters":[{"in":"path","name":"entry_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Assign a winback entry to a sales rep.","tags":["Winback"]}},"/api/v1/enterprise/winback/entries/{entry_id}/note":{"post":{"operationId":"winback_add_entry_note_post","parameters":[{"in":"path","name":"entry_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Add a contact note to an entry (without changing status).","tags":["Winback"]}},"/api/v1/enterprise/winback/entries/{entry_id}/status":{"patch":{"operationId":"winback_update_entry_status_patch","parameters":[{"in":"path","name":"entry_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Update winback entry status.","tags":["Winback"]}},"/api/v1/enterprise/winback/stats":{"get":{"operationId":"winback_winback_stats_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Overall winback engine statistics.","tags":["Winback"]}},"/api/v1/events/summary":{"get":{"operationId":"ops_events_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"ops.events_summary","tags":["Ops"]}},"/api/v1/finance/ap/aging":{"get":{"operationId":"finance_ap_ap_aging_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ap.ap_aging","tags":["Finance Ap"]}},"/api/v1/finance/ap/forecast":{"get":{"operationId":"finance_ap_payment_forecast_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ap.payment_forecast","tags":["Finance Ap"]}},"/api/v1/finance/ap/invoices":{"get":{"operationId":"finance_ap_list_purchase_invoices_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ap.list_purchase_invoices","tags":["Finance Ap"]},"post":{"operationId":"finance_ap_create_purchase_invoice_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ap.create_purchase_invoice","tags":["Finance Ap"]}},"/api/v1/finance/ap/payments":{"post":{"operationId":"finance_ap_record_ap_payment_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ap.record_ap_payment","tags":["Finance Ap"]}},"/api/v1/finance/ap/pph23":{"get":{"operationId":"finance_ap_list_pph23_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ap.list_pph23","tags":["Finance Ap"]}},"/api/v1/finance/ap/vendors":{"get":{"operationId":"finance_ap_list_vendors_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ap.list_vendors","tags":["Finance Ap"]},"post":{"operationId":"finance_ap_create_vendor_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ap.create_vendor","tags":["Finance Ap"]}},"/api/v1/finance/ar/aging":{"get":{"operationId":"finance_ar_ar_aging_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.ar_aging","tags":["Finance Ar"]}},"/api/v1/finance/ar/aging/detail":{"get":{"operationId":"finance_ar_ar_aging_detail_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.ar_aging_detail","tags":["Finance Ar"]}},"/api/v1/finance/ar/bad-debt/calculate":{"post":{"operationId":"finance_ar_calculate_bad_debt_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Calculate and post bad debt provision for current open period.","tags":["Finance Ar"]}},"/api/v1/finance/ar/customers":{"get":{"operationId":"finance_ar_list_customers_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.list_customers","tags":["Finance Ar"]},"post":{"operationId":"finance_ar_create_customer_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.create_customer","tags":["Finance Ar"]}},"/api/v1/finance/ar/customers/{customer_name}":{"patch":{"operationId":"finance_ar_update_customer_patch","parameters":[{"in":"path","name":"customer_name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.update_customer","tags":["Finance Ar"]}},"/api/v1/finance/ar/dunning":{"get":{"operationId":"finance_ar_list_dunning_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.list_dunning","tags":["Finance Ar"]}},"/api/v1/finance/ar/dunning/generate":{"post":{"operationId":"finance_ar_generate_dunning_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Generate dunning letters for all overdue customers.","tags":["Finance Ar"]}},"/api/v1/finance/ar/forecast":{"get":{"operationId":"finance_ar_collection_forecast_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.collection_forecast","tags":["Finance Ar"]}},"/api/v1/finance/ar/invoices":{"get":{"operationId":"finance_ar_list_invoices_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.list_invoices","tags":["Finance Ar"]},"post":{"operationId":"finance_ar_create_invoice_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.create_invoice","tags":["Finance Ar"]}},"/api/v1/finance/ar/invoices/{inv_id}":{"get":{"operationId":"finance_ar_get_invoice_get","parameters":[{"in":"path","name":"inv_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.get_invoice","tags":["Finance Ar"]}},"/api/v1/finance/ar/invoices/{inv_id}/cancel":{"post":{"operationId":"finance_ar_cancel_invoice_post","parameters":[{"in":"path","name":"inv_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.cancel_invoice","tags":["Finance Ar"]}},"/api/v1/finance/ar/invoices/{inv_id}/post":{"post":{"operationId":"finance_ar_post_invoice_post","parameters":[{"in":"path","name":"inv_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Post a draft invoice \u2192 creates GL entry and marks POSTED.","tags":["Finance Ar"]}},"/api/v1/finance/ar/payments":{"get":{"operationId":"finance_ar_list_payments_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.list_payments","tags":["Finance Ar"]},"post":{"operationId":"finance_ar_record_payment_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.record_payment","tags":["Finance Ar"]}},"/api/v1/finance/ar/statement/{customer_name}":{"get":{"operationId":"finance_ar_customer_statement_get","parameters":[{"in":"path","name":"customer_name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_ar.customer_statement","tags":["Finance Ar"]}},"/api/v1/finance/assets":{"get":{"operationId":"finance_am_list_assets_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_am.list_assets","tags":["Finance Am"]},"post":{"operationId":"finance_am_create_asset_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_am.create_asset","tags":["Finance Am"]}},"/api/v1/finance/assets/categories":{"get":{"operationId":"finance_am_asset_categories_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_am.asset_categories","tags":["Finance Am"]}},"/api/v1/finance/assets/depreciation/forecast":{"get":{"operationId":"finance_am_depreciation_forecast_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_am.depreciation_forecast","tags":["Finance Am"]}},"/api/v1/finance/assets/depreciation/run":{"post":{"operationId":"finance_am_run_depreciation_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_am.run_depreciation","tags":["Finance Am"]}},"/api/v1/finance/assets/depreciation/schedule":{"get":{"operationId":"finance_am_depreciation_schedule_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_am.depreciation_schedule","tags":["Finance Am"]}},"/api/v1/finance/assets/inventory/scan":{"post":{"operationId":"finance_am_scan_asset_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_am.scan_asset","tags":["Finance Am"]}},"/api/v1/finance/assets/inventory/sessions":{"post":{"operationId":"finance_am_create_inventory_session_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_am.create_inventory_session","tags":["Finance Am"]}},"/api/v1/finance/assets/{asset_id}":{"get":{"operationId":"finance_am_get_asset_get","parameters":[{"in":"path","name":"asset_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_am.get_asset","tags":["Finance Am"]}},"/api/v1/finance/assets/{asset_id}/dispose":{"post":{"operationId":"finance_am_dispose_asset_post","parameters":[{"in":"path","name":"asset_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_am.dispose_asset","tags":["Finance Am"]}},"/api/v1/finance/assets/{asset_id}/move":{"post":{"operationId":"finance_am_move_asset_post","parameters":[{"in":"path","name":"asset_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_am.move_asset","tags":["Finance Am"]}},"/api/v1/finance/audit/approvals":{"get":{"operationId":"finance_audit_list_approvals_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_audit.list_approvals","tags":["Finance Audit"]},"post":{"operationId":"finance_audit_submit_for_approval_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_audit.submit_for_approval","tags":["Finance Audit"]}},"/api/v1/finance/audit/approvals/{approval_id}/review":{"post":{"operationId":"finance_audit_review_approval_post","parameters":[{"in":"path","name":"approval_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_audit.review_approval","tags":["Finance Audit"]}},"/api/v1/finance/audit/close-checklist":{"get":{"operationId":"finance_audit_close_checklist_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_audit.close_checklist","tags":["Finance Audit"]}},"/api/v1/finance/audit/close-checklist/{item_id}/complete":{"post":{"operationId":"finance_audit_complete_checklist_item_post","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_audit.complete_checklist_item","tags":["Finance Audit"]}},"/api/v1/finance/audit/close-checklist/{item_id}/skip":{"post":{"operationId":"finance_audit_skip_checklist_item_post","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_audit.skip_checklist_item","tags":["Finance Audit"]}},"/api/v1/finance/audit/compliance-dashboard":{"get":{"operationId":"finance_audit_compliance_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_audit.compliance_dashboard","tags":["Finance Audit"]}},"/api/v1/finance/audit/documents":{"get":{"operationId":"finance_audit_list_documents_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_audit.list_documents","tags":["Finance Audit"]},"post":{"operationId":"finance_audit_upload_document_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Accepts multipart/form-data with fields:","tags":["Finance Audit"]}},"/api/v1/finance/audit/documents/{doc_id}":{"delete":{"operationId":"finance_audit_delete_document_delete","parameters":[{"in":"path","name":"doc_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_audit.delete_document","tags":["Finance Audit"]}},"/api/v1/finance/audit/field-changes":{"get":{"operationId":"finance_audit_field_changes_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_audit.field_changes","tags":["Finance Audit"]}},"/api/v1/finance/audit/packages":{"get":{"operationId":"finance_audit_list_audit_packages_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_audit.list_audit_packages","tags":["Finance Audit"]},"post":{"operationId":"finance_audit_create_audit_package_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_audit.create_audit_package","tags":["Finance Audit"]}},"/api/v1/finance/audit/sod-violations":{"get":{"operationId":"finance_audit_sod_violations_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_audit.sod_violations","tags":["Finance Audit"]}},"/api/v1/finance/cash/accounts":{"get":{"operationId":"finance_cash_list_bank_accounts_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_cash.list_bank_accounts","tags":["Finance Cash"]}},"/api/v1/finance/cash/accounts/{acct_id}":{"get":{"operationId":"finance_cash_get_bank_account_get","parameters":[{"in":"path","name":"acct_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_cash.get_bank_account","tags":["Finance Cash"]}},"/api/v1/finance/cash/accounts/{acct_id}/balance":{"patch":{"operationId":"finance_cash_update_bank_balance_patch","parameters":[{"in":"path","name":"acct_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Update current balance after reconciliation.","tags":["Finance Cash"]}},"/api/v1/finance/cash/forecast":{"get":{"operationId":"finance_cash_cash_forecast_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_cash.cash_forecast","tags":["Finance Cash"]}},"/api/v1/finance/cash/petty-cash":{"get":{"operationId":"finance_cash_list_petty_cash_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_cash.list_petty_cash","tags":["Finance Cash"]},"post":{"operationId":"finance_cash_add_petty_cash_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_cash.add_petty_cash","tags":["Finance Cash"]}},"/api/v1/finance/cash/position":{"get":{"operationId":"finance_cash_cash_position_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_cash.cash_position","tags":["Finance Cash"]}},"/api/v1/finance/cash/reconcile":{"post":{"operationId":"finance_cash_start_reconciliation_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_cash.start_reconciliation","tags":["Finance Cash"]}},"/api/v1/finance/cash/reconcile/{recon_id}/complete":{"post":{"operationId":"finance_cash_complete_reconciliation_post","parameters":[{"in":"path","name":"recon_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_cash.complete_reconciliation","tags":["Finance Cash"]}},"/api/v1/finance/cash/transactions":{"get":{"operationId":"finance_cash_list_transactions_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_cash.list_transactions","tags":["Finance Cash"]},"post":{"operationId":"finance_cash_create_transaction_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_cash.create_transaction","tags":["Finance Cash"]}},"/api/v1/finance/cash/transactions/import":{"post":{"operationId":"finance_cash_import_bank_statement_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Bulk import bank statement rows.","tags":["Finance Cash"]}},"/api/v1/finance/co/allocations":{"post":{"operationId":"finance_co_create_allocation_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_co.create_allocation","tags":["Finance Co"]}},"/api/v1/finance/co/budget-vs-actual":{"get":{"operationId":"finance_co_budget_vs_actual_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_co.budget_vs_actual","tags":["Finance Co"]}},"/api/v1/finance/co/budgets":{"get":{"operationId":"finance_co_list_budgets_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_co.list_budgets","tags":["Finance Co"]},"post":{"operationId":"finance_co_upsert_budget_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Create or update a budget line. Idempotent via ON CONFLICT.","tags":["Finance Co"]}},"/api/v1/finance/co/budgets/bulk":{"post":{"operationId":"finance_co_bulk_upsert_budgets_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Upload full budget matrix: [{year,period,cost_center_id,account_code,amount}]","tags":["Finance Co"]}},"/api/v1/finance/co/cost-centers":{"get":{"operationId":"finance_co_list_cost_centers_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_co.list_cost_centers","tags":["Finance Co"]}},"/api/v1/finance/co/cost-centers/{cc_id}/pl":{"get":{"operationId":"finance_co_cost_center_pl_get","parameters":[{"in":"path","name":"cc_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_co.cost_center_pl","tags":["Finance Co"]}},"/api/v1/finance/co/dashboard":{"get":{"operationId":"finance_co_co_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_co.co_dashboard","tags":["Finance Co"]}},"/api/v1/finance/co/internal-orders":{"get":{"operationId":"finance_co_list_internal_orders_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_co.list_internal_orders","tags":["Finance Co"]},"post":{"operationId":"finance_co_create_internal_order_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_co.create_internal_order","tags":["Finance Co"]}},"/api/v1/finance/co/profit-centers":{"get":{"operationId":"finance_co_list_profit_centers_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_co.list_profit_centers","tags":["Finance Co"]}},"/api/v1/finance/co/variance-notes":{"get":{"operationId":"finance_co_list_variance_notes_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_co.list_variance_notes","tags":["Finance Co"]},"post":{"operationId":"finance_co_add_variance_note_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_co.add_variance_note","tags":["Finance Co"]}},"/api/v1/finance/gl/accounts":{"get":{"operationId":"finance_gl_list_accounts_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.list_accounts","tags":["Finance Gl"]},"post":{"operationId":"finance_gl_create_account_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.create_account","tags":["Finance Gl"]}},"/api/v1/finance/gl/accounts/{code}":{"get":{"operationId":"finance_gl_get_account_get","parameters":[{"in":"path","name":"code","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.get_account","tags":["Finance Gl"]},"patch":{"operationId":"finance_gl_update_account_patch","parameters":[{"in":"path","name":"code","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.update_account","tags":["Finance Gl"]}},"/api/v1/finance/gl/close-checklist":{"get":{"operationId":"finance_gl_close_checklist_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.close_checklist","tags":["Finance Gl"]}},"/api/v1/finance/gl/journal-entries":{"get":{"operationId":"finance_gl_list_journal_entries_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.list_journal_entries","tags":["Finance Gl"]},"post":{"operationId":"finance_gl_create_journal_entry_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.create_journal_entry","tags":["Finance Gl"]}},"/api/v1/finance/gl/journal-entries/{je_id}":{"get":{"operationId":"finance_gl_get_journal_entry_get","parameters":[{"in":"path","name":"je_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.get_journal_entry","tags":["Finance Gl"]}},"/api/v1/finance/gl/journal-entries/{je_id}/reverse":{"post":{"operationId":"finance_gl_reverse_journal_entry_post","parameters":[{"in":"path","name":"je_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.reverse_journal_entry","tags":["Finance Gl"]}},"/api/v1/finance/gl/ledger/{account_code}":{"get":{"operationId":"finance_gl_account_ledger_get","parameters":[{"in":"path","name":"account_code","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.account_ledger","tags":["Finance Gl"]}},"/api/v1/finance/gl/periods":{"get":{"operationId":"finance_gl_list_periods_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.list_periods","tags":["Finance Gl"]}},"/api/v1/finance/gl/periods/{period_id}/close":{"post":{"operationId":"finance_gl_close_period_post","parameters":[{"in":"path","name":"period_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.close_period","tags":["Finance Gl"]}},"/api/v1/finance/gl/periods/{period_id}/reopen":{"post":{"operationId":"finance_gl_reopen_period_post","parameters":[{"in":"path","name":"period_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.reopen_period","tags":["Finance Gl"]}},"/api/v1/finance/gl/trial-balance":{"get":{"operationId":"finance_gl_trial_balance_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_gl.trial_balance","tags":["Finance Gl"]}},"/api/v1/finance/reports/balance-sheet":{"get":{"operationId":"finance_reports_balance_sheet_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_reports.balance_sheet","tags":["Finance Reports"]}},"/api/v1/finance/reports/budget-vs-actual":{"get":{"operationId":"finance_reports_budget_vs_actual_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_reports.budget_vs_actual","tags":["Finance Reports"]}},"/api/v1/finance/reports/cash-flow":{"get":{"operationId":"finance_reports_cash_flow_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_reports.cash_flow","tags":["Finance Reports"]}},"/api/v1/finance/reports/customer-profitability":{"get":{"operationId":"finance_reports_customer_profitability_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_reports.customer_profitability","tags":["Finance Reports"]}},"/api/v1/finance/reports/dashboard":{"get":{"operationId":"finance_reports_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_reports.dashboard","tags":["Finance Reports"]}},"/api/v1/finance/reports/pl":{"get":{"operationId":"finance_reports_profit_and_loss_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_reports.profit_and_loss","tags":["Finance Reports"]}},"/api/v1/finance/reports/trend":{"get":{"operationId":"finance_reports_multi_year_trend_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Revenue, GP, Net Profit trend across all available years.","tags":["Finance Reports"]}},"/api/v1/finance/tax/calendar":{"get":{"operationId":"finance_tax_tax_calendar_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_tax.tax_calendar","tags":["Finance Tax"]}},"/api/v1/finance/tax/calendar/{cal_id}/complete":{"post":{"operationId":"finance_tax_mark_tax_done_post","parameters":[{"in":"path","name":"cal_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_tax.mark_tax_done","tags":["Finance Tax"]}},"/api/v1/finance/tax/dashboard":{"get":{"operationId":"finance_tax_tax_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_tax.tax_dashboard","tags":["Finance Tax"]}},"/api/v1/finance/tax/pph23":{"get":{"operationId":"finance_tax_list_pph23_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_tax.list_pph23","tags":["Finance Tax"]}},"/api/v1/finance/tax/pph23/export-csv":{"get":{"operationId":"finance_tax_export_pph23_csv_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Export PPh23 rekap for SPT Masa.","tags":["Finance Tax"]}},"/api/v1/finance/tax/pph23/generate":{"post":{"operationId":"finance_tax_generate_pph23_certificate_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Generate bukti potong from an AP payment.","tags":["Finance Tax"]}},"/api/v1/finance/tax/pph23/summary":{"get":{"operationId":"finance_tax_pph23_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_tax.pph23_summary","tags":["Finance Tax"]}},"/api/v1/finance/tax/ppn/export-csv":{"get":{"operationId":"finance_tax_export_ppn_csv_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Export PPN faktur in DJP-compatible CSV format.","tags":["Finance Tax"]}},"/api/v1/finance/tax/ppn/faktur":{"get":{"operationId":"finance_tax_list_ppn_faktur_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_tax.list_ppn_faktur","tags":["Finance Tax"]},"post":{"operationId":"finance_tax_create_ppn_faktur_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_tax.create_ppn_faktur","tags":["Finance Tax"]}},"/api/v1/finance/tax/ppn/summary":{"get":{"operationId":"finance_tax_ppn_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_tax.ppn_summary","tags":["Finance Tax"]}},"/api/v1/finance/tax/spt":{"get":{"operationId":"finance_tax_list_spt_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_tax.list_spt","tags":["Finance Tax"]},"post":{"operationId":"finance_tax_upsert_spt_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"finance_tax.upsert_spt","tags":["Finance Tax"]}},"/api/v1/issues":{"get":{"operationId":"ops_list_issues_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"ops.list_issues","tags":["Ops"]}},"/api/v1/map/positions":{"get":{"operationId":"ops_map_positions_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Get latest position for each technician","tags":["Ops"]}},"/api/v1/mobile/approvals":{"get":{"operationId":"mobile_list_approvals_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Pending supervisory actions awaiting koordinator approval.","tags":["Mobile"]}},"/api/v1/mobile/approvals/{action_id}/approve":{"post":{"operationId":"mobile_approve_action_post","parameters":[{"in":"path","name":"action_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Koordinator approves a pending action.","tags":["Mobile"]}},"/api/v1/mobile/approvals/{action_id}/reject":{"post":{"operationId":"mobile_reject_action_post","parameters":[{"in":"path","name":"action_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Koordinator rejects a pending action.","tags":["Mobile"]}},"/api/v1/mobile/breadcrumb/heatmap":{"get":{"operationId":"breadcrumb_heatmap_data_get","parameters":[{"description":"date (default: today)","in":"query","name":"Query params","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"GPS density heatmap data for all technicians on a given date.","tags":["Breadcrumb"]}},"/api/v1/mobile/breadcrumb/live":{"get":{"operationId":"breadcrumb_live_positions_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get the most recent GPS position for each active technician (last 2 hours).","tags":["Breadcrumb"]}},"/api/v1/mobile/breadcrumb/ping":{"post":{"operationId":"breadcrumb_gps_ping_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Receive a single GPS position from mobile app.","tags":["Breadcrumb"]}},"/api/v1/mobile/breadcrumb/ping-batch":{"post":{"operationId":"breadcrumb_gps_ping_batch_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Receive multiple GPS positions at once (offline sync).","tags":["Breadcrumb"]}},"/api/v1/mobile/breadcrumb/summary/{tech_id}":{"get":{"operationId":"breadcrumb_daily_summary_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}},{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"YYYY-MM-DD","in":"query","name":"start_date","required":false,"schema":{"type":"string"}},{"description":"YYYY-MM-DD","in":"query","name":"end_date","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get daily GPS summary for a technician (distance traveled, active time, etc.)","tags":["Breadcrumb"]}},"/api/v1/mobile/breadcrumb/trail/{tech_id}":{"get":{"operationId":"breadcrumb_trail_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}},{"description":"","in":"query","name":"Query params","required":false,"schema":{"type":"string"}},{"description":"YYYY-MM-DD (default: today)","in":"query","name":"date","required":false,"schema":{"type":"string"}},{"description":"true (default) \u2014 reduce points for rendering","in":"query","name":"simplify","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Get GPS breadcrumb trail for a technician on a specific date.","tags":["Breadcrumb"]}},"/api/v1/mobile/customers":{"get":{"operationId":"mobile_customers_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Customer list with visit count.","tags":["Mobile"]}},"/api/v1/mobile/customers/{customer_id}":{"get":{"operationId":"mobile_customer_detail_get","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Customer detail with contracts and recent visit history.","tags":["Mobile"]}},"/api/v1/mobile/dashboard":{"get":{"operationId":"mobile_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Summary stats for the mobile home screen.","tags":["Mobile"]}},"/api/v1/mobile/face-attendance/clock-in":{"post":{"operationId":"face_attendance_clock_in_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Clock in with selfie face verification.","tags":["Face Attendance"]}},"/api/v1/mobile/face-attendance/clock-out":{"post":{"operationId":"face_attendance_clock_out_post","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Clock out (simpler \u2014 selfie optional).","tags":["Face Attendance"]}},"/api/v1/mobile/face-attendance/today":{"get":{"operationId":"face_attendance_today_board_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Today's face attendance board.","tags":["Face Attendance"]}},"/api/v1/mobile/face-attendance/{log_id}/override":{"post":{"operationId":"face_attendance_override_result_post","parameters":[{"in":"path","name":"log_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Admin manually overrides face match result.","tags":["Face Attendance"]}},"/api/v1/mobile/my-performance":{"get":{"operationId":"mobile_my_performance_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Personal performance stats for the logged-in technician.","tags":["Mobile"]}},"/api/v1/mobile/visits/schedule":{"get":{"operationId":"mobile_visits_schedule_get","parameters":[{"description":"?date=YYYY-MM-DD","in":"query","name":"Query param","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Visit schedule for a given date (defaults to today).","tags":["Mobile"]}},"/api/v1/mobile/visits/today":{"get":{"operationId":"mobile_visits_today_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Today's road plan for the logged-in technician (by p_user_id).","tags":["Mobile"]}},"/api/v1/mobile/visits/{road_plan_id}/checkin":{"post":{"operationId":"mobile_checkin_post","parameters":[{"in":"path","name":"road_plan_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Check in to a visit \u2014 creates or updates mobile_visits record.","tags":["Mobile"]}},"/api/v1/mobile/visits/{road_plan_id}/checkout":{"post":{"operationId":"mobile_checkout_post","parameters":[{"in":"path","name":"road_plan_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Check out from a visit.","tags":["Mobile"]}},"/api/v1/mobile/visits/{road_plan_id}/photos":{"get":{"operationId":"mobile_list_visit_photos_get","parameters":[{"in":"path","name":"road_plan_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"List all photos for a visit (mobile-uploaded + Kelava originals).","tags":["Mobile"]},"post":{"operationId":"mobile_upload_visit_photos_post","parameters":[{"in":"path","name":"road_plan_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Upload photo evidence for a visit (check-in or check-out).","tags":["Mobile"]}},"/api/v1/mobile/visits/{road_plan_id}/photos/{filename}":{"get":{"operationId":"mobile_serve_visit_photo_get","parameters":[{"in":"path","name":"road_plan_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"filename","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Serve a mobile-uploaded photo file.","tags":["Mobile"]}},"/api/v1/openapi.json":{"get":{"operationId":"api_docs_openapi_json_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"OpenAPI 3.0 specification \u2014 machine-readable JSON for Swagger UI.","tags":["Api Docs"]}},"/api/v1/ops/summary":{"get":{"operationId":"ops_ops_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"ops.ops_summary","tags":["Ops"]}},"/api/v1/sync/status":{"get":{"operationId":"ops_sync_status_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"ops.sync_status","tags":["Ops"]}},"/enterprise/":{"get":{"operationId":"enterprise_executive_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Executive Summary Dashboard - main landing page.","tags":["Enterprise"]}},"/enterprise/accurate":{"get":{"operationId":"enterprise_accurate_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Accurate Accounting Export page.","tags":["Enterprise"]}},"/enterprise/api-explorer":{"get":{"operationId":"enterprise_api_explorer_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"API Explorer \u2014 browse and call live API endpoints interactively.","tags":["Enterprise"]}},"/enterprise/attendance":{"get":{"operationId":"enterprise_attendance_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Fingerprint Attendance dashboard page.","tags":["Enterprise"]}},"/enterprise/audit":{"get":{"operationId":"enterprise_audit_trail_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Supervisory Action Log page.","tags":["Enterprise"]}},"/enterprise/audit-compare":{"get":{"operationId":"enterprise_audit_compare_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Compare draft jadwal dengan Excel lama (PRD \u00a714.5).","tags":["Enterprise"]}},"/enterprise/audit-dashboard":{"get":{"operationId":"enterprise_audit_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Audit dashboard \u2014 readiness score, blockers, layers.","tags":["Enterprise"]}},"/enterprise/audit-log":{"get":{"operationId":"enterprise_audit_log_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Universal Audit Log page.","tags":["Enterprise"]}},"/enterprise/audit-matching":{"get":{"operationId":"enterprise_audit_matching_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Customer matching review page (PRD \u00a714.6).","tags":["Enterprise"]}},"/enterprise/barcode":{"get":{"operationId":"enterprise_barcode_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"QR/Barcode Unit Checklist page.","tags":["Enterprise"]}},"/enterprise/briefing":{"get":{"operationId":"enterprise_briefing_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Daily Operational Briefing page.","tags":["Enterprise"]}},"/enterprise/calendar":{"get":{"operationId":"enterprise_calendar_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Resource Calendar - Dispatch view.","tags":["Enterprise"]}},"/enterprise/complaints":{"get":{"operationId":"enterprise_complaints_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Complaint Tracking page.","tags":["Enterprise"]}},"/enterprise/contracts":{"get":{"operationId":"enterprise_contracts_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Contract Management page.","tags":["Enterprise"]}},"/enterprise/contracts/{contract_id}":{"get":{"operationId":"enterprise_contract_detail_page_get","parameters":[{"in":"path","name":"contract_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Contract Detail page.","tags":["Enterprise"]}},"/enterprise/customers":{"get":{"operationId":"enterprise_customers_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Customer list page.","tags":["Enterprise"]}},"/enterprise/customers/{customer_id}":{"get":{"operationId":"enterprise_customer_detail_get","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Customer 360 detail page.","tags":["Enterprise"]}},"/enterprise/daily-digest":{"get":{"operationId":"enterprise_daily_digest_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Daily Digest page.","tags":["Enterprise"]}},"/enterprise/executive":{"get":{"operationId":"enterprise_executive_summary_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Executive Summary Dashboard - main landing page.","tags":["Enterprise"]}},"/enterprise/export":{"get":{"operationId":"enterprise_export_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Data Export page.","tags":["Enterprise"]}},"/enterprise/finance":{"get":{"operationId":"enterprise_finance_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_dashboard","tags":["Enterprise"]}},"/enterprise/finance/ap":{"get":{"operationId":"enterprise_finance_ap_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_ap","tags":["Enterprise"]}},"/enterprise/finance/ar":{"get":{"operationId":"enterprise_finance_ar_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_ar","tags":["Enterprise"]}},"/enterprise/finance/ar/aging":{"get":{"operationId":"enterprise_finance_ar_aging_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_ar_aging","tags":["Enterprise"]}},"/enterprise/finance/assets":{"get":{"operationId":"enterprise_finance_assets_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_assets","tags":["Enterprise"]}},"/enterprise/finance/audit":{"get":{"operationId":"enterprise_finance_audit_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_audit","tags":["Enterprise"]}},"/enterprise/finance/cash":{"get":{"operationId":"enterprise_finance_cash_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_cash","tags":["Enterprise"]}},"/enterprise/finance/controlling":{"get":{"operationId":"enterprise_finance_controlling_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_controlling","tags":["Enterprise"]}},"/enterprise/finance/controlling/budget":{"get":{"operationId":"enterprise_finance_budget_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_budget","tags":["Enterprise"]}},"/enterprise/finance/dashboard":{"get":{"operationId":"enterprise_finance_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_dashboard","tags":["Enterprise"]}},"/enterprise/finance/gl":{"get":{"operationId":"enterprise_finance_gl_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_gl","tags":["Enterprise"]}},"/enterprise/finance/reports/balance-sheet":{"get":{"operationId":"enterprise_finance_balance_sheet_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_balance_sheet","tags":["Enterprise"]}},"/enterprise/finance/reports/pl":{"get":{"operationId":"enterprise_finance_pl_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_pl","tags":["Enterprise"]}},"/enterprise/finance/tax":{"get":{"operationId":"enterprise_finance_tax_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"enterprise.finance_tax","tags":["Enterprise"]}},"/enterprise/gps-live":{"get":{"operationId":"enterprise_gps_live_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"GPS Live Map page.","tags":["Enterprise"]}},"/enterprise/health":{"get":{"operationId":"enterprise_health_dashboard_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"System Health Monitor page.","tags":["Enterprise"]}},"/enterprise/hubexo":{"get":{"operationId":"enterprise_hubexo_intel_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Hubexo Intelligence Dashboard page.","tags":["Enterprise"]}},"/enterprise/kpi-archive":{"get":{"operationId":"enterprise_kpi_archive_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"KPI History Archive page.","tags":["Enterprise"]}},"/enterprise/login":{"get":{"operationId":"enterprise_login_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Enterprise Login page.","tags":["Enterprise"]}},"/enterprise/lokasi":{"get":{"operationId":"enterprise_lokasi_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Lokasi (Customer) management \u2014 Kelava-style list.","tags":["Enterprise"]}},"/enterprise/lokasi-baru":{"get":{"operationId":"enterprise_lokasi_baru_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Daftar Lokasi \u2014 CRUD untuk snc_clients (anak-SD-friendly).","tags":["Enterprise"]}},"/enterprise/lokasi-libur":{"get":{"operationId":"enterprise_lokasi_libur_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Lokasi Libur Sementara \u2014 customer suppression manager.","tags":["Enterprise"]}},"/enterprise/master-rules":{"get":{"operationId":"enterprise_master_rules_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Master Recurring Rules Editor \u2014 source of truth for recurring schedules.","tags":["Enterprise"]}},"/enterprise/mom":{"get":{"operationId":"enterprise_mom_list_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Notulen Rapat (MOM) list page.","tags":["Enterprise"]}},"/enterprise/mom/{meeting_id}":{"get":{"operationId":"enterprise_mom_detail_get","parameters":[{"in":"path","name":"meeting_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"MOM detail page.","tags":["Enterprise"]}},"/enterprise/notifications":{"get":{"operationId":"enterprise_notifications_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Notification Center page.","tags":["Enterprise"]}},"/enterprise/operations":{"get":{"operationId":"enterprise_operations_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Operations Overview page.","tags":["Enterprise"]}},"/enterprise/perbandingan-jadwal":{"get":{"operationId":"enterprise_perbandingan_jadwal_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Diff antara 2 bulan: added/removed/reassigned/retimed.","tags":["Enterprise"]}},"/enterprise/pipeline":{"get":{"operationId":"enterprise_pipeline_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Sales Pipeline CRM page.","tags":["Enterprise"]}},"/enterprise/punctuality":{"get":{"operationId":"enterprise_punctuality_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Punctuality Tracking page.","tags":["Enterprise"]}},"/enterprise/rapor":{"get":{"operationId":"enterprise_rapor_list_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Rapor Kinerja Teknisi - list all technicians with grades.","tags":["Enterprise"]}},"/enterprise/road-plans/{road_plan_id}":{"get":{"operationId":"enterprise_road_plan_detail_get","parameters":[{"in":"path","name":"road_plan_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Road Plan detail page.","tags":["Enterprise"]}},"/enterprise/schedule-draft-calendar":{"get":{"operationId":"enterprise_schedule_draft_calendar_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Schedule Draft Calendar \u2014 PRD Phase 1 control center.","tags":["Enterprise"]}},"/enterprise/scheduling":{"get":{"operationId":"enterprise_scheduling_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Schedule Board (Plants vs Zombies) page.","tags":["Enterprise"]}},"/enterprise/segments":{"get":{"operationId":"enterprise_segments_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Technician Segments management page.","tags":["Enterprise"]}},"/enterprise/service-forms":{"get":{"operationId":"enterprise_service_forms_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Form Pelayanan Digital page.","tags":["Enterprise"]}},"/enterprise/supervisory":{"get":{"operationId":"enterprise_supervisory_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Supervisory Actions / Sidak page.","tags":["Enterprise"]}},"/enterprise/swagger":{"get":{"operationId":"enterprise_swagger_ui_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Swagger UI \u2014 interactive API documentation powered by OpenAPI spec.","tags":["Enterprise"]}},"/enterprise/tech-tidak-masuk":{"get":{"operationId":"enterprise_tech_tidak_masuk_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Teknisi Tidak Masuk \u2014 tech availability manager.","tags":["Enterprise"]}},"/enterprise/technicians":{"get":{"operationId":"enterprise_technicians_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Technicians Leaderboard page.","tags":["Enterprise"]}},"/enterprise/technicians/{tech_id}":{"get":{"operationId":"enterprise_technician_detail_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Technician detail page.","tags":["Enterprise"]}},"/enterprise/technicians/{tech_id}/rapor":{"get":{"operationId":"enterprise_technician_rapor_get","parameters":[{"in":"path","name":"tech_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Technician Report Card (Rapor) for HR.","tags":["Enterprise"]}},"/enterprise/trends":{"get":{"operationId":"enterprise_trends_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Performance Trends page.","tags":["Enterprise"]}},"/enterprise/users":{"get":{"operationId":"enterprise_users_admin_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"User Management admin page.","tags":["Enterprise"]}},"/enterprise/verification":{"get":{"operationId":"enterprise_verification_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Photo & GPS Verification page.","tags":["Enterprise"]}},"/enterprise/wa-bot":{"get":{"operationId":"enterprise_wa_bot_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"WhatsApp Bot Gateway page.","tags":["Enterprise"]}},"/enterprise/watchlist":{"get":{"operationId":"enterprise_watchlist_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Priority Watchlist \u2014 P1/P2 + AT_RISK/OVERDUE customers.","tags":["Enterprise"]}},"/enterprise/weekly-report":{"get":{"operationId":"enterprise_weekly_report_page_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Weekly Operations Report page.","tags":["Enterprise"]}},"/enterprise/winback":{"get":{"operationId":"enterprise_winback_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Winback Campaign Manager page.","tags":["Enterprise"]}},"/enterprise/winback/{campaign_id}":{"get":{"operationId":"enterprise_winback_detail_get","parameters":[{"in":"path","name":"campaign_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"security":[{"bearerAuth":[]}],"summary":"Winback Campaign Detail page.","tags":["Enterprise"]}},"/health":{"get":{"operationId":"health_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Health check endpoint (quick liveness probe).","tags":["Core"]}},"/m":{"get":{"operationId":"web_mobile_web_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Mobile web app \u2014 browser-based field service interface.","tags":["Web"]}},"/m/":{"get":{"operationId":"web_mobile_web_get","responses":{"200":{"description":"Success"},"401":{"description":"Unauthorized"},"500":{"description":"Server error"}},"summary":"Mobile web app \u2014 browser-based field service interface.","tags":["Web"]}}},"servers":[{"description":"Production","url":"https://safencare.work"},{"description":"Local dev","url":"http://localhost:5001"}]}
