Sistema de Ponto de Venda — foco localhost e Windows Desktop
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. Loja online: canal institucional de releases · Portal oficial: pdv.caracore.com.br.
O PDV (Ponto de Venda) é o sistema de caixa usado no balcão da loja: registrar produtos, aplicar descontos, receber pagamentos e emitir comprovantes. Escopo: foco localhost e Windows Desktop — instalador EXE para Windows; ao abrir, o servidor sobe em localhost:8080 e a interface abre no navegador embutido. O CaraCore PDV é preparado para a Reforma Tributária 2026–2033 (CBS e IBS), com PIX (QR Code e Split), modo contingência (SQLite local + SMS) quando a internet cai. Banco: apenas SQLite (./data/caracore-pdv.db), carga inicial automática (admin/admin) na primeira execução e Centro de Segurança e Backup.
Em resumo:
localhost:8080 ao abrir; banco apenas SQLite; docker-compose.sqlite.yml para um containerAplicação web em Java 21 e Spring Boot 2.7, com API REST, Thymeleaf, HTMX, Bootstrap 5 e ApexCharts. Escopo: foco localhost e Windows Desktop; banco apenas SQLite. Módulos: PDV (caixa), vendas, produtos, clientes, estoque, dashboard, relatórios (JasperReports), operadores e multi-loja. Perfil sqlite (padrão): banco em ./data/caracore-pdv.db; Electron (EXE) inicia servidor local e abre em http://localhost:8080. Docker: docker-compose -f docker/docker-compose.sqlite.yml up -d. Modo contingência: SQLite local + SMS via ADB.
Componentes principais:
sqlite padrão; modo contingência usa SQLite localPlanoLicencaService, 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). Liberação Premium somente após confirmação de pagamento e registro LGPD.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: Modo contingência: SQLite local + ADB/SMS. 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 usa apenas SQLite como banco — um único arquivo, sem servidor de banco separado. 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. Liberação Premium somente após confirmação de pagamento e registro LGPD.
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); modo contingência quando necessárioOperador 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 em SQLite (modo contingência usa SQLite local); 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 (banco único do projeto); modo contingência usa SQLite local; 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)# 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
# Perfil sqlite é o padrão (banco único)
.\mvnw spring-boot:run -Dspring-boot.run.profiles=sqlite
# Modo contingência (SQLite local + SMS)
.\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).
Modo contingência: docker-compose.contingency.yml quando necessário. 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.
localhost:8080); banco apenas SQLite.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.