Ir para o conteúdo
Aferiz

Documentar é fácil. Provar que o código faz o que foi pedido, não.

O Aferiz lê o requisito na sua fonte de verdade, olha o código no commit que você indicar e responde, critério a critério, com evidência em arquivo:linha.

Sem cartão. Sem “fale com um especialista”.

Escolha um requisito

Cotejo real, sem cadastro:

Agendar exame com confirmação de preparo

commit c7d2a109 critérios

Atende
4
Parcial
1
Não atende
2
Inconclusivo
2
C1Endpoint POST /agendamentos/exames · Controllers/AgendamentoController.cs:69Atende

Rota declarada no controller e coberta por teste de integração que agenda e relê o horário criado.

EvidênciaControllers/AgendamentoController.cs:69commit c7d2a10

C2Orientação de preparo devolvida conforme o tipo de exame · Servicos/PreparoExameService.cs:24Atende

Jejum, suspensão de medicação e texto de orientação vêm do cadastro de preparo por tipo de exame, e não de constante no código; tipo sem regra cadastrada falha explícito, em vez de devolver preparo vazio.

EvidênciaServicos/PreparoExameService.cs:24commit c7d2a10

C3Horários gravados no fuso da unidade · Servicos/AgendamentoService.cs:63Parcial

Três dos quatro campos de data passam pelo conversor da unidade, que cai em America/Sao_Paulo quando a unidade não tem zona cadastrada. DataSolicitacao grava UTC cru e aparece três horas adiantado no prontuário.

EvidênciaServicos/AgendamentoService.cs:63commit c7d2a10

C4Confirmação de preparo obrigatória na requisição · Validadores/AgendarExameValidator.cs:14Atende

A requisição sem o aceite do paciente é recusada no validador, antes de chegar ao serviço, com mensagem no idioma do usuário.

EvidênciaValidadores/AgendarExameValidator.cs:14commit c7d2a10

C5Protocolo do agendamento contém a data do exame · Controllers/AgendamentoController.cs:85Atende

Padrão AGD-yyyyMMdd-0000, montado no controller com a data do exame e o sequencial do dia — não com a data em que o pedido foi feito.

EvidênciaControllers/AgendamentoController.cs:85commit c7d2a10

C6Horário já ocupado do profissional bloqueado na marcação · Servicos/DisponibilidadeProfissionalService.cs:45Não atende

A grade de horários livres sai só da escala do profissional, e o único filtro aplicado é o intervalo de almoço. Exame já marcado não é descontado, então dois pacientes ficam com as 8h do mesmo profissional; o desconto era esperado aqui, no montador das janelas.

EvidênciaServicos/DisponibilidadeProfissionalService.cs:45commit c7d2a10

C7Marcação restrita aos perfis Recepção e Corpo Clínico · Controllers/AgendamentoController.cs:76Não atende

O endpoint exige autenticação e nada mais: sem Roles, sem policy. Qualquer usuário autenticado — inclusive o próprio paciente logado no portal — agenda exame em qualquer prontuário.

EvidênciaControllers/AgendamentoController.cs:76commit c7d2a10

C8Teto de 40 exames por turno na sala de coletaInconclusivo

O serviço conta os agendamentos do turno, mas nada no commit fixa 40 como teto. O número pode estar na parametrização da unidade, que não vive neste repositório.

Sem evidência no código

C9Acesso ao dado de saúde registrado na trilha de auditoriaInconclusivo

O agente respondeu Atende citando Infra/Auditoria/AuditoriaService.cs:214. O arquivo tem 190 linhas no commit c7d2a10 — a linha citada não existe, e o veredito caiu para inconclusivo. Em dado de saúde, registrar quem leu o quê é exigência da LGPD, então o item volta para revisão humana.

Evidência não confirmadaInfra/Auditoria/AuditoriaService.cs:214Atende → Inconclusivo

Exemplo fictício de uma clínica médica, com os cotejos pré-computados.

Abrir a demo completa

Ninguém compara os dois lados

O requisito nasce num card. Vira código. O código vira MR. O MR é aprovado por quem leu o diff, não o requisito. A entrega é aceita por quem leu o requisito, não o diff.

Testes provam que o código faz o que o código diz. Lint e Sonar olham qualidade interna. Code review depende do revisor ter lido a spec. A pergunta “isso atende ao que foi pedido?” não tem dono.

Requisito · ClickUp

Agendar exame com confirmação de preparo

  • Exibir as instruções de preparo antes de confirmar
  • Recusar horário já ocupado do profissional
  • Registrar quem aceitou o preparo e quando
Código · vitalis-api

                88
                public async Task<Result<Agendamento>> AgendarAsync(
              
                89
                    AgendarExameRequest req, CancellationToken ct)
              
                90
                {
              
                91
                    var exame = await _exames.ObterAsync(req.ExameId, ct);
              
                92
                    var slot  = await _agenda.ReservarAsync(req.Slot, ct);
              
                93
                
              
                94
                    return await _repo.SalvarAsync(
              
                95
                        new Agendamento(exame, slot, req.PacienteId), ct);
              
                96
                }
              
não atravessou

Do pedido à entrega

  1. Você escreve o que precisa

    Do jeito que o time já escreve hoje, na ferramenta que já usa.

  2. A plataforma questiona antes

    Ela lê o sistema que já existe e aponta o que não fecha com o pedido — enquanto mudar ainda é barato.

  3. Vocês fecham o combinado

    O que ficou acertado vira o documento que todo mundo segue.

  4. Na entrega, ela compara

    Item por item: o que foi feito contra o que foi combinado.

  5. E mostra onde

    Só afirma que algo está pronto se puder apontar o lugar exato. Sem isso, não afirma.

Evidência, não opinião

Um parecer de IA sem evidência é irrefutável e inútil. Todo veredito do Aferiz aponta arquivo, linha e commit. E quando a evidência citada não existe no código, nós mesmos rebaixamos o veredito para inconclusivo.

Assistente genérico
“A implementação parece cobrir o requisito corretamente e segue boas práticas.”
Aferiz

C7Não atende

AgendamentoController.cs:76

endpoint de agendamento sem verificação de perfil

commit c7d2a10

Contar isso é contraintuitivo. Mas é a diferença entre uma ferramenta que você confere e uma que você usa.

Você escolhe para onde seu código vai

O mesmo agente roda em qualquer motor. Dado sensível fica no modelo local e o custo de LLM vai a zero. Soberania é poder trocar de motor — não é um modelo fechado com outro nome.

  • claude-code
  • codex
  • opencode
  • grok
  • modelo local

Trocar de runtime não muda a definição do agente. É a mesma vara medindo.

Onde você já trabalha

Marcamos “em breve” quando é em breve. Integração inventada custa o primeiro cliente.

GitLab
disponível
ClickUp
disponível
Discord
disponível
GitHub
em breve
Azure DevOps
em breve
Jira
em breve
NextWiki
em breve
Telegram
em breve

Preço público

O plano grátis é grátis de verdade e não pede cartão.

  • Free

    R$ 0

    • 1 projeto
    • 30 cotejos por mês
    • Runtime econômico
  • Team

    R$ 89/dev por mês

    • 10 projetos
    • 500 cotejos por mês
    • Todos os runtimes
  • Business

    R$ 149/dev por mês

    • Projetos ilimitados
    • SSO e papéis
    • Retenção estendida
  • Self-hosted

    Anual

    • Sua infraestrutura
    • Modelo local
    • Sem custo de LLM

Custo de LLM é repassado por consumo — ou zero, quando você roda no seu próprio modelo.

O que um tech lead cético pergunta

Meu código vai para onde?

Para o runtime que você escolher. A tela mostra isso antes de executar. No plano self-hosted, com modelo local, o código não sai da sua infraestrutura.

E se a IA errar o veredito?

Erra mesmo. Por isso todo veredito positivo exige evidência que nós verificamos no commit — arquivo e linha precisam existir. Não existindo, o veredito cai para inconclusivo automaticamente. E você marca concordo ou discordo em cada um, o que alimenta a calibração.

Vocês commitam alguma coisa no meu repositório?

Não. Nunca. O Aferiz não escreve código de feature e não faz commit nem push, em nenhuma circunstância. Ele lê o código e comenta.

Funciona sem card bem escrito?

Funciona pior. Sem requisito não há o que cotejar. Se o card for vago, os critérios saem vagos — por isso eles ficam editáveis antes do cotejo, e um cotejo sobre critérios não revisados sai marcado como tal.

Substitui code review?

Não. Review olha como o código está escrito. O cotejo olha se ele atende ao que foi pedido. São perguntas diferentes e as duas importam.

Substitui o Sonar?

Não, e usa o resultado dele. O Sonar responde “o código está bem escrito?” — complexidade, duplicação, vulnerabilidade, cobertura. O Aferiz responde “o código faz o que foi pedido?”. Falta a checagem de horário já ocupado que o card exigia na marcação? O Sonar passa verde, porque o código está limpo. Método com complexidade 30? O Aferiz não vê, porque o requisito não falava disso. No pipeline, a análise estática e os testes rodam antes e alimentam o cotejo.

Isso substitui o desenvolvedor?

Não, e não deveria. O Aferiz não escreve código, não decide merge e não resolve nada sozinho: ele mostra a diferença entre o que foi pedido e o que foi entregue, com evidência, para que uma pessoa decida o que fazer. Quem escreve o código, negocia prazo, entende o contexto do cliente e sabe quando a regra tem exceção continua sendo o time. O que sai da mesa do dev é a conferência manual e repetitiva — o julgamento fica.

Aprovar uma proposta aprova o MR?

Não. Aprovar publica o comentário do Aferiz no MR — uma chamada de API que cria uma nota. O estado de aprovação do MR não é tocado, em GitLab, GitHub ou Azure. Quem aprova merge continuam sendo as pessoas. Se você quiser que um veredito negativo trave o merge, isso se faz por check de CI a partir do webhook, com a regra no seu repositório.

Funciona com GitLab self-hosted? E monorepo?

Sim para o GitLab self-hosted. Para monorepo, um cotejo pode abranger vários repositórios ou pastas — backend e frontend no mesmo veredito.

Quanto custa por cotejo?

Depende do runtime e do tamanho do repositório. A plataforma mostra o custo de cada execução, por projeto. No modelo local, zero.