Falar com a CG MixartContato
Falar com a CG Mixart
03/10

Varejo de instrumentos musicais

O caixa escolhe a maquininha, o crédito e as parcelas, com o juro calculado

ERP Mixart

Do celular do vendedor à nota fiscal, com a maquininha Stone ligada ao caixa.

Cliente
Loja Mixart
Categoria
ERP e PDV com integração fiscal e de maquininha
Período
out 2026
Estado
Em validação: no ar desde 07/10/2026, a loja testando módulo a módulo

O problema

A loja vinha de dois PDVs, cada um com metade do que precisava. Um tinha catálogo, orçamento, sinal com assinatura e nota fiscal; o outro tinha caixa com conferência, holerite, comissão e maquininha. Nos dois, as regras de acesso eram abertas: qualquer usuário fazia tudo. Num deles a numeração das vendas era contada no aparelho, e dois caixas podiam gerar o mesmo número; no outro, excluir uma venda não devolvia o produto ao estoque. O dono queria um sistema só, com papéis diferentes para admin, sócio, caixa e vendedor.

O que foi construído

O vendedor monta o carrinho no celular, lendo o código de barras com a câmera, e envia para o caixa; o carrinho aparece na fila na hora, sem recarregar a página. O caixa aplica desconto, divide o pagamento em várias formas e calcula o juro do crediário de 1x a 12x, escolhendo quem paga. No cartão, a cobrança vai direto para a maquininha Stone pelo Connect e volta confirmada; uma cobrança paga só fecha uma venda. A nota fiscal sai pela Focus NFe, NFC-e ou NF-e, com DANFE, XML, envio por e-mail e o arquivo do mês para o contador. Orçamentos numerados viram venda com um clique, e o sinal de encomenda é assinado no aparelho ou por um link no WhatsApp, entra no caixa e abate na venda. A mercadoria entra pela nota do fornecedor e só mexe no estoque quando o dono aprova; as parcelas viram contas a pagar. Em volta disso, 37 telas: caixa com conferência e foto do fechamento, painel financeiro, relatórios do shopping, por vendedor e do dia, ordem de serviço com fotos, holerite com comissão por faixa de meta e os acessos de cada pessoa.

729
testes
Testes automáticos no servidor e no app
37
telas
Telas, no balcão e no celular do vendedor
26
permissões
Permissões, conferidas também no servidor
121
rotas
Rotas da API

Decisões de engenharia

01

A maquininha recebe o valor do caixa

O caixa escolhe débito, crédito, Pix ou voucher e as parcelas, e a cobrança vai para a maquininha Stone pelo Connect. Ninguém digita valor no terminal. A confirmação volta por webhook, autenticado por segredo, ou pela consulta ao provedor quando o webhook atrasa, e grava NSU, autorização e bandeira. Uma cobrança paga só pode ser vinculada a uma venda, e a venda no cartão só fecha com a referência de uma cobrança paga.

erpmixart/backend/src/ErpMixart.Infrastructure/Stone/StoneConnectClient.cs; erpmixart/backend/src/ErpMixart.Core/Pagamentos/CobrancaMaquininha.cs:74 (ConfirmarPagamento), :99 (VincularVenda); erpmixart/backend/src/ErpMixart.Api/Controllers/PublicoStoneController.cs:18 (webhook); erpmixart/backend/src/ErpMixart.Infrastructure/Stone/SimuladorMaquininha.cs

02

O sinal entra no caixa e abate na venda

O sinal da encomenda é registrado com o dinheiro na gaveta, e não por fora: em dinheiro ele soma no valor esperado do fechamento; em Pix ou cartão fica registrado sem mexer na gaveta. Na venda final ele entra como forma de pagamento e o cliente paga só o restante. Um índice único no banco impede que o mesmo sinal feche duas vendas, e cancelar a venda devolve o sinal para em aberto.

erpmixart/backend/src/ErpMixart.Core/Orcamentos/Sinal.cs:132 (AbaterEmVenda), :167 (DesfazerAbatimento); erpmixart/backend/src/ErpMixart.Core/Caixa/LancamentoCaixa.cs; erpmixart/backend/src/ErpMixart.Infrastructure/Persistence/UnitOfWork.cs:14 (ux_vendas_sinal_ativa)

03

Nota fiscal no padrão de loja de música

A emissão segue o perfil da loja: Simples Nacional, CSOSN 102, CFOP 5102 e NCM padrão quando o produto não tem. Antes de enviar, o sistema confere cliente e itens; nome e endereço são cortados no limite do XSD, que era o motivo de rejeição no PDV antigo. Do caixa sai a NFC-e; com cliente completo, a NF-e. O XML do mês vai em ZIP para o e-mail do contador.

erpmixart/backend/src/ErpMixart.UseCases/Fiscal/MontadorPayloadFocus.cs:12, :18-19 (CFOP 5102, CSOSN 102); erpmixart/backend/src/ErpMixart.Core/Fiscal/Destinatario.cs:11 (LimiteXsd = 60); erpmixart/backend/src/ErpMixart.UseCases/Fiscal/FiscalUseCases.cs:250 (XML mensal para o contador)

04

Cada um vê só o que pode, e o servidor confere

São quatro papéis e 26 permissões, que o admin libera pessoa por pessoa. O app esconde o botão de quem não pode, e o servidor repete a checagem em cada rota com as mesmas chaves: são 86 marcações de permissão nos controllers. Nos dois PDVs anteriores as regras eram abertas.

erpmixart/lib/features/auth/domain/value_objects/permissao.dart (26 chaves); erpmixart/lib/features/auth/domain/value_objects/papel.dart:5 (admin, sócio, caixa, vendedor); 86 atributos [Permissao(...)] em erpmixart/backend/src/ErpMixart.Api/Controllers

05

Numeração e estoque que não se perdem

O número da venda, do orçamento e do código interno sai do servidor, numa linha travada em transação, e dois caixas não geram o mesmo número. O saldo do produto nunca é escrito direto: cada entrada, venda, estorno ou ajuste vira um movimento, gravado junto com o saldo. Cancelar uma venda devolve o produto ao estoque.

erpmixart/backend/src/ErpMixart.Infrastructure/Persistence/ContadorService.cs:15-16 (INSERT ON CONFLICT e SELECT FOR UPDATE); erpmixart/backend/src/ErpMixart.Core/Produtos/Produto.cs:15 (saldo só via Movimentar); erpmixart/backend/src/ErpMixart.Core/Produtos/MovimentoEstoque.cs:19

06

Caixa conferido e embalagem que vira unidade

O fechamento compara a contagem com o valor esperado, e diferença acima de R$ 1,00 exige justificativa; a foto do fechamento e as sangrias ficam no histórico. Na entrada por nota, a caixa com 12 unidades vira 12 no estoque, com o custo dividido, e o lucro do painel sai certo.

erpmixart/backend/src/ErpMixart.Core/Caixa/SessaoCaixa.cs:10 (DiferencaMaxima = 1,00), :58-59; erpmixart/backend/src/ErpMixart.Core/Inventario/ItemEntrada.cs:26-28 (TotalUnidades, CustoPorUnidade)

Stack

App
Flutter 3.41 com flutter_bloc, get_it e dartz, go_router; web no balcão e o mesmo app no celular do vendedor, um módulo por área com a regra de dependências do domínio
API
ASP.NET Core 9 em camadas (Core, UseCases, Infrastructure, Api), 121 rotas em 20 controllers, JWT próprio com BCrypt
Banco
PostgreSQL com EF Core 9 e Npgsql 9.0.3, 22 tabelas e 8 migrações; numeração e estoque em transação no servidor
Tempo real
SignalR: o servidor avisa qual tópico mudou e a tela rebusca, com intervalo de segurança
Maquininha
Stone Connect (Pagar.me v5): cobrança enviada ao terminal, confirmada por webhook ou consulta; simulador para treino da equipe
Fiscal
Focus NFe: NFC-e 65 e NF-e 55 no Simples Nacional, validação antes de emitir, cancelamento, DANFE, XML e ZIP mensal por e-mail
Arquivos e e-mail
MinIO para fotos e assinaturas, PDFs de orçamento, recibo, holerite e etiqueta, envio por SMTP
Testes
xUnit (179) no servidor e flutter_test (550) no app
Infra
Docker Compose na mesma VM Oracle Cloud da plataforma Mixart, atrás do nginx, com deploy que preserva o .env do servidor
ERPPDVStone ConnectMaquininha integradaNFC-eNF-eFocus NFeTempo realFlutter.NET 9PostgreSQLClean ArchitectureOracle Cloud

Telas

A maquininha confirma, e bandeira e NSU voltam para a venda
A maquininha confirma, e bandeira e NSU voltam para a venda
No celular do vendedor: carrinho pelo código de barras e envio ao caixa
No celular do vendedor: carrinho pelo código de barras e envio ao caixa
O painel do dono: vendas, lucro bruto, ticket médio e contas do período
O painel do dono: vendas, lucro bruto, ticket médio e contas do período
A entrada por nota, com as parcelas ao fornecedor e o preço de venda de cada item
A entrada por nota, com as parcelas ao fornecedor e o preço de venda de cada item
Sinais de encomenda: aguardando assinatura, assinados e quitados
Sinais de encomenda: aguardando assinatura, assinados e quitados
Notas fiscais com DANFE, XML e envio por e-mail, e o XML do mês para o contador
Notas fiscais com DANFE, XML e envio por e-mail, e o XML do mês para o contador
O relatório do shopping, dia a dia, em PDF ou por e-mail
O relatório do shopping, dia a dia, em PDF ou por e-mail
A ordem de serviço com fotos, diagnóstico e serviços padrão
A ordem de serviço com fotos, diagnóstico e serviços padrão
Funcionários do mês: vendas, comissão, vales e o líquido de cada um
Funcionários do mês: vendas, comissão, vales e o líquido de cada um

Em uso

O sistema em três minutosDo carrinho no celular à nota fiscal, e depois estoque, financeiro, equipe e acessos.
A venda com a maquininha StoneO vídeo enviado à Stone: a cobrança sai do caixa e volta confirmada.

O papel da CG Mixart

Arquitetura e engenharia inteira, com um desenvolvedor só: o levantamento dos dois PDVs anteriores e do pedido do dono, o app em Flutter para o balcão e o celular, a API em .NET, o banco, as integrações com a Stone e com a Focus NFe, o deploy na Oracle Cloud e o quadro de testes com o cliente. Também os vídeos de apresentação, inclusive o enviado ao programa de parceiros da Stone.

Ressalvas e notas técnicas, verificadas no códigoabrir

No ar desde 07/10/2026, na mesma VM da plataforma Mixart, com a loja validando cada módulo por um quadro de testes no Trello. A maquininha roda hoje no simulador: a integração com o Stone Connect está pronta e espera a credencial do programa de parceiros da Stone, pedido em 08/10/2026. A emissão da nota em nome da loja espera o certificado digital dela. A leitura dos catálogos das marcas por IA foi desenhada e ficou de fora por custo. As telas e os vídeos são do modo de demonstração, com dados de exemplo.