
Sistema de acompanhamento de projetos de IA
| Área | IA sobre os dados |
|---|---|
| O que faz | Antes, o piloto se arrastava sem resposta. Agora cada projeto só avança com meta definida e resultado medido. |
| Funções | Aprovação por etapas · Retorno real medido · Ganho contado uma vez |
| Habilidades | Governança de projetos · Regras de aprovação · Medição de retorno · Alertas automáticos |
O que o sistema cobre.
Sistema que acompanha os projetos de IA da empresa do pedido de orçamento até o resultado em produção. O business case entra em campos estruturados, o projeto passa por duas etapas de aprovação, o piloto termina com veredito e o ganho é medido contra o prometido. Feito para a diretoria e o comitê que decidem onde investir em IA.
Para quem
Diretoria, comitê de investimento e escritório de projetos de empresas que aprovam e acompanham vários projetos de IA.
O que mudou na empresa
O piloto só abre com meta e termina com veredito. O ganho prometido é medido depois da implantação, e o desvio de prazo ou gasto chega ao comitê antes da reunião, sem planilha paralela.
Módulos e funções.
8 partes do sistema, cada uma com o que faz.
Business case estruturado
Objetivo, premissas, retorno esperado, orçamento, responsáveis, cronograma e riscos em campos, não em anexo.
Aprovação do piloto
O piloto só abre com meta, linha de base e critério de sucesso. Termina com veredito.
Aprovação de implantação
O comitê decide com o resultado do piloto e congela escopo, custo, prazo e ganho prometido.
Cálculo de retorno
Retorno e payback saem das premissas cadastradas com vigência. Ganho repetido entre projetos conta uma vez.
Execução e acompanhamento
Marcos, despesas e status lançados no sistema, com histórico de quem mudou o quê e quando.
Medição do ganho realizado
Após implantar, o indicador prometido é medido contra a linha de base, com data e responsável.
Vigilância semanal
Regras checam prazo, gasto, silêncio e ganho medido. A IA classifica a gravidade e sugere ação.
Painel do portfólio
Projetos ativos, retorno potencial e realizado, investimento comprometido, pilotos, produção e atrasados, em foto semanal.
Três telas.
O design é meu. Cada legenda diz o que a tela faz.



Como funciona por dentro.
Plataforma onde a empresa decide quais projetos de IA financia, e onde a própria IA vigia o que foi prometido no comitê contra o que está de fato acontecendo.
- Business caseObjetivo, premissas, ROI esperado, orçamento, responsáveis, cronograma e riscos entram como campos estruturados, não como anexo. O ROI é derivado das premissas, nunca digitado como total.
- Gate de POCPrimeira trava, barata: sem métrica, linha de base congelada e limiar de sucesso declarados, a POC não abre. É o gate que mata a POC eterna.
- POC medidaRoda contra a linha de base e termina em veredito pelo limiar declarado, passou, não passou, passou parcialmente. O resultado vira fato do dossiê, com id.
- Gate de implantaçãoO comitê decide com resultado de POC na mão. Aprovar congela o baseline, escopo, custo, cronograma e benefício prometido, numa versão imutável. É contra isso que tudo será medido.
- Execução e coletorMarcos, backlog e despesas são lançados sob RLS, cada escrita deixando linha na trilha append-only. Job semanal monta o dossiê determinístico: fatos com id, deltas desde o último ciclo, resumo anterior no lugar da história inteira.
- Motor de regrasSinais determinísticos com o número já calculado: marco vencido, burn acima do avanço físico, silêncio, orçamento comprometido além do limiar, benefício medido abaixo do prometido.
- Leitura da IA e dedupO LLM recebe dossiê e sinais e devolve JSON: template, severidade, causa provável, ação e fact_id. Os percentuais chegam prontos nos slots do sinal. Achado repetido casa pela chave e muda de estado em vez de gerar alarme novo.
- Realização e dashboardEm produção, o indicador declarado é medido periodicamente contra a linha de base congelada. Snapshot semanal materializado: ativos, ROI potencial e realizado, investimento, POC, produção, atrasados.
O problema e a saída.
O problema
Iniciativas de IA aprovadas em slide e nunca reabertas: cronograma no MS Project, gasto no ERP, status no WhatsApp. A POC não falha, só continua. E dois projetos prometem os mesmos FTEs do mesmo centro de custo, o total não se defende diante do CFO.
A saída
Dois gates: POC não abre sem linha de base, implantação congela o baseline. ROI é função pura em centavos, testado por propriedade e sem benefício somado duas vezes. A regra dá o número; o texto da IA congela por hash do dossiê, não na temperatura.
Arquitetura.
Como as partes se encaixam.
O núcleo não é o dashboard, é a máquina de estados, e ela tem dois gates. O projeto vai de ideia a business case e para no primeiro: o gate de POC não abre sem métrica declarada, linha de base congelada e limiar de sucesso. A POC roda contra essa linha de base e termina em veredito, não em prorrogação. Só então vem o segundo gate, o de implantação, o comitê decide com resultado de POC na mão. É esse gate que congela o baseline: escopo, custo, cronograma e benefício prometido viram uma versão imutável, e tudo que vem depois é comparado com ela. Cada gate congela uma coisa diferente: o de POC congela a linha de base e o critério de sucesso, para que ninguém mude a régua no meio do teste; o de implantação congela a promessa financeira, para que ninguém reescreva o ROI depois de errar a estimativa. Revisar qualquer um dos dois é pedido formal com aprovador, não edição de campo.
Dinheiro e prazo são calculados, nunca digitados como total. ROI, payback e curva de caixa saem de uma função pura sobre premissas versionadas, custo-hora, câmbio e taxa de desconto são linhas de tabela com vigência, não constantes no código. Valores são inteiros em centavos. Depois da implantação a mesma função roda de novo, trocando o benefício prometido pelo medido: o indicador declarado no business case volta como série periódica, query agendada no sistema de origem ou lançamento assinado, sempre com valor, data, quem mediu e a query registrada, comparada com a linha de base congelada no gate de POC. Isso não resolve atribuição causal, e o sistema não finge que resolve: mostra série, linha de base e promessa lado a lado, e deixa a discussão acontecer sobre números com procedência. Na agregação do portfólio entra o dedup de benefício: dois projetos que prometem os mesmos FTEs do mesmo centro de custo não somam duas vezes; o segundo entra com o ganho marginal declarado. O dashboard lê views materializadas e um snapshot semanal, não recomputa a história a cada abertura de página.
A vigilância roda em três etapas. Um coletor monta o dossiê do projeto, fatos com id: marcos, despesas aprovadas, atualizações de status, itens de backlog, veredito da POC, medições de benefício. Um motor de regras varre o dossiê e emite sinais determinísticos com os números já calculados: marco de baseline vencido, burn acima do avanço físico, silêncio há N dias, orçamento comprometido além do limiar, benefício medido abaixo do prometido. Só então o LLM recebe dossiê e sinais e devolve JSON validado por schema: template de achado, severidade, causa provável, ação sugerida e a lista de fact_id que sustenta cada frase. O texto do achado é template com slots, os percentuais entram preenchidos pelo sinal da regra; o modelo escolhe o template e a leitura, nunca digita número. O parser derruba achado que cite fact_id inexistente, e vale dizer com todas as letras o alcance disso: garante que o achado aponta para fatos reais do dossiê, não que a leitura desses fatos esteja certa. Três fact_id válidos podem sustentar uma inferência errada. Por isso cada achado chega na tela grudado no sinal que o originou, para o revisor conferir a inferência em dois cliques. E achado repetido não vira alerta novo, a chave (projeto, tipo, objeto) casa com o que já está aberto e ele só muda de estado: novo, persistente, resolvido.
Diário de construção.
Por onde comecei, onde travou e o que mudou no caminho.
Comecei pelo modelo de dados, sem tela nenhuma. Projeto, gate, baseline, premissa, marco, despesa, medição de benefício e achado nasceram como tabelas, com as chaves e as políticas de RLS já no lugar. Em seguida veio o cálculo financeiro, isolado como função pura e coberto por testes de propriedade: soma das partes igual ao total, arredondamento em centavos que não cria dinheiro, taxa de desconto que move o VPL na direção certa. Só depois disso desenhei a primeira página.
A ordem dos gates mudou depois da primeira versão. Eu tinha um gate só, de aprovação, antes da POC, herança de PMO. Na prática o comitê aprovava no papel e descobria o resultado meses adiante. Quebrei em dois: gate barato libera a POC exigindo métrica, linha de base e limiar; gate caro, de implantação, só abre com veredito de POC registrado, e é ele que congela o baseline. O dashboard, no mesmo período, virou SQL e depois snapshot semanal materializado, porque, sem isso, editar o orçamento de março mudava o formato do passado inteiro e a curva de previsto contra realizado deixava de significar coisa alguma. Foto congelada de sexta resolve o histórico; a leitura ao vivo continua vindo das views.
A parte difícil foi fazer a IA parar de escrever risco genérico. A primeira versão recebia o projeto inteiro em texto corrido e devolvia "risco de escopo" e "baixo engajamento das áreas" para todo mundo, verdade sempre, útil nunca. Três mudanças resolveram: entregar os sinais das regras já prontos, com os números calculados, para o modelo interpretar em vez de descobrir; transformar o achado em template com slots, para que nenhum percentual saia do decoder; e exigir fact_id em cada frase, com descarte no parser. Montei junto um conjunto de dossiês rotulados à mão (risco real / ruído) que roda a cada mudança de prompt; prompt que perde precisão nesse conjunto não sobe.
Tecnologias e o porquê.
| Camada | Escolha | Por quê |
|---|---|---|
| Banco | PostgreSQL com RLS por org_id e trilha append-only particionada por mês | Multi-tenant sem duplicar infraestrutura, e o filtro de empresa vive no banco. Se o app esquecer o WHERE, a policy segura. Orçamento e salário-base ficam atrás de papel, não de if no front. |
| Dinheiro | Inteiros em centavos e tabela de premissas com vigência | Float acumula erro e destrói a confiança no total do portfólio. Premissa versionada permite recalcular o passado com a regra da época, não com a de hoje, e é o que faz prometido e realizado serem comparáveis. |
| Fila e jobs | Fila no próprio Postgres com SELECT ... FOR UPDATE SKIP LOCKED | O volume é baixo: dezenas de projetos por empresa, um ciclo semanal e execuções sob demanda. Um broker separado seria mais um ponto de falha para nada, e a fila herda a transação de graça. |
| Vigilância | Motor de regras determinístico antes do modelo, com achado em template de slots | Nenhum número de tela vem do modelo, todos saem das regras e do SQL. O texto do achado vem do LLM e fica congelado pelo cache por hash do dossiê: enquanto o dossiê não muda, o painel não muda de texto. |
| LLM | Claude com JSON Schema, temperatura baixa, prompt versionado e cache por hash do dossiê | Dossiê inalterado não paga token de novo nem reescreve o risco sem motivo. Temperatura baixa reduz variação, mas não promete saída idêntica, por isso o congelamento é feito no cache, não na fé no decoder. Cada achado grava model_id e prompt_version para ser reauditado depois: dá para reabrir dossiê, sinais, prompt e a resposta exata que gerou aquele achado. |
| Observabilidade | OpenTelemetry com trace por ciclo e log de custo por achado | Quando o comitê contesta um risco, dá para reabrir a execução: dossiê, sinais, prompt, resposta e quanto custou. Sem isso o alerta vira opinião. |
Decisões de projeto.
Dois gates: a POC prova, a aprovação congela
Larguei o gate único do PMO. Custa um estágio a mais e teto de gasto só para a POC; em troca o dinheiro grande só é comprometido depois da evidência, não antes dela.
Foto semanal, não event sourcing
Event sourcing daria replay exato e custaria evento por campo. Fiquei com foto semanal materializada, trilha append-only mensal e fila SKIP LOCKED: histórico de sete dias, leitura barata.
Evidência por existência, não por sentido
Derruba fact_id inexistente: custa recall e aceito. Mas garante fato real, não leitura certa, três ids válidos sustentam inferência errada; daí o rótulo à mão e o achado colado ao sinal.
Escopo.
O que o sistema cobre
- Business case estruturado em campos: objetivo, premissas, ROI esperado, orçamento, responsáveis, cronograma e riscos, nada como anexo solto.
- Dois gates com checagem real: POC não abre sem métrica, linha de base e limiar de sucesso; implantação não aprova sem veredito de POC registrado.
- Baseline congelado na aprovação da implantação e comparado com o realizado, marco a marco e real a real, com trilha append-only de quem mudou o quê, quando e com qual justificativa.
- Benefício realizado medido periodicamente contra a linha de base congelada, não contra a promessa reescrita, com data, autor e query da medição.
- Dashboard do portfólio calculado em SQL: ativos, ROI potencial e realizado, investimento comprometido, POC, produção e atrasados.
- Ciclo automático de vigilância: sinais de regra com o número e achados da IA com severidade, evidência e ação sugerida, sem repetir alarme já aberto.
O que não está publicado
- Nome da empresa e números de operação não são divulgados aqui.
- O código não é público. O que dá para ver: o processo, as telas e as decisões.
Da mesma faixa.
IA sobre os dados
Quer ver este sistema de perto?
Mostro o processo que mudou, os módulos, as telas e como foi construído.

