Integrações
OpenAI, Resend, WhatsApp Cloud API, Supabase, Vercel Cron
OpenAI (IA copiloto em cotações)
Usado em:
- Extração de propostas em PDF / foto / áudio (mapa comparativo)
- OCR de NF-e quando XML não disponível
- Geração de mensagens de negociação
Configuração
Variável de ambiente: OPENAI_API_KEY
Modelos:
gpt-4o-mini— extração e OCRwhisper-1— transcrição de áudio
Custo médio por cotação (3 propostas): R$ 0,10–0,30 (tokens + transcrição).
Fallback
Se a chave não estiver configurada, módulo de extração IA fica desabilitado. Mapa comparativo continua funcionando — apenas o usuário precisa preencher manualmente os campos das propostas.
Resend (email transacional)
Usado em:
- Convites de RFQ a fornecedores
- Lembretes diários de RFQ próximas do prazo
- Digest de CNDs vencendo
- Emails de aprovação pendente
- Alertas de divergência
Configuração
RESEND_API_KEY=re_xxx
RESEND_FROM_EMAIL=noreply@suaempresa.com
RESEND_FROM_NAME=OctaBuildDomínio precisa estar verificado em Resend. SPF/DKIM/DMARC configurados.
WhatsApp Cloud API
Usado em:
- Distribuição de RFQ a fornecedores (text message com link)
- Lembretes
- Notificações críticas (CND vencida, aprovação fora SLA)
Configuração
Microserviço separado em whatsapp-service/ (Docker, deploy em Render).
WHATSAPP_SERVICE_URL=https://whatsapp.suaempresa.com
WHATSAPP_SERVICE_TOKEN=xxx (compartilhado com o serviço)WABA (WhatsApp Business Account) precisa estar verificada na Meta. Templates aprovados:
rfq_invite_supplier— convite RFQrfq_reminder— lembrete prazo- (outros conforme necessidade)
Fallback
Se serviço não estiver configurado, distribuição WhatsApp falha graciosamente. Comprador pode copiar link e enviar manualmente.
Supabase
Banco de dados (PostgreSQL 17) + Storage + Auth.
Configuração
NEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJxxx
SUPABASE_SERVICE_ROLE_KEY=eyJxxxService role key é usada em rotas que precisam bypassar RLS (ex: rotas públicas com token).
RLS (Row Level Security)
Todas as tabelas com dados de negócio têm RLS habilitada. Helpers padrão:
is_org_member(org_id)is_org_admin(org_id)get_active_organization_id()
Storage buckets
procurement-documents— RFQ specs, PC PDF, contrato PDF, NF-e XMLsprocurement-supplier-uploads— propostas de fornecedores (acesso via token)procurement-receipts— fotos de recebimentocompras-fundos-comprovantes— cupons fiscais de fundoscompras-cnds— certidões de fornecedoresproject-documents— projetos arquitetônicos, ARTs
Todos são privados, RLS por org.
Vercel Cron
Jobs agendados em app/vercel.json:
| Path | Schedule UTC | Função |
|---|---|---|
/api/cron/deadline-notifications | 0 11 * * * | Notifica tasks vencendo |
/api/cron/cleanup-suppressions | 0 4 * * * | Limpa email suppressions antigas |
/api/cron/rfq-reminders | 0 13 * * * | Lembretes de RFQ a fornecedores |
/api/cron/cnds-vencimento | 0 14 * * * | Reclassifica CNDs e alerta |
Auth via Authorization: Bearer ${CRON_SECRET}.
BrasilAPI (CNPJ lookup)
Usado em:
- Auto-lookup de CNPJ ao cadastrar fornecedor
API pública, sem chave. Rate limit razoável (~200 req/min).
Open Finance (planejado)
Phase 2.5+: integração direta com bancos para conciliação automática. Por ora, importação manual de OFX/CSV.
SEFAZ (planejado)
Phase 2.5+: validação real de chave de NF-e via Focus NFe ou similar (~R$ 0,05 por consulta). Por ora, parser de XML local valida estrutura mas não consulta status na SEFAZ.
Observabilidade
- Logs:
console.errorcom prefixo[Modulo]. Em produção, agregados por Vercel ou serviço externo. - Sentry (planejado) para errors de runtime.
- Analytics de uso: PostHog ou Amplitude (planejado).