From 573cfe4742a1950f0673443f3f552ad5f71aaec3 Mon Sep 17 00:00:00 2001 From: Luiz Silva Date: Mon, 10 Aug 2026 16:30:27 -0300 Subject: [PATCH 1/5] . --- proxy | 2 ++ 1 file changed, 2 insertions(+) diff --git a/proxy b/proxy index 2e35099..c204acb 100644 --- a/proxy +++ b/proxy @@ -14,6 +14,8 @@ Abra o arquivo de configuração do seu shell (`~/.bashrc` ou `~/.zshrc`). nano ~/.bashrc # ou ~/.zshrc ``` + + ### Passo 2: Adicionar o Alias Adicione a seguinte instrução ao final do arquivo: From b04caf382caded033e89148bf574fd600b468dd0 Mon Sep 17 00:00:00 2001 From: Luiz Silva Date: Mon, 10 Aug 2026 20:32:54 -0300 Subject: [PATCH 2/5] . --- ...zacoes-sessao-2026-08-10-aprimorar-ia-2.md | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 memory/registro-otimizacoes-sessao-2026-08-10-aprimorar-ia-2.md diff --git a/memory/registro-otimizacoes-sessao-2026-08-10-aprimorar-ia-2.md b/memory/registro-otimizacoes-sessao-2026-08-10-aprimorar-ia-2.md new file mode 100644 index 0000000..0e2fd48 --- /dev/null +++ b/memory/registro-otimizacoes-sessao-2026-08-10-aprimorar-ia-2.md @@ -0,0 +1,39 @@ +# Registro de Otimizações da Sessão — Aprimoramento da IA + +**Data:** 10/08/2026 +**Sessão / Contexto:** Resolução de inconsistências de histórico de eventos, consultas SQL de banco e formatação visual no módulo Qualifica (Empresa / Formulários / Avaliação). + +--- + +## 📌 Principais Aprendizados e Regras Consolidadas + +### 1. Escopo e Filtragem de Histórico (Avaliação Pai vs Formulário) +- O histórico da **Avaliação Pai** deve exibir estritamente eventos cujo `tabela_origem === 'avaliacoes'`. +- O histórico de um **Formulário específico** deve exibir eventos do próprio formulário E de todos os seus campos associados (`ev.codigo_origem === formId || ev.codigo_resposta_formulario === formId`). + +### 2. Esquema do Banco PostgreSQL (`respostas_avaliacao`) +- A tabela `respostas_avaliacao` **não possui** a coluna `codigo_resposta_formulario`. +- Consultas Knex não devem selecionar nem filtrar diretamente por `codigo_resposta_formulario` nessa tabela (evita erro SQL `42703` `errorMissingColumn`). +- O relacionamento entre respostas de campo e formulários deve ser resolvido via `codigo_avaliacao` e mapeado em memória usando a hierarquia de seções/perguntas de `todasPerguntas`. + +### 3. Cores Dinâmicas e Identidade Visual dos Status +- Os badges e ícones de status em linhas do tempo devem consumir as propriedades de cores dinâmicas (`cor`, `textoCor`, `corVuetify`) exportadas por `qualifica-comuns` (`statusFormularioDetalhes`, `statusAvaliacaoMacroDetalhes`, `classificacaoRespostaDetalhes`). +- Cores estáticas ou *hardcoded* (como fundo azul fixo `#EBF8FF` ou verde fallback `#688C00`) são proibidas para status com cores do domínio. + +### 4. Formatação de Textos de Eventos (Quebras de Linha e Nomes) +- Textos de descrição e justificativa em cartões e timelines de eventos devem conter explicitamente as regras CSS: + `white-space: pre-wrap; word-break: break-word; line-height: 1.5;` +- Nomes de autores devem ser sanitizados para remover marcas repetidas (ex: `(Sistema)` prefixado indevidamente). + +### 5. Botão de Histórico Universal por Campo +- O componente `CampoRespostaBase.vue` (invocado por todos os tipos de entrada de campo) contém um botão universal `` com tooltip `"Ver histórico do campo"`. +- O modal `ModalHistoricoEventos.vue` aceita `:eventos-direct` para renderizar o histórico diretamente da memória do componente quando pre-carregado. + +--- + +## 🔍 Checklist de Verificação de Artefatos + +- [x] Artefatos dependentes revisados +- [x] Nenhuma regra ficou implícita +- [x] Referências cruzadas e linters validados (`pnpm run biome`, `tsc --noEmit`) +- [x] Nomes de funções e variáveis mantidos conforme contratos From f91200ed529e0fd382daaa431305f6b9f16a28e5 Mon Sep 17 00:00:00 2001 From: Luiz Silva Date: Tue, 11 Aug 2026 11:04:35 -0300 Subject: [PATCH 3/5] query-ia --- rules/consultar-banco-query-ia.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/rules/consultar-banco-query-ia.md b/rules/consultar-banco-query-ia.md index fa9b840..5d02396 100644 --- a/rules/consultar-banco-query-ia.md +++ b/rules/consultar-banco-query-ia.md @@ -19,13 +19,14 @@ Essa rota é exclusiva para desenvolvimento e **nunca deve ser usada em produç ## Rota ``` -GET http://127.0.0.1:/query-ia → retorna documentação da rota (texto plano) -POST http://127.0.0.1:/query-ia → executa consulta SQL e retorna JSON +GET http://127.0.0.1://query-ia → retorna documentação da rota (texto plano) +POST http://127.0.0.1://query-ia → executa consulta SQL e retorna JSON ``` -> **`` é subjetiva** — cada módulo do ecossistema usa uma porta diferente. Antes de usar a rota, descobrir a porta correta do projeto atual: -> - Verificar `package.json` do `*-back` (campo `scripts.dev` ou `scripts.start`) -> - Ou verificar a variável `PORT` no `.env` do módulo +> **`` e `` são definidos por módulo** — cada módulo do ecossistema usa uma porta e prefixo de rota específicos (ex: `http://127.0.0.1:5260/qualifica/query-ia`). Antes de usar a rota: +> - O acesso **GET** retorna a documentação do endpoint. +> - O acesso **POST** executa a consulta SQL e retorna os dados em JSON. +> - Verificar `package.json` do `*-back` (campo `scripts.dev` ou `scripts.start`) ou o arquivo `.env` do módulo. ## Como usar @@ -36,13 +37,13 @@ POST http://127.0.0.1:/query-ia → executa consulta SQL e retorna cat package.json | jq '.scripts.dev' # Consultar a documentação da rota (substitua pela porta real) -curl http://127.0.0.1:/query-ia +curl http://127.0.0.1://query-ia ``` ### Executar uma consulta SQL ```bash -curl -s -X POST http://127.0.0.1:/query-ia \ +curl -s -X POST http://127.0.0.1://query-ia \ -H 'Content-Type: application/json' \ -d '{ "sql": "SELECT * FROM empresas LIMIT 10", @@ -53,7 +54,7 @@ curl -s -X POST http://127.0.0.1:/query-ia \ ### Consulta com parâmetros (binding seguro) ```bash -curl -s -X POST http://127.0.0.1:/query-ia \ +curl -s -X POST http://127.0.0.1://query-ia \ -H 'Content-Type: application/json' \ -d '{ "sql": "SELECT * FROM avaliacoes WHERE empresa_id = ? AND status = ?", @@ -107,7 +108,7 @@ O agente **NUNCA** deve: ### ✅ Correto — inspecionar registros via query-ia ```bash -curl -s -X POST http://127.0.0.1:/query-ia \ +curl -s -X POST http://127.0.0.1://query-ia \ -d '{"sql": "SELECT codigo, nome, status FROM empresas ORDER BY criado_em DESC LIMIT 20"}' \ -H 'Content-Type: application/json' | jq '.rows' ``` @@ -115,7 +116,7 @@ curl -s -X POST http://127.0.0.1:/query-ia \ ### ✅ Correto — verificar schemas PostgreSQL disponíveis ```bash -curl -s -X POST http://127.0.0.1:/query-ia \ +curl -s -X POST http://127.0.0.1://query-ia \ -d '{"sql": "SELECT schema_name FROM information_schema.schemata ORDER BY schema_name"}' \ -H 'Content-Type: application/json' | jq '.rows' ``` @@ -123,7 +124,7 @@ curl -s -X POST http://127.0.0.1:/query-ia \ ### ✅ Correto — contar registros por inquilino ```bash -curl -s -X POST http://127.0.0.1:/query-ia \ +curl -s -X POST http://127.0.0.1://query-ia \ -d '{"sql": "SELECT inquilino, COUNT(*) as total FROM empresas GROUP BY inquilino"}' \ -H 'Content-Type: application/json' | jq '.rows' ``` @@ -132,7 +133,7 @@ curl -s -X POST http://127.0.0.1:/query-ia \ ```bash # Será bloqueado com status 400 -curl -X POST http://127.0.0.1:/query-ia \ +curl -X POST http://127.0.0.1://query-ia \ -d '{"sql": "UPDATE empresas SET status = ?", "parametros": ["ativo"]}'` ``` From 8229165ce45d03034cd3b7f354796cc6e2eabe6a Mon Sep 17 00:00:00 2001 From: Luiz Silva Date: Tue, 11 Aug 2026 11:57:35 -0300 Subject: [PATCH 4/5] . --- ...mizacoes-sessao-2026-08-11-aprimorar-ia.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 memory/registro-otimizacoes-sessao-2026-08-11-aprimorar-ia.md diff --git a/memory/registro-otimizacoes-sessao-2026-08-11-aprimorar-ia.md b/memory/registro-otimizacoes-sessao-2026-08-11-aprimorar-ia.md new file mode 100644 index 0000000..206c87f --- /dev/null +++ b/memory/registro-otimizacoes-sessao-2026-08-11-aprimorar-ia.md @@ -0,0 +1,29 @@ +# Registro de Otimizações da Sessão — Aprimoramento da IA + +**Data:** 11/08/2026 +**Sessão / Contexto:** Resolução de erro de "Acesso Negado — Você não possui permissão" ao acessar a rota pública `/publico/painel-empresa/:token/avaliacao/:id` do Qualifica. + +--- + +## 📌 Principais Aprendizados e Regras Consolidadas + +### 1. Distinção entre Eventos Operacionais/Notificações e Eventos de Status Macro +- A tabela `eventos` registra múltiplos tipos de eventos associados a uma avaliação (`tabela_origem = 'avaliacoes'`), incluindo tanto mudanças de **status macro** (`rascunho`, `aberta`, `correcao_solicitada`, `aprovada`, `aprovada_ressalvas`, `reprovada`, `vencida`, `cancelada`) quanto **notificações/auditorias operacionais** (`alerta_prazo`, `acesso_painel`, `acesso_formulario`). +- Toda consulta SQL / Knex que determine o `statusAtual` de uma avaliação a partir da tabela `eventos` **DEVE** conter obrigatoriamente a restrição `.whereIn("status", zStatusAvaliacaoMacro.options)` (ou no SQL: `AND ev.status IN (...)`). + +### 2. Validação Estrita de Schemas Zod em Rotas Públicas (`zApiPublica`) +- A rota pública `publico_painel_empresa_detalhe` e `publica_formulario_perguntas` utilizam o schema `zStatusAvaliacaoMacro` para validar o campo `status_avaliacao` no payload de resposta. +- Caso a consulta ao banco retorne um evento operacional como `'alerta_prazo'`, a validação Zod falha com `ZodError`, forçando o wrapper da API a retornar `{ eErro: true }`. No frontend, isso se traduz no fallback de erro `token_invalido` ("Acesso Negado"), disfarçando um erro de schema do backend como uma falha de autenticação. +- **Regra:** Todo valor retornado para o frontend em um campo validado por enum Zod DEVE ser sanitizado e validado defensivamente contra os membros do enum (`zStatusAvaliacaoMacro.options`) antes de ser montado no objeto de resposta. + +### 3. Tracing de Diagnóstico Prévia a Qualquer Modificação +- Conforme a regra `diagnostico-antes-correcao.md`, o agente investigou a causa raiz testando os componentes isoladamente (Token JWT -> Zod schema `zTokenPublico` -> Query Knex -> Zod schema `zApiPublica`). Isso permitiu identificar exatamente a linha onde o `ZodError` ocorria (`zStatusAvaliacaoMacro`), evitando refatorações desnecessárias em autenticação ou rotas Vue Router. + +--- + +## 🔍 Checklist de Verificação de Artefatos + +- [x] Artefatos dependentes revisados +- [x] Nenhuma regra ficou implícita +- [x] Referências cruzadas e linters validados (`pnpm run biome`, `npx tsx`) +- [x] Contratos Zod preservados e validados estritamente From 30977ca715816e007a8c58bd977763939d357d49 Mon Sep 17 00:00:00 2001 From: Luiz Silva Date: Tue, 11 Aug 2026 12:08:35 -0300 Subject: [PATCH 5/5] . --- ...zacoes-sessao-2026-08-11-aprimorar-ia-2.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 memory/registro-otimizacoes-sessao-2026-08-11-aprimorar-ia-2.md diff --git a/memory/registro-otimizacoes-sessao-2026-08-11-aprimorar-ia-2.md b/memory/registro-otimizacoes-sessao-2026-08-11-aprimorar-ia-2.md new file mode 100644 index 0000000..62a2458 --- /dev/null +++ b/memory/registro-otimizacoes-sessao-2026-08-11-aprimorar-ia-2.md @@ -0,0 +1,25 @@ +# Registro de Otimizações da Sessão — Aprimoramento da IA (Parte 2) + +**Data:** 11/08/2026 +**Sessão / Contexto:** Eliminação de erros de consulta à tabela removida `usuarios` (`select "codigo", "nome", "categoria"` - `code 42703`) e padronização da integração via SSO (`e-licencie.drive`). + +--- + +## 📌 Principais Aprendizados e Regras Consolidadas + +### 1. Gestão de Usuários e Perfis via `e-licencie.drive` (SSO) +- A tabela `usuarios` **não existe** no banco de dados PostgreSQL local dos schemas dos inquilinos. A identificação, listagem e auditoria de usuários (operadores e usuários externos da categoria `externo`) são providas exclusivamente pelo pacote `p-e-licencie-drive` (`eliDrive`). +- É **estritamente proibido** realizar chamadas `knex("usuarios")` ou `knex(enumTabelas.usuarios)`. Toda consulta de usuários em endpoints ou tarefas em segundo plano (CRON) deve invocar `eliDrive({ token }).listarUsuarios()`. + +### 2. Tratamento de Depreciação e Tabela Undefined no Knex +- Ao chamar `knex(prop)` quando `prop` é `undefined`, o Knex executa `knex()` sem nome de tabela, emitindo o aviso de depreciação `calling knex without a tableName is deprecated. Use knex.queryBuilder() instead` e gerando queries SQL inválidas (`SELECT ...` sem cláusula `FROM`). +- Qualquer utilitário ou tabela que tenha sido removida do esquema deve ter suas referências completamente limpas da biblioteca `qualifica-comuns` (em `_tabelas_registros.ts`) para evitar que a chave acesse propriedades `undefined` via Proxy. + +--- + +## 🔍 Checklist de Verificação de Artefatos + +- [x] Artefatos dependentes revisados +- [x] Nenhuma regra ficou implícita +- [x] Referências cruzadas e linters validados (`pnpm run biome`, `npx tsx`) +- [x] Padrão `eliDrive` unificado em todas as rotas de listagem de eventos e tarefas de envio de e-mail