Specification Pack v1
A primeira implementação será guiada por contratos explícitos, não por decisões improvisadas durante a geração de código.
Produto inicial
O primeiro produto completo atende empresas baseadas em agendamento e combina:
- Login com Google ou email.
- Onboarding guiado e retomável.
- Uma organização tenant para cada loja.
- Conexão antecipada do WhatsApp.
- Orquena Inbox.
- Serviços, profissionais, horários e appointments.
- Google Calendar opcional.
- IA desligada, assistente ou automática.
- Handoff humano na mesma conversa.
- Dashboard composto pelas capacidades ativas.
O cliente externo nunca precisa de conta no painel: ele utiliza o próprio WhatsApp para falar com o número comercial da organização.
Clínicas podem reutilizar o motor de agenda no futuro, mas prontuários, convênios e dados médicos ficam fora da primeira versão.
Primeiro acesso e onboarding
No primeiro login, a Orquena cria:
A organização começa em SETUP_REQUIRED.
O progresso é calculado no backend a partir de resultados concluídos:
- Dados do negócio.
- WhatsApp conectado.
- Serviços.
- Profissionais.
- Horários e regras simples.
- Decisão sobre Google Calendar.
- Escolha e simulação da IA.
O WhatsApp é conectado cedo. A importação limitada de contatos e conversas recentes continua em segundo plano enquanto a pessoa configura o negócio.
Escolher IA desligada e pular o Google Calendar são decisões explícitas válidas.
Autenticação Google
O login solicita somente identidade básica:
Google Calendar exige uma autorização separada e contextual.
Entrar com Google nunca concede automaticamente acesso a Calendar, Gmail, Drive ou Contacts.
Tenancy
Cada organização é:
- Tenant.
- Fronteira de segurança.
- Unidade futura de cobrança.
- Proprietária de contatos, WhatsApp, catálogo, agenda, agentes e plugins.
OrganizationGroup serve apenas para navegação e relatórios explicitamente autorizados.
Orquena Inbox
A Inbox é a fonte oficial de conversas e mensagens normalizadas.
O MVP importa contatos, chats e um histórico recente limitado. Depois da conexão, todas as novas mensagens são persistidas antes de IA ou automação.
A tela permite atendimento humano mesmo sem IA e continua acessível quando o provider está desconectado.
Modos da IA
Toda nova Inbox começa em OFF.
O modo efetivo é:
Mudanças de default não apagam overrides silenciosamente.
Controle da conversa
Modo configurado e controle operacional são separados.
Um chat configurado como AUTOPILOT pode permanecer em HUMAN_ACTIVE, impedindo respostas automáticas até retorno explícito ou por inatividade segura.
O handoff:
- Continua na mesma conversa.
- Gera resumo.
- Cria notificação.
- Pode enviar uma mensagem de espera apenas uma vez.
- Permite takeover e retorno.
Agendamento
A disponibilidade é calculada pela interseção de:
- Horário de funcionamento da organização.
- Horário de trabalho do profissional.
- Intervalos, folgas, bloqueios e exceções.
- Serviço habilitado para o profissional.
- Duração e buffers.
- Agendamentos e holds existentes.
- Recursos obrigatórios.
- Lead time, horizonte e timezone.
A IA não interpreta escalas livremente. Ela chama uma tool de disponibilidade e recebe slots válidos.
Google Calendar
A Orquena é a fonte da verdade.
Primeira direção:
Create, update e cancel usam mapping e idempotência. Falha do Google não desfaz um appointment confirmado.
Sincronização bidirecional fica fora da primeira versão.
Preços
Serviços possuem versões de preço com vigência.
- Novas consultas usam o preço vigente.
- Mudanças futuras podem ser agendadas.
- Agendamentos confirmados preservam o preço aceito.
- Alterar preço emite evento, mas não dispara mensagens automaticamente.
- Campanhas em massa via WAHA ficam desabilitadas no beta.
Plugins
Plugins oficiais são pacotes revisados do monorepo e descobertos por catálogo estático gerado no build.
A primeira versão não instala pacotes npm arbitrários em produção. Integrações externas executam em serviços ou containers isolados.
Cada plugin declara:
- ID e versão.
- Compatibilidade.
- Capabilities e dependências.
- Permissões.
- Configuração.
- Rotas e contribuições de interface.
- Eventos e jobs.
- Ferramentas para agentes.
- Health check e classificação dos dados.
Eventos e jobs
PostgreSQL é a fonte da verdade e utiliza transactional outbox para publicar eventos.
BullMQ sobre Valkey é o primeiro transporte de jobs, sempre atrás dos contratos da plataforma.
O worker não possui um tenant global ativo. Cada job abre um contexto isolado para sua organização, valida os registros e destrói o contexto ao terminar.
Jobs possuem:
- Payload versionado.
organizationId confiável.
- Idempotency key.
- Timeout.
- Retry classificado.
- Backoff.
- Dead-letter durável.
- Controle de concorrência.
- Retenção.
Modelo de dados
O modelo cobre identidade, conta comercial, tenancy, onboarding, contatos, catálogo, profissionais, agenda, Inbox, preferências de IA, controle de conversa, handoff, integrações de calendário, notificações e operação da plataforma.
Dados específicos de novos verticais entram em plugins próprios.
Segurança
Controles críticos incluem:
- Membership e permissões por organização.
- Row-Level Security quando aplicável.
- Testes entre organizações irmãs.
- Webhooks autenticados e deduplicados.
- Resolução do tenant pelo mapeamento interno da conexão.
- Credenciais e refresh tokens criptografados.
- Agentes sem acesso direto ao banco.
- Tools com menor privilégio.
- Proteção contra prompt injection.
- Revalidação do controle da conversa antes de resposta automática.
- Constraints transacionais para evitar conflito de agenda.
- Rate limits, budgets e kill switch por organização.
Desempenho
Metas são separadas por tipo de carga.
Dez mil conexões realtime, dez mil sessões de WhatsApp e dez mil execuções de IA são problemas diferentes e nunca serão tratados como a mesma promessa.
A primeira etapa terá metas mensuráveis de API, disponibilidade, webhook, filas, sincronização e concorrência, validadas por testes antes da comercialização.
Documentos canônicos