{"openapi":"3.1.0","info":{"title":"API de Vetorização Multimodal & Conector Copilot Studio","description":"API para extração de conteúdo e imagens (PDF, PPTX, XLSX, DOCX, TXT) a partir de montagem Azure Files (/mnt/appy), vetorização no ChromaDB com Azure AI Foundry (text-embedding-3-small), descrição multimodal com Azure Document Intelligence / Vision, e conector para Microsoft Copilot Studio.","version":"1.0.0"},"paths":{"/api/v1/copilot/query":{"post":{"tags":["Copilot Studio"],"summary":"Consulta semântica de documentos para o Microsoft Copilot Studio","description":"Busca trechos relevantes de documentos vetorizados (PDF, PPTX, DOCX, XLSX, TXT) e descrições de imagens para alimentar o agente do Copilot Studio.","operationId":"query_vector_store_api_v1_copilot_query_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopilotQueryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopilotQueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/admin/clients":{"get":{"tags":["Administração & Ingestão"],"summary":"Lista os clientes disponíveis na planilha Excel","operationId":"list_clients_api_v1_admin_clients_get","parameters":[{"name":"excel_path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"mondelez.xlsx","title":"Excel Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/upload-excel":{"post":{"tags":["Administração & Ingestão"],"summary":"Upload de uma nova planilha de arquivos para vetorização","operationId":"upload_excel_api_v1_admin_upload_excel_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_excel_api_v1_admin_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"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/admin/ingest/trigger":{"post":{"tags":["Administração & Ingestão"],"summary":"Dispara processo de vetorização em background","operationId":"trigger_ingest_api_v1_admin_ingest_trigger_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerIngestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/admin/jobs":{"get":{"tags":["Administração & Ingestão"],"summary":"Lista histórico de jobs de vetorização","operationId":"list_jobs_api_v1_admin_jobs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/jobs/{job_id}":{"get":{"tags":["Administração & Ingestão"],"summary":"Consulta status detalhado de um job","operationId":"get_job_status_api_v1_admin_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/stats":{"get":{"tags":["Administração & Ingestão"],"summary":"Métricas gerais de vetorização e armazenamento","operationId":"get_system_stats_api_v1_admin_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/scheduler/tasks":{"get":{"tags":["Agendamento (Scheduler)"],"summary":"Lista todas as tarefas de vetorização agendadas","operationId":"get_tasks_api_v1_scheduler_tasks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["Agendamento (Scheduler)"],"summary":"Agenda uma nova rotina periódica de vetorização","operationId":"create_schedule_task_api_v1_scheduler_tasks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleJobRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/scheduler/tasks/{task_id}":{"delete":{"tags":["Agendamento (Scheduler)"],"summary":"Remove uma tarefa agendada","operationId":"delete_task_api_v1_scheduler_tasks__task_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Interface Web de Gestão e Configuração","description":"Renderiza o painel de controle web para upload de Excel, agendamento e testes.","operationId":"dashboard_ui__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/health":{"get":{"summary":"Health check da API","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/copilot-openapi.json":{"get":{"summary":"Especificação OpenAPI dedicada para o Copilot Studio","description":"Gera especificação OpenAPI v3 enxuta para importação direta no Microsoft Copilot Studio.","operationId":"copilot_openapi_copilot_openapi_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"Body_upload_excel_api_v1_admin_upload_excel_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_excel_api_v1_admin_upload_excel_post"},"CopilotQueryRequest":{"properties":{"query":{"type":"string","title":"Query","description":"Pergunta ou termo de busca semântica enviado pelo agente do Copilot Studio."},"cliente":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cliente","description":"Filtro opcional por nome do cliente (ex: Mondelez). Se omitido, busca em todos os autorizados."},"top_k":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Top K","description":"Número de trechos mais relevantes a retornar.","default":5},"min_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Min Score","description":"Pontuação mínima de similaridade por cosseno.","default":0.0}},"type":"object","required":["query"],"title":"CopilotQueryRequest"},"CopilotQueryResponse":{"properties":{"status":{"type":"string","title":"Status","default":"success"},"query":{"type":"string","title":"Query"},"cliente":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cliente"},"results_count":{"type":"integer","title":"Results Count"},"context_text":{"type":"string","title":"Context Text","description":"Contexto consolidado pronto para ser consumido e citado pelo Copilot Studio."},"sources":{"items":{"$ref":"#/components/schemas/SourceChunk"},"type":"array","title":"Sources"}},"type":"object","required":["query","results_count","context_text","sources"],"title":"CopilotQueryResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"JobStatusResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"},"cliente":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cliente"},"total_files":{"type":"integer","title":"Total Files"},"processed_files":{"type":"integer","title":"Processed Files"},"failed_files":{"type":"integer","title":"Failed Files"},"total_chunks":{"type":"integer","title":"Total Chunks"},"total_images_described":{"type":"integer","title":"Total Images Described"},"current_file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current File"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["job_id","status","cliente","total_files","processed_files","failed_files","total_chunks","total_images_described","current_file","error_message","started_at","completed_at"],"title":"JobStatusResponse"},"ScheduleJobRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Nome identificador da rotina agendada."},"cron_expression":{"type":"string","title":"Cron Expression","description":"Expressão cron padrão (ex: '0 2 * * *' para todos os dias às 02h)."},"cliente":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cliente","description":"Cliente a processar ou todos se omitido."},"excel_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Excel Path","description":"Caminho do arquivo Excel padrão a ser lido.","default":"mondelez.xlsx"},"active":{"type":"boolean","title":"Active","description":"Se o agendamento está ativo.","default":true}},"type":"object","required":["name","cron_expression"],"title":"ScheduleJobRequest"},"ScheduleJobResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"cron_expression":{"type":"string","title":"Cron Expression"},"cliente":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cliente"},"excel_path":{"type":"string","title":"Excel Path"},"active":{"type":"boolean","title":"Active"},"next_run_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Run Time"}},"type":"object","required":["id","name","cron_expression","cliente","excel_path","active","next_run_time"],"title":"ScheduleJobResponse"},"SourceChunk":{"properties":{"arquivo":{"type":"string","title":"Arquivo"},"caminho_completo":{"type":"string","title":"Caminho Completo"},"cliente":{"type":"string","title":"Cliente"},"pagina_ou_slide":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pagina Ou Slide"},"trecho":{"type":"string","title":"Trecho"},"entregas":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entregas"},"metodologias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metodologias"},"itens_contratados":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Itens Contratados"},"imagens_descricoes":{"items":{"type":"string"},"type":"array","title":"Imagens Descricoes","default":[]},"similaridade":{"type":"number","title":"Similaridade"},"score_relevancia":{"type":"number","title":"Score Relevancia"}},"type":"object","required":["arquivo","caminho_completo","cliente","trecho","similaridade","score_relevancia"],"title":"SourceChunk"},"TriggerIngestRequest":{"properties":{"excel_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Excel Path","description":"Caminho relativo ou absoluto para a planilha Excel na VM."},"cliente":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cliente","description":"Filtrar linhas do Excel por cliente específico (ex: Mondelez)."},"min_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Score","description":"Filtrar arquivos com Score maior ou igual (ex: 80)."},"force_reprocess":{"type":"boolean","title":"Force Reprocess","description":"Reprocessar mesmo que o hash do arquivo não tenha mudado.","default":false}},"type":"object","title":"TriggerIngestRequest"},"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"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}