Consultando SQL - Consultas Analiticas via Linguagem Natural
Skill para consultas analiticas ao banco de dados PostgreSQL via linguagem natural.
ESCOPO: Esta skill converte perguntas em SQL e executa read-only.
Para operacoes logisticas (separacao, estoque, disponibilidade), use gerindo-expedicao.
Para exportar resultados como Excel/CSV, use exportando-arquivos.
Quando Usar
USE consultando-sql:
├── Rankings e Top N
│ "Top 10 clientes por valor de carteira"
│ "Vendedores com mais pedidos este mes"
│
├── Agregacoes e Estatisticas
│ "Valor medio de pedido por vendedor"
│ "Quantidade total de pedidos por estado"
│
├── Distribuicoes
│ "Distribuicao de pedidos por incoterm"
│ "Pedidos por faixa de valor"
│
├── Tendencias e Periodos
│ "Faturamento dos ultimos 30 dias"
│ "Evolucao de pedidos por mes"
│
├── Cruzamentos entre Tabelas
│ "Produtos sem estoque mas com pedidos pendentes"
│ "Clientes com separacoes pendentes e valor alto"
│
├── Consultas Financeiras
│ "Top 10 clientes por valor de contas a receber vencidas"
│ "Total de titulos a pagar nos proximos 30 dias"
│
├── Analise de Fretes
│ "Valor total de fretes por transportadora nos ultimos 60 dias"
│ "Custo medio de frete por UF de destino"
│
└── Qualquer pergunta analitica/estatistica ad-hoc
Quando NAO Usar
NAO USE consultando-sql (use gerindo-expedicao):
├── Consulta especifica de 1 pedido/cliente
│ "Tem pedido do Atacadao?" -> gerindo-expedicao
│
├── Operacoes com side-effects
│ "Crie separacao" -> gerindo-expedicao
│
├── Projecao de estoque/disponibilidade
│ "Quando VCD123 fica disponivel?" -> gerindo-expedicao
│
└── Consultas que exigem logica complexa de negocio
"Qual a prioridade P1-P7?" -> subagente analista-carteira
Regras Criticas
- Feature Flag: Requer
AGENT_TEXT_TO_SQL=true. Se desabilitado, retorna aviso.
- Seguranca Multi-Camada:
- Generator: Apenas SELECT (instruido via prompt)
- Evaluator: Valida corretude semantica e sintatica com schema detalhado
- Safety: Regex validator bloqueia DELETE/DROP/INSERT/UPDATE/tabelas proibidas/funcoes perigosas
- Executor:
SET TRANSACTION READ ONLY + timeout 5s
- Limites: Max 500 linhas retornadas. Timeout 5 segundos.
- Guardrail Anti-Alucinacao: Evaluator recebe schema DETALHADO (campos, tipos, FKs) apenas das tabelas usadas e corrige campos inexistentes.
- Tabelas Bloqueadas: usuarios, permissions, agent_sessions, agent_memories, agent_memory_versions, alembic_version, portal_sessoes, tagplus_oauth_token, e 9 outras (17 total)
Script Principal
text_to_sql.py
source .venv/bin/activate && \
AGENT_TEXT_TO_SQL=true python .claude/skills/consultando-sql/scripts/text_to_sql.py --pergunta "PERGUNTA"
Parametros
| Parametro |
Obrigatorio |
Descricao |
Exemplo |
--pergunta / -p |
Sim |
Pergunta em linguagem natural (portugues) |
--pergunta "Top 10 clientes por valor" |
--debug |
Nao |
Mostrar detalhes de cada etapa do pipeline |
--debug |
Exemplos de Uso
Ranking de clientes (tabela core)
source .venv/bin/activate && \
AGENT_TEXT_TO_SQL=true python .claude/skills/consultando-sql/scripts/text_to_sql.py \
--pergunta "Top 10 clientes por valor total na carteira"
Contas a receber vencidas (tabela expandida)
AGENT_TEXT_TO_SQL=true python .../text_to_sql.py \
--pergunta "Top 10 clientes por valor de contas a receber vencidas"
Fretes por transportadora (tabela expandida)
AGENT_TEXT_TO_SQL=true python .../text_to_sql.py \
--pergunta "Valor total de fretes por transportadora nos ultimos 60 dias"
Cross-domain (carteira + faturamento)
AGENT_TEXT_TO_SQL=true python .../text_to_sql.py \
--pergunta "Clientes com pedidos pendentes mas sem faturamento nos ultimos 30 dias"
Distribuicao por estado
AGENT_TEXT_TO_SQL=true python .../text_to_sql.py \
--pergunta "Quantos pedidos pendentes por estado?"
Debug detalhado
AGENT_TEXT_TO_SQL=true python .../text_to_sql.py \
--pergunta "Top 5 vendedores por valor total" --debug
Retorno JSON
Sucesso
{
"sucesso": true,
"pergunta": "Top 10 clientes por valor total na carteira",
"sql": "SELECT cnpj_cpf, raz_social, ROUND(SUM(qtd_saldo_produto_pedido * preco_produto_pedido)::numeric, 2) AS valor_total FROM carteira_principal WHERE ativo = True AND qtd_saldo_produto_pedido > 0 GROUP BY cnpj_cpf, raz_social ORDER BY valor_total DESC LIMIT 10",
"sql_original": "SELECT ...",
"dados": [
{"cnpj_cpf": "75.315.333/0183-18", "raz_social": "ATACADAO S.A.", "valor_total": 5228553.10}
],
"colunas": ["cnpj_cpf", "raz_social", "valor_total"],
"total_linhas": 10,
"aviso": "SQL corrigida pelo evaluator (tentativa 1): ...",
"tabelas_usadas": ["carteira_principal"],
"etapas": {
"generator_ms": 1800,
"evaluator_ms": 2200,
"safety": {"safe": true, "concerns": []},
"executor_ms": 2000
},
"tempo_total_ms": 6000
}
Erro (seguranca)
{
"sucesso": false,
"pergunta": "DELETE FROM carteira_principal",
"sql": null,
"aviso": "Query bloqueada por seguranca: Keywords proibidas: DELETE"
}
Feature flag desabilitada
{
"sucesso": false,
"pergunta": "Top 10 clientes",
"aviso": "Text-to-SQL desabilitado. Ative com AGENT_TEXT_TO_SQL=true"
}
Arquitetura B: Catalogo Completo + Retrieval em 2 Fases
Pergunta do usuario
|
v
[GENERATOR] Haiku recebe CATALOGO LEVE (104 tabelas, ~2.7K tokens)
| Gera SQL com nomes de tabela corretos, campos aproximados
v
[RETRIEVAL] Extrai tabelas do SQL (regex FROM/JOIN)
| Carrega schemas DETALHADOS apenas das tabelas usadas (2-4 tipicamente)
v
[EVALUATOR] Haiku recebe SCHEMA DETALHADO (campos, tipos, FKs, regras)
| Valida campos, corrige nomes, adiciona filtros
|-- Aprovado? -> Safety
|-- Corrigido? -> Usa SQL corrigida -> Safety
|-- Reprovado? -> Re-gera com feedback (max 2 tentativas)
|
v
[SAFETY] Regex validator (keywords, funcoes, tabelas bloqueadas)
|-- Seguro? -> Executor
|-- Bloqueado? -> Retorna erro
|
v
[EXECUTOR] SET TRANSACTION READ ONLY + timeout 5s + LIMIT 500
|
v
JSON com dados + SQL usada + tabelas_usadas + metricas de tempo
Vantagem da Arquitetura B
- Generator ve TODAS as 104 tabelas ativas (nome + descricao) → encontra qualquer tabela relevante
- Evaluator recebe schema DETALHADO apenas das 2-4 tabelas usadas → validacao precisa
- 2 chamadas LLM (mesmo que antes) → sem overhead de latencia
- Cross-domain nativo: sem barreira de dominios, JOIN entre financeiro + logistica funciona
Cobertura de Tabelas
| Metrica |
Valor |
| Total de tabelas no banco |
~196 |
| Tabelas bloqueadas (auth, agent, etc.) |
17 |
| Tabelas mortas (0 registros em prod) |
57 |
| Tabelas irrelevantes (curadoria manual) |
18 |
| Tabelas no catalogo |
104 |
| Tabelas core (schema manual curado) |
9 |
| Tabelas auto-geradas |
95 |
| Cobertura (tabelas analiticas relevantes) |
100% |
Tabelas Core (schema manual com regras de negocio)
| Tabela |
Descricao |
carteira_principal |
Pedidos com saldo pendente. Fonte da verdade para demanda. |
separacao |
Itens separados para expedicao. Projeta saidas de estoque. |
movimentacao_estoque |
Movimentos de estoque: entradas, saidas, ajustes, producao. |
programacao_producao |
Producao programada por data e linha. |
cadastro_palletizacao |
Cadastro de produtos com peso, pallet, conversoes. |
faturamento_produto |
NFs emitidas por produto. Registros de faturamento. |
embarques |
Embarques que agrupam separacoes para transporte. |
embarque_itens |
Itens individuais dentro de um embarque. |
saldo_standby |
Pedidos em espera: saldo, comercial ou PCP. |
Dominios Expandidos
- Financeiro: contas_a_receber, contas_a_pagar, extrato_item, baixa_pagamento_item, baixa_titulo_item, cnab_retorno_item, comprovante_*
- Fretes: fretes, faturas_frete, despesas_extras, conhecimento_transporte, tabelas_frete, aprovacoes_frete
- Devolucoes: nf_devolucao, nf_devolucao_linha, ocorrencia_devolucao, frete_devolucao
- Recebimento: validacao_fiscal_dfe, match_nf_po_*, divergencia_nf_po, picking_recebimento_*
- Rastreamento: entregas_monitoradas, entregas_rastreadas, agendamentos_entrega, eventos_entrega
- Cadastros: transportadoras, cidades, cadastro_rota, grupo_empresarial, depara_produto_cliente
Geracao de Schemas
Os schemas sao auto-gerados a partir dos modelos SQLAlchemy:
source .venv/bin/activate && \
python .claude/skills/consultando-sql/scripts/generate_schemas.py
Opcoes
# Apenas estatisticas (nao gera arquivos)
python .../generate_schemas.py --stats
Arquivos Gerados
| Arquivo |
Descricao |
schemas/catalog.json |
Catalogo leve: nome + descricao + 3 campos-chave por tabela (~25KB) |
schemas/tables/{tabela}.json |
Schema detalhado por tabela: campos, tipos, FKs, indices (104 arquivos) |
schemas/relationships.json |
Mapa de ForeignKeys entre tabelas (171 relacionamentos) |
schemas/schema.json |
Schema manual curado das 9 tabelas core (mantido como referencia) |
Quando Regenerar
Regenere schemas quando:
- Novas tabelas forem adicionadas ao sistema
- Campos forem alterados em modelos existentes
- Novas descricoes forem adicionadas ao
TABLE_DESCRIPTIONS em generate_schemas.py
Tratamento de Erros
| Erro |
Causa |
Comportamento |
| Feature flag desabilitada |
AGENT_TEXT_TO_SQL=false |
Retorna aviso, pipeline nao executa |
| ANTHROPIC_API_KEY ausente |
Env var nao configurada |
Retorna aviso |
| Schema nao encontrado |
catalog.json ou schema.json faltando |
RuntimeError |
| SQL bloqueada (safety) |
DELETE, DROP, tabela proibida |
sucesso=false, aviso com motivo |
| Timeout (>5s) |
Query muito pesada |
RuntimeError com sugestao de simplificar |
| Campo/tabela inexistente |
Haiku alucionou campo nao corrigido pelo Evaluator |
Erro PostgreSQL capturado |
Notas
- Custo estimado: ~$0.010/query (2 chamadas Haiku)
- Tempo medio: 6-10 segundos (cold start + LLM + DB)
- Catalogo dinamico: 104 tabelas ativas, ~2.700 tokens no prompt do Generator
- Tabelas mortas (0 registros) excluidas via DEAD_TABLES
- Tabelas irrelevantes (curadoria manual) excluidas via IRRELEVANT_TABLES
- Evaluator focado: recebe schema detalhado apenas das 2-4 tabelas usadas
- Retry loop: Evaluator re-gera SQL com feedback se reprovada (max 2 tentativas)
- Todos os valores monetarios em BRL (R$)
- Datas retornadas em ISO 8601 (YYYY-MM-DD)
Relacionado
| Skill |
Uso |
gerindo-expedicao |
Consultas operacionais (pedido especifico, separacao, estoque) |
exportando-arquivos |
Exportar resultado como Excel/CSV para download |
lendo-arquivos |
Processar planilhas enviadas pelo usuario |
NOTA: Esta skill e para consultas ANALITICAS ao banco de dados.
Para operacoes logisticas do dia-a-dia, use gerindo-expedicao.
Para exportar os resultados, combine com exportando-arquivos.
1---2name: consultando-sql3description: Executa consultas analiticas SQL no banco de dados via linguagem natural. Use para perguntas ad-hoc sobre rankings, agregacoes, distribuicoes, tendencias, cruzamentos de tabelas. Converte perguntas em SQL, valida com Evaluator-Optimizer, e executa read-only. Cobre 104 tabelas ativas via catalogo dinamico.4---5
6# Consultando SQL - Consultas Analiticas via Linguagem Natural
7
8Skill para **consultas analiticas** ao banco de dados PostgreSQL via linguagem natural.
9
10> **ESCOPO:** Esta skill converte perguntas em SQL e executa read-only.
11> Para operacoes logisticas (separacao, estoque, disponibilidade), use `gerindo-expedicao`.
12> Para exportar resultados como Excel/CSV, use `exportando-arquivos`.
13
14## Quando Usar
15
16```
17USE consultando-sql:
18├── Rankings e Top N
19│ "Top 10 clientes por valor de carteira"
20│ "Vendedores com mais pedidos este mes"
21│
22├── Agregacoes e Estatisticas
23│ "Valor medio de pedido por vendedor"
24│ "Quantidade total de pedidos por estado"
25│
26├── Distribuicoes
27│ "Distribuicao de pedidos por incoterm"
28│ "Pedidos por faixa de valor"
29│
30├── Tendencias e Periodos
31│ "Faturamento dos ultimos 30 dias"
32│ "Evolucao de pedidos por mes"
33│
34├── Cruzamentos entre Tabelas
35│ "Produtos sem estoque mas com pedidos pendentes"
36│ "Clientes com separacoes pendentes e valor alto"
37│
38├── Consultas Financeiras
39│ "Top 10 clientes por valor de contas a receber vencidas"
40│ "Total de titulos a pagar nos proximos 30 dias"
41│
42├── Analise de Fretes
43│ "Valor total de fretes por transportadora nos ultimos 60 dias"
44│ "Custo medio de frete por UF de destino"
45│
46└── Qualquer pergunta analitica/estatistica ad-hoc
47```
48
49## Quando NAO Usar
50
51```
52NAO USE consultando-sql (use gerindo-expedicao):
53├── Consulta especifica de 1 pedido/cliente
54│ "Tem pedido do Atacadao?" -> gerindo-expedicao
55│
56├── Operacoes com side-effects
57│ "Crie separacao" -> gerindo-expedicao
58│
59├── Projecao de estoque/disponibilidade
60│ "Quando VCD123 fica disponivel?" -> gerindo-expedicao
61│
62└── Consultas que exigem logica complexa de negocio
63 "Qual a prioridade P1-P7?" -> subagente analista-carteira
64```
65
66## Regras Criticas
67
681. **Feature Flag**: Requer `AGENT_TEXT_TO_SQL=true`. Se desabilitado, retorna aviso.
692. **Seguranca Multi-Camada**:
70 - Generator: Apenas SELECT (instruido via prompt)
71 - Evaluator: Valida corretude semantica e sintatica com schema detalhado
72 - Safety: Regex validator bloqueia DELETE/DROP/INSERT/UPDATE/tabelas proibidas/funcoes perigosas
73 - Executor: `SET TRANSACTION READ ONLY` + timeout 5s
743. **Limites**: Max 500 linhas retornadas. Timeout 5 segundos.
754. **Guardrail Anti-Alucinacao**: Evaluator recebe schema DETALHADO (campos, tipos, FKs) apenas das tabelas usadas e corrige campos inexistentes.
765. **Tabelas Bloqueadas**: usuarios, permissions, agent_sessions, agent_memories, agent_memory_versions, alembic_version, portal_sessoes, tagplus_oauth_token, e 9 outras (17 total)
77
78## Script Principal
79
80### text_to_sql.py
81
82```bash
83source .venv/bin/activate && \
84AGENT_TEXT_TO_SQL=true python .claude/skills/consultando-sql/scripts/text_to_sql.py --pergunta "PERGUNTA"
85```
86
87## Parametros
88
89| Parametro | Obrigatorio | Descricao | Exemplo |
90|-----------|-------------|-----------|---------|
91| `--pergunta` / `-p` | Sim | Pergunta em linguagem natural (portugues) | `--pergunta "Top 10 clientes por valor"` |
92| `--debug` | Nao | Mostrar detalhes de cada etapa do pipeline | `--debug` |
93
94## Exemplos de Uso
95
96### Ranking de clientes (tabela core)
97```bash
98source .venv/bin/activate && \
99AGENT_TEXT_TO_SQL=true python .claude/skills/consultando-sql/scripts/text_to_sql.py \
100 --pergunta "Top 10 clientes por valor total na carteira"
101```
102
103### Contas a receber vencidas (tabela expandida)
104```bash
105AGENT_TEXT_TO_SQL=true python .../text_to_sql.py \
106 --pergunta "Top 10 clientes por valor de contas a receber vencidas"
107```
108
109### Fretes por transportadora (tabela expandida)
110```bash
111AGENT_TEXT_TO_SQL=true python .../text_to_sql.py \
112 --pergunta "Valor total de fretes por transportadora nos ultimos 60 dias"
113```
114
115### Cross-domain (carteira + faturamento)
116```bash
117AGENT_TEXT_TO_SQL=true python .../text_to_sql.py \
118 --pergunta "Clientes com pedidos pendentes mas sem faturamento nos ultimos 30 dias"
119```
120
121### Distribuicao por estado
122```bash
123AGENT_TEXT_TO_SQL=true python .../text_to_sql.py \
124 --pergunta "Quantos pedidos pendentes por estado?"
125```
126
127### Debug detalhado
128```bash
129AGENT_TEXT_TO_SQL=true python .../text_to_sql.py \
130 --pergunta "Top 5 vendedores por valor total" --debug
131```
132
133## Retorno JSON
134
135### Sucesso
136```json
137{
138 "sucesso": true,
139 "pergunta": "Top 10 clientes por valor total na carteira",
140 "sql": "SELECT cnpj_cpf, raz_social, ROUND(SUM(qtd_saldo_produto_pedido * preco_produto_pedido)::numeric, 2) AS valor_total FROM carteira_principal WHERE ativo = True AND qtd_saldo_produto_pedido > 0 GROUP BY cnpj_cpf, raz_social ORDER BY valor_total DESC LIMIT 10",
141 "sql_original": "SELECT ...",
142 "dados": [
143 {"cnpj_cpf": "75.315.333/0183-18", "raz_social": "ATACADAO S.A.", "valor_total": 5228553.10}
144 ],
145 "colunas": ["cnpj_cpf", "raz_social", "valor_total"],
146 "total_linhas": 10,
147 "aviso": "SQL corrigida pelo evaluator (tentativa 1): ...",
148 "tabelas_usadas": ["carteira_principal"],
149 "etapas": {
150 "generator_ms": 1800,
151 "evaluator_ms": 2200,
152 "safety": {"safe": true, "concerns": []},
153 "executor_ms": 2000
154 },
155 "tempo_total_ms": 6000
156}
157```
158
159### Erro (seguranca)
160```json
161{
162 "sucesso": false,
163 "pergunta": "DELETE FROM carteira_principal",
164 "sql": null,
165 "aviso": "Query bloqueada por seguranca: Keywords proibidas: DELETE"
166}
167```
168
169### Feature flag desabilitada
170```json
171{
172 "sucesso": false,
173 "pergunta": "Top 10 clientes",
174 "aviso": "Text-to-SQL desabilitado. Ative com AGENT_TEXT_TO_SQL=true"
175}
176```
177
178## Arquitetura B: Catalogo Completo + Retrieval em 2 Fases
179
180```
181Pergunta do usuario
182 |
183 v
184[GENERATOR] Haiku recebe CATALOGO LEVE (104 tabelas, ~2.7K tokens)
185 | Gera SQL com nomes de tabela corretos, campos aproximados
186 v
187[RETRIEVAL] Extrai tabelas do SQL (regex FROM/JOIN)
188 | Carrega schemas DETALHADOS apenas das tabelas usadas (2-4 tipicamente)
189 v
190[EVALUATOR] Haiku recebe SCHEMA DETALHADO (campos, tipos, FKs, regras)
191 | Valida campos, corrige nomes, adiciona filtros
192 |-- Aprovado? -> Safety
193 |-- Corrigido? -> Usa SQL corrigida -> Safety
194 |-- Reprovado? -> Re-gera com feedback (max 2 tentativas)
195 |
196 v
197[SAFETY] Regex validator (keywords, funcoes, tabelas bloqueadas)
198 |-- Seguro? -> Executor
199 |-- Bloqueado? -> Retorna erro
200 |
201 v
202[EXECUTOR] SET TRANSACTION READ ONLY + timeout 5s + LIMIT 500
203 |
204 v
205JSON com dados + SQL usada + tabelas_usadas + metricas de tempo
206```
207
208### Vantagem da Arquitetura B
209
210- **Generator** ve TODAS as 104 tabelas ativas (nome + descricao) → encontra qualquer tabela relevante
211- **Evaluator** recebe schema DETALHADO apenas das 2-4 tabelas usadas → validacao precisa
212- **2 chamadas LLM** (mesmo que antes) → sem overhead de latencia
213- **Cross-domain nativo**: sem barreira de dominios, JOIN entre financeiro + logistica funciona
214
215## Cobertura de Tabelas
216
217| Metrica | Valor |
218|---------|-------|
219| Total de tabelas no banco | ~196 |
220| Tabelas bloqueadas (auth, agent, etc.) | 17 |
221| Tabelas mortas (0 registros em prod) | 57 |
222| Tabelas irrelevantes (curadoria manual) | 18 |
223| Tabelas no catalogo | **104** |
224| Tabelas core (schema manual curado) | 9 |
225| Tabelas auto-geradas | 95 |
226| Cobertura (tabelas analiticas relevantes) | **100%** |
227
228### Tabelas Core (schema manual com regras de negocio)
229
230| Tabela | Descricao |
231|--------|-----------|
232| `carteira_principal` | Pedidos com saldo pendente. Fonte da verdade para demanda. |
233| `separacao` | Itens separados para expedicao. Projeta saidas de estoque. |
234| `movimentacao_estoque` | Movimentos de estoque: entradas, saidas, ajustes, producao. |
235| `programacao_producao` | Producao programada por data e linha. |
236| `cadastro_palletizacao` | Cadastro de produtos com peso, pallet, conversoes. |
237| `faturamento_produto` | NFs emitidas por produto. Registros de faturamento. |
238| `embarques` | Embarques que agrupam separacoes para transporte. |
239| `embarque_itens` | Itens individuais dentro de um embarque. |
240| `saldo_standby` | Pedidos em espera: saldo, comercial ou PCP. |
241
242### Dominios Expandidos
243
244- **Financeiro**: contas_a_receber, contas_a_pagar, extrato_item, baixa_pagamento_item, baixa_titulo_item, cnab_retorno_item, comprovante_*
245- **Fretes**: fretes, faturas_frete, despesas_extras, conhecimento_transporte, tabelas_frete, aprovacoes_frete
246- **Devolucoes**: nf_devolucao, nf_devolucao_linha, ocorrencia_devolucao, frete_devolucao
247- **Recebimento**: validacao_fiscal_dfe, match_nf_po_*, divergencia_nf_po, picking_recebimento_*
248- **Rastreamento**: entregas_monitoradas, entregas_rastreadas, agendamentos_entrega, eventos_entrega
249- **Cadastros**: transportadoras, cidades, cadastro_rota, grupo_empresarial, depara_produto_cliente
250
251## Geracao de Schemas
252
253Os schemas sao auto-gerados a partir dos modelos SQLAlchemy:
254
255```bash
256source .venv/bin/activate && \
257python .claude/skills/consultando-sql/scripts/generate_schemas.py
258```
259
260### Opcoes
261```bash
262# Apenas estatisticas (nao gera arquivos)
263python .../generate_schemas.py --stats
264```
265
266### Arquivos Gerados
267
268| Arquivo | Descricao |
269|---------|-----------|
270| `schemas/catalog.json` | Catalogo leve: nome + descricao + 3 campos-chave por tabela (~25KB) |
271| `schemas/tables/{tabela}.json` | Schema detalhado por tabela: campos, tipos, FKs, indices (104 arquivos) |
272| `schemas/relationships.json` | Mapa de ForeignKeys entre tabelas (171 relacionamentos) |
273| `schemas/schema.json` | Schema manual curado das 9 tabelas core (mantido como referencia) |
274
275### Quando Regenerar
276
277Regenere schemas quando:
278- Novas tabelas forem adicionadas ao sistema
279- Campos forem alterados em modelos existentes
280- Novas descricoes forem adicionadas ao `TABLE_DESCRIPTIONS` em `generate_schemas.py`
281
282## Tratamento de Erros
283
284| Erro | Causa | Comportamento |
285|------|-------|---------------|
286| Feature flag desabilitada | `AGENT_TEXT_TO_SQL=false` | Retorna aviso, pipeline nao executa |
287| ANTHROPIC_API_KEY ausente | Env var nao configurada | Retorna aviso |
288| Schema nao encontrado | catalog.json ou schema.json faltando | RuntimeError |
289| SQL bloqueada (safety) | DELETE, DROP, tabela proibida | `sucesso=false`, aviso com motivo |
290| Timeout (>5s) | Query muito pesada | RuntimeError com sugestao de simplificar |
291| Campo/tabela inexistente | Haiku alucionou campo nao corrigido pelo Evaluator | Erro PostgreSQL capturado |
292
293## Notas
294
295- Custo estimado: ~$0.010/query (2 chamadas Haiku)
296- Tempo medio: 6-10 segundos (cold start + LLM + DB)
297- Catalogo dinamico: 104 tabelas ativas, ~2.700 tokens no prompt do Generator
298- Tabelas mortas (0 registros) excluidas via DEAD_TABLES
299- Tabelas irrelevantes (curadoria manual) excluidas via IRRELEVANT_TABLES
300- Evaluator focado: recebe schema detalhado apenas das 2-4 tabelas usadas
301- Retry loop: Evaluator re-gera SQL com feedback se reprovada (max 2 tentativas)
302- Todos os valores monetarios em BRL (R$)
303- Datas retornadas em ISO 8601 (YYYY-MM-DD)
304
305## Relacionado
306
307| Skill | Uso |
308|-------|-----|
309| `gerindo-expedicao` | Consultas operacionais (pedido especifico, separacao, estoque) |
310| `exportando-arquivos` | Exportar resultado como Excel/CSV para download |
311| `lendo-arquivos` | Processar planilhas enviadas pelo usuario |
312
313> **NOTA**: Esta skill e para consultas ANALITICAS ao banco de dados.
314> Para operacoes logisticas do dia-a-dia, use `gerindo-expedicao`.
315> Para exportar os resultados, combine com `exportando-arquivos`.