9. Validações por Campo Seção 9
Esta seção documenta todas as validações de interface e de negócio aplicadas a cada formulário do sistema. Validações de interface são executadas no frontend antes de qualquer chamada à API; validações de negócio são verificadas também no backend (Supabase RLS e constraints).
9.1 Formulário Interno do Lead (11 Seções)
Seção 1 — Dados da Empresa
Campo
Regra de validação
Obrigatório
Máscara / Formato
Razão Social
Mínimo 3 caracteres. Impede salvar se vazio — exibe toast de erro e mantém formulário aberto
Sim
Texto livre
CNPJ
Se preenchido: 14 dígitos numéricos. Sem validação de dígito verificador no frontend (apenas formato)
Não
00.000.000/0001-00
Website
Sem validação de URL — aceita qualquer string
Não
Texto livre
Ano de fundação
Se preenchido: número inteiro entre 1800 e ano atual
Não
AAAA (4 dígitos)
Faturamento anual
Select entre valores pré-definidos. Sem validação adicional
Não
Dropdown de faixas
Segmentos atendidos
Checkboxes múltiplos. Nenhum obrigatório
Não
Multi-seleção
Upload Contrato Social
Tipos aceitos: PDF, JPG, JPEG, PNG, DOC, DOCX. Tamanho máximo: 10 MB por arquivo. Arquivo maior exibe alerta e é ignorado
Não
Arquivo
Seção 2 — Contato Principal
Campo
Regra de validação
Obrigatório
Máscara / Formato
Nome completo
Mínimo 3 caracteres se preenchido
Não
Texto livre
Cargo
Sem validação específica
Não
Texto livre
E-mail
Se preenchido: formato válido com @ e domínio. Validação via atributo HTML type="email"
Não
usuario@dominio.com
Telefone
Sem validação de formato — aceita qualquer string
Não
Texto livre
Decisor
Radio obrigatório entre "Este contato" e "Outro" se campo nome preenchido
Não
Radio button
Seção 3 — Localização
Campo
Regra de validação
Obrigatório
Máscara / Formato
CEP
Se preenchido: exatamente 8 dígitos numéricos. Busca automática disparada ao completar. Se API retornar erro: preview âmbar com aviso. Não bloqueia salvamento
Não
00000-000
UF principal
Select entre as 27 UFs brasileiras. Preenchido automaticamente pelo CEP
Não
Sigla (2 letras)
Polo logístico / cidade
Texto livre. Preenchido automaticamente pelo CEP
Não
Texto livre
Logradouro / Bairro
Texto livre. Preenchidos pelo CEP, editáveis. Exibidos apenas se CEP consultado
Não
Texto livre
Lat / Lng
Campos ocultos. Numéricos. Preenchidos automaticamente pela API. Não editáveis pelo usuário
Não
Decimal (graus)
Seção 4 — Capacidade Instalada (Armazéns)
Campo
Regra de validação
Obrigatório
Máscara / Formato
Nome / apelido
Texto livre. Exibido no header do card do armazém. Sem validação de unicidade
Não
Texto livre
Área total (m²)
Número positivo. Contribui para area_total_m2 consolidado exibido no resumo
Não
Número inteiro
Número de docas
Número inteiro positivo
Não
Número inteiro
Ocupação atual (%)
Número entre 0 e 100
Não
0–100
Pé-direito (m)
Número decimal positivo. Passo 0,5
Não
Número decimal
Upload fotos por armazém
Tipos: JPG, JPEG, PNG, HEIC, WEBP. Máx 10 MB cada. Cada armazém tem seu próprio campo de upload vinculado ao tipo foto_armazem_N
Não
Arquivo de imagem
Seções 5 a 7 — Cargas, Tecnologia e Certificações
Campo
Regra de validação
Obrigatório
Tipo
Todos os checkboxes (cargas, sistemas, certificações)
Sem validação — seleção múltipla livre. Salvos como string CSV
Não
Checkbox múltiplo
WMS / ERP utilizado
Texto livre. Sem validação de formato
Não
Texto livre
Nível de maturidade
Radio entre 4 opções pré-definidas
Não
Radio
OTIF médio (%)
Número entre 0 e 100
Não
Número decimal
Acuracidade inventário (%)
Número entre 0 e 100
Não
Número decimal
Upload certificados
Tipos: PDF, JPG, JPEG, PNG. Máx 10 MB. Múltiplos arquivos permitidos
Não
Arquivo
Seções 8 a 11 — Planos, WMS, Funil e Acompanhamento
Campo
Regra de validação
Obrigatório
Tipo
Plano selecionado
Radio entre Starter, Pro, Enterprise, Custom
Não
Radio card
Fee mensal estimado (R$)
Número decimal positivo. Sem formatação automática de moeda
Não
Número decimal
Status do lead
Select entre: Ativo, Convertido, Perdido. Padrão: Ativo
Sim
Dropdown
Motivo da perda
Condicional: obrigatório quando status = "Perdido". Campo de texto livre
Condicional
Texto livre
Etapa do funil
Radio entre 6 etapas pré-definidas
Não
Radio
Data de 1º contato
Formato de data do browser. Não pode ser data futura
Não
Date input
Responsável comercial
Texto livre. Mínimo 2 caracteres se preenchido
Não
Texto livre
9.2 Portal Público (7 Seções)
Validações gerais do Portal
Campo / Regra
Comportamento
Nível
Ação do sistema
Token de acesso
Consultado no Supabase ao carregar o portal. Se não encontrado: tela "Link inválido"
Crítico
Tela de erro + instrução de contato
Razão Social (Seção 1)
Mínimo 3 caracteres
Obrigatório
Mantém formulário e exibe alerta nativo do browser
E-mail do contato (Seção 2)
Formato de e-mail válido via atributo HTML
Obrigatório
Mantém formulário; tooltip nativo do browser
CEP (Seção 3)
Exatamente 8 dígitos. Máscara aplicada automaticamente (00000-000)
Não obrigatório
Preview verde (BrasilAPI) ou âmbar (ViaCEP)
Tamanho de arquivo
Máximo 10 MB por arquivo em qualquer upload
Crítico
Alert nativo + arquivo ignorado
Auto-save
Dados salvos automaticamente ao clicar "Próximo →" em cada seção
—
Nenhum erro exibido se save falhar silenciosamente; retenta 1 vez
Submit final
Verificação mínima: Razão Social preenchida. Uploads pendentes enviados ao Supabase Storage
Crítico
Toast de erro se upload falhar; lead salvo mesmo sem upload
9.3 Scorecard — Modal de KPIs
Campos do Modal de Lançamento de KPIs
Campo
Regra de validação
Threshold verde
Threshold vermelho
OTIF (%)
Decimal entre 0 e 100. Casas decimais permitidas
≥ 97%
< 90%
Acuracidade Inventário (%)
Decimal entre 0 e 100
≥ 98%
< 95%
Dock-to-Stock (horas)
Decimal positivo. Passo 0,5
≤ 24h
> 48h
Utilização Capacidade (%)
Inteiro entre 0 e 100
≤ 85%
> 95%
NPS (pontos)
Inteiro entre -100 e 100
≥ 50
< 20
Tempo Onboarding (dias)
Inteiro positivo
≤ 20d
> 30d
Período (trimestre + ano)
Q1-Q4 obrigatório; ano entre 2020 e 2030
Nenhum valor de threshold |
Plano de remediação
Condicional: ativo quando qualquer KPI for vermelho ou tier for Bronze. Texto livre, mínimo 10 caracteres quando visível
Condicional |
9.4 Pipeline de Auditoria
Validações do fluxo de auditoria
Validação
Regra
Resultado se falhar
Nível
Avanço de etapa
Todos os itens do checklist da etapa atual devem estar marcados
Botão "Avançar" desabilitado; mensagem "Complete X/Y itens"
Crítico
Unicidade da auditoria
Cada lead pode ter apenas 1 registro ativo em lic_auditoria
Toast de erro "Este lead já está em auditoria"
Crítico
Emissão de certificado
Número do certificado é obrigatório. Data de emissão obrigatória. Data de validade obrigatória e deve ser posterior à emissão
Alert nativo; botão "Emitir" desabilitado até campos válidos
Obrigatório
Upload relatório de visita
Tipo aceito: PDF, DOC, DOCX. Máximo 20 MB
Alert de tipo inválido; arquivo rejeitado
Moderado
Motivo da perda no Kanban
Ao arrastar card para coluna "Perdido": campo de motivo exibido em modal obrigatório. Mínimo 5 caracteres
Modal permanece aberto; toast de erro se vazio
Obrigatório
9.5 Validações de Negócio (Transversais)
| Validação | Regra | Componente |
| Acesso ao módulo | Apenas e-mails na whitelist podem visualizar o botão e acessar a tela de Licenciamento | Função aplicarPermissoes() |
| Classificação por tier | Somente leads com status = 'Convertido' recebem classificação Platina/Ouro/Prata/Bronze | Função getLicTier() |
| Cálculo de disponibilidade | m² disponível nunca pode ser negativo — resultado clamped em 0 | Função getM2Disponivel() |
| Alertas automáticos | Badge de alertas só exibe contagem de alertas não descartados (descartados ignorados via localStorage) | Função gerarLicAlertas() |
| Score de qualidade | Score sempre entre 0 e 100; calculado dinamicamente — nunca persistido no banco | Função calcLicScore() |
| Projeção de disponibilidade | Requer mínimo 2 períodos de Scorecard para projeção linear; com 1 período exibe linha plana; com 0 não exibe | Função renderizarProjecao() |
10. Relatórios e Dashboards Seção 10
10.1 Dashboard Principal (Tela Inicial)
| Indicador | Fonte de dados | Filtro disponível | Atualização |
| Total de leads | baseLicLeads.length | Status | A cada carregamento |
| Em negociação | Status = Ativo | Status | A cada carregamento |
| Convertidos | Status = Convertido | Status | A cada carregamento |
| Fee/mês total | Soma de fee_mensal dos Convertidos | Status | A cada carregamento |
| Evolução mensal (gráfico) | created_at dos leads por mês | Nenhum | A cada carregamento |
| Funil por etapa | Campo etapa dos leads | Status | A cada carregamento |
| Receita projetada (60 meses) | Fee total dos Convertidos × 60 | Nenhum | A cada carregamento |
10.2 Painel de Capacidade da Rede
| Indicador | Cálculo | Filtros |
| m² total da rede | Soma de area_total_m2 dos Convertidos | UF, Nível |
| Distribuição por nível | Contagem e m² por Platina/Ouro/Prata/Bronze | UF, Nível |
| m² por região geográfica | Agrupamento por UF → Região, soma de m² | UF, Nível |
| Tipos de carga habilitados | Contagem de licenciados por tipo de carga (cargas_geral + cargas_especiais) | UF, Nível |
| Alertas de capacidade | Licenciados com utilizacao_capacidade > 70% no último KPI | Automático |
10.3 Board Report PDF Executivo
O Board Report é o único relatório com exportação em PDF disponível no módulo de Licenciamento (além do PDF individual de cada lead). Gerado via html2canvas (escala 2×) + jsPDF, produz um documento A4 com paginação automática.
| Seção do PDF | Conteúdo |
| Capa | Branding Pipeline/Vendemmia, título, mês/ano, data e hora de geração, 4 KPIs em destaque |
| Distribuição por nível | Cards Platina/Ouro/Prata/Bronze com contagem, m² e barra proporcional |
| Atividade do período | Novos licenciados no mês, em qualificação, score médio, alertas, sem KPIs — cada item em card colorido |
| Saúde da rede | Proporção Verde/Amarelo/Vermelho/Sem dados com barras de progresso |
| Cobertura geográfica | 5 cards de região + lista de estados cobertos |
| Top 5 licenciados | Tabela ordenada por score com tier badge, UF e m² total |
| Alertas | Licenciados críticos identificados ou mensagem "Sem alertas" |
| Rodapé | Data, "Documento Confidencial — Distribuição restrita à diretoria Vendemmia" |
ℹ️
Exportação CSV/Excel: Atualmente o sistema não possui exportação de dados em CSV ou Excel. Esta funcionalidade pode ser adicionada em versão futura — o dataset baseLicLeads contém todos os campos necessários para exportação via JSON.stringify ou biblioteca papaparse.
11. Notificações e Alertas do Sistema Seção 11
11.1 Notificações In-App (Toasts)
O sistema exibe notificações temporárias (toasts) no canto da tela para confirmar ou alertar o usuário sobre ações realizadas. São exibidas por 3-5 segundos e desaparecem automaticamente.
| Tipo | Cor | Exemplos de uso |
| Sucesso | Verde | Lead salvo, KPI registrado, certificado emitido, PDF gerado, link copiado, snapshot salvo, auditoria avançada |
| Erro | Vermelho | Campo obrigatório vazio, upload com tipo inválido, erro de API, falha ao salvar no banco |
| Info | Azul | Geração de PDF iniciada, link dispensado, carregando dados |
| Aviso | Âmbar | CEP com dados parciais (ViaCEP fallback), licenciado já em auditoria |
11.2 Central de Alertas Proativos
Diferentemente dos toasts (reativos), os alertas proativos são gerados automaticamente pelo sistema ao detectar condições críticas nos dados. Persistem até serem dispensados pelo usuário.
⚠
Certificação vencendo em ≤ 30 dias
Disparado quando lic_auditoria.certificado_validade está a 30 dias ou menos da data atual. Prioridade CRÍTICO. Ação: navegar para Auditoria e renovar.
📐
Capacidade crítica: m² disponível < 500
Calculado a partir de area_total_m2 × (1 - utilizacao_capacidade/100) com dado do último período de Scorecard. Prioridade CRÍTICO. Ação: navegar para Disponibilidade.
📉
Risco de downgrade de tier
Detectado quando OTIF cai >3% ou Acuracidade cai >2% entre dois períodos consecutivos. Prioridade CRÍTICO. Ação: navegar para Scorecard.
⏰
Certificação vencendo em 31–60 dias
Variante de atenção do alerta de certificação. Prioridade ATENÇÃO. Permite planejamento antecipado.
📊
Alta ocupação: > 70% de utilização
Calculado do último Scorecard. Prioridade ATENÇÃO. Indica redução na capacidade disponível para novos clientes.
💤
Licenciado sem atualização > 60 dias
Baseado em lic_leads.updated_at. Prioridade ATENÇÃO. Indica necessidade de follow-up com o parceiro.
🎂
Aniversário de contrato nos próximos 30 dias
Baseado em lic_auditoria.certificado_emitido_em. Prioridade INFORMAÇÃO. Gatilho para renegociação e renovação de termos comerciais.
📋
Formulário preenchido pelo parceiro (≤ 7 dias)
Disparado quando form_status = 'concluido' e form_filled_at está há 7 dias ou menos. Prioridade INFORMAÇÃO. Ação: abrir formulário do lead para revisão.
📈
Licenciado ativo sem KPIs de Scorecard
Calculado verificando ausência de registros em lic_performance. Prioridade INFORMAÇÃO. Ação: abrir Scorecard e lançar KPIs.
11.3 Notificações Futuras (Roadmap)
🗺
Funcionalidades planejadas para próximas versões:
— E-mail automático ao parceiro quando link é gerado (integração com SendGrid ou Resend)
— E-mail de confirmação ao parceiro após formulário enviado
— Notificação push (browser) para alertas críticos (certificação vencendo em 30 dias)
— Webhook para integração com canais de comunicação internos (Slack, Teams)
12. Critérios de Aceite para Homologação Seção 12
Os critérios de aceite definem condições objetivas e mensuráveis para aprovação de cada funcionalidade do sistema em testes de homologação. Cada critério deve ser verificado pelo testador sem ambiguidade.
12.1 Cadastro e Gestão de Leads
CA-001Criar novo lead com campos mínimos
Dado
- Usuário autenticado com acesso ao módulo
Quando
- Clicar em "+ Novo Lead"
- Preencher apenas o campo "Razão Social" com "Empresa Teste LTDA"
- Navegar até a seção 11 e clicar "✅ Salvar lead"
Então
- Toast verde "Lead cadastrado com sucesso!" exibido
- Lead "Empresa Teste LTDA" visível na tabela com status "Ativo"
- Registro criado em
lic_leads no Supabase
CA-002Bloquear salvamento sem razão social
Quando
- Abrir formulário de novo lead
- Navegar até seção 11 sem preencher Razão Social
- Clicar "✅ Salvar lead"
Então
- Toast vermelho "Informe a razão social da empresa."
- Formulário retorna para seção 1 (empresa)
- Nenhum registro criado no banco
CA-003CEP válido preenche endereço automaticamente
Quando
- Na seção 3, digitar o CEP "01310-100" (Av. Paulista, SP)
- Aguardar a busca completar
Então
- Preview verde exibido: "01310-100 · São Paulo — SP"
- Campo UF preenchido com "SP"
- Campo Polo Logístico preenchido com "São Paulo"
- Campos Logradouro e Bairro visíveis e preenchidos
- Campos de lat/lng ocultos preenchidos com as coordenadas GPS
CA-004Cálculo correto do score e tier
Dado
- Lead com status "Convertido", OTIF=98%, Acuracidade=99,5%, 3 certificações, Maturidade=Avançado, Área=15.000 m²
Então
- Score calculado: OTIF(30) + Acuracidade(25) + Certs(15) + Maturidade(15) + Área(7) = 92 pontos
- Tier exibido: 💎 Platina
- Badge aparece na tabela, no mapa e no scorecard
12.2 Pipeline de Auditoria
CA-005Bloquear avanço com checklist incompleto
Quando
- Abrir painel de auditoria de lead na etapa "Prospectado"
- Marcar apenas 3 dos 4 itens do checklist
- Tentar clicar no botão de avançar
Então
- Botão "Avançar" permanece cinza e desabilitado (
cursor:not-allowed)
- Texto do botão exibe "⏳ Complete o checklist para avançar (3/4)"
- Nenhuma alteração no banco
CA-006Avanço de etapa registrado no histórico
Quando
- Marcar todos os itens do checklist na etapa "Prospectado"
- Clicar "Avançar para Formulário Enviado"
Então
- Toast "Lead avançado para 'Formulário Enviado'!"
- Card do lead movido para coluna "Formulário Enviado" no kanban
- Registro criado em
lic_historico com tipo "auditoria_avanco"
- Campo
lic_auditoria.estagio_atual = "formulario"
- Campo
etapa_iniciada_em atualizado para data/hora atual
CA-007Emissão de certificado ativa o licenciado
Dado
- Lead na etapa "Ativo na Rede" da auditoria
Quando
- Clicar "Emitir Certificado e Ativar"
- Preencher: número="VDM-2026-001", emissão=hoje, validade=daqui a 2 anos
- Confirmar
Então
- Toast "Certificado emitido! Licenciado agora está ATIVO na rede."
lic_leads.status = "Convertido"
lic_auditoria.certificado_numero = "VDM-2026-001"
- Lead aparece no Mapa, Capacidade, Scorecard e Board Report
- Tier calculado e exibido na tabela de leads
12.3 Scorecard de Performance
CA-008Plano de remediação exibido automaticamente
Quando
- Abrir modal de KPIs de um licenciado Prata
- Digitar OTIF = 85 (abaixo do threshold verde 97%)
Então
- Bloco "KPI abaixo do threshold — plano de remediação" aparece automaticamente
- Campo de ações corretivas, data de início e data de resolução exibidos
- Botão "Salvar KPIs" habilitado apenas após preenchimento do plano
CA-009Semáforos exibidos corretamente
Dado
- Licenciado com OTIF=98 (verde), Acuracidade=96 (amarelo), Dock-to-Stock=60 (vermelho)
Então
- Card do scorecard exibe: OTIF com semáforo 🟢, Acuracidade com 🟡, D2S com 🔴
- Saúde geral do card = 🔴 Crítico (pior semáforo vence)
- Badge no botão "Alertas" incrementado em 1
12.4 Mapa Interativo
CA-010Marcador posicionado corretamente por CEP
Dado
- Lead com CEP "01310-100" e coordenadas lat=-23.5640, lng=-46.6526 salvas
Então
- Marcador posicionado no mapa próximo à Av. Paulista, São Paulo
- Hover popup exibe nome da empresa, m² disponível e fee/mês
- Ao clicar: painel lateral abre com abas Dados | Histórico | Documentos
CA-011Gap Analysis exibe estados sem cobertura
Quando
- Clicar em "Gap Analysis" no header do mapa
Então
- Choropleth muda para 3 cores: verde (licenciado ativo), âmbar (em prospecção), vermelho (sem cobertura)
- Painel lateral exibe contagem por categoria e lista de UFs sem cobertura
- Botão exibe "✕ Sair do Gap Analysis"
- Clicar novamente restaura choropleth padrão
12.5 Portal Público
CA-012Auto-save funciona entre seções
Quando
- Preencher Razão Social = "Parceiro Teste" na seção 1
- Clicar "Próximo →" para avançar à seção 2
- Fechar o browser
- Reabrir o link do portal
Então
- Tela de "Já preenchido" exibida com botão "Atualizar dados"
- Ao clicar "Atualizar dados", formulário abre com "Parceiro Teste" na seção 1
form_status = "preenchendo" (não 'concluido')
CA-013Token inválido exibe tela de erro
Quando
- Acessar
portal.html?token=token_invalido_12345
Então
- Tela "Link inválido ou expirado" exibida
- Instrução de contato com a Vendemmia visível
- Nenhuma query ao banco além da validação do token
12.6 Central de Alertas
CA-014Badge atualizado conforme alertas ativos
Dado
- 1 licenciado com certificado vencendo em 15 dias e 1 com capacidade crítica (< 500 m²)
Então
- Botão "Alertas" exibe badge vermelho com "2"
- Ao abrir o painel, ambos aparecem sob "🔴 Crítico (2)"
- Dispensar um alerta reduz badge para "1"
- Dispensar todos: badge desaparece do botão
13. Requisitos Não-Funcionais Seção 13
🌐
13.5 Disponibilidade e Confiabilidade
- SLA da plataforma Supabase (Pro): 99,9% de uptime mensal (~43 minutos de downtime máximo/mês
- SLA do GitHub Pages: 99,9% conforme SLA da Akamai CDN
- Tolerância a falhas de API: CEP com fallback (BrasilAPI → ViaCEP); mapa sem tiles exibe mapa em branco mas mantém funcionalidade de dados
- Backup de dados: Supabase realiza backups automáticos diários com retenção de 7 dias (plano Pro)
- Recuperação de dados: restauração ponto-no-tempo disponível pelo painel Supabase
- Monitoramento: Supabase Dashboard fornece logs de API, erros de banco e consumo de Storage em tempo real
- Manutenção: deploys via GitHub Actions (git push) sem downtime — GitHub Pages atualiza em < 60 segundos
- Portal público: funciona offline parcialmente — dados inseridos em cache local enquanto sem conexão e sincronizados ao recuperar
4PLFourth-Party Logistics — operador logístico que gerencia outros operadores (3PLs) para o cliente final. A Vendemmia atua como 4PL.
LicenciadoOperador logístico parceiro que disponibiliza espaço de armazenagem sob os padrões e marca Vendemmia.
LeadCandidato a licenciado em processo de prospecção ou avaliação, ainda não homologado.
TokenSequência única de 32 caracteres hexadecimais que autentica o acesso de um candidato ao portal público de preenchimento.
TierClassificação de qualidade do licenciado: Platina (80–100 pts), Ouro (60–79), Prata (35–59), Bronze (0–34).
OTIFOn-Time In-Full — KPI que mede o percentual de pedidos entregues no prazo e completos.
Dock-to-StockTempo (em horas) entre a chegada de mercadoria na doca e sua disponibilidade para picking no estoque.
SLAService Level Agreement — prazo máximo acordado para execução de uma atividade ou etapa do processo.
Gap AnalysisAnálise visual de cobertura geográfica que identifica estados sem licenciados ativos (lacunas na rede).
m² disponívelCapacidade de armazenagem efetivamente disponível para novos clientes, calculado como área total × (1 − utilização%).
Board ReportRelatório executivo mensal em PDF gerado automaticamente com todos os KPIs da rede de licenciados.
ChoroplethMapa temático onde regiões geográficas são coloridas proporcionalmente a um valor quantitativo (ex.: m² por estado).
RLSRow Level Security — mecanismo do PostgreSQL/Supabase que restringe acesso a linhas específicas de uma tabela por políticas de segurança.
Plano de remediaçãoConjunto de ações corretivas documentadas quando um KPI cai abaixo do threshold ou o licenciado é classificado como Bronze.
Tabelas de Referência Anexo B
B.1 Tabelas do Banco de Dados (Supabase)
| Tabela | Propósito | Campos principais |
lic_leads | Dados completos de cada lead/licenciado | id, razao_social, status, etapa, form_token, form_status, lat, lng, fee_mensal, area_total_m2... |
lic_auditoria | Processo de homologação por lead | lead_id (UNIQUE), estagio_atual, checklists (JSONB), certificado_numero, certificado_validade... |
lic_performance | KPIs trimestrais por licenciado | lead_id, periodo, otif_pct, acuracidade_inventario, dock_to_stock_hrs, utilizacao_capacidade, nps_score, em_remediacao... |
lic_historico | Timeline de eventos por lead | lead_id, tipo, titulo, descricao, etapa_anterior, etapa_nova, autor, created_at |
lic_anexos | Metadados de arquivos uploadados | lead_id, tipo, nome_arquivo, url, storage_path, tamanho_bytes, criado_por |
B.2 Tipos de Evento no Histórico
| Tipo (banco) | Label exibido | Origem |
prospeccao_iniciada | Prospecção iniciada | Manual ou automático na criação |
etapa_kanban | Etapa atualizada | Automático via _licKbMoverEtapa() |
auditoria_avanco | Auditoria avançou | Automático via audAvancarEtapa() |
certificado_emitido | Certificado emitido | Automático via emitirCertificado() |
kpi_lancado | KPIs registrados | Automático via salvarLicKpi() |
formulario_preench | Formulário preenchido | Automático ao detectar form_status='concluido' |
link_gerado | Link compartilhado | Automático via licGerarLinkForm() |
reuniao | Reunião realizada | Manual pelo usuário |
contato | Contato realizado | Manual pelo usuário |
proposta_enviada | Proposta enviada | Manual pelo usuário |
nota_interna | Nota interna | Manual pelo usuário |
status_mudanca | Status alterado | Manual pelo usuário |
Histórico de Revisões Anexo C
| Versão | Data | Fase | Descrição | Autor |
| 1.0 | Maio 2026 | Fase 1 | Criação inicial: Visão Geral, Perfis de Usuário, Módulos do Sistema, RF-001 a RF-030 | Equipe Vendemmia / Claude Sonnet |
| 1.0 | Maio 2026 | Fase 2 | Adição: Regras de Negócio RN-001 a RN-032, Fluxos Operacionais, Telas do Sistema, Casos de Uso UC-001 a UC-005 | Equipe Vendemmia / Claude Sonnet |
| 1.0 | Maio 2026 | Fase 3 | Finalização: Validações, Relatórios, Notificações, Critérios de Aceite CA-001 a CA-014, Requisitos Não-Funcionais, Glossário | Equipe Vendemmia / Claude Sonnet |
✅ Especificação Funcional EF-LIC-2026-001 — Documento Completo (3 fases)
Fase 1 · Fase 2 · Fase 3 — Módulo de Licenciamento · Pipeline Vendemmia · Versão 1.0 · Maio 2026
APROVADO PARA PRODUÇÃO
PIPELINE by Vendemmia
Especificação Funcional EF-LIC-2026-001 · Versão 1.0 · Fase 3/3 — DOCUMENTO FINAL
Confidencial — Vendemmia Comércio Internacional Ltda.
pipelinevendemmia.com.br · Maio 2026