# Sistema de Administração de Igreja — Documentação Técnica

## 1. Visão Geral
Sistema web em **PHP + MySQL** para gestão de membros e controle financeiro
(dízimos e ofertas) de uma igreja, com painel de indicadores em gráficos.

## 2. Estrutura de Pastas

```
igreja_sistema/
├── config/
│   ├── conexao.php        → conexão PDO com o MySQL
│   └── funcoes.php        → funções auxiliares (sessão, sanitização, moeda)
├── membros/
│   ├── listar.php         → lista/busca membros
│   ├── cadastrar.php      → formulário + insert de novo membro
│   ├── editar.php         → formulário + update de membro
│   └── excluir.php        → delete de membro
├── financeiro/
│   ├── registrar.php      → formulário + insert de dízimo/oferta
│   └── listar.php         → lista com filtro por data/tipo
├── dashboard/
│   └── index.php          → gráficos (Chart.js) + indicadores
├── usuarios/
│   ├── login.php           → autenticação
│   ├── logout.php
│   └── generate_hash.php   → utilitário para gerar senha criptografada
├── assets/css/estilo.css
└── database.sql            → script de criação do banco
```

## 3. Como Instalar (Passo a Passo)

1. **Instale o XAMPP** (ou WAMP/MAMP) — inclui Apache, PHP e MySQL.
2. Copie a pasta `igreja_sistema` para `C:\xampp\htdocs\` (Windows) ou
   `/Applications/XAMPP/htdocs/` (Mac).
3. Abra o **phpMyAdmin** (http://localhost/phpmyadmin).
4. Crie um novo banco chamado `igreja_db` e importe o arquivo `database.sql`.
5. Acesse `usuarios/generate_hash.php?senha=SUASENHA` para gerar uma senha
   criptografada, copie o hash gerado e atualize o usuário `admin` na tabela
   `usuarios` (coluna `senha`) via phpMyAdmin.
6. **Apague o arquivo `generate_hash.php`** depois de usá-lo, por segurança.
7. Acesse `http://localhost/igreja_sistema/usuarios/login.php` no navegador.
8. Login: `admin` — Senha: a que você definiu no passo 5.

## 4. Configuração da Conexão
Edite `config/conexao.php` se o usuário/senha do MySQL forem diferentes do
padrão do XAMPP (`root` / senha vazia):

```php
$DB_HOST = 'localhost';
$DB_NAME = 'igreja_db';
$DB_USER = 'root';
$DB_PASS = '';
```

## 5. Banco de Dados — Tabelas

| Tabela    | Descrição                                              |
|-----------|---------------------------------------------------------|
| membros   | Dados cadastrais e endereço dos membros da igreja       |
| ofertas   | Lançamentos de dízimos e ofertas (ligados a um membro)   |
| usuarios  | Contas de acesso ao sistema (Admin/Tesoureiro/Pastor)    |

**Relacionamento:** `ofertas.membro_id` → `membros.id` (FOREIGN KEY).
Se um membro for excluído, o campo fica `NULL` (oferta vira "anônima"),
preservando o histórico financeiro.

## 6. Segurança Implementada
- Senhas armazenadas com `password_hash()` / verificadas com `password_verify()`.
- Todas as consultas usam **Prepared Statements** (PDO), prevenindo SQL Injection.
- Toda página interna exige login (`verificarLogin()`).
- Saída de dados tratada com `htmlspecialchars()` (prevenindo XSS).

## 7. Funcionalidades Adicionadas (v2)

### 7.1 Controle de Permissões por Nível de Acesso
A função `verificarPermissao(['Administrador'])` em `config/funcoes.php` bloqueia
o acesso de quem não tem o nível necessário. Já aplicado em:
- **Excluir membro** → apenas `Administrador`
- **Registrar dízimo/oferta** → `Administrador` e `Tesoureiro` (Pastor só visualiza)

Para aplicar em outras páginas, basta adicionar no topo do arquivo:
```php
verificarPermissao(['Administrador', 'Tesoureiro']);
```

### 7.2 Ministérios / Grupos
- Nova tela: `membros/ministerios.php` (cadastrar/listar/excluir ministérios)
- No cadastro e edição de membro, agora há checkboxes para vincular o membro
  a um ou mais ministérios (relação N:N via tabela `membros_ministerios`)

### 7.3 Exportar Relatório (Excel/CSV)
- Botão "⬇ Exportar Excel/CSV" na listagem financeira (`financeiro/listar.php`)
- Respeita os filtros de data/tipo já aplicados na tela
- Gera um arquivo `.csv` que abre direto no Excel, já com acentuação correta

### 7.4 Recibo de Dízimo/Oferta
- Cada lançamento na listagem financeira tem um link **"Ver recibo"**
- Abre uma página formatada e imprimível (`financeiro/recibo.php?id=X`)
- Não precisa instalar nenhuma biblioteca: o usuário clica em "Imprimir" e
  escolhe "Salvar como PDF" na própria janela de impressão do navegador

## 8. Próximos Passos Sugeridos
- Tela de cadastro/edição de usuários (hoje só existe via banco direto)
- Versão mobile-friendly (responsiva) das telas antigas (já aplicado nas novas: dashboard, saídas, categorias, relatório)

## 9. Funcionalidades Adicionadas (v3)

### 9.1 Módulo de Saídas / Despesas
- `financeiro/saidas.php` — cadastro e listagem de despesas, com filtro por período
- `financeiro/categorias.php` — gerenciar categorias (água, luz, aluguel, etc.)
- Apenas `Administrador` e `Tesoureiro` podem lançar/excluir despesas

### 9.2 Saldo e Relatório Completo
- Dashboard agora mostra: Total em Caixa, Entradas do mês, Saídas do mês, Saldo do mês
- `financeiro/relatorio.php` — relatório com filtro por período livre, saldo do
  período, gráfico de dízimo x oferta e gráfico de saídas por categoria
- Botão "Imprimir / Salvar PDF" no relatório (usa a função de impressão do
  navegador, sem precisar instalar biblioteca)

### 9.3 Novo Layout (Bootstrap + Menu Lateral)
- `config/layout_topo.php` e `config/layout_fim.php` — cabeçalho/rodapé
  compartilhado com Bootstrap 5 e menu lateral fixo
- Aplicado em: Dashboard, Saídas, Categorias, Relatório (telas mais antigas
  continuam com o layout simples, mas 100% funcionais)
- Para usar o novo layout em outra página, basta:
  ```php
  $tituloPagina = 'Nome da Página';
  require_once __DIR__ . '/../config/layout_topo.php';
  // ... conteúdo (use classes Bootstrap: container, card, row, col...) ...
  require_once __DIR__ . '/../config/layout_fim.php';
  ```

### 9.4 Backup do Banco de Dados
- `usuarios/backup.php` — gera um arquivo `.sql` com toda a estrutura e dados
  do banco, para download com 1 clique
- Restrito ao `Administrador`
- Funciona em qualquer hospedagem (não depende do comando `mysqldump` no
  servidor)
- Recomendação: gere esse backup pelo menos uma vez por semana e guarde em
  local seguro (Google Drive, e-mail, etc.)

## 8. Perguntas para Refinar o Projeto
Para ajustar o sistema às suas necessidades reais, preciso saber:

1. **Quantos usuários simultâneos?** (define se hospedagem compartilhada simples
   resolve, ou se precisa de um servidor mais robusto)
2. **Já existe hospedagem/XAMPP instalado?** (define o ambiente de deploy)
3. **Prioridade da primeira versão:** financeiro ou cadastro de membros?
   (define o que aprofundamos primeiro: relatórios financeiros mais avançados
   ou um cadastro de membros mais completo, com fotos, ministérios, etc.)
