Toggles de IA por empresa, integração e message type
Como ligar/desligar IA seletivamente por empresa, integração ou message type. Hierarquia, onde aplica e auditoria.
ai_settings só armazena overrides explícitos.Hierarquia de resolução
Quando um endpoint de IA é chamado, o sistema procura a regra mais específica e usa o
enabled dela. Se nenhuma regra existe, default = ON.message_type → integration → empresa → default ON
(mais específico) (default)
Exemplo: empresa "Acme" tem regra "IA off no tenant" mas integração "Acme/SAP-DEV" tem regra "IA on" — chamadas dentro dessa integração vão usar IA. Mensagens em outras integrações da Acme ficam off.
Onde os toggles são aplicados
| Endpoint | Toggle aplicado? |
|---|---|
POST /api/ai/diagnose | ✅ sim — checa tenant/integration/message_type da mensagem |
POST /api/mapeamentos/interpret-log | ✅ sim — checa tenant/integration |
POST /api/mapeamentos/create-message-type | ✅ sim — pula sugerir mapping IA se off (cria o mt sem IA) |
POST /api/mapeamentos/suggest-mapping | ❌ não — admin tool |
POST /api/mapeamentos/suggest-format | ❌ não — admin tool |
paraphraseDescriptions (lib) | ❌ não — admin tool |
**Por que admin tools (suggest-*) não respeitam toggle?** Eles operam sobre catálogos de campos/standards (não payload de cliente final). O risco de PII é mitigado pelo pipeline de redaction (FT-PII-REDACTION). Toggle universal entra em versão futura.
Como configurar
/admin/ai-settings(super_admin only)- "Adicionar regra"
- Selecione empresa → opcional integração → opcional message_type → marque como Desligada/Ligada → motivo (recomendado pra audit)
Comportamento quando IA está off
O endpoint retorna HTTP 200 com payload:
{
"ai_disabled": true,
"level": "tenant" | "integration" | "message_type",
"reason": "..."
}
A UI deve detectar
ai_disabled e mostrar mensagem amigável ao usuário.Auditoria
Toda criação/atualização/exclusão de regra é registrada em
audit_events com action ai_settings.created / ai_settings.updated / ai_settings.deleted.Cache
Resolução de toggle usa cache em memória de 60 segundos por tenant. Após criar/editar/excluir uma regra, o cache do tenant é invalidado automaticamente. Em ambientes multi-instância (Vercel Functions), cada instância tem cache próprio — propagação efetiva em até 60s.
Schema
Tabela
ai_settings em /supabase/migrations/20260506000000_ai_settings.sql. UNIQUE em (tenant_id, integration_id, message_type_id) com sentinela pra nullables (gotcha conhecido do Postgres). RLS: super_admin escreve/lê tudo, membro do tenant só lê.Veja também
pipeline-mensagens-fluxos— fluxos completos do retry/DLQpii-redaction-llm— redaction antes da IA, atua independente do togglecertificado-digital-mtls— mTLS pra SEFAZ
Histórico de versões
- 1.2.0
Aviso de aceite da IA no primeiro acesso do administrador da empresa, nos 3 idiomas, já marcado como ligado. Confirmar registra quem, quando e a versão do texto pela mesma API de Configurações; decidir depois não grava nada e não bloqueia a tela. Sem decisão registrada, a IA segue no padrão do contrato (decisão do dono de 30/10/2026).
04/11/2026 · updated
- 1.1.0
Desligar a IA vale para tudo que manda dado da empresa ao fornecedor. Sem IA, o Sugerir do editor mostra a mensagem "A IA está desligada para esta empresa, integração ou tipo de mensagem" (nos 3 idiomas) em vez de rodar, o botão de resumo da IA nos relatórios mostra o aviso próprio, a análise em segundo plano de uma sugestão já aberta para com o aviso e os campos pendentes ficam marcados "IA falhou", e a anotação semântica da empresa deixa de rodar. O modo 1:1 (identity) continua, sem as descrições parafraseadas. A sugestão deixa de ler o cache global de outras empresas quando a IA está desligada. Uma catraca de CI reprova chamada nova ao fornecedor que não passe pela regra.
04/11/2026 · updated
- 1.0.0
Toggle hierárquico de IA por scope (tenant/integration/message_type). Default ON, entradas só pra desligar. Resolução: message_type > integration > tenant > default. Schema: ai_settings com UNIQUE COALESCE pra nullables. Lib isAiEnabled() com cache 60s. Aplicado em diagnose, interpret-log, create-message-type. UI /admin/ai-settings (super_admin) com CRUD e audit_events. i18n 3 idiomas. Documentado em /security e /help (slug=ai-toggle-hierarchy).
05/05/2026 · new