Trip Sampa
DOC → Handoff
Trip Sampa — DOC
🚌

Trip Sampa

Sistema de gestão operacional. Controla vendas, vendedores, comissões, passageiros e listas de embarque — integrado ao WooCommerce para automação completa do fluxo comercial.

Status: Produção. O sistema está funcional e rodando com dados reais de Fevereiro/2026. Todos os módulos descritos nesta documentação estão operacionais.

🔄

Última atualização: 24/02/2026. Integração WooCommerce expandida com suporte a variações de produto, extração automática de passageiros, listas operacionais com acompanhantes e melhorias de UX. Ver detalhes →

O que o sistema resolve

A Trip Sampa opera excursões rodoviárias com uma rede de vendedores por indicação. Antes do sistema, o rastreio de quem vendeu o quê, o cálculo de comissões e a geração de listas operacionais era manual. Isso gerava erros, conflitos e retrabalho constante.

O Trip Sampa automatiza todo esse fluxo:

🔗

Atribuição automática

Cada vendedor tem um link único. Vendas pelo link são atribuídas automaticamente a ele.

💰

Comissão calculada

O percentual é configurável por vendedor. O sistema calcula sobre vendas confirmadas em tempo real.

📋

Listas operacionais

Exportação em CSV das listas de guia e ônibus com todos os dados de embarque.

🛒

WooCommerce sync

Pedidos e produtos sincronizados via webhooks. Zero entrada manual de dados.

Quem usa o sistema

PerfilAcessoO que faz
Admin Acesso total Gerencia passageiros, vendedores, pacotes, listas operacionais e métricas. Cria contas de vendedores.
Vendedor Portal restrito Visualiza seus leads, vendas, comissão acumulada e gera links de venda personalizados.

Stack técnico rápido

React 18 Vite Tailwind CSS Supabase (Auth + DB) Edge Functions (Deno) WooCommerce API PostgreSQL Row Level Security

Arquitetado, desenvolvido e entregue por Elastre

Arquitetura & Stack

Visão técnica de como os componentes se conectam — do frontend React até o WooCommerce.

Fluxo principal

Site
WooCommerce
Webhook
Edge Function
Banco
Supabase DB
Interface
React App

Componentes

CamadaTecnologiaDetalhe
FrontendReact 18 + ViteSPA com componentes funcionais, hooks, Context API para Auth e Toast. Tailwind CSS para estilos.
AuthSupabase AuthEmail/password. Roles definidos na tabela profiles. Sessions gerenciadas via onAuthStateChange.
DatabasePostgreSQL (Supabase)7 tabelas principais + views otimizadas. RLS ativado em todas as tabelas.
Edge FunctionsDeno (Supabase)2 funções: woocommerce-order e woocommerce-product. Recebem webhooks e escrevem no banco.
E-commerceWooCommerce (WordPress)Vende os pacotes. Envia webhooks em pedido criado/atualizado e produto criado/atualizado.
ReferralPHP (functions.php)Captura ?ref= da URL, armazena em cookie/session, injeta no pedido como meta_data.

Estrutura do projeto

tripsampa/
├── src/
│   ├── App.jsx            ← Aplicação completa (componentes + lógica)
│   ├── lib/
│   │   └── supabase.js    ← Cliente Supabase (env vars)
│   ├── index.css           ← Tailwind directives
│   └── main.jsx            ← Entry point
├── supabase/
│   └── migrations/
│       └── 001_initial_schema.sql  ← Schema completo do banco
├── docs/
│   └── STEP_BY_STEP_INTEGRATION.md ← Guia de webhooks
├── .env                    ← Variáveis de ambiente
├── resync-orders.mjs       ← Script de re-sync de pedidos
├── vite.config.js
├── tailwind.config.js
└── package.json

Single-file architecture: Todo o frontend está em App.jsx (~2300 linhas). Isso é intencional — facilita deploy e manutenção sem configuração complexa de roteamento.

🔐

Autenticação & Roles

Como o sistema gerencia login, sessões, criação de contas e permissões baseadas em roles.

Fluxo de login

O sistema abre por padrão na tela de login. Ambos admins e vendedores acessam pelo mesmo ponto de entrada com email + senha.

Entrada
LoginScreen
Supabase
signInWithPassword
Profile
Role check
UI
Admin / Vendedor

Primeiro acesso (Admin)

Na tela de login existe o link "Primeira vez? Criar conta de administrador". Ao clicar:

  1. Chave de convite é solicitada (ex: TRIPSAMPA-2026-ALPHA)
  2. Onboarding wizard de 5 etapas guia a criação da conta admin
  3. Após conclusão, o admin é logado automaticamente

A chave de convite é sempre exigida ao clicar em "Criar conta". Os flags de localStorage são limpos para garantir que o fluxo completo seja refeito.

Conta de vendedor

Vendedores não criam conta sozinhos. O admin cria a conta na aba "Vendedores" e recebe credenciais temporárias (email + senha gerada). O vendedor faz login normalmente e vê seu portal restrito.

Gerenciamento de sessão

A sessão usa o Supabase Auth. O AuthProvider escuta onAuthStateChange para reagir a eventos de login/logout. Detalhe técnico importante:

🔑

saveVendedor: Quando o admin cria um vendedor, signUp() troca a sessão para o novo usuário. O sistema salva a sessão admin antes, e restaura após a criação usando um flag _skipAuthEvents para evitar que o listener de auth reaja à troca temporária.

Row Level Security (RLS)

Todas as 7 tabelas possuem RLS ativado. Políticas resumidas:

TabelaAdminVendedor
profilesLê/edita todosLê/edita próprio
leadsCRUD completoLê próprios leads
packagesCRUD completoLê ativos
parcelasCRUD completoSegue acesso do lead
configuracoesCRUD completoSem acesso
📊

Dashboard & Métricas

O painel de visão geral mostra os KPIs mais importantes em tempo real.

Filtros de período

O dashboard possui filtros de Semana, Mês e Tudo. Permitem visualizar KPIs e passageiros recentes apenas do período selecionado. Ideal para acompanhamento semanal/mensal de resultados.

Métricas do admin

Faturamento

Soma de valor_pago de todos os leads com status pago no período selecionado.

Comissões

Para cada lead pago com vendedor, calcula: valor_pago × (comissao_percentual / 100). Dinâmico por vendedor.

Novos Leads

Contagem de leads com status novo no período.

Vendas

Contagem de leads com status pago no período.

Comissão dinâmica: O sistema busca o comissao_percentual individual de cada vendedor (padrão 5%). Não usa valor fixo — se um vendedor tem 7%, o cálculo reflete isso.

Tabela de passageiros recentes

Abaixo dos KPIs, exibe os últimos 5 passageiros (filtrados pelo período selecionado) com nome, pacote, status e valor. Serve como snapshot rápido da atividade.

👥

Passageiros

Gestão completa de passageiros/leads com CRUD, busca, filtro e responsive design.

Funcionalidades

Novo: Visualização rápida. Clique em qualquer linha da tabela para abrir um painel com todos os detalhes do passageiro (comprador, pacote, vendedor, status, valores, documentos, acompanhantes e pedido WooCommerce). Botão "Editar" dentro do painel permite alterações.

Campos do passageiro

CampoTipoObservação
Nome *textoObrigatório
TelefonetextoFormatado como (XX) XXXXX-XXXX
EmailemailOpcional
CPFtextoPara listas de embarque
RGtextoPara lista do ônibus
Órgão Emissor (RG)textoEx: SSP/SP — exibido na lista do ônibus
PacoteselectVinculado a packages
Vendedorselect"Orgânico" se sem vendedor
Statusenumnovo / pendente / pago / cancelado
Valor Total / PagodecimalValores financeiros
PoltronainteiroNúmero do assento
Local de EmbarquetextoEx: Terminal Tietê, Metrô Barra Funda
HospedagemtextoHotel, quarto — quando a viagem inclui hospedagem
PasseiostextoPasseios inclusos — quando a viagem inclui passeios
ObservaçõestextareaNotas livres

Passageiros adicionais (acompanhantes)

Quando uma compra inclui mais de uma pessoa, o admin pode adicionar acompanhantes ao passageiro principal:

A maioria dos passageiros chega automaticamente via WooCommerce. O CRUD manual existe para ajustes, vendas por WhatsApp ou cadastros presenciais. Campos como local de embarque, hospedagem e passeios são preenchidos manualmente pelo admin conforme a necessidade de cada viagem.

🤝

Vendedores & Comissões

Cadastro de vendedores com criação automática de conta, link de referência e cálculo de comissão individual.

Criando um vendedor

O fluxo completo de criação acontece dentro do painel admin:

  1. Admin clica em "+ Novo" na aba Vendedores
  2. Preenche nome, email, telefone, código de referência e % de comissão
  3. O sistema cria uma conta Supabase Auth com senha temporária gerada automaticamente
  4. Um modal exibe as credenciais (email + senha) para o admin copiar e enviar ao vendedor
  5. O vendedor usa essas credenciais para fazer login e acessar seu portal

Card do vendedor

Cada vendedor exibe em seu card:

Cálculo de comissão

comissão = leads.filter(status === 'pago' && vendedor_id)
    .reduce((sum, lead) => {
        const pct = vendedor.comissao_percentual / 100;
        return sum + (lead.valor_pago * pct);
    }, 0);

O percentual é individual por vendedor (padrão 5%). Pode ser alterado a qualquer momento editando o vendedor. A mudança reflete imediatamente no dashboard.

📦

Pacotes & Operacional

Pacotes de viagem sincronizados do WooCommerce e listas de embarque exportáveis.

Pacotes

A tela de pacotes é somente leitura. Os pacotes são criados e gerenciados no WooCommerce e sincronizados automaticamente via webhook. Cada card mostra:

Filtro de mês nos pacotes

A tela de pacotes possui filtros: Esta semana, meses específicos (Fev, Mar, Abr...) e Todos. Também há uma busca por destino ou nome e um contador 'Mostrando X de Y pacotes'. Pacotes são ordenados por data de viagem (mais próximos primeiro).

Operacional — Listas de embarque

Na aba Operacional, o admin seleciona um pacote e acessa duas listas:

Lista Guia

Nome, telefone, documentos (CPF/RG), observações, passeios e hospedagem de cada passageiro. Pensada para o guia no dia da viagem.

Lista Ônibus

Nome, CPF, RG, órgão emissor e número da poltrona. Pensada para a empresa de transporte.

Ambas podem ser exportadas em CSV com codificação UTF-8 (com BOM para compatibilidade com Excel). O CSV inclui todos os campos da lista correspondente.

Acompanhantes incluídos: As listas operacionais agora incluem acompanhantes como sub-linhas abaixo de cada passageiro titular, tanto na visualização em tabela quanto na exportação CSV. A contagem total de passageiros inclui acompanhantes.

As listas mostram apenas passageiros com status pago. Passageiros pendentes ou cancelados não aparecem nas listas operacionais.

Portal do Vendedor

Interface dedicada para vendedores acompanharem resultados e gerarem links de venda.

Primeiro acesso

Na primeira vez que um vendedor faz login, um tutorial interativo de 4 etapas explica:

  1. Boas-vindas personalizadas com o nome do vendedor
  2. Como funcionam os links de venda
  3. Como acompanhar vendas e comissão
  4. Dicas finais (alterar senha, usar links corretos, etc.)

O tutorial pode ser pulado e não aparece novamente após ser concluído (flag em localStorage).

Telas do vendedor

Dashboard pessoal com 4 KPIs: total de leads, vendas confirmadas, valor total vendido e comissão acumulada. A comissão usa o percentual individual do vendedor. Possui filtros de período (Semana / Mês / Tudo) para o vendedor acompanhar seus resultados por período.

Exibe um link geral (tripsampaviagens.com.br?ref=codigo) e links por pacote (tripsampaviagens.com.br/produto/slug?ref=codigo). Cada link tem botão de copiar com feedback visual.

Lista de todos os clientes que compraram via link do vendedor. Mostra nome, telefone, pacote, status e valor. Tabela no desktop, cards no mobile. Somente leitura.

Formulário para o vendedor trocar a senha temporária. Requer mínimo de 6 caracteres e confirmação.

🛒

WooCommerce & Webhooks

Como a loja WooCommerce se conecta ao sistema via Edge Functions e webhooks.

Arquitetura da integração

Cliente compra
WooCommerce
Webhook POST
JSON do pedido
Edge Function
woocommerce-order
Insere
leads table

Edge Functions

Recebe o JSON completo do pedido WooCommerce e:

1. Extrai dados do cliente (billing: nome, email, telefone, CPF)

2. Busca ref nos meta_data do pedido

3. Se encontra ref, busca o vendedor correspondente na tabela profiles

4. Busca o pacote correspondente via product_id ou sku

5. Cria o lead com status pago (se completed) ou pendente

6. Define origem como ref:codigo ou site

Recebe dados de produto e faz upsert na tabela packages:

→ Mapeia product.namenome, product.pricepreco

→ Usa woocommerce_id como chave de conflito para atualizar produtos existentes

→ Suporta meta_data customizado para capacidade_onibus e data_viagem

Captura de referral (?ref=)

No WordPress, um snippet em functions.php captura o parâmetro ?ref= da URL:

  1. Armazena em WooCommerce session e cookie de 30 dias
  2. No checkout, injeta como order meta_data (chaves ref e _ref)
  3. A Edge Function lê esse meta_data para atribuir ao vendedor

Webhooks necessários no WooCommerce

NomeEventoURL
Novo PedidoOrder created.../functions/v1/woocommerce-order
Pedido AtualizadoOrder updated.../functions/v1/woocommerce-order
Produto CriadoProduct created.../functions/v1/woocommerce-product
Produto AtualizadoProduct updated.../functions/v1/woocommerce-product

Script de re-sync

O arquivo resync-orders.mjs permite importar pedidos em lote (ex: todos de Fevereiro). Ele busca pedidos da API WooCommerce e envia cada um para a Edge Function.

node resync-orders.mjs

As Edge Functions agora fazem upsert — buscam leads existentes por woocommerce_order_id antes de inserir. Rodar o resync múltiplas vezes é seguro e não cria duplicatas.

🗄

Banco de Dados

Schema PostgreSQL completo com 7 tabelas, views otimizadas, triggers e RLS.

Tabelas principais

profiles
id (PK, FK→auth.users) email nome telefone role (admin|vendedor|guia) referral_code (UNIQUE) comissao_percentual ativo
leads
id (PK) nome email telefone cpf / rg orgao_emissor_rg novo package_id (FK) vendedor_id (FK) status woocommerce_order_id valor_total / valor_pago poltrona origem local_embarque novo hospedagem novo passeios novo quantidade v2
packages
id (PK) woocommerce_id (UNIQUE) nome destino data_viagem preco capacidade_onibus status slug (UNIQUE) woocommerce_parent_id v2
parcelas
id (PK) lead_id (FK) numero valor data_vencimento status
acompanhantes
id (PK) lead_id (FK) nome cpf rg telefone novo data_nascimento v2
configuracoes / notificacoes
Tabelas auxiliares para settings e WhatsApp

Views

ViewUso
v_vendas_detalhadasJoins leads + packages + profiles com cálculo de comissão
v_metricas_vendedorAgrupado por vendedor: total leads, vendas, comissão
v_lista_guiaLista de embarque para guia (passageiros pagos)
v_lista_onibusLista para empresa de transporte (CPF, RG, poltrona)

Triggers

📖

Passo a Passo

Guia prático de como operar o sistema no dia a dia — para admins e vendedores.

Para o Administrador

1. Acesse a aba Vendedores no menu lateral

2. Clique no botão "+ Novo"

3. Preencha: nome, email, telefone, código de referência e % de comissão

4. Clique em "Salvar"

5. Um modal exibirá o email e a senha temporária

6. Clique em "Copiar credenciais" e envie ao vendedor via WhatsApp

A maioria dos passageiros chega automaticamente via WooCommerce. Para ajustes manuais:

Criar: Clique "+ Novo", preencha os dados e salve

Editar: Clique no ícone de lápis ao lado do passageiro

Mudar status: Edite e altere o dropdown de status (útil para marcar pagamentos)

Excluir: Clique no ícone de lixeira. Confirmação será solicitada.

1. Vá na aba Operacional

2. Selecione o pacote desejado no dropdown

3. Alterne entre "Lista Guia" e "Lista Ônibus"

4. Clique em "Exportar CSV"

O arquivo será baixado automaticamente e pode ser aberto no Excel.

O Dashboard (Visão Geral) mostra faturamento total, comissões totais, novos leads e vendas.

Para ver comissão individual, vá na aba Vendedores — cada card mostra a comissão acumulada.

Para alterar o percentual de comissão, edite o vendedor e ajuste o campo "Comissão (%)".

Para o Vendedor

1. Acesse o sistema com o email e senha temporária que o admin enviou

2. Um tutorial interativo de 4 etapas irá aparecer — siga ou pule

3. Vá na aba "Alterar Senha" e defina uma senha pessoal

1. Vá na aba "Gerar Links"

2. Copie o link geral ou o link de um pacote específico

3. Compartilhe com seus clientes via WhatsApp, Instagram, etc.

4. Quando alguém compra pelo seu link, a venda aparece automaticamente em "Meus Leads"

"Meu Painel" mostra seus KPIs em tempo real: leads, vendas, valor vendido e comissão acumulada.

"Meus Leads" lista todos os clientes que compraram pelo seu link, com status atualizado.

Boas Práticas

Regras, convenções e dicas importantes para operar o sistema corretamente no dia a dia.

"Email" é uma credencial — não um email real

O campo "Email" no sistema é uma credencial de acesso, não necessariamente um endereço de email funcional. Ele serve como identificador único para login. Não é necessário que seja um email real que recebe mensagens.

O sistema não envia emails (nem confirmação, nem recuperação de senha). O "email" é usado exclusivamente como login. Por isso, siga a convenção abaixo para manter tudo organizado.

Convenção obrigatória de credenciais

👤

Conta de Admin

Use o prefixo admin@
Ex: admin@tripsampa

🤝

Conta de Vendedor

Use o prefixo vendedor@
Ex: vendedor@joao, vendedor@maria

Isso é mais que uma sugestão — é a forma recomendada de uso. Seguir essa convenção facilita a identificação de quem é quem no banco, evita confusão e mantém o sistema organizado. O que define o nível de acesso é a role (admin/vendedor), não o "email".

Dados em produção

O sistema está populado com dados reais a partir de 1º de Fevereiro de 2026. Todos os pedidos do WooCommerce desde essa data foram importados via webhook e script de re-sync.

Conforme o tempo passa e mais dados acumulam, os filtros de período (semana, mês, tudo) se tornam essenciais. O sistema possui filtros de tempo no Dashboard e nas páginas de dados para consultar vendas da semana, do mês ou de todo o período.

Criação de contas

  1. Sempre crie a conta de admin primeiro, usando a chave de convite
  2. Contas de vendedores são criadas pelo admin na aba Vendedores
  3. O vendedor nunca cria a própria conta — ele recebe credenciais do admin
  4. A senha temporária deve ser alterada no primeiro acesso

Operacional do dia a dia

Se um pedido foi cancelado, mude o status para "Cancelado" em vez de excluir. Isso mantém o histórico e evita inconsistências com o WooCommerce.

O script resync-orders.mjs pode criar duplicatas se executado mais de uma vez. Antes de rodar, verifique se os dados já existem com a query:

SELECT woocommerce_order_id, COUNT(*) FROM leads GROUP BY woocommerce_order_id HAVING COUNT(*) > 1;

Defina o percentual de comissão no momento da criação do vendedor. Se alterar depois, o cálculo será retroativo (aplica o novo % sobre todas as vendas pagas). Padrão: 5%.

As listas de embarque (guia e ônibus) mostram apenas passageiros com status "Pago". Exporte o mais perto possível da viagem para ter dados atualizados. Recomendação: na véspera.

Após a compra, o admin pode editar qualquer passageiro: trocar poltrona, alterar local de embarque, atualizar documentos, adicionar acompanhantes, etc. Basta clicar no ícone de lápis na lista de passageiros.

Sobre os filtros de período

O sistema oferece filtros de semana, mês e todos nas seguintes telas:

TelaFiltros disponíveis
Dashboard (Admin)Esta semana / Este mês / Tudo
Meu Painel (Vendedor)Esta semana / Este mês / Tudo
PacotesEsta semana / Meses (Fev, Mar, Abr...) / Busca por nome / Todos
OperacionalBusca por pacote com agrupamento por mês
PassageirosBusca + filtro por status

Configuração & Deploy

Como configurar o ambiente de desenvolvimento e colocar o sistema em produção.

Variáveis de ambiente

Crie um arquivo .env na raiz do projeto:

VITE_SUPABASE_URL=https://SEU-PROJETO.supabase.co
VITE_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIs...
🔑

Nunca commite o .env em repositórios públicos. A anon key é pública (segura com RLS), mas o service_role_key das Edge Functions é secreto.

Rodando localmente

# Instalar dependências
npm install

# Iniciar dev server
npm run dev

# Acessar em http://localhost:5173

Deploy em produção

# Build para produção
npm run build

# Output em dist/ — serve com qualquer host estático
# (Vercel, Netlify, Cloudflare Pages, etc.)

Chaves de convite válidas

Para criar contas de admin, use uma destas chaves:

TRIPSAMPA-2026-TEST
TRIPSAMPA-2026-ALPHA
TRIPSAMPA-2026-BETA
TRIPSAMPA-2026-GAMMA

Cada chave só pode ser usada uma vez (controle via localStorage).

Checklist de deploy

Documentação técnica do projeto Trip Sampa.
Arquitetado, desenvolvido e entregue por Elastre — Fevereiro 2026.

🔄

Atualização v2

Resumo de todas as melhorias, correções e novas funcionalidades implementadas em 24 de fevereiro de 2026.

Todas as alterações estão em produção. Edge functions atualizadas, banco de dados migrado e dados re-sincronizados com 231 pedidos processados.

Novas funcionalidades

📅

Variações de produto

Cada data de viagem agora gera um pacote separado. "Ilhabela" com 11 datas = 11 pacotes individuais com vendas separadas.

👥

Extração de acompanhantes

O campo todos_passageiros_adicionais do WooCommerce é parseado automaticamente. Cada passageiro vira um registro na tabela acompanhantes.

📍

Dados do checkout

Local de embarque, hospedagem e passeios adicionais são extraídos automaticamente dos meta dados do pedido.

🔢

Quantidade de tickets

O sistema agora rastreia quantos tickets foram comprados por pedido. Valor total exibido corretamente com indicador (x2), (x3).

Melhorias de UX

Correções

ProblemaCausaCorreção
Datas mostravam 1 dia antes JavaScript new Date() convertia para UTC, causando shift de -1 dia no fuso de São Paulo (UTC-3) Datas agora são parseadas como string (split por "-") sem conversão de timezone
Apenas 1 acompanhante capturado O parser esperava "Passageiro 1:" (com dois pontos), mas o WooCommerce envia "Passageiro 1" (sem dois pontos, com quebra de linha) Regex atualizada para aceitar ambos os formatos: Passageiro\s*\d+\s*:?
Valor mostrava preço unitário Edge function dividia item.total por item.quantity Agora armazena o valor total do line item. Campo quantidade adicionado para rastreio
Pacotes duplicados por variação Sistema usava product_id (produto pai) para todas as variações, agrupando datas diferentes num único pacote Agora usa variation_id como identificador. Campo woocommerce_parent_id rastreia o produto pai

Alterações no banco de dados

Migrations 004 e 005 aplicadas:

TabelaAlteração
leadsAdicionados: local_embarque, hospedagem, passeios, orgao_emissor_rg, quantidade
packagesAdicionado: woocommerce_parent_id (INTEGER). Unique index parcial recriado no woocommerce_id
acompanhantesAdicionado: telefone (TEXT)
leadstelefone e data_viagem (packages) agora aceitam NULL

Edge functions atualizadas

Ping handling: Responde "pong" para pings de verificação do WooCommerce (body não-JSON)

Ref tracking: Busca ref nos meta_data → lookup em profiles → seta vendedor_id e origem = ref:{code}

Package matching: 4 níveis de prioridade — variation_id → product_id pai → nome → auto-criar

Extração de dados: Local de embarque, passeios, hospedagem extraídos dos meta dados do item e do pedido

Acompanhantes: Parseia todos_passageiros_adicionais com regex que suporta formato com e sem dois pontos. Cria registros na tabela acompanhantes

Quantidade: Armazena item.quantity como quantidade. Valor total não é mais dividido por quantidade

Deduplicação: Busca leads existentes por woocommerce_order_id e faz update em vez de criar duplicata

Variações: Para produtos variáveis, cria um pacote POR variação (cada data = pacote separado)

Naming: Nome do pacote inclui a data: "Angra dos Reis – RJ | Bate e Volta – 14/02"

IDs: woocommerce_id = variation ID, woocommerce_parent_id = product ID pai

Data da viagem: Extraída automaticamente dos atributos da variação (ex: "14/02" → 2026-02-14)

Ping handling: Responde "pong" para verificações do WooCommerce

Resync

O script resync-all.mjs substitui o antigo resync-orders.mjs. Ele executa dois passos:

  1. Sincroniza produtos: Busca todos os produtos do WooCommerce com suas variações e envia para a edge function woocommerce-product
  2. Sincroniza pedidos: Busca todos os pedidos de 2026 e envia para a edge function woocommerce-order

Seguro para re-execução. As edge functions agora fazem upsert (busca existente antes de inserir). Rodar o resync múltiplas vezes não cria duplicatas.

Recomendações para o cliente

Durante os testes de integração, identificamos oportunidades de melhoria no checkout do WooCommerce que impactam a qualidade dos dados capturados pelo sistema:

Importante: O sistema captura fielmente os dados enviados pelo WooCommerce. As recomendações abaixo visam melhorar a qualidade dos dados na origem — o checkout do site.

Problema: O checkout atual permite comprar 3 tickets e preencher dados de apenas 1 passageiro. Não há validação forçando o preenchimento de todos.

Impacto: Passageiros sem dados registrados não aparecem nas listas operacionais. O sistema sinaliza com um alerta, mas o admin precisa contactar o cliente manualmente.

Recomendação: Configurar o checkout para exigir que o número de passageiros preenchidos seja igual à quantidade de tickets comprados antes de permitir a finalização da compra.

Problema: O checkout tem dois momentos: "Dados pessoais" (dados do comprador/pagamento) e "Passageiros Adicionais" (dados de quem viaja). Não fica claro para o cliente se ele deve se incluir como passageiro.

Impacto: Alguns clientes se incluem (gerando dados duplicados), outros não (gerando dados faltantes). Não há padrão consistente.

Recomendação: Reestruturar o checkout em etapas claras: (1) "Dados de pagamento" — quem está pagando; (2) "Dados dos viajantes" — com instrução explícita: "Preencha os dados de TODAS as pessoas que vão viajar, incluindo você se for o caso". Idealmente com campos numerados pela quantidade de tickets.

Problema: Clientes marcam "Não viaja com criança" mas informam data de nascimento de menores nas observações ou nos dados de passageiros adicionais.

Recomendação: Validar automaticamente pela data de nascimento informada — se algum passageiro tem menos de 12 anos, marcar automaticamente como viagem com criança.

Implementar essas melhorias no checkout resultaria em:

Dados completos em 100% dos pedidos — sem necessidade de contato manual com clientes

Listas operacionais precisas — todos os passageiros com documentos, telefone e local de embarque

Menos retrabalho — admin não precisa verificar e completar dados manualmente

Maior segurança — documentação completa de todos os viajantes antes da viagem

Melhor experiência do cliente — checkout guiado e intuitivo reduz erros e dúvidas

Limitações conhecidas

Atualização implementada em 24 de fevereiro de 2026.
Por Elastre.