Oi! Este projeto foi criado para centralizar e automatizar a emissão de relatórios semanais da igreja. O objetivo é evitar o trabalho manual repetitivo, tendo um "robô" que acessa o sistema, extrai os dados e monta um documento pronto para impressão e compartilhamento.
Ele faz a distinção automática entre membros, congregados e aniversariantes de casamento, agrupando as informações por congregação e pela Sede.
⚠️ Aviso Legal: Este projeto utiliza automação web (Web Scraping). Ele foi desenvolvido para uso pessoal/institucional visando otimização de tempo. O código pode precisar de ajustes futuros caso a plataforma alvo sofra atualizações na sua interface (HTML/CSS).
Toda a automação atua de forma transparente na plataforma Church.
O Church é um sistema de gestão online para igrejas considerado um dos mais completos do Brasil, desenvolvido em diversos módulos para integração de vários setores (ideal para pequenas, médias e grandes igrejas).
Alguns dos recursos que a plataforma oferece incluem:
- Secretaria completa: Cadastro de membros, congregados, controle de aniversariantes, aplicativo Church Digital.
- Tesouraria e Financeiro: Entradas, saídas, conciliação bancária, contribuições.
- Outros recursos: Departamento Infantil, contagem de culto, backup de dados, 100% online.
Quando acionado via API, o sistema realiza os seguintes passos em segundo plano:
- Abre o navegador Google Chrome de forma invisível (
headless). - Faz o login no sistema usando as credenciais configuradas.
- Navega de forma direta para as telas de relatórios de Membros, Congregados e Casamentos.
- Preenche as datas da semana atual e aplica os filtros necessários via formulário.
- Extrai os dados em tempo real das tabelas de resultado.
- Processa e limpa as informações (ex: remoção de duplicidade de casais e ordenação alfabética).
- Gera um arquivo PDF final consolidado, com cabeçalho personalizado e todas as listas formatadas.
A base do projeto é construída com ferramentas robustas do ecossistema Java:
- Java 17 e Spring Boot 3.5 (Framework base)
- Maven (Gerenciador de dependências)
- Selenium WebDriver + WebDriverManager (Automação do navegador e extração de dados)
- OpenPDF (Criação e formatação do arquivo PDF)
- SpringDoc OpenAPI / Swagger UI (Documentação interativa da API)
- Lombok (Redução de boilerplate de código)
A arquitetura foi desenhada seguindo o padrão MVC (Model-View-Controller) adaptado para uma API, priorizando o Princípio da Responsabilidade Única (SOLID) para facilitar a manutenção e escalabilidade.
src/
└── main/
├── java/
│ └── com/github/josiasdev/RelatorioAniversariantes/
│ ├── config/ # Configurações globais (CORS, Documentação, Segurança)
│ ├── controller/ # Exposição dos Endpoints e documentação da API
│ ├── dto/ # Objetos de Transferência de Dados (Estrutura das entidades)
│ ├── service/ # Lógica de Negócio, Orquestração e Integração (WhatsApp)
│ └── ... # Classe principal da aplicação
└── resources/
└── application.properties # Parâmetros de ambiente e credenciais
docker/
└── docker-compose.yml # Orquestração do container da Evolution API
Detalhamento das Camadas:
- config/: Centraliza as definições do sistema. O arquivo OpenApiConfig.java configura a interface visual do Swagger, permitindo testar o robô sem necessidade de ferramentas externas.
- controller/: Atua como o "recepcionista" da API. O RelatorioAniversariantesController.java valida a entrada e delega o trabalho pesado para os serviços, respondendo de forma assíncrona para não travar a conexão do usuário.
- dto/: Define o contrato dos dados. Garante que as informações extraídas pelo robô (como nomes e datas) cheguem ao gerador de PDF em um formato padronizado e limpo.
- service/: Onde a "mágica" acontece.
- WebScraperService: Especialista em navegação e extração bruta de dados via Selenium.
- PdfService: Especialista em design e formatação de documentos.
- RelatorioAniversariantesService: O cérebro do sistema. Ele decide a ordem das ações, limpa dados duplicados e une as capacidades de raspagem e geração de documentos.
O sistema possui integração automática para enviar o PDF gerado diretamente para o WhatsApp. Para garantir que essa funcionalidade seja gratuita e segura, utilizamos a Evolution API rodando localmente via Docker.
1. Configurando a segurança do Docker (.env):
O repositório inclui um arquivo docker-compose.yml pré-configurado na pasta docker/. Para não expor credenciais, a API Key é lida de variáveis de ambiente. Crie um arquivo chamado .env na mesma pasta do docker-compose.yml e defina uma senha segura:
EVOLUTION_API_KEY=SUA_CHAVE_SUPER_SECRETA_AQUI2. Subindo a API:
Navegue até a pasta docker/ e execute:
docker compose up -dA API do WhatsApp estará rodando na porta 8081.
3. Conectando o seu número (Via Painel Visual): A API já vem com o Evolution Manager embutido para facilitar a conexão:
- Abra o seu navegador e acesse: http://localhost:8081/manager
- Clique no botão azul + INSTÂNCIA e preencha os dados:
- Nome da instância:
igreja - Integração: Selecione
Baileys - API Key: Cole a sua chave (a mesma do arquivo
.env) - Clique em SALVAR.
- A instância aparecerá na lista. Clique nela e, na tela de configurações, clique no botão vermelho CONECTAR.
- Um QR Code aparecerá na tela do seu computador
- Pegue o seu celular, abra o WhatsApp e vá em: Configurações > Dispositivos conectados > Conectar dispositivo.
- Escaneie o QR Code na tela.
Pronto! A interface mostrará o status "Conectado" e o seu robô Java já tem permissão para enviar os PDFs de forma autônoma.
1. Pré-requisitos:
- Java 17 (ou superior) instalado.
- Maven instalado.
- Navegador Google Chrome instalado no sistema operacional.
- Ambiente Docker rodando a Evolution API (conforme passos acima).
2. Configurando as senhas:
As senhas e configurações de disparo não ficam expostas no código. Vá até a pasta src/main/resources e abra o arquivo application.properties. Insira suas credenciais e os dados da sua Evolution API:
spring.application.name=RelatorioAniversariantes
# Credenciais para o login no sistema Church
app.credentials.client-code=SEU_CODIGO_DE_CLIENTE
app.credentials.username=SEU_USUARIO
app.credentials.password=SUA_SENHA
# --- CONFIGURAÇÕES DO WHATSAPP (EVOLUTION API) ---
whatsapp.api.url=http://localhost:8081/message/sendMedia/igreja
whatsapp.api.key=SUA_GLOBAL_API_KEY_AQUI
# Número do destinatário (Código do país + DDD + Número)
whatsapp.destinatario=55119999999993. Compilando e executando:
Abra um terminal na pasta principal do projeto e baixe as dependências:
mvn clean installExecute a aplicação:
java -jar target/RelatorioAniversariantes-0.0.1-SNAPSHOT.jarO sistema roda automaticamente toda segunda-feira às 8h da manhã. Porém, você pode dispará-lo manualmente usando o Swagger.
Com o projeto rodando, abra o seu navegador e acesse:
- Abra o endpoint de geração de relatórios.
- Clique no botão "Try it out" e depois em "Execute".
- O servidor vai responder com status 202 (Accepted).
- Acompanhe o console da sua IDE/Terminal para ver o robô trabalhando.
Quando finalizado, o arquivo relatorio_aniversariantes_ANO-MES-DIA.pdf aparecerá na pasta raiz do projeto e será disparado via WhatsApp!
[X] Implementar rotina de agendamento automático (@Scheduled) para rodar toda segunda-feira de manhã.
[X] Adicionar testes unitários para a lógica de filtro e duplicação de dados.
[X] Integrar envio automático do PDF gerado via WhatsApp API.
Desenvolvido com dedicação por Josias Batista.
Se este projeto te ajudou no seu dia a dia ou você achou a arquitetura interessante, não esqueça de deixar uma ⭐ Star no repositório! Toda contribuição, fork ou issue é super bem-vinda.