O Isis é multi-loja nativo — uma empresa (tenant) pode ter 1 ou N filiais (Store), todas na mesma conta, sem cap. Cada loja tem:
- CNPJ próprio.
- Estoque independente (mesmo SKU, saldo diferente por filial).
- Preço independente (mesmo SKU, preço pode variar).
- Caixas independentes.
- Usuários com papéis diferentes por loja (ex.: MANAGER na loja A, CASHIER na B).
- Numeração fiscal própria (série NFC-e por loja).
Criar uma nova loja
Configurações → Lojas → Nova loja (OWNER ou ADMIN).
O criador vira MANAGER automático na loja nova — senão ele teria que se auto-convidar, o que não faz sentido.
Preencha dados fiscais completos antes de emitir NFC-e da filial nova. Veja Primeira venda em 30 minutos.
Seletor de loja
Com 2+ lojas, aparece um dropdown no topo da tela. Toda ação respeita a loja selecionada:
- PDV vende na loja selecionada.
- Caixa é da loja selecionada.
- Estoque mostra o saldo daquela loja.
- Relatórios filtram pela loja.
Com 1 loja só, o seletor fica oculto e tudo funciona direto.
Dashboard consolidado (multi-loja)
Relatórios → Desempenho por loja (OWNER/ADMIN only, sem exigir seleção de loja) mostra:
- Faturamento por filial no período.
- Ticket médio por filial.
- Top produto de cada filial.
Útil pra comparar performance e identificar gargalos.
Transferências entre lojas
Movimenta estoque de uma loja pra outra com aprovação. Transferências → Solicitar:
- Loja de origem: a loja atual (você tá logado nela).
- Loja de destino: escolha no dropdown.
- Items + quantidades.
- Observações (opcional).
Status inicial: PENDING.
Aprovar ou rejeitar
O gerente da loja destino (ou OWNER/ADMIN) aprova:
- Aprovar → estoque sai da origem, entra no destino, gera dois
StockMovement(SAIDA + ENTRADA, ambos com motivoTRANSFERENCIA). Atômico e race-safe. - Rejeitar → obriga justificativa. Estoque não é tocado.
Quem solicitou também pode cancelar enquanto está PENDING.
Auto-criação de StoreProduct
Se o produto não existe na loja destino (só na origem), o sistema cria automaticamente um StoreProduct zerado na destino antes de incrementar. Assim o fluxo funciona mesmo pra produtos novos no catálogo central que ainda não foram distribuídos.
Isolamento de dados
Cada query no banco é automaticamente filtrada por tenant_id (via Prisma extension). Não tem como uma loja ver dados de outra empresa. Entre lojas do mesmo tenant, a filtragem é por store_id nos modelos onde faz sentido (Sale, StockMovement, CashierSession).
Alguns modelos são compartilhados no tenant (acessíveis por todas as lojas):
- Catálogo de produtos.
- Clientes.
- Fornecedores.
- Categorias financeiras.
- Tabelas de preço B2B.
Isso facilita a vida de quem vende o mesmo catálogo em várias filiais.