{"openapi":"3.0.3","info":{"title":"API pública do Kroply","description":"Leitura dos dados de uma empresa no Kroply: resumo do dia, programação, compras, resumos semanais dos grupos e horas por pessoa e obra. Só GET, sem escrita. Cada chave enxerga só os dados da empresa dona dela.","version":"1.0.0"},"servers":[{"url":"https://ooeomqusfoavhsxupzqk.supabase.co/functions/v1/api"}],"security":[{"chaveApi":[]}],"paths":{"/resumo":{"get":{"summary":"Retrato do dia: gente em campo, frentes e estado das compras","operationId":"resumoDoDia","parameters":[{"name":"data","in":"query","required":false,"schema":{"type":"string","format":"date"},"description":"AAAA-MM-DD; padrão é hoje"}],"responses":{"200":{"description":"Resumo do dia","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{"type":"string","format":"date"},"programacao":{"type":"object","properties":{"externos":{"$ref":"#/components/schemas/ResumoTipo"},"sites":{"$ref":"#/components/schemas/ResumoTipo"}}},"compras":{"type":"object","properties":{"por_status":{"type":"object","additionalProperties":{"type":"integer"}},"paradas_ha_mais_de_3_dias":{"type":"integer"}}}}}}}},"401":{"description":"Chave ausente, inválida ou revogada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/programacao":{"get":{"summary":"As frentes de um dia, com equipe e retorno do campo","operationId":"programacaoDoDia","parameters":[{"name":"data","in":"query","required":false,"schema":{"type":"string","format":"date"},"description":"AAAA-MM-DD; padrão é hoje"},{"name":"tipo","in":"query","required":false,"schema":{"type":"string","enum":["externos","sites"],"default":"externos"}}],"responses":{"200":{"description":"Programação do dia","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{"type":"string","format":"date"},"tipo":{"type":"string"},"status":{"type":"string","nullable":true,"enum":["rascunho","publicada",null]},"frentes":{"type":"array","items":{"$ref":"#/components/schemas/Frente"}}}}}}},"401":{"description":"Chave ausente, inválida ou revogada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/compras":{"get":{"summary":"Solicitações de compra, mais recentes primeiro","operationId":"listarCompras","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"um ou mais separados por vírgula: solicitado,cotando,aprovado,rejeitado,comprado,chegou,cancelado"},{"name":"limite","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}],"responses":{"200":{"description":"Lista de solicitações","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"itens":{"type":"array","items":{"$ref":"#/components/schemas/SolicitacaoCompra"}}}}}}},"401":{"description":"Chave ausente, inválida ou revogada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/horas":{"get":{"summary":"Horas por pessoa e obra num período (8 h por dia, divididas entre as obras do dia)","description":"Tirado da Programação, em qualquer status. Uma linha por pessoa, dia e obra. Ausência lançada no dia dá 0 hora. Centro de custo vem de obra → projeto → centro de custo do Omie.","operationId":"listarHoras","parameters":[{"name":"de","in":"query","required":false,"schema":{"type":"string","format":"date"},"description":"primeiro dia; padrão é o dia 1 do mês de ate"},{"name":"ate","in":"query","required":false,"schema":{"type":"string","format":"date"},"description":"último dia; padrão é hoje. Período de até 1 ano"}],"responses":{"200":{"description":"Horas no período","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"de":{"type":"string","format":"date"},"ate":{"type":"string","format":"date"},"total_horas":{"type":"number"},"linhas":{"type":"array","items":{"$ref":"#/components/schemas/LinhaHoras"}}}}}}},"400":{"description":"Datas inválidas","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/resumos-semanais":{"get":{"summary":"Resumos semanais dos grupos de WhatsApp (aba Resumo), mais recentes primeiro","description":"O que avançou, decisões, pendências, material e fotos de cada grupo/obra por semana. Grupos sem mensagem na semana ficam de fora.","operationId":"listarResumosSemanais","parameters":[{"name":"semanas","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":12,"default":1},"description":"quantas semanas para trás"},{"name":"projeto","in":"query","required":false,"schema":{"type":"string"},"description":"parte do nome do grupo/obra, sem diferenciar maiúsculas"}],"responses":{"200":{"description":"Resumos agrupados por semana","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"semanas":{"type":"array","items":{"type":"object","properties":{"semana_inicio":{"type":"string","format":"date","description":"segunda-feira da semana"},"projetos":{"type":"array","items":{"$ref":"#/components/schemas/ResumoSemanal"}}}}}}}}}},"401":{"description":"Chave ausente, inválida ou revogada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}}},"components":{"securitySchemes":{"chaveApi":{"type":"http","scheme":"bearer","bearerFormat":"kpl_live_...","description":"Chave gerada em Configurações → API, dentro do Kroply."}},"schemas":{"LinhaHoras":{"type":"object","properties":{"data":{"type":"string","format":"date"},"dia_semana":{"type":"string","description":"domingo a sábado"},"tecnico_id":{"type":"string","format":"uuid"},"tecnico":{"type":"string"},"funcao":{"type":"string","nullable":true},"categoria":{"type":"string","nullable":true},"obra_id":{"type":"string","format":"uuid","nullable":true},"obra":{"type":"string"},"cliente":{"type":"string","nullable":true},"projeto":{"type":"string","nullable":true},"centro_custo_codigo":{"type":"integer","nullable":true,"description":"código do centro de custo (departamento) no Omie"},"centro_custo":{"type":"string","description":"nome do centro de custo, ou \"sem centro de custo\""},"horas":{"type":"number","description":"8 dividido pelo número de obras da pessoa no dia; 0 se ausente"},"status_programacao":{"type":"string","enum":["rascunho","publicada"]},"tipo_programacao":{"type":"string","enum":["externos","sites"]},"ausencia":{"type":"string","nullable":true,"description":"motivo da ausência no dia (ferias, atestado, afastamento, outro)"}}},"Erro":{"type":"object","properties":{"erro":{"type":"string"}},"required":["erro"]},"ResumoTipo":{"type":"object","properties":{"status":{"type":"string","nullable":true},"frentes":{"type":"integer"},"pessoas_em_campo":{"type":"integer"}}},"Frente":{"type":"object","properties":{"obra":{"type":"string"},"atividade":{"type":"string"},"observacao":{"type":"string","nullable":true},"veiculo":{"type":"string","nullable":true},"equipe":{"type":"array","items":{"type":"string"}},"execucao":{"type":"string","enum":["pendente","feito","nao_feito","pendencia"]},"pendencia":{"type":"string","nullable":true}}},"SolicitacaoCompra":{"type":"object","properties":{"id":{"type":"string"},"descricao":{"type":"string"},"quantidade":{"type":"string","nullable":true},"prioridade":{"type":"string"},"status":{"type":"string"},"centro_custo":{"type":"string","nullable":true},"fornecedor":{"type":"string","nullable":true},"valor":{"type":"number","nullable":true},"pedido_omie":{"type":"string","nullable":true},"previsao_entrega":{"type":"string","format":"date","nullable":true},"criado_em":{"type":"string","format":"date-time"},"atualizado_em":{"type":"string","format":"date-time"}}},"ResumoSemanal":{"type":"object","properties":{"projeto":{"type":"string"},"status":{"type":"string","enum":["problema","pendencia","normal"]},"destaque":{"type":"string","nullable":true},"avancou":{"type":"array","items":{"type":"string"}},"decisoes":{"type":"array","items":{"type":"string"}},"pendencias":{"type":"array","items":{"type":"string"}},"materiais":{"type":"array","items":{"type":"string"}},"fotos":{"type":"array","items":{"type":"string"}},"total_mensagens":{"type":"integer"},"total_fotos":{"type":"integer"}}}}}}