CaraCore PDV

Sistema de Ponto de Venda para Varejo

Privado Licença Proprietária Em Desenvolvimento Java 21 Spring Boot SQLite Bootstrap 5 HTMX ApexCharts Docker
Repositório Privado

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.

Visão Geral

O que é o 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:

  • 🛒 Caixa completo: Vendas, clientes, estoque, relatórios
  • 📋 Fiscal: Motor preparado para CBS/IBS 2026–2033
  • 💳 PIX: QR Code, webhook, Split
  • 📶 Offline / contingência: Funciona sem internet
  • 🗄️ SQLite padrão: Banco único, sem PostgreSQL; ideal para pequenos e médios; docker-compose.sqlite.yml
  • 🔐 Centro de Segurança e Backup: Políticas, criptografia e gestão de backup/restore
  • 📋 Planos Free e Premium: Free — 100 vendas/mês, 10 SMS de recibo/mês; Premium — recuperação de senha por SMS, configuração de e-mail e relatório automático ao contador, suporte prioritário (RustDesk/AnyDesk, botão Ajuda)

Arquitetura Técnica

Aplicaçã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:

  • Spring MVC / JPA: Controllers, serviços, repositórios
  • Thymeleaf + HTMX: Atualizações parciais sem recarregar
  • SQLite (padrão) / PostgreSQL / H2 / SQLite contingência: Banco único (sqlite), opcional PostgreSQL, offline (H2) e contingência (SQLite)
  • Spring Security: Perfis Administrador, Operador, Visitante
  • JasperReports: Relatórios PDF
  • Centro de Segurança e Backup: Políticas, criptografia de dados sensíveis, gestão de backup/restore (incl. auto-backup ao encerrar, cloud AES-256, USB via ADB no modo contingência)
  • App pdv-sms-enviar (Android): Envio de SMS na contingência; recepção de licença Premium por SMS (CC-LICENSE/CARACORE-KEY); ContentProvider para o PDV (hardware_id, licença); tela de status e Verificar Conexão USB.
  • Planos Free e Premium: 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).

Funcionalidades Principais

Motor Fiscal (CBS/IBS 2026–2033)

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.

PIX e PIX Split

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.

Dashboard (ApexCharts)

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.

Offline-First e Contingência

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.

Leitor de Código de Barras e Hotkeys

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.

Relatórios PDF e Multi-Loja

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.

SQLite para Pequenos e Médios

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.

Centro de Segurança e Backup

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).

Planos Free e Premium

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.

Stack Tecnológica

Backend

  • Java 21: Linguagem principal
  • Spring Boot 2.7: Framework web e injeção de dependências
  • JPA / Hibernate: ORM e repositórios
  • SQLite 3.51: Banco padrão (perfil sqlite); ./data/caracore-pdv.db; carga automática na 1ª execução
  • PostgreSQL 15+: Opcional; não usado no fluxo padrão (somente SQLite)
  • H2: Banco local modo offline-first
  • SQLite (contingência): Modo contingência (SMS, ADB)
  • JasperReports 6.20: Relatórios PDF

Frontend

  • Bootstrap 5.3.2: Layout responsivo
  • Thymeleaf 3.x: Templates e fragments
  • HTMX 1.9: Atualizações dinâmicas sem recarregar
  • ApexCharts 3.44: Gráficos do dashboard
  • jQuery 3.x: DOM e plugins
  • QuaggaJS: Leitura de código de barras
  • Font Awesome 6.4: Ícones

Segurança e Testes

  • Spring Security 5.x: Autenticação e perfis (Admin, Operador, Visitante)
  • JUnit 5 + Mockito 5.11: Testes unitários
  • JaCoCo 0.8.10: Cobertura de código
  • Selenium 4.18 + Pytest: Testes de interface (Python)

Infraestrutura

  • Docker / Docker Compose: docker-compose.sqlite.yml (apenas app + SQLite), PostgreSQL (opcional), modo contingência
  • Maven: Build e dependências
  • WAR: Empacotamento para deploy em servidor de aplicação

Como Funciona

Fluxo de Venda

1
Seleção de Vendedor

Operador escolhe o vendedor e inicia nova venda

2
Itens no Carrinho

Produtos por código, leitor ou busca; HTMX atualiza o carrinho

3
Pagamento

Dinheiro, cartão, PIX (QR Code / webhook)

4
Finalização

Venda salva (SQLite padrão, ou H2/SQLite em offline/contingência); sync quando online

Camadas da Aplicação

Apresentação

Thymeleaf, Bootstrap 5, HTMX, ApexCharts, formulários e telas de PDV, dashboard, relatórios

API e Controllers

Controllers REST e MVC, endpoints para dashboard, PIX, cadastros; detecção de requisições HTMX

Negócio

Services: Venda, Pagamento, Produto, Cliente, Estoque, Dashboard, Outbox, Sync, Contingência

Dados

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).

Setup e Quick Start

Pré-requisitos

  • Java 21 (JDK)
  • Maven 3.6+ (ou use mvnw)
  • SQLite (embutido; sem servidor). PostgreSQL apenas se usar perfil prod
  • Git

Executar

# 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
Docker Compose

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.

Links e Documentação

  • Apresentação (site do PDV): chmulato.github.io/caracore-pdv
  • Tecnologia: tecnologia.html (backend, frontend, SQLite, Centro de Segurança e Backup, offline, contingência, SMS)
  • Wiki Fiscal: wiki-fiscal.html (Reforma Tributária, CBS, IBS, PIX, contingência em linguagem acessível)
  • Consultoria: consultoria.html (implantação, integração PIX, contingência, Centro de Segurança e Backup)
  • Testes Selenium (Docker SQLite): testes/STATUS_APLICACAO_E_CENARIOS.md; verificar-status-app.bat / verificar-status-app.sh
  • SQLite (pequenos e médios): doc/SQLITE_PEQUENOS_MEDIOS.md; docker-compose.sqlite.yml

Documentaçã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.

Sobre o Projeto

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.