Sua conta ({{ currentUser.email }}) foi registrada, mas ainda não tem um cargo liberado.
Peça para o administrador te aprovar dentro do sistema (aba "Gestão de Acesso").
O sistema foi temporariamente travado por um Diretor para manutenção ou correções.
Tente novamente em alguns instantes. Se precisar, fale com um Diretor.
Gerado em: {{ new Date().toLocaleDateString('pt-BR') }} às {{ new Date().toLocaleTimeString('pt-BR') }}
| Insumo | Tipo | Custo Unit. | Estoque | Valor Total |
|---|---|---|---|---|
|
|
{{ ins.type }} | R$ {{ formatMoney(ins.cost) }} | {{ ins.quantity }} un. | R$ {{ formatMoney((Number(ins.cost) || 0) * (Number(ins.quantity) || 0)) }} |
| Valor Total em Insumos: | {{ db.insumos.reduce((s, i) => s + (Number(i.quantity) || 0), 0) }} un. | R$ {{ formatMoney(db.insumos.reduce((s, i) => s + ((Number(i.cost) || 0) * (Number(i.quantity) || 0)), 0)) }} | ||
| Data | Tipo de Gasto | Observação | Valor (R$) |
|---|---|---|---|
| {{ formatDate(exp.date) }} | {{ exp.type }} - {{ exp.specificType }} | {{ exp.observation }} | R$ {{ formatMoney(exp.amount) }} |
| Sem gastos lançados. | |||
| Custo Total da Viagem: | R$ {{ formatMoney(trip.expenses.reduce((s,e)=>s+Number(e.amount),0)) }} | ||
| Data Prevista | Cliente | Detalhe do Pagamento | Valor Estimado |
|---|---|---|---|
| {{ rec.date === 'SEM DATA' ? 'Sem data definida' : formatDate(rec.date) }} | {{ rec.buyer }} | {{ rec.parcelInfo }} | R$ {{ formatMoney(rec.value) }} |
| Total a Receber: | R$ {{ formatMoney(upcomingReceivables.reduce((sum, r) => sum + r.value, 0)) }} | ||
| Cliente | Data Venda | Canal | Forma | Valor Total | Valor Pago | Saldo Devedor | Datas de Vencimento | Itens do Pedido | Observação |
|---|---|---|---|---|---|---|---|---|---|
| {{ group.buyer }} | {{ formatDate(group.date) }} | {{ group.channel }} | {{ group.paymentMethod }} | R$ {{ formatMoney(group.totalValue) }} | R$ {{ formatMoney(group.amountPaid || 0) }} | R$ {{ formatMoney(group.totalValue - (group.amountPaid || 0)) }} | Sem data definida {{ formatDate(typeof pd === 'string' ? pd : pd.date) }} |
{{ getItemName(it.itemId) }} ({{ it.qty || 1 }}x) - R$ {{ formatMoney(it.value) }}
|
{{ group.paymentObservation || '-' }} |
| Totais: | R$ {{ formatMoney(groupedPendingBoletos.reduce((s,g)=>s+g.totalValue,0)) }} | R$ {{ formatMoney(groupedPendingBoletos.reduce((s,g)=>s+(g.amountPaid||0),0)) }} | R$ {{ formatMoney(totalPendingBoletos) }} | ||||||
| Data | Cliente | Canal | Forma Pgto | Itens | Insumos | Taxas | Frete | Total | |
|---|---|---|---|---|---|---|---|---|---|
| {{ formatDate(group.date) }} | {{ group.buyer }} | {{ group.channel }} | {{ group.paymentMethod }} |
{{ getItemName(it.itemId) }} ({{ it.qty || 1 }}x)
|
-R$ {{ formatMoney(group.insumosCost) }}
-
{{ ins.name }}({{ ins.qty }}x)
|
R$ {{ formatMoney(group.fees) }} | R$ {{ formatMoney(group.delivery) }} | R$ {{ formatMoney(group.totalValue) }} | |
| Total Vendido (Finalizado): | -R$ {{ formatMoney(groupedCompletedSales.reduce((s,g)=>s+(g.insumosCost||0),0)) }} | R$ {{ formatMoney(groupedCompletedSales.reduce((s,g)=>s+g.fees,0)) }} | R$ {{ formatMoney(groupedCompletedSales.reduce((s,g)=>s+g.delivery,0)) }} | R$ {{ formatMoney(groupedCompletedSales.reduce((s,g)=>s+g.totalValue,0)) }} | |||||
| ID | Produto | Categoria | Marca | Tam. | Cor | Qtd | Custo Unit. | Preço Venda | Local | Data Entrada |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ item.id }} | {{ item.name }} | {{ item.category }} | {{ item.brand || '-' }} | {{ item.size || '-' }} | {{ item.color || '-' }} | {{ item.quantity || 1 }} | R$ {{ formatMoney(item.cost) }} | R$ {{ formatMoney(item.salePrice) }} | {{ item.location || '-' }} | {{ formatDate(item.date) }} |
| Valor Total em Estoque (Custo): | R$ {{ formatMoney(stockValue) }} | |||||||||
| Data | Motivo | Tipo | Forma Pgto | Valor |
|---|---|---|---|---|
| {{ formatDate(exp.date) }} | {{ exp.reason }} | {{ exp.isProductLoss ? 'AVARIA' : (exp.isCustomsLoss ? 'ALFÂNDEGA' : 'OPERACIONAL') }} | {{ exp.paymentMethod || '-' }} | R$ {{ formatMoney(exp.amount) }} |
| Total de Despesas/Perdas: | R$ {{ formatMoney(db.expenses.reduce((s,e)=>s+Number(e.amount),0)) }} | |||
| Produto | Cliente | Custo | Preço Sugerido |
|---|---|---|---|
| {{ item.name }} | {{ item.experimentacaoClient }} | R$ {{ formatMoney(item.cost) }} | R$ {{ formatMoney(item.salePrice) }} |
| Cliente | Produto | Status |
|---|---|---|
| {{ enc.customer }} | {{ enc.product }} {{ enc.size }} {{ enc.color }} | {{ enc.status }} |
| Produto | Qtd | Status |
|---|---|---|
| {{ c.product }} {{ c.size }} {{ c.color }} | {{ c.qty }} | {{ c.status }} |
| Data | Ação | Detalhes | Usuário | Status |
|---|---|---|---|---|
| {{ log.date }} | {{ log.action }} | {{ log.details }} | {{ log.user }} | REVERTIDO |
| {{index+1}}º | {{ prod.name }} | {{ prod.quantity }} un |
| Sem dados suficientes | ||
| ID | Produto | Marca | Data Compra | Dias Parado | Qtd | Custo Empatado |
|---|---|---|---|---|---|---|
| {{ item.id }} | {{ item.name }} | {{ item.brand || '-' }} | {{ formatDate(item.date) }} | {{ item.daysInStock }} dias | {{ item.quantity || 1 }} | R$ {{ formatMoney(Number(item.cost) * (item.quantity || 1)) }} |
| Parabéns! Seu estoque está girando rápido. Nenhum produto com mais de 30 dias. | ||||||
| Capital Total Congelado: | R$ {{ formatMoney(stagnantItems.reduce((s,i)=>s+(Number(i.cost)*(i.quantity||1)),0)) }} | |||||
| # | Cliente | Compras | Total Gasto |
|---|---|---|---|
| {{ i+1 }}º | {{ c.name }} | {{ c.quantity }} un | R$ {{ formatMoney(c.totalSpent) }} |
| Sem dados suficientes | |||
| # | Marca | Qtd Vendida | Faturamento |
|---|---|---|---|
| {{ i+1 }}º | {{ b.name }} | {{ b.quantity }} un | R$ {{ formatMoney(b.totalRevenue) }} |
| Sem dados suficientes | |||
Clique no botão "Gerar Ideias" no topo para a IA analisar suas marcas mais fortes e sugerir 3 novos produtos lucrativos para o seu catálogo.
Atualizado em {{ new Date().toLocaleDateString('pt-BR') }}. Valores e disponibilidade sujeitos a alteração sem aviso prévio.
Produtos sob encomenda, sujeitos a verificação de disponibilidade e prazo no fornecedor.
Valores sob consulta devido à variação cambial.
CONTEÚDO RESTRITO PARA MAIORES DE 18 ANOS. Valores sujeitos a alteração.
CONTEÚDO RESTRITO (+18). Sujeito a verificação no fornecedor e prazo.
Se vender todo o estoque atual pelo preço cheio.
Itens emprestados com clientes.
Valor de boletos pendentes.
(Valor Recebido - Custo de Compra)
(Descontados do Lucro Acima)
(Valor isolado. Não abate do lucro global)
Produtos disponíveis para encomendar. Valores sob consulta.
Estes produtos não aparecem nos catálogos públicos.
Cadastre aqui tudo o que a loja trabalha ou pode encomendar. Itens no estoque físico ficam atrelados a estes modelos.
Análise detalhada de vendas por mês, marcas, categorias e clientes.
| Mês / Ano | Qtd Peças | Faturamento | Carro-Chefe |
|---|---|---|---|
| {{ m.label }} | {{ m.quantity }} un | R$ {{ formatMoney(m.revenue) }} | {{ m.topProduct }} |
| Sem vendas registradas ainda. | |||
| Cliente | Peças Compradas | Total Gasto |
|---|---|---|
|
{{ c.name }}
MARCA: {{ c.brand }}
| COR: {{ c.color }}
| TAM: {{ c.size }}
|
{{ c.quantity }} un | R$ {{ formatMoney(c.totalSpent) }} |
| Nenhum cliente identificado. | ||
| Marca | Quantidade | Receita Gerada |
|---|---|---|
| {{ b.name }} | {{ b.quantity }} un | R$ {{ formatMoney(b.totalRevenue) }} |
| Sem dados de marcas. | ||
| Categoria | Quantidade | Receita Gerada |
|---|---|---|
|
{{ c.name }}
MARCA: {{ c.brand }}
| COR: {{ c.color }}
| TAM: {{ c.size }}
|
{{ c.quantity }} un | R$ {{ formatMoney(c.totalRevenue) }} |
| Sem dados de categorias. | ||
Isso pode acontecer quando a quantidade em estoque não foi atualizada corretamente em uma venda antiga. Confira cada um abaixo e corrija se a quantidade realmente não bate com o que você tem fisicamente.
| Produto | Estoque Mostrado | Já Vendido (nos registros) | Ação |
|---|---|---|---|
| {{ entry.item.name }} ({{ entry.item.brand || 'sem marca' }}) | {{ entry.currentQty }} | {{ entry.soldQty }} |
| ID | Foto | Produto / Categoria | Especificações | Preço Venda | Custo Unit. | Custo Total | Ações |
|---|---|---|---|---|---|---|---|
| {{ item.id }} |
SEM
|
{{ item.name }} +18
{{ item.category || 'GERAL' }}
|
TAM: {{ item.size }}
COR: {{ item.color }}
MARCA: {{ item.brand }}
Qtd: {{ item.quantity || 1 }} un
|
R$ {{ formatMoney(effectiveSalePrice(item)) }} PROMO | R$ {{ formatMoney(item.cost) }} | R$ {{ formatMoney(Number(item.cost) * (item.quantity || 1)) }} | |
| Nenhum produto encontrado no estoque com os filtros selecionados. | |||||||
Coloque um item do estoque em promoção por um período: ele fica com o preço promocional só durante essas datas e volta ao preço normal sozinho quando o prazo acabar.
| Produto | Especificações | Preço Atual | Ação |
|---|---|---|---|
| {{ item.name }} | {{ item.brand }} | TAM: {{ item.size }} | COR: {{ item.color }} | R$ {{ formatMoney(item.salePrice || item.cost * 1.5) }} | |
| Todo o estoque já está em promoção, ou não há itens cadastrados. | |||
| Produto | Preço Normal | Preço Promocional | Período | Status | Ações |
|---|---|---|---|---|---|
|
{{ item.name }}
{{ item.brand }}
| TAM: {{ item.size }}
| COR: {{ item.color }}
|
R$ {{ formatMoney(item.promoPrice) }} | {{ formatDate(item.promoStartDate) }} até {{ formatDate(item.promoEndDate) }} | ATIVA AGORA AGENDADA EXPIRADA | ||
| Nenhum item em promoção no momento. | |||||
Materiais de embalagem/uso interno (sacolas Kraft, logos impressos, etc.) — não entram na Vitrine nem no Estoque de produtos para venda.
{{ item.type }} • {{ item.size }}
Custo: R$ {{ formatMoney(item.cost) }}
Estoque: {{ item.quantity }} un.
Nenhum insumo cadastrado ainda.
Itens que foram emprestados para clientes testarem ou avaliarem.
| Cliente | Produto | Marca | Quantidade | Ações |
|---|---|---|---|---|
| {{ item.experimentacaoClient }} | {{ item.name }} | {{ item.brand || '-' }} | {{ item.quantity || 1 }} un | |
| Nenhum produto em experimentação no momento. | ||||
Acompanhe os recebimentos pendentes, datas de vencimento e parcelas em aberto.
Clique em um dia com vencimento pra filtrar só os boletos daquela data na lista abaixo.
| Cliente | Data | Tipo | Total | Falta Receber | Vencimentos / Datas | Ações | |
|---|---|---|---|---|---|---|---|
| {{ group.buyer }} | {{ formatDate(group.date) }} | {{ group.paymentMethod }} | R$ {{ formatMoney(group.totalValue) }} | R$ {{ formatMoney(group.totalValue - (group.amountPaid || 0)) }} |
{{ formatDate(typeof pd === 'string' ? pd : pd.date) }}
|
||
| {{ (boletoSearchTerm.trim() || calendarDayFilter) ? 'Nenhum boleto encontrado com esse filtro.' : 'Nenhum boleto ou pagamento pendente.' }} | |||||||
| Produto | Qtd | Subtotal | Ações |
|---|---|---|---|
|
{{ c.name }}
MARCA: {{ c.brand }}
| COR: {{ c.color }}
| TAM: {{ c.size }}
|
{{ c.qty }} | R$ {{ formatMoney(c.value) }} | |
| Carrinho vazio. | |||
Selecione os insumos utilizados nesta venda (sacola, logo, embalagem, etc.). Eles serão baixados automaticamente do estoque.
Registre contas pagas, custos operacionais e baixas por produtos danificados.
| Data | Categoria | Descrição / Motivo | Valor Bloqueado/Gasto | Ações |
|---|---|---|---|---|
| {{ formatDate(exp.date) }} | AVARIA {{ exp.customsType }} OPERACIONAL | {{ exp.reason }} {{ exp.paymentMethod }} | R$ {{ formatMoney(exp.amount) }} | |
| Nenhuma despesa ou perda registrada. | ||||
Organize viagens de compras ou entregas e lance todos os gastos associados.
Saída: {{ formatDate(trip.departureDate) }}
Registre os produtos que os clientes pediram para você trazer ou fabricar.
| Status | Data | Cliente (Canal) | Produto Encomendado | Cor / Tamanho | Observação | Ações |
|---|---|---|---|---|---|---|
| {{ enc.status }} | {{ formatDate(enc.date) }} | {{ enc.customer }} {{ enc.channel }} | {{ enc.product }} | {{ enc.color || '-' }} / {{ enc.size || '-' }} | {{ enc.observation }} | |
| Nenhuma encomenda registrada. | ||||||
Anote os produtos que você precisa comprar para repor estoque ou atender encomendas.
| Status | Produto | Qtd | Cor / Tamanho | Observação | Ações |
|---|---|---|---|---|---|
| {{ compra.status }} | {{ compra.product }} | {{ compra.qty }} un | {{ compra.color || '-' }} / {{ compra.size || '-' }} | {{ compra.observation }} | |
| Sua lista de compras está vazia. | |||||
Consulte todas as vendas já finalizadas e quitadas.
| Cliente | Data | Canal | Pagamento | Valor Total | Ações |
|---|---|---|---|---|---|
| {{ group.buyer }} | {{ formatDate(group.date) }} | {{ group.channel }} | {{ group.paymentMethod }} | R$ {{ formatMoney(group.totalValue) }} | |
| Nenhuma venda concluída no histórico. | |||||
Registro cronológico de todas as operações realizadas, com autor de cada ação. Como {{ userRoleLabel }}, você pode reverter cadastros, edições e exclusões de estoque feitas por qualquer usuário.
| Data | Ação | Detalhes | Usuário | Status | Ações |
|---|---|---|---|---|---|
| {{ log.date }} {{ log.time }} | {{ log.action }} | {{ log.details }} | {{ log.user }} | REVERTIDO | |
| Nenhum log registrado. | |||||
Tire dúvidas sobre suas finanças, desempenho de vendas e projeções com a IA.
Só o Diretor vê essa aba. A concessão de acesso é feita manualmente abaixo, digitando o e-mail — isso evita liberar alguém sem querer por clique errado.
Apenas informativo — não tem botão de aprovar aqui de propósito. Use o campo "Conceder Acesso" logo abaixo com o e-mail da pessoa.
| Nome | Tentou entrar em | ||
|---|---|---|---|
| {{ r.nome }} | {{ r.email }} | {{ r.dataSolicitacao ? new Date(r.dataSolicitacao).toLocaleString('pt-BR') : '-' }} |
Digite o e-mail exato (copie da lista acima, se quiser) e escolha o cargo. É uma ação deliberada, com confirmação — reduz risco de liberar a pessoa errada.
| Nome | Cargo | ||
|---|---|---|---|
| {{ m.nome || '-' }} VOCÊ | {{ m.email }} |
Configure suas chaves de acesso para os recursos de Inteligência Artificial e remoção de fundo.
Apaga todos os dados de teste do banco. Útil pra recomeçar do zero antes de importar dados reais, ou entre um teste e outro.
Escolha um arquivo JSON (do sistema offline, ou um backup deste próprio sistema) e clique em Importar — sem precisar de terminal.
Se você importou com "Não enviar fotos agora", selecione o mesmo arquivo acima de novo a qualquer momento e clique aqui pra completar as fotos que ainda estão faltando — não duplica nada, só completa quem está pendente.
O motor de Inteligência Artificial que vai analisar seus dados e gerar anúncios automáticos e relatórios no chat.
O motor que vai apagar o fundo bagunçado das fotos dos seus produtos automaticamente.
Alternativa ao Gemini. Insira a chave do ChatGPT caso prefira utilizar o modelo da OpenAI no seu assistente e gerador de anúncios.
Outra alternativa de IA. Insira a chave da Anthropic caso prefira usar o Claude no seu assistente e gerador de anúncios.
Você pode gerar um backup limpo do seu banco de dados sem as chaves de API caso deseje compartilhar ou arquivar.
Backup completo (com fotos embutidas): baixa cada foto do Drive e coloca dentro do próprio arquivo — fica maior e demora mais pra gerar, mas vira um arquivo 100% independente (funciona até se o Drive ficar indisponível, ou pra usar no modelo offline).
Configure a integração com o Google Drive para fazer cópias de segurança automáticas. O armazenamento local continua sendo o principal (garantindo velocidade máxima).
Adicione produtos do estoque na fila para imprimir etiquetas térmicas com QR Code.
| Produto | Tamanho/Cor | Preço | Remover |
|---|---|---|---|
| {{ lbl.name }} | {{ lbl.size || '-' }} / {{ lbl.color || '-' }} | R$ {{ formatMoney(lbl.price) }} | |
| Nenhuma etiqueta na fila. Vá no Estoque e clique no ícone de código de barras. | |||