Cotação com IA
O coração do módulo — RFQ pública, fornecedor responde no formato que quiser, IA extrai e monta mapa comparativo
Por que é o diferencial do produto
A cotação tradicional consome 5-7 dias do comprador: WhatsApp para 5 fornecedores, respostas em formatos diferentes ao longo de dias (PDF, foto, áudio, planilha), consolidação manual em Excel. Erra. Perde tempo.
OctaBuild propõe um fluxo radicalmente diferente:
- Comprador convida com 1 clique
- Fornecedor responde no formato que tiver (PDF, foto do papel, áudio explicando, Excel, texto)
- IA extrai preços e prazos automaticamente
- Mapa comparativo se monta sozinho com PNL e score composto
- Comprador decide com justificativa
Reduz cotação de 5-7 dias para 1-2 dias.
Fluxo passo a passo
1. Abrir RFQ
Suprimentos → tab Cotações → "Nova cotação". Selecione 1+ RC aprovadas, defina prazo limite (default 5 dias).
2. Convidar fornecedores
Botão "Mapa comparativo" na cotação → "Convidar fornecedores".
- Selecione 3+ fornecedores
- Cada um recebe um token único (link público sem login)
A regra geral: mínimo 3 fornecedores para curva A/B; curva C aceita 1. Exceções legítimas (fornecedor exclusivo, contrato-mestre, emergência aprovada) — exige documento comprobatório.
3. Distribuir
Botão "Distribuir" abre dialog com:
- Toggle WhatsApp (se fornecedor tem celular cadastrado)
- Toggle Email (se tem email cadastrado)
- Mensagem extra opcional (até 500 chars)
WhatsApp usa o serviço oficial via Cloud API (rate-limited). Email via Resend. Se ambos falham, comprador pode copiar o link e enviar manualmente.
4. Fornecedor responde
Em /rfq/[token] (mobile-first, sem login):
- Vê descrição da obra (sem dados sensíveis), itens, prazo
- Pode preencher preços direto OU subir arquivos
- Aceita: PDF, foto, Excel, CSV, áudio gravado em browser, texto livre
- Múltiplos uploads acumulam (até 6 arquivos, 50MB cada)
5. IA extrai
No painel interno, cada resposta tem botão "Extrair IA".
Modelos usados:
- OpenAI GPT-4o-mini (vision) — PDF e fotos
- Whisper — áudio → texto → estruturação
- ExcelJS — planilhas (parser direto, depois GPT alinha itens)
Saída estruturada via Zod schema:
- Itens (com
match_confidencepor item — IA mapeia descrição da proposta ↔ item da RC) - Prazo de entrega (dias)
- Condição de pagamento (texto, ex: "30 ddl", "à vista 5%")
- Validade da proposta
- Frete (CIF/FOB + valor)
- Observações
Confiança baixa (< 80%) sinaliza item para revisão humana.
6. Mapa comparativo
Visualização em tabela:
- Linhas = itens da RFQ
- Colunas = fornecedores
- Footer: total + frete, PNL, prazo, condição de pagamento, score histórico, score composto, indicador de outlier
PNL — Preço Presente Líquido
Considera custo do dinheiro: pagar à vista pode parecer mais caro, mas se o desconto compensa o custo do dinheiro, vira melhor opção.
PNL = valor_total / (1 + taxa_oportunidade_aa)^(prazo_pagamento_dias / 365)Taxa de oportunidade configurável em Settings → Compras (default 14% ao ano).
Score composto
Normaliza 3 dimensões em [0,1] e aplica pesos (default 60/20/20):
- Preço (60%): 1 quando é o menor PNL, 0 quando é o maior
- Prazo (20%): 1 quando é o menor prazo, 0 quando é o maior
- Histórico (20%): score consolidado do fornecedor / 5
Resultado em 0-100. Maior = melhor.
Outliers
Detectados pela mediana × 1.3. Fornecedor com PNL > 1.3× mediana sinaliza visualmente — "verificar especificação ou descartar".
7. Recomendação IA
Painel lateral mostra recomendação automática:
- "Recomendo Fornecedor B. Não é o menor preço (Fornecedor A está 2% abaixo), mas Fornecedor A tem score histórico 3.1 contra 4.7 de B."
- Lista 2 alternativas com seus motivos
8. Decidir vencedor
Botão "Decidir vencedor" abre modal:
- Atribuição item-por-item (suporta vencedor misto)
- Justificativa obrigatória (mínimo 20 caracteres)
- Botão "Aplicar IA" preenche tudo com a recomendação
Salvar dispara approval cotacao_decisao.
9. Aprovação
Painel → Aprovações — diretor aprova a decisão.
Quando aprovado, callback automático:
- Cria 1 PO por fornecedor vencedor (com itens atribuídos)
- Atualiza requisição para
pedido_emitido - Cotação vira
decidida
Se rejeitado: cotação volta para em_analise para nova decisão.
Idempotência e duplicatas
- Submissão do fornecedor:
(quotation_request_id, supplier_id)único — re-envio sobrescreve, não duplica - Geração de PO: callback verifica se já existe PO para a cotação antes de criar
- Tokens RFQ: 1 por (cotação, fornecedor) — único
Lembrete automático
Cron Vercel diário (13:00 UTC): para tokens com prazo a vencer em ≤ 3 dias e sem resposta, envia lembrete por email/WhatsApp. Idempotente via heartbeat (não envia se houve atividade nas últimas 20h).
KPIs
- Tempo médio de coleta: dias entre abrir RFQ e mapa pronto. Meta: 1-2 dias.
- Taxa de resposta: % convidados que respondem no prazo. Meta: > 80%.
- Acurácia IA: % campos extraídos corretamente sem correção. Meta: > 95% PDFs/Excel; > 85% fotos/áudios.
Permissões
| Permissão | Escopo | Default |
|---|---|---|
compras_cotacao:read | project | Todos exceto comercial/jurídico |
compras_cotacao:write | project | gerente |
compras_cotacao:manage | project | diretor (decidir vencedor + criar approval) |