Sistema de Ponto de Venda para Varejo
Este projeto possui código-fonte privado e é protegido por licença proprietária da Cara Core Informática. A documentação aqui tem caráter informativo sobre funcionalidades e arquitetura. Apresentação e tecnologia: chmulato.github.io/caracore-pdv.
O PDV (Ponto de Venda) é o sistema de caixa usado no balcão da loja: registrar produtos, aplicar descontos, receber pagamentos e emitir comprovantes. O CaraCore PDV é preparado para a Reforma Tributária 2026–2033 (CBS e IBS), com PIX (QR Code e Split), modo offline quando a internet cai e modo contingência (banco local SQLite + SMS) para nunca parar de vender. O perfil SQLite é o padrão: banco único em ./data/caracore-pdv.db, carga inicial automática (admin/admin) na primeira execução e Centro de Segurança e Backup para políticas, criptografia e rotinas de backup/restore.
Em resumo:
docker-compose.sqlite.ymlAplicação web em Java 21 e Spring Boot 2.7, com API REST, Thymeleaf, HTMX, Bootstrap 5 e ApexCharts. Módulos: PDV (caixa), vendas, produtos, clientes, estoque, dashboard, relatórios (JasperReports), operadores e multi-loja. Perfil sqlite é o padrão: banco único em ./data/caracore-pdv.db, SqliteDataSourceConfig, SqliteSeedDataLoader, data/init-data-sqlite.sql; Docker: docker-compose -f docker/docker-compose.sqlite.yml up -d. Outros perfis: prod (PostgreSQL), offline (H2 + Outbox), contingency (SQLite + SMS via ADB).
Componentes principais:
PlanoLicencaService, configuracao_plano. Free: 100 vendas/mês, 10 SMS recibo; trava em PagamentoService e SmsService. Premium: recuperação de senha por SMS (RecuperacaoSenhaService, AdbSmsProvider, celular do operador); configuração de e-mail e contador (ConfiguracaoEmail); relatório automático ao contador (RelatorioContadorService, AutomacaoEmailContadorService, job diário, PDF/TXT); suporte prioritário (/suporte, SuporteController, RustDesk/AnyDesk, botão Ajuda no layout).Para leigos: Cálculo de impostos conforme a Reforma Tributária; o sistema já considera as regras que entram em vigor nos próximos anos.
Técnico: Motor fiscal preparado para CBS e IBS, evolução gradual até 2033.
Para leigos: Pagamento por PIX com QR Code na tela; suporte a divisão de pagamento (Split) entre loja e intermediários.
Técnico: Geração de QR Code, webhook de confirmação, estrutura para Mercado Pago e PagSeguro.
Para leigos: Painel com vendas da semana, produtos mais vendidos, totais do dia e vendas recentes.
Técnico: API /dashboard/api/dados, gráficos ApexCharts, atualização via fetch.
Para leigos: Se a internet cair, as vendas continuam em banco local e são enviadas quando voltar; em contingência, usa SQLite e avisa por SMS. O app Android no celular ainda recebe a ativação da Licença Premium por SMS e mostra se está ativa (verde) ou inativa (vermelho).
Técnico: H2 + Outbox + Sync (offline); SQLite + ADB/SMS (contingency). App pdv-sms-enviar (android-sms-enviar): envio de SMS via ADB; recepção de licença Premium por SMS (CC-LICENSE/CARACORE-KEY, filtro por número oficial); LicencaContentProvider (content://br.com.caracore.pdv.sms.licenca/licenca) com hardware_id, chave, valida, mes_ano para o PDV consultar via ADB; tela com status (Licença Gratuita/Inativa ou Licença Premium Ativa) e botão Verificar Conexão USB. Doc: android-sms-enviar/README.md.
Para leigos: Leitura por leitor (F4) ou câmera (QuaggaJS); atalhos de teclado para agilizar o caixa.
Técnico: QuaggaJS, hotkeys configuráveis, integração com HTMX.
Para leigos: Relatórios de vendas, estoque e performance em PDF; suporte a várias lojas com estoque por unidade.
Técnico: JasperReports; multi-loja com estoque independente; tratamento de erros e logging.
Para leigos: O PDV pode rodar só com SQLite, sem instalar PostgreSQL — ideal para um caixa, lojas e pequenas redes. Na primeira execução já cria o banco e carrega usuário admin/admin.
Técnico: Perfil sqlite (padrão); SqliteDataSourceConfig, SqliteSeedDataLoader, data/init-data-sqlite.sql; docker-compose -f docker/docker-compose.sqlite.yml up -d. Doc: doc/SQLITE_PEQUENOS_MEDIOS.md.
Para leigos: Painel para definir políticas de segurança, criptografia de dados sensíveis e agendar backups. No modo contingência: backup automático ao fechar o sistema, envio para nuvem (criptografado) e cópia em USB via celular conectado.
Técnico: SqliteBackupService (checkpoint WAL, ./backups, retenção 7 dias; USB .gz via ADB); SqliteBackupCloudSyncService (JSON vendas do dia, AES-256-GCM, POST para servidor central). Doc: doc/SQLITE_LOCAL.md; portal docs/ (tecnologia.html#seguranca, imagem centro_de_seguranca_e_backup.png).
Para leigos: Free: até 100 vendas/mês e 10 SMS de recibo/mês; ideal para começar. Premium: recuperação de senha por SMS no celular do operador; configuração de e-mail com dados do contador e envio automático de relatório diário (PDF e TXT); suporte prioritário com acesso remoto (RustDesk/AnyDesk) e botão Ajuda no menu.
Técnico: PlanoLicencaService, tabela configuracao_plano. Free: limitação em PagamentoService (LimiteVendasAtingidoException) e SmsService (recibo). Premium: RecuperacaoSenhaService + AdbSmsProvider; ConfiguracaoEmail (contadorNome, contadorEmail); RelatorioContadorService, AutomacaoEmailContadorService (cron, JasperReports relatorio_contador.jrxml); SuporteController (/suporte, suporte.rustdesk.id, suporte.anydesk.id). Validação online da licença Premium a cada 15 dias; se >15 dias sem internet, automações (e-mail, nuvem) ficam suspensas.
sqlite); ./data/caracore-pdv.db; carga automática na 1ª execuçãodocker-compose.sqlite.yml (apenas app + SQLite), PostgreSQL (opcional), modo contingênciaOperador escolhe o vendedor e inicia nova venda
Produtos por código, leitor ou busca; HTMX atualiza o carrinho
Dinheiro, cartão, PIX (QR Code / webhook)
Venda salva (SQLite padrão, ou H2/SQLite em offline/contingência); sync quando online
Thymeleaf, Bootstrap 5, HTMX, ApexCharts, formulários e telas de PDV, dashboard, relatórios
Controllers REST e MVC, endpoints para dashboard, PIX, cadastros; detecção de requisições HTMX
Services: Venda, Pagamento, Produto, Cliente, Estoque, Dashboard, Outbox, Sync, Contingência
JPA/Hibernate, SQLite (padrão), PostgreSQL (opcional), H2 (offline), SQLite (contingência); Repositories e migrações
Perfis de acesso: Administrador (configurações e usuários), Operador (caixa e operações do dia a dia), Visitante (apenas consultas).
mvnw)prod# Clonar (acesso mediante permissão)
git clone https://github.com/cara-core/caracore-pdv
cd caracore-pdv
# Rodar com Maven (perfil sqlite é o padrão; carga admin/admin na 1ª vez)
.\mvnw spring-boot:run
# Com perfil explícito
.\mvnw spring-boot:run -Dspring-boot.run.profiles=sqlite
.\mvnw spring-boot:run -Dspring-boot.run.profiles=prod
.\mvnw spring-boot:run -Dspring-boot.run.profiles=offline
.\mvnw spring-boot:run -Dspring-boot.run.profiles=contingency
Somente SQLite (recomendado para pequenos e médios):
docker-compose -f docker/docker-compose.sqlite.yml up -d
Um único container; na primeira subida a carga inicial (admin/admin e massa para testes Selenium) é aplicada automaticamente. Banco em /data/caracore-pdv.db (volume sqlite_data).
Outras opções: docker-compose up -d (PostgreSQL + app); docker-compose.contingency.yml para modo contingência. Credenciais (ex.: admin/admin, caixa1/1234) em STATUS_ATUAL.md.
Testes Selenium: testes/STATUS_APLICACAO_E_CENARIOS.md e verificar-status-app.bat / verificar-status-app.sh.
testes/STATUS_APLICACAO_E_CENARIOS.md; verificar-status-app.bat / verificar-status-app.shdoc/SQLITE_PEQUENOS_MEDIOS.md; docker-compose.sqlite.ymlDocumentação técnica: STATUS_ATUAL.md, doc/OFFLINE_FIRST.md, doc/MODO_CONTINGENCIA.md, doc/SQLITE_LOCAL.md (backup, cloud AES-256, USB), android-sms-enviar/README.md.
CaraCore PDV é um produto proprietário da Cara Core Informática. Para demos, implantação ou consultoria, utilize os links da seção anterior ou o site principal da empresa.