Pular para o conteúdo principal

Sempre

O Sempre é o produto de cartão de benefícios do veículo: a venda gera um cartão (chave = chassi, o CPF é só o titular atual), entregue por QR/link para Apple Wallet e Google Wallet, com a marca da concessionária. O superapp cobre a operação da concessionária: catálogo, venda, clientes, cancelamento e administração. Escopo completo no milestone MVP Sempre (TEC-1144).

Esta página documenta a estrutura base (TEC-1248). As regras de negócio de cada módulo ficam nas tasks de feature.

Modelo de tenant​

1 conta (accounts) = 1 grupo, marcada com public_data.product = 'sempre'. Concessionárias e lojas serão tabelas filhas da conta (TEC-1195).

Estrutura de pastas​

app/[locale]/sempre/
├── _lib/
│ ├── sempre-nav.ts # catálogo de navegação (key, label, ícone, grupo)
│ └── create-module-layout.tsx # layout com enforceModuleAccess por módulo
├── _components/sempre-module-page.tsx # placeholder "em construção"
└── home/[account]/
├── layout.tsx # createTeamWorkspaceLayout(AppSidebar, { product: 'sempre' })
├── page.tsx # Início (placeholder)
├── _components/app-sidebar.tsx
├── pacotes/ clientes/ nova-venda/ concessionarias/ usuarios/
└── billing/ settings/ members/ # reexport de _shared/team-workspace

Módulos e ativação​

O catálogo de módulos vive em products.modules (migration 20260930120000_products_sempre.sql). Só inicio é core; os demais têm defaultEnabled: false e aparecem na sidebar como Em breve (desabilitados). Acessar a URL de um módulo inativo redireciona para o Início (enforceModuleAccess).

Para ativar um módulo em uma conta, sem deploy:

update public.accounts
set public_data = jsonb_set(public_data, '{modules,clientes}', 'true')
where slug = '<slug-da-conta>';

Para ativar por padrão em todas as contas, remova defaultEnabled: false do módulo no jsonb (nova migration).

Adicionar um módulo novo​

  1. Incluir o módulo em products.modules (migration) com defaultEnabled: false.
  2. Incluir o item em SEMPRE_NAV_ITEMS (_lib/sempre-nav.ts) com a mesma key.
  3. Criar home/[account]/<slug>/layout.tsx com createSempreModuleLayout('<key>') e page.tsx.

Ambiente local​

seed.sql cria a conta Sempre Demo (sempre-demo), com o usuário desenvolvimento@meresolve.com.br como owner. Acesse /sempre/home/sempre-demo.

Fora do escopo da estrutura base​

Tabelas de negócio (venda, cartão, pacote, concessionária/loja), perfis e permissões, integração DMS/Fandi, Wallet, WhatsApp, domínio/login próprio e tema visual próprio.