Klingo: Consumos
Endpoints da WebApiAlcance para os consumos do sistema Klingo. Cada execução dispara a chamada GET /consumos?mes=YYYY-MM na API Klingo, persiste o resultado (a execução-mãe mais os lançamentos de estoque/centro de custo) e permite consultá-lo depois. Cobrem a sincronização mensal, a listagem paginada das execuções do usuário autenticado e a busca de uma execução por ID (com lançamentos e payload bruto inline).
Todos os endpoints exigem autenticação. Veja Autenticação para o fluxo de API Key. O Swagger oficial está em api.contabilidadealcance.com.br/docs.
Escopo compartilhado do recurso klingo
O escopo é derivado do 1º segmento da rota: /klingo/consumos/... tem como recurso klingo - e não klingo_consumos. Logo, os escopos são klingo:read e klingo:write, os mesmos de Klingo: Relatórios e Klingo: Despesas. Uma API Key com klingo:read alcança a leitura dos três domínios; conceda o escopo com esse alcance em mente.
Base path
/api/v1/klingo/consumosEscopos necessários
klingo:read- listagem paginada e busca por IDklingo:write- sincronização (POST /sync/, escreve no banco e chama a API externa)
O escopo é derivado da rota: o primeiro segmento /klingo vira o recurso klingo (compartilhado com Relatórios e Despesas), e o método HTTP define a ação (read para GET, write para POST).
Endpoints
POST /klingo/consumos/sync/
Dispara GET /consumos?mes=YYYY-MM na API Klingo, persiste o resultado (execução-mãe mais os lançamentos) e devolve o registro recém-criado com os lancamentos inline. Operação de escrita não idempotente - escreve no banco e chama a API externa. Sujeita a rate limit (bucket klingo_consumos_sync, 10 requisições/min por IP).
Parâmetros
Este endpoint não recebe parâmetros de rota ou query - os dados vão no corpo da requisição (KlingoConsumoSyncInput): mes (obrigatório, formato YYYY-MM, mês entre 01 e 12).
Request
{
"mes": "2026-06"
}Response 200 OK
{
"success": true,
"message": "Consumos Klingo sincronizados com sucesso",
"data": {
"id": 42,
"id_usuario_created": 7,
"mes": "2026-06",
"total_lancamentos": 128,
"executado_em": "2026-06-30T18:05:11-03:00",
"data_hora_criacao": "2026-06-30T18:05:11-03:00",
"payload_bruto": {},
"lancamentos": [
{
"id": 1001,
"dt_movimentacao": "2026-06-15T10:22:00-03:00",
"qtd": 3,
"valor": 149.9,
"item_nome": "Consulta cardiologia",
"centro_nome": "Unidade Centro"
}
]
}
}Payload da Klingo acima do limite retorna 413 Request Entity Too Large; regra de negócio da Klingo retorna 422 Unprocessable Entity; token rejeitado, falha de transporte/parse ou 404 do gateway retornam 502 Bad Gateway. Escopo: klingo:write
GET /klingo/consumos/
Lista, de forma paginada, as execuções de consumos do usuário autenticado, em ordem decrescente de executado_em. Sempre filtra por id_usuario_created = usuário logado. Lista vazia é um estado válido - retorna 200 OK com data: [] e a mensagem "Nenhuma execucao de consumos Klingo encontrada.".
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
skip | int >= 0 | query | não | Offset para paginação. Default 0. |
limit | int 1..200 | query | não | Tamanho da página. Default 50. |
mes | str | query | não | Filtra por mês consultado, formato YYYY-MM. |
executado_em_inicio | datetime | query | não | Filtra por executado_em >= valor (ISO 8601). |
executado_em_fim | datetime | query | não | Filtra por executado_em <= valor (ISO 8601). Hora 00:00:00 é expandida para o fim do dia. |
Retorna KlingoConsumoExecucaoReadSemDados - a projeção sem lancamentos e sem payload_bruto (a leitura completa fica em GET /{execucao_id}).
Request
Sem corpo de requisição.
Response 200 OK
{
"success": true,
"message": "Execucoes de consumos Klingo recuperadas com sucesso",
"data": {
"items": [
{
"id": 42,
"id_usuario_created": 7,
"mes": "2026-06",
"total_lancamentos": 128,
"executado_em": "2026-06-30T18:05:11-03:00",
"data_hora_criacao": "2026-06-30T18:05:11-03:00"
}
],
"total": 1
}
}Escopo: klingo:read
GET /klingo/consumos/{execucao_id}
Busca uma execução persistida pelo ID interno (klingo_consumos_execucoes.id), validando ownership (RLS por id_usuario_created). Retorna KlingoConsumoExecucaoRead (execução-mãe + payload_bruto + lancamentos) com eager load para evitar N+1 na serialização. Quando não encontrado (ou de outro usuário), retorna 404 Not Found com detail: "Execucao de consumos Klingo nao encontrada.".
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
execucao_id | int | path | sim | ID interno da execução de consumos |
Request
Sem corpo de requisição.
Response 200 OK
{
"success": true,
"message": "Execucao de consumos Klingo encontrada com sucesso",
"data": {
"id": 42,
"id_usuario_created": 7,
"mes": "2026-06",
"total_lancamentos": 128,
"executado_em": "2026-06-30T18:05:11-03:00",
"data_hora_criacao": "2026-06-30T18:05:11-03:00",
"payload_bruto": {},
"lancamentos": [
{
"id": 1001,
"dt_movimentacao": "2026-06-15T10:22:00-03:00",
"qtd": 3,
"valor": 149.9,
"item_nome": "Consulta cardiologia",
"centro_nome": "Unidade Centro"
}
]
}
}Escopo: klingo:read
Schemas
KlingoConsumoSyncInput
Body de entrada de POST /klingo/consumos/sync/.
| Campo | Tipo | Obrigatório | Observações |
|---|---|---|---|
mes | str | sim | Mês a consultar no formato YYYY-MM (mês entre 01 e 12). Validado no schema e novamente no cliente HTTP. |
KlingoConsumoExecucaoReadSemDados
Projeção usada na listagem paginada. Sem lancamentos e sem payload_bruto (evita devolver MBs por item e dados brutos da Klingo sem filtro).
| Campo | Tipo | Notas |
|---|---|---|
id | int | ID interno da execução. |
id_usuario_created | int | Usuário que criou a execução (dono, base da RLS). |
mes | str | Mês consultado (YYYY-MM). |
total_lancamentos | int? | Quantidade de lançamentos persistidos. |
executado_em | datetime | Momento da execução. Normalizado para America/Sao_Paulo. |
data_hora_criacao | datetime | Criação do registro. Normalizado para America/Sao_Paulo. |
KlingoConsumoExecucaoRead
Projeção completa, usada em POST /sync/ e GET /{execucao_id}. Estende KlingoConsumoExecucaoReadSemDados (todos os campos acima) e acrescenta:
| Campo | Tipo | Notas |
|---|---|---|
payload_bruto | Any | Resposta bruta da Klingo (fidelidade). Default null. |
lancamentos | List[KlingoConsumoLancamentoRead] | Lançamentos da execução. Default []. |
KlingoConsumoLancamentoRead
Cada lançamento persistido em klingo_consumos_lancamentos.
| Campo | Tipo | Notas |
|---|---|---|
id | int | ID interno do lançamento. |
id_estoque_movimentacao | int? | ID da movimentação na Klingo. |
id_estoque_item | int? | ID do item na Klingo. |
id_centro_custo | int? | ID do centro de custo na Klingo. |
dt_movimentacao | datetime? | Data da movimentação. Normalizada para America/Sao_Paulo. |
st_doc | str? | Situação/documento. |
qtd | Decimal? | Quantidade. |
valor | Decimal? | Valor. |
marcacao | str? | Marcação. |
item_nome | str? | Nome do item (achatado). |
item_grupo_id | int? | ID do grupo do item. |
item_grupo_nome | str? | Nome do grupo do item. |
item_categoria_id | int? | ID da categoria do item. |
item_categoria_nome | str? | Nome da categoria do item. |
item_categoria_natureza | str? | Natureza da categoria do item. |
centro_nome | str? | Nome do centro de custo (achatado). |
centro_unidade_id | int? | ID da unidade do centro. |
centro_unidade_nome | str? | Nome da unidade do centro. |
centro_unidade_sigla | str? | Sigla da unidade do centro. |
payload_bruto_lancamento | Any | Payload bruto do lançamento (fidelidade). |
data_hora_criacao | datetime | Criação do registro. Normalizada para America/Sao_Paulo. |
KlingoConsumoList
Envelope de paginação retornado por GET /klingo/consumos/.
| Campo | Tipo | Notas |
|---|---|---|
items | List[KlingoConsumoExecucaoReadSemDados] | Página de execuções. |
total | int | Total absoluto de registros. |
Notas
- Toda resposta segue o envelope
{ success, message, data }(ou{ success: false, message, details }em erro). - As rotas estáticas (
POST /sync/eGET /) são declaradas antes da rota dinâmicaGET /{execucao_id}, evitando que o FastAPI faça pattern-match em"sync"como umexecucao_id. - Datas são normalizadas para o fuso
America/Sao_Paulona serialização quando chegam sem timezone. - A listagem intencionalmente omite
lancamentosepayload_bruto- para o dado completo, consulte a execução por ID. - O
POST /sync/é uma operação de escrita não idempotente e sujeita a rate limit; não deve ser usado para leitura repetida.