{"openapi":"3.1.0","info":{"title":"ANyD Booking & Bono Manager","version":"0.1.0"},"paths":{"/":{"get":{"summary":"Home","operationId":"home__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/dashboard/stats":{"get":{"summary":"Api Dashboard Stats","operationId":"api_dashboard_stats_api_dashboard_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/reservar":{"get":{"summary":"Page Reservar","operationId":"page_reservar_reservar_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin":{"get":{"summary":"Page Admin","operationId":"page_admin_admin_get","parameters":[{"name":"tab","in":"query","required":false,"schema":{"type":"string","default":"today","title":"Tab"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/calendar/events":{"get":{"summary":"Get Calendar Events","operationId":"get_calendar_events_api_calendar_events_get","parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/calendar/export.ics":{"get":{"summary":"Export Calendar Ics","description":"Feed oficial iCalendar (.ics) para sincronización automática con Google Calendar en el móvil de Román.\nSustituye por completo al feed de Reservio con coste 0€.","operationId":"export_calendar_ics_api_calendar_export_ics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/calendar/sync.ics":{"get":{"summary":"Export Calendar Ics","description":"Feed oficial iCalendar (.ics) para sincronización automática con Google Calendar en el móvil de Román.\nSustituye por completo al feed de Reservio con coste 0€.","operationId":"export_calendar_ics_calendar_sync_ics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/calendar.ics":{"get":{"summary":"Export Calendar Ics","description":"Feed oficial iCalendar (.ics) para sincronización automática con Google Calendar en el móvil de Román.\nSustituye por completo al feed de Reservio con coste 0€.","operationId":"export_calendar_ics_calendar_ics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/client-history":{"get":{"summary":"Get Client History","description":"Devuelve la ficha completa del deportista: datos de contacto, bonos activos/pasados,\ncitas asistidas/pendientes y mediciones históricas de la Tanita MC-580.","operationId":"get_client_history_api_client_history_get","parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/client-details":{"get":{"summary":"Get Client Details","description":"Endpoint de autocompletado rápido: busca un deportista por nombre\ny devuelve su email, teléfono, notas y su bono activo (nº de bono/pedido y sesiones).","operationId":"get_client_details_api_client_details_get","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/check-client":{"get":{"summary":"Check Client","operationId":"check_client_api_check_client_get","parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/available-slots":{"get":{"summary":"Get Available Slots","description":"Calcula las franjas horarias disponibles para una fecha específica.\nPor defecto: turnos de mañana (10:00 - 13:30) y tarde (16:00 - 20:00) en intervalos de 30 minutos.\nComprueba festivos de Alcorcón/Madrid/Nacionales y colisiones exactas.","operationId":"get_available_slots_api_available_slots_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/book-appointment":{"post":{"summary":"Book Appointment","operationId":"book_appointment_api_book_appointment_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/complete-appointment":{"post":{"summary":"Complete Appointment","description":"Marca la cita como asistida y sincroniza de inmediato con Excel ('Bonos activos_claude.xlsx').","operationId":"complete_appointment_api_complete_appointment_post","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"integer","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sync-excel":{"post":{"summary":"Api Sync Excel","description":"Sincroniza en caliente la tabla de bonos desde G:\\Mi unidad\\1.- ANyD\\Bonos activos_claude.xlsx.","operationId":"api_sync_excel_api_sync_excel_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/upload-excel":{"post":{"summary":"Api Upload Excel","description":"Permite subir 'Bonos activos_claude.xlsx' directamente desde el navegador\npara sincronizar los bonos en Render sin necesidad de acceso físico a G:\\.","operationId":"api_upload_excel_api_upload_excel_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_api_upload_excel_api_upload_excel_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sync-reservio":{"post":{"summary":"Api Sync Reservio","description":"Sincroniza en caliente todas las reservas desde el feed oficial de Reservio.","operationId":"api_sync_reservio_api_sync_reservio_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/manual-booking":{"post":{"summary":"Manual Booking","operationId":"manual_booking_api_manual_booking_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualBookingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/calendar/reschedule":{"post":{"summary":"Reschedule Appointment","operationId":"reschedule_appointment_api_calendar_reschedule_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RescheduleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/calendar/bulk-set-duration":{"post":{"summary":"Bulk Set Duration","operationId":"bulk_set_duration_api_calendar_bulk_set_duration_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDurationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cancel-appointment":{"post":{"summary":"Cancel Appointment","operationId":"cancel_appointment_api_cancel_appointment_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionAppointmentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/update-notes":{"post":{"summary":"Update Notes","operationId":"update_notes_api_update_notes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionAppointmentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/run-reminders":{"post":{"summary":"Run Reminders","operationId":"run_reminders_api_run_reminders_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/webhook/woocommerce":{"post":{"summary":"Woocommerce Webhook","description":"Endpoint para recibir pedidos completados de WooCommerce desde anyd.es","operationId":"woocommerce_webhook_api_webhook_woocommerce_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/tanita":{"get":{"summary":"Page Tanita","operationId":"page_tanita_tanita_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/tanita/ports":{"get":{"summary":"Get Tanita Ports","operationId":"get_tanita_ports_api_tanita_ports_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tanita/connect":{"post":{"summary":"Connect Tanita","operationId":"connect_tanita_api_tanita_connect_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TanitaConnectRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tanita/disconnect":{"post":{"summary":"Disconnect Tanita","operationId":"disconnect_tanita_api_tanita_disconnect_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tanita/live":{"get":{"summary":"Get Tanita Live","operationId":"get_tanita_live_api_tanita_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tanita/simulate":{"post":{"summary":"Simulate Tanita","operationId":"simulate_tanita_api_tanita_simulate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tanita/upload":{"post":{"summary":"Upload Tanita","operationId":"upload_tanita_api_tanita_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_tanita_api_tanita_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tanita/save":{"post":{"summary":"Save Tanita","operationId":"save_tanita_api_tanita_save_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TanitaSaveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/drive/folder-info":{"get":{"summary":"Get Drive Folder Info","operationId":"get_drive_folder_info_api_drive_folder_info_get","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/drive/open-folder":{"post":{"summary":"Open Drive Folder","operationId":"open_drive_folder_api_drive_open_folder_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriveActionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/drive/save-tanita":{"post":{"summary":"Save Tanita To Drive","operationId":"save_tanita_to_drive_api_drive_save_tanita_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriveTanitaSaveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/copilot":{"post":{"summary":"Query Ai Copilot","operationId":"query_ai_copilot_api_ai_copilot_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopilotQueryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/holidays":{"get":{"summary":"Api Get Holidays","operationId":"api_get_holidays_api_holidays_get","parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/holidays/add":{"post":{"summary":"Api Add Holiday","operationId":"api_add_holiday_api_holidays_add_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddHolidayRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/holidays/{holiday_id}":{"delete":{"summary":"Api Delete Holiday","operationId":"api_delete_holiday_api_holidays__holiday_id__delete","parameters":[{"name":"holiday_id","in":"path","required":true,"schema":{"type":"integer","title":"Holiday Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dietas":{"get":{"summary":"Page Patrones Nutricionales","operationId":"page_patrones_nutricionales_dietas_get","parameters":[{"name":"client","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/patron-nutricional":{"get":{"summary":"Page Patrones Nutricionales","operationId":"page_patrones_nutricionales_patron_nutricional_get","parameters":[{"name":"client","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/patrones-nutricionales":{"get":{"summary":"Page Patrones Nutricionales","operationId":"page_patrones_nutricionales_patrones_nutricionales_get","parameters":[{"name":"client","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/recipes":{"get":{"summary":"Api Get Recipes","operationId":"api_get_recipes_api_diet_recipes_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"group","in":"query","required":false,"schema":{"type":"string","default":"","title":"Group"}},{"name":"meal_slot","in":"query","required":false,"schema":{"type":"string","default":"","title":"Meal Slot"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/foods":{"get":{"summary":"Api Get Foods","operationId":"api_get_foods_api_diet_foods_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"familia","in":"query","required":false,"schema":{"type":"string","default":"","title":"Familia"}},{"name":"fuente","in":"query","required":false,"schema":{"type":"string","default":"","title":"Fuente"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/food/{food_id}":{"get":{"summary":"Api Get Food Detail","operationId":"api_get_food_detail_api_diet_food__food_id__get","parameters":[{"name":"food_id","in":"path","required":true,"schema":{"type":"integer","title":"Food Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Api Update Food","operationId":"api_update_food_api_diet_food__food_id__put","parameters":[{"name":"food_id","in":"path","required":true,"schema":{"type":"integer","title":"Food Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Api Delete Food","operationId":"api_delete_food_api_diet_food__food_id__delete","parameters":[{"name":"food_id","in":"path","required":true,"schema":{"type":"integer","title":"Food Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/off/search":{"get":{"summary":"Api Search Off","operationId":"api_search_off_api_diet_off_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":15,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/off/import":{"get":{"summary":"Api Import Off","operationId":"api_import_off_api_diet_off_import_get","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Item"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Api Import Off","operationId":"api_import_off_api_diet_off_import_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Item"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/recipe/{recipe_id}":{"get":{"summary":"Api Get Recipe Detail","operationId":"api_get_recipe_detail_api_diet_recipe__recipe_id__get","parameters":[{"name":"recipe_id","in":"path","required":true,"schema":{"type":"integer","title":"Recipe Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Api Update Recipe","operationId":"api_update_recipe_api_diet_recipe__recipe_id__put","parameters":[{"name":"recipe_id","in":"path","required":true,"schema":{"type":"integer","title":"Recipe Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Api Delete Recipe","operationId":"api_delete_recipe_api_diet_recipe__recipe_id__delete","parameters":[{"name":"recipe_id","in":"path","required":true,"schema":{"type":"integer","title":"Recipe Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/recipe":{"post":{"summary":"Api Create Recipe","operationId":"api_create_recipe_api_diet_recipe_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/recipe/{recipe_id}/copy":{"post":{"summary":"Api Copy Recipe","operationId":"api_copy_recipe_api_diet_recipe__recipe_id__copy_post","parameters":[{"name":"recipe_id","in":"path","required":true,"schema":{"type":"integer","title":"Recipe Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/food":{"post":{"summary":"Api Create Food","operationId":"api_create_food_api_diet_food_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/food/{food_id}/copy":{"post":{"summary":"Api Copy Food","operationId":"api_copy_food_api_diet_food__food_id__copy_post","parameters":[{"name":"food_id","in":"path","required":true,"schema":{"type":"integer","title":"Food Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/groups":{"get":{"summary":"Api Get Diet Groups","operationId":"api_get_diet_groups_api_diet_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/diet/calculate-needs":{"post":{"summary":"Api Calculate Needs","operationId":"api_calculate_needs_api_diet_calculate_needs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculateNeedsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/generate-smart-week":{"post":{"summary":"Api Generate Smart Week","operationId":"api_generate_smart_week_api_diet_generate_smart_week_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartWeekRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/plan/save":{"post":{"summary":"Api Save Diet Plan","operationId":"api_save_diet_plan_api_diet_plan_save_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavePlanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/plans":{"get":{"summary":"Api Get Diet Plans","operationId":"api_get_diet_plans_api_diet_plans_get","parameters":[{"name":"client","in":"query","required":false,"schema":{"type":"string","default":"","title":"Client"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/plan/{plan_id}":{"get":{"summary":"Api Get Diet Plan","operationId":"api_get_diet_plan_api_diet_plan__plan_id__get","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"integer","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/shopping-list":{"post":{"summary":"Api Generate Shopping List","operationId":"api_generate_shopping_list_api_diet_shopping_list_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/latest-tanita/{client_name}":{"get":{"summary":"Api Get Latest Tanita","operationId":"api_get_latest_tanita_api_diet_latest_tanita__client_name__get","parameters":[{"name":"client_name","in":"path","required":true,"schema":{"type":"string","title":"Client Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/upload-training-schedule":{"post":{"summary":"Api Upload Training Schedule","operationId":"api_upload_training_schedule_api_diet_upload_training_schedule_post","parameters":[{"name":"weight_kg","in":"query","required":false,"schema":{"type":"number","default":75.0,"title":"Weight Kg"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_api_upload_training_schedule_api_diet_upload_training_schedule_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/calculate-peri-workout":{"post":{"summary":"Api Calculate Peri Workout","operationId":"api_calculate_peri_workout_api_diet_calculate_peri_workout_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/download-training-template":{"get":{"summary":"Api Download Training Template","operationId":"api_download_training_template_api_diet_download_training_template_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/diet/athlete-details/{client_name}":{"get":{"summary":"Api Get Athlete Details","operationId":"api_get_athlete_details_api_diet_athlete_details__client_name__get","parameters":[{"name":"client_name","in":"path","required":true,"schema":{"type":"string","title":"Client Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/athlete-training-files":{"get":{"summary":"Api Get Athlete Training Files","operationId":"api_get_athlete_training_files_api_diet_athlete_training_files_get","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diet/load-athlete-training-file":{"post":{"summary":"Api Load Athlete Training File","operationId":"api_load_athlete_training_file_api_diet_load_athlete_training_file_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoadTrainingFileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/clinica":{"get":{"summary":"Page Clinica Workstation","description":"Estación Clínica Integral: Historia Clínica SOAP, Tanita MC-580,\nCunningham, Dietowin 2.0 y Analíticas de Sangre.","operationId":"page_clinica_workstation_clinica_get","parameters":[{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/consulta":{"get":{"summary":"Page Clinica Workstation","description":"Estación Clínica Integral: Historia Clínica SOAP, Tanita MC-580,\nCunningham, Dietowin 2.0 y Analíticas de Sangre.","operationId":"page_clinica_workstation_consulta_get","parameters":[{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clinica/athletes":{"get":{"summary":"Api Clinica Athletes","operationId":"api_clinica_athletes_api_clinica_athletes_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clinica/today-appointments":{"get":{"summary":"Api Clinica Today","operationId":"api_clinica_today_api_clinica_today_appointments_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/clinica/athlete/{client_id}":{"get":{"summary":"Api Clinica Athlete 360","operationId":"api_clinica_athlete_360_api_clinica_athlete__client_id__get","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"integer","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clinica/athlete/{client_id}/profile":{"post":{"summary":"Api Save Athlete Profile","operationId":"api_save_athlete_profile_api_clinica_athlete__client_id__profile_post","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"integer","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clinica/athlete/{client_id}/soap":{"post":{"summary":"Api Save Soap Note","operationId":"api_save_soap_note_api_clinica_athlete__client_id__soap_post","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"integer","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clinica/athlete/{client_id}/tanita":{"post":{"summary":"Api Save Tanita","operationId":"api_save_tanita_api_clinica_athlete__client_id__tanita_post","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"integer","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clinica/athlete/{client_id}/lab-test":{"post":{"summary":"Api Save Lab Test","operationId":"api_save_lab_test_api_clinica_athlete__client_id__lab_test_post","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"integer","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ActionAppointmentRequest":{"properties":{"id":{"type":"integer","title":"Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["id"],"title":"ActionAppointmentRequest"},"AddHolidayRequest":{"properties":{"date":{"type":"string","title":"Date"},"name":{"type":"string","title":"Name"},"scope":{"type":"string","title":"Scope","default":"Clínica Cerrada"},"is_closed":{"type":"integer","title":"Is Closed","default":1}},"type":"object","required":["date","name"],"title":"AddHolidayRequest"},"Body_api_upload_excel_api_upload_excel_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_api_upload_excel_api_upload_excel_post"},"Body_api_upload_training_schedule_api_diet_upload_training_schedule_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_api_upload_training_schedule_api_diet_upload_training_schedule_post"},"Body_upload_tanita_api_tanita_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_tanita_api_tanita_upload_post"},"BookingRequest":{"properties":{"bono_id":{"type":"integer","title":"Bono Id"},"client_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"},"client_name":{"type":"string","title":"Client Name"},"client_email":{"type":"string","title":"Client Email"},"date":{"type":"string","title":"Date"},"time":{"type":"string","title":"Time"},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes","default":30},"modality":{"type":"string","title":"Modality","default":"Presencial"}},"type":"object","required":["bono_id","client_name","client_email","date","time"],"title":"BookingRequest"},"BulkDurationRequest":{"properties":{"duration_minutes":{"type":"integer","title":"Duration Minutes","default":30},"only_future":{"type":"boolean","title":"Only Future","default":false}},"type":"object","title":"BulkDurationRequest"},"CalculateNeedsRequest":{"properties":{"weight_kg":{"type":"number","title":"Weight Kg"},"ffm_kg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ffm Kg","default":0.0},"height_cm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Height Cm","default":175.0},"age":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age","default":30},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender","default":"M"},"formula":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Formula","default":"cunningham"},"pal":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pal","default":1.5},"goal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Goal","default":"mantenimiento"}},"type":"object","required":["weight_kg"],"title":"CalculateNeedsRequest"},"CopilotQueryRequest":{"properties":{"prompt":{"type":"string","title":"Prompt"}},"type":"object","required":["prompt"],"title":"CopilotQueryRequest"},"DriveActionRequest":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"DriveActionRequest"},"DriveTanitaSaveRequest":{"properties":{"name":{"type":"string","title":"Name"},"measurement":{"additionalProperties":true,"type":"object","title":"Measurement"}},"type":"object","required":["name","measurement"],"title":"DriveTanitaSaveRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LoadTrainingFileRequest":{"properties":{"file_path":{"type":"string","title":"File Path"},"weight_kg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weight Kg","default":75.0}},"type":"object","required":["file_path"],"title":"LoadTrainingFileRequest"},"ManualBookingRequest":{"properties":{"client_name":{"type":"string","title":"Client Name"},"client_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Email","default":""},"client_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Phone","default":""},"date":{"type":"string","title":"Date"},"time":{"type":"string","title":"Time"},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes","default":30},"service":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service","default":"Anyd Nutrición Deportiva"},"modality":{"type":"string","title":"Modality","default":"Presencial"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","default":""},"bono_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bono Id"}},"type":"object","required":["client_name","date","time"],"title":"ManualBookingRequest"},"RescheduleRequest":{"properties":{"id":{"type":"integer","title":"Id"},"date":{"type":"string","title":"Date"},"time":{"type":"string","title":"Time"},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes","default":30},"service":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service"},"modality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modality"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["id","date","time"],"title":"RescheduleRequest"},"SavePlanRequest":{"properties":{"client_name":{"type":"string","title":"Client Name"},"plan_name":{"type":"string","title":"Plan Name"},"client_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"},"weight":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weight","default":0.0},"ffm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ffm","default":0.0},"bmr":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bmr","default":0.0},"tdee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tdee","default":0.0},"target_kcal":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Kcal","default":0.0},"target_protein_g":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Protein G","default":0.0},"target_carbs_g":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Carbs G","default":0.0},"target_fat_g":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Fat G","default":0.0},"weekly_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Weekly Data"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","default":""}},"type":"object","required":["client_name","plan_name"],"title":"SavePlanRequest"},"SmartWeekRequest":{"properties":{"target_kcal":{"type":"number","title":"Target Kcal","default":2200.0},"target_protein_g":{"type":"number","title":"Target Protein G","default":140.0}},"type":"object","title":"SmartWeekRequest"},"TanitaConnectRequest":{"properties":{"port":{"type":"string","title":"Port"},"baud_rate":{"type":"integer","title":"Baud Rate","default":9600}},"type":"object","required":["port"],"title":"TanitaConnectRequest"},"TanitaSaveRequest":{"properties":{"client_name":{"type":"string","title":"Client Name"},"measurement":{"additionalProperties":true,"type":"object","title":"Measurement"},"appointment_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Appointment Id"}},"type":"object","required":["client_name","measurement"],"title":"TanitaSaveRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}