--- name: Recibo de Pagamento de Mensalidade (Aluno) description: Fluxo completo de baixa em mensalidade + geracao de recibo PDF + envio via WhatsApp ao aluno type: project originSessionId: 30ca44ac-e884-4293-ab32-57e3f44147be --- ## Recibo de Pagamento - Aluno (2026-04-20) ### Fluxo 1. Na dashboard, clique "Baixa" em mensalidade pendente 2. SweetAlert pergunta forma de pagamento (PIX/Dinheiro/Cartao/Boleto/Transferencia) e data 3. POST `/direcao/baixa-mensalidade/{lancamento_id}` marca `lancamentos_financeiros.status='pago'` + insere em `pagamentos` 4. Apos sucesso, SweetAlert pergunta: WhatsApp / PDF / Agora nao 5. WhatsApp: envia via `POST /api/financeiro/recibo-pagamento-whatsapp/{id}` (texto + PDF anexo) 6. PDF: abre em nova aba via `GET /api/financeiro/recibo-pagamento/{id}` ### Bug corrigido no baixaMensalidade - Antes: `baixaMensalidade($matricula_id)` recebia o ID como matricula_id mas o frontend passava `m.id` que era lancamento_id - Antes tambem nao marcava `lancamentos_financeiros` como pago (so inseria em pagamentos) - Agora: recebe `$lancamentoId`, busca matricula via lancamento, marca status='pago' + cria pagamento ### Metodos no FinanceiroController - `gerarReciboPagamentoPDF($lancamentoId, $returnPath = false)` - gera PDF com TCPDF - `montarHTMLReciboPagamento($lancamento)` - HTML do layout - `valorPorExtenso($valor)` - helper para escrever valor em portugues - `enviarReciboPagamentoWhatsApp($lancamentoId)` - gera + envia via WhatsAppService ### Layout do PDF - Cabecalho azul (#1e3a8a) com logo + titulo "RECIBO DE PAGAMENTO" - Box verde (#10b981) destacando valor pago + extenso - Secoes: Dados do Aluno, Dados do Servico, Declaracao, Assinatura - Rodape com data geracao + dominio sistema.agmusic.com.br ### Query do aluno ```sql lancamentos_financeiros lf LEFT JOIN matriculas m ON m.id = lf.matricula_id LEFT JOIN alunos a ON a.id = m.aluno_id LEFT JOIN usuarios u ON u.id = a.usuario_id -- u.nome, u.cpf, u.telefone ``` ### Rotas - `GET /api/financeiro/recibo-pagamento/{id}` - abre PDF inline - `POST /api/financeiro/recibo-pagamento-whatsapp/{id}` - envia via WhatsApp ### Arquivos alterados - `app/Controllers/FinanceiroController.php` (novos metodos) - `app/Controllers/Direcao.php` (baixaMensalidade refatorado) - `app/Config/Routes.php` (novas rotas) - `app/Views/direcao/dashboard.php` (darBaixaRapida com SweetAlert + perguntarEnvioRecibo) **Why:** Cliente precisava enviar comprovante de pagamento automaticamente apos baixa. **How to apply:** Se for adicionar baixa em outras telas, basta chamar `perguntarEnvioRecibo(lancamentoId)` apos o POST de baixa bem-sucedido.