Pular para o conteúdo

Catálogo de Funcionalidades

Tudo que tem no Quotery, organizado por etapa. Do PDF do cliente ao pedido entregue.

Capturar — Transforme pedidos de clientes em cotações estruturadas

A IA lê documentos de clientes e cruza cada linha com seu catálogo de produtos. O que levava 20 minutos agora leva menos de 60 segundos.

Importação de Cotação por IA

Pipeline de IA em 3 chamadas

Vendas

Extração de estrutura, cruzamento de produtos e resumo — três chamadas sequenciais de IA em uma única transação atômica.

  • Chamada A: Extrai grupos, seções e itens de texto não estruturado usando saídas estruturadas de IA
  • Chamada B: Decisão paralela em lote de IA — até 6 workers concorrentes selecionando entre 15 candidatos
  • Chamada C: Banner de resumo com reconhecimento de idioma renderizado localmente por padrão, IA apenas quando ativada

Cruzamento determinístico por 4 códigos

Vendas

Combina códigos de fornecedor com SKU, import_code, internal_code e export_code antes de qualquer chamada de IA. Você só paga pelo que a IA realmente processa.

  • Correspondência exata sensível a maiúsculas nas quatro colunas de código de produto
  • Matches exatos pulam a decisão da IA totalmente — determinísticos e gratuitos
  • Classificação: exact_match (verde), ai_decision (azul), not_found (rosa)
  • Proteção contra alucinação: rejeita seleções do modelo fora da lista apresentada

Importação em múltiplos formatos

Vendas

Aceita PDF, XLSX, XLS, CSV ou texto colado — qualquer formato que seu cliente mandar.

  • Upload de arquivos até 20 MB
  • Texto colado de 10 a 100.000 caracteres
  • Sempre gera uma cotação em rascunho para revisão humana — nunca envia sozinho

Catálogo de Produtos

Quatro códigos de produto paralelos

Admin

SKU + import_code + internal_code + export_code — o motor de importação por IA cruza com todos os quatro.

  • SKU único dentro do tenant, validado na criação
  • Todas as quatro colunas de código indexadas para busca trigrama
  • Códigos alimentam o estágio de correspondência determinística da importação por IA

Fluxo de produto temporário

Admin

Vendedores criam produtos na hora. Cotações com produtos não aprovados são bloqueadas de envio até aprovação por admin.

  • Produtos temporários forçados para is_approved=false no backend
  • Cotações com produtos não aprovados bloqueadas para envio, fechamento e exportação PDF
  • Alternância de aprovação inline para admins e gerentes

Importação determinística de produtos

Admin

Importe catálogos de produtos do Excel com classificação e resolução linha por linha.

  • Classificação de linhas: novo, duplicado, SKU duplicado, unidade inválida, preço inválido, duplicado parcial
  • Controles de resolução em lote com filtragem por abas
  • Pré-visualizações persistem no servidor por 24 horas

Cotar — Ajuste, precifique e envie

Um editor completo com seções de arrastar e soltar, precificação reversa e rascunhos de follow-up por IA.

Editor e Ciclo de Vida da Cotação

Máquina de estados completa

Vendas

Rascunho → Enviada → Fechada → Parcialmente Entregue → Entregue, mais ramificações de cancelar e reabrir.

  • Rascunho e enviada são os estados editáveis — edições rejeitadas após fechamento com HTTP 409
  • Cancelar a partir de fechada libera todas as reservas de estoque
  • Reabrir de cancelada para rascunho ou enviada; reabrir de fechada libera reservas
  • Parcialmente entregue e entregue são terminais — deve usar notas de devolução

Numeração contínua Q-AAAA-NNNN

Vendas

Numeração sequencial por tenant e por ano alocada sob bloqueio pessimista.

  • SELECT ... FOR UPDATE na tabela QuoteNumberSequence
  • Garante ausência de lacunas e duplicatas dentro do tenant/ano
  • Alocada dentro da transação de criação

Editor completo com precificação reversa

Vendas

Seções de arrastar e soltar, atalhos de teclado e cálculo de desconto por valor total.

  • Reordenação por arrastar e soltar de linhas e cabeçalhos de seção
  • Digite um subtotal ou total alvo — desconto calculado reversamente com 6 casas decimais
  • Notas por linha, substituições de descrição e agrupamento por seção
  • Limites de desconto aplicados por tenant — admins e gerentes isentos

PDFs de cotação com marca do tenant

Vendas

PDF Carta com logo, cor de destaque, itens agrupados e rótulos localizados em 3 idiomas.

  • Logo do tenant + cor de destaque aplicados à faixa principal e cartão de totais
  • Linhas agrupadas por seção; linhas de importação não correspondidas excluídas
  • Rótulos, datas e formatação monetária localizados por idioma
  • Bloqueado enquanto qualquer linha referencia um produto temporário não aprovado

Rascunho de E-mail de Follow-up por IA

IA redige follow-ups — você envia

Vendas

E-mails de follow-up redigidos por LLM para cotações enviadas paradas há 3+ dias. Você revisa, edita e envia. A IA nunca envia sem você.

  • Disponível apenas em cotações no status enviada paradas há 3+ dias
  • PII minimizado: prompt contém apenas nome do cliente, 3 principais itens, total, data de validade
  • Pontuação de confiança: baixa para clientes novos, alta caso contrário
  • Detecção de alertas: rastreia promessas de desconto não autorizadas, menções de entrega gratuita
  • Controlado pela flag ai_followup_enabled do tenant

Fechar — Cliente aceita, estoque reserva

Portal do cliente tokenizado com assinatura eletrônica, mais porta de aprovação financeira opcional.

Portal do Cliente

Acesso anônimo por token

Cliente revisa, aceita ou solicita alterações — sem conta, sem senha, sem atrito.

  • Tokens Django assinados com expiração configurável (padrão 30 dias)
  • Revogação de token via soft-delete ou expiração
  • Consultas entre tenants retornam 404, não 403

Aceite eletrônico com SHA-256

Assinatura eletrônica por nome digitado com hash do nome, email, ID da cotação e timestamp.

  • Hash SHA-256 vincula os quatro campos canônicos juntos
  • Idempotente: aceite duplicado retorna linha existente com already_accepted=true
  • Aceite transiciona cotação para fechada, aciona reserva de estoque
  • Evento de auditoria registrado com metadados completos

Solicitações de alteração e thread de conversa

Cliente pode solicitar alterações inline. Conversa inteira — mensagens de vendas + solicitações do cliente — exibida em ordem.

  • Solicitação de alteração em texto livre cria uma linha QuoteChangeRequest
  • Vendedor notificado via in-app + e-mail
  • Painel de conversa renderizado estilo WhatsApp acima dos botões de ação

Download de PDF protegido por token

Mesmo PDF com marca que a exportação autenticada, autorizado exclusivamente pelo token do portal.

  • Registra evento de auditoria com actor=None, token_id, recipient_email, locale
  • Linhas de importação não correspondidas excluídas; produtos não aprovados bloqueiam exportação
  • Locale resolvido de cookie → Accept-Language → en-US

Aprovação Financeira

Porta de aprovação opcional por tenant

Financeiro

Pausa cotações aceitas em ready_for_billing até finanças confirmar pagamento. Estoque não reserva até pagar.

  • Controlado pela flag Tenant.requires_finance_approval (desligada por padrão)
  • Máquina de estados de pagamento: pending → paid / failed / cancelled
  • Transição paid executa a maquinaria padrão de fechamento (reservar estoque + rascunho de NF)
  • Reverter de paid permitido apenas quando nenhuma NF foi enviada

Notificações ao cliente e distribuição interna

Financeiro

Finanças notifica explicitamente o cliente; equipe interna notificada em cada transição.

  • Notificações ao cliente inserem linha append-only QuotePaymentNotification
  • Distribuição interna para proprietário de vendas, gerentes e admins em cada transição
  • Banner do portal do cliente orientado por notificações, não pelo status bruto de pagamento

Reserva de Estoque

Reserva automática no fechamento

Fechar uma cotação reserva estoque atomicamente. Sobre-reserva é permitida — faltas voltam como lista, não como erro.

  • Linhas RESERVATION StockMovement escritas por linha rastreável
  • Linhas StockItem bloqueadas com select_for_update em ordem determinística de produto
  • Sobre-reserva: fechamento nunca retorna 409 por estoque insuficiente
  • Array de faltas identifica produto, localização e quantidade disponível resultante

Entregar — Separar, embalar, enviar e devolver

Notas de entrega, app mobile para motorista, devoluções, recebimentos e um livro-razão completo de estoque.

Notas de Entrega

Ciclo de vida Rascunho → Enviada → Entregue

Armazém

Gerada automaticamente no fechamento da cotação. Criação manual a partir de cotações fechadas. Continuação para entregas parciais.

  • NF em rascunho gerada automaticamente cobre todas as linhas rastreáveis no fechamento
  • Local de armazém por linha — divida uma entrega entre vários armazéns
  • Lançamento escreve entradas Delivery no livro-razão e decrementa em estoque
  • NF de continuação criada automaticamente para quantidades não entregues após lançamento parcial

PDFs de entrega com código QR

Armazém

PDFs com marca incluindo localizações de corredor, subtotais por seção e códigos QR escaneáveis.

  • Código QR codifica o número da nota de entrega para escaneamento móvel
  • Corredor resolvido pela tripla (produto, localização, fornecedor consignante)
  • Blocos de assinatura para motorista e recebedor

App Mobile do Motorista

Superfície móvel dedicada em /delivery

Motorista

Motoristas veem apenas notas enviadas e entregues — nunca rascunhos. Escaneamento QR, captura de foto, confirmação em um toque.

  • Acesso restrito apenas a usuários do grupo Driver
  • Endpoint reforçado filtra todas as notas de entrega não enviadas
  • Até 3 fotos por entrega, 10 MB cada, armazenadas no banco de dados da aplicação
  • Confirmação final transiciona NF para Entregue, recalcula status da cotação pai
  • Notificações pós-entrega excluem o próprio motorista

Devoluções e Recebimentos

Notas de devolução vinculadas a entregas

Armazém

Rastreie o que volta com motivo e condição. Lançamento incrementa estoque sem afetar reservado.

  • Dois modos de criação: vinculado à entrega (linhas pré-preenchidas) ou geral (digitação)
  • Motivos de devolução: Danificado, Excesso, Recusado pelo cliente, Item errado, Outro
  • Condições: Revendável, Danificado, Inspecionar
  • Lançamento escreve entradas Return no livro-razão — status da cotação pai não afetado

Recebimentos de estoque com flag consignado

Armazém

Receba inventário de fornecedores. Flag consignado rastreia estoque de propriedade do fornecedor separadamente.

  • Alternância de estoque consignado cria itens de estoque vinculados ao fornecedor consignante
  • Lançamento escreve entradas Receipt; cancelamento escreve entradas Receipt reversal
  • Custo unitário capturado no recebimento — reservado para funcionalidades futuras de custeio
  • Criação rápida inline de fornecedor a partir do formulário de recebimento

Livro-Razão de Movimentos de Estoque

Livro-razão apenas para acréscimo

Armazém

7 tipos de movimento. Cada alteração no estoque disponível ou reservado registrada. Sem modificação, sem exclusão — mesmo para admins.

  • Tipos de movimento: Receipt, Receipt reversal, Reservation, Release, Delivery, Return, Adjustment
  • Cada linha referencia seu documento de origem (cotação, NF, ND, RE)
  • Filtrável por produto, localização, tipo de movimento e intervalo de datas
  • Exportável como PDF com marca

Central do Armazém

Painel operacional agregado em /warehouse

Armazém

Visão em tela única de todo o trabalho de fulfillment em andamento — entregas, devoluções, recebimentos — com contadores KPI e feed de atividades mesclado.

  • 3 cartões de contador KPI: contagens de rascunhos e lançados para entregas, devoluções, recebimentos
  • Feed de atividades mesclado intercalando os três tipos de documento por updated_at
  • Links laterais para visão geral de estoque, estoque consignado e livro-razão de movimentos
  • Apenas no cliente — não introduz novos endpoints ou mutações

Saber — Faça perguntas, obtenha insights

Perguntas e respostas com IA, resumos diários, dashboards, relatórios e notificações.

Pergunte à IA

Perguntas em linguagem natural em 3 idiomas

Vendas

Pergunte sobre cotações, clientes, estoque e operações em português, inglês ou espanhol. Receba respostas estruturadas com gráficos e tabelas.

  • Métricas: count_quotes, sum_revenue, count_clients, avg_cycle_time_days
  • Agrupamentos: client, user (vendedor), month, status
  • Ramificação determinística de estoque trata prompts de inventário sem chamada LLM
  • Escotilha de recusa: modelo recusa perguntas fora de escopo em vez de adivinhar
  • Escopo por usuário: usuários comerciais veem apenas seus próprios dados com um banner

Resumo Diário por IA

Cartões de ação personalizados todas as manhãs

Vendas

Resumo gerado por IA uma vez ao dia do que precisa da sua atenção. Consciente do cargo — cartões diferentes para vendas, gerentes e admins.

  • Gerado uma vez por usuário por dia — constraint única em (tenant, user, date)
  • Prompt consciente do cargo: comercial recebe CTAs pessoais, gerentes recebem CTAs da equipe
  • Tipos de cartão: follow_up, stale_draft, reorder_opportunity, recent_win, quote_risk e mais
  • Cartões estruturados com níveis de prioridade, tipo de ícone, texto de insight e botões CTA
  • Limitado a 8 cartões no máximo com validação e sanitização

Relatórios e Dashboards

5 painéis de dashboard

Gerente

Pipeline por status, distribuição de aging, principais clientes, principais vendedores e taxa de conversão — tudo em uma chamada de API.

  • Único GET /api/reports/dashboard/ retorna todos os 5 painéis
  • Parâmetro de janela: 30d, 90d ou ytd (padrão 90d)
  • Cache Redis por tenant por janela, rotacionado automaticamente na virada do dia UTC
  • Widget de cotações no mapa com busca de centroide de CEP no lado do cliente

7 modos de relatório de cotação

Gerente

Registro, aging, expirando, follow-up, ganhos-perdas, descontos e importações-IA — cada um com filtros estruturados e exportação PDF.

  • Filtros estruturados: tokens de status, UUIDs de proprietário, seletores de data, formatação monetária, percentuais de desconto
  • Busca em texto livre com debounce a partir de 3 caracteres
  • PDF exporta o conjunto de dados filtrado completo, não apenas a página atual

6 modos de relatório de estoque

Armazém

Atual, exceções, consignado, movimentos, velocidade de consumo e demanda prevista — com seções de metodologia analítica.

  • Velocidade de consumo: destaque de risco quando restam ≤30 dias de suprimento
  • Demanda prevista: destaque de déficit positivo, envelope de dados insuficientes abaixo de 30 cotações/ano
  • Filtros de entidade validados como UUIDs antes da avaliação do queryset

Exportações CSV em streaming

Gerente

Cotação única, dashboard e CSVs de uso de produtos — transmitidos linha por linha, nunca mantidos em memória.

  • Usa Django StreamingHttpResponse com gerador produzindo uma linha por vez
  • Memória constante independentemente do tamanho do conjunto de dados — seguro para exportações de 50.000+ linhas

Notificações

In-app + e-mail, com consciência de audiência

Cotação aceita, alteração solicitada, entrega concluída, estoque consignado movimentado, estoque disponível novamente — cada um com a audiência correta e opções por tenant.

  • Feed in-app com badge de não lidos, marcar como lido individualmente ou em lote
  • E-mail transacional com HTML + parte texto plano autoprojetada
  • Distribuição com consciência de audiência: supervisores, armazém, vendedor recebem CTAs diferentes
  • Detector de estoque disponível: reverifica todas as cotações abertas após qualquer aumento de estoque
  • Chave de deduplicação previne notificações repetidas para o mesmo evento

Fundação — Multi-tenancy, segurança e infraestrutura da plataforma

A base arquitetural que torna tudo acima possível.

Multi-Tenancy

Isolamento estrito de tenants

Cada consulta ao banco de dados carrega um filtro de tenant obrigatório. Consultas entre tenants retornam 404, não 403.

  • ID do tenant injetado da sessão autenticada — nunca do payload da requisição
  • Consultas entre tenants indistinguíveis de não encontrado para prevenir inferência
  • Configuração por tenant: marca, assentos, imposto, limites de desconto, opções de notificação, texto de documentos

Autenticação

OAuth Google Workspace + Microsoft 365

Login com verificação de domínio e provisionamento automático de usuário. Domínios de consumidor rejeitados explicitamente.

  • Apenas e-mails verificados de domínios de tenant autorizados são permitidos
  • Primeiro login: provisiona automaticamente usuário com foto de perfil do provedor
  • Logins subsequentes: reutiliza registro existente, atualiza apenas foto de perfil

E-mail/senha com ingresso por mesmo domínio

Autenticação por senha para tenants sem SSO. Cadastros no mesmo domínio ingressam no tenant existente automaticamente.

  • Cadastro com domínio não reivindicado cria novo tenant + primeiro admin
  • Cadastro com domínio reivindicado não-SSO ingressa como vendedor (capacidade de assentos aplicada)
  • Tenants com SSO obrigatório rejeitam login por senha com erro claro

Convites de equipe com controle de assentos

Admins e gerentes convidam por e-mail. Tokens expiram em 7 dias. Capacidade de assentos verificada no convite, aceite e reativação.

  • Convidado recebe link único, define senha, atribuído ao cargo escolhido pelo convidador
  • Convites pendentes exibidos junto a usuários ativos com controles de reenviar/revogar
  • Limite de sessões concorrentes: 2 sessões ativas por usuário (configurável por assinante)

Equipe e Cargos

48 códigos de permissão, 5 grupos padrão

Admin, Gerente, Vendedor, Operador de Armazém e Motorista — cada um pré-configurado com as permissões certas para seu trabalho.

  • Grupos padrão são somente leitura e aplicados no backend
  • Grupos personalizados compostos livremente do catálogo de 48 códigos via grade de checkboxes
  • Permissões organizadas por área: usuários, clientes, cotações, inventário, produtos, relatórios, fulfillment, motorista, fornecedores, auditoria, importações IA

Trilha de Auditoria

Auditoria apenas para acréscimo de cada ação material

Linhas de auditoria escritas na mesma transação que a ação. Exclusão de entidades auditadas anula FKs mas preserva o payload do evento.

  • Busca em texto livre nos metadados com debounce de 300ms
  • Filtragem multi-seleção por ação, tipo de alvo e ator
  • Metadados expansíveis por linha com controle de Cópia
  • Sem interface de admin para modificação ou exclusão de linhas de auditoria

Internacionalização

3 idiomas, cobertura completa

en-US, pt-BR e es-US em toda a UI, e-mails transacionais e documentos PDF. Terminologia consistente em todas as superfícies.

  • Cada string visível, toast, erro e rótulo traduzido
  • E-mails transacionais com botões CTA localizados
  • Documentos PDF: rótulos, datas e formatação monetária localizados
  • Cascata de idioma: cookie → navegador Accept-Language → fallback en-US
  • Usuários autenticados: preferência salva sobrepõe cookie e navegador

Cobrança

Gestão de assinaturas Stripe

Planos, assentos e intervalos de cobrança gerenciados via Stripe. BD é fonte da verdade — Stripe reconciliado para corresponder.

  • Um Stripe Product por Plano, um ou dois Stripe Prices por PlanPrice
  • Stripe Prices imutáveis: alterar valor cria novo Price, arquiva o antigo
  • Livro-razão append-only PlanPriceHistory de IDs de Stripe Price arquivados
  • Aplicação de alterações no fim do ciclo: downgrades, reduções de assentos, trocas de intervalo aplicadas no fim do período

Segurança e Performance

Controles de defesa em profundidade

Disciplina de cache, throttling, indexação de banco de dados, disciplina de concorrência e aplicação de orçamento de consultas.

  • Cache: cada chave com namespace de tenant, invalidação na mesma transação atômica, falha do Redis não é fatal
  • Throttling: endpoints públicos com limite de taxa por IP, endpoint Ask 20 req/min por usuário
  • Índices GIN trigrama em todos os campos de texto pesquisáveis; índices compostos em combinações comuns de filtros
  • Bloqueios pessimistas adquiridos em ordem determinística para concorrência sem deadlocks
  • Suite de testes de regressão aplica orçamento de consultas por rota para prevenir regressões N+1