👤

Painel do Cliente/Profissional – BarberBot

Estrutura e funcionamento do módulo sistema/painel_cliente/ (sessão → roteamento → módulos → AJAX → relatórios)
Baseado no pacote: painel_cliente.zip Revisão: 14/01/2026 Foco: manutenção + segurança

Estrutura real do módulo

Estrutura confirmada no ZIP. Observação: este painel é uma área reduzida (cliente/profissional) e possui apenas 3 módulos no menu.

sistema/painel_cliente/
  ├─ .htaccess
  ├─ index.php
  ├─ verificar.php
  ├─ logout.php
  ├─ editar-perfil.php
  ├─ css/
  ├─ js/
  ├─ img/
  ├─ images/
  ├─ fonts/
  ├─ DataTables/
  ├─ paginas/
  │  ├─ agendamentos.php
  │  ├─ planos.php
  │  ├─ receber.php
  │  ├─ agendamentos/
  │  │  └─ listar.php
  │  ├─ planos/
  │  │  └─ listar.php
  │  └─ receber/
  │     └─ listar.php
  └─ rel/
     ├─ comprovante_class.php
     ├─ comprovante_html.php
     ├─ recibo.php
     └─ recibo_html.php
Padrão BarberBot: páginas “wrapper” (paginas/<modulo>.php) cuidam do layout e carregam o conteúdo via paginas/<modulo>/listar.php (AJAX).

Rotas e navegação (.htaccess + pag)

O arquivo .htaccess reescreve rotas amigáveis para index.php?pag=.... Regras encontradas:

RewriteRule ^agendamentos$ index.php?pag=agendamentos [L]
RewriteRule ^planos$ index.php?pag=planos [L]
RewriteRule ^receber$ index.php?pag=receber [L]
RewriteRule ^whatsapp$ index.php?pag=whatsapp [L]
RewriteRule ^comanda$ index.php?pag=comanda [L]
RewriteRule ^usuarios$ index.php?pag=usuarios [L]
RewriteRule ^funcionarios$ index.php?pag=funcionarios [L]
Ponto de atenção: o .htaccess inclui rotas para whatsapp, comanda, usuarios e funcionarios, mas não existem wrappers correspondentes em paginas/ neste pacote. Se acessar essas rotas, o include do módulo falha. Recomendação: manter apenas as rotas realmente suportadas (agendamentos, planos, receber), ou criar os módulos.

Segurança e sessão

  • verificar.php bloqueia acesso quando $_SESSION['id'] não existe.
  • Existe um segundo check de sessão: $_SESSION['aut_token_505052022'] deve bater com um token fixo (hard-coded no arquivo).
  • logout.php encerra a sessão e redireciona para ../acesso.php.
Recomendação de segurança: evitar token hard-coded em arquivo público. Use token gerado por usuário/sessão, ou mova o valor para ambiente/config (fora do repositório) e regenere o token se o sistema for exposto.

index.php (layout + router)

  • Carrega ../conexao.php e executa require_once("verificar.php").
  • Tenta carregar security.php se existir (neste pacote não vem incluso).
  • Define o módulo pelo parâmetro pag (padrão: agendamentos).
  • Inclui o conteúdo com: require_once("paginas/".$pag.".php").
Ponto crítico: o valor de pag não possui allowlist no código atual. Por segurança, implemente allowlist (ex.: ['agendamentos','planos','receber']) e ignore qualquer outra entrada.

AJAX (padrão do painel)

O padrão geral de carregamento é: paginas/<modulo>.php define var pag = "..." e o JS chama paginas/<pag>/listar.php, renderizando o HTML dentro do elemento #listar.

Contratos de retorno (strings)

  • Exclusão padrão: retorno exatamente Excluído com Sucesso
  • Alteração de status: retorno exatamente Alterado com Sucesso
  • Salvar padrão: retorno exatamente Salvo com Sucesso
Importante: neste painel, os módulos atuais quase não usam os endpoints genéricos (salvar.php, excluir.php, mudar-status.php) dentro de paginas/<modulo>/. Se você criar novos módulos e quiser reaproveitar js/ajax.js, implemente esses endpoints seguindo os contratos.

Módulos existentes (paginas/)

1) Agendamentos

  • Wrapper: paginas/agendamentos.php
  • Listagem: paginas/agendamentos/listar.php
  • Cancelamento: o wrapper implementa function excluirAgd(id) e chama ajax/excluir.php via POST.
  • DataTables: tabela com id="tabela", sem ordenação e com stateSave.

2) Planos (Assinaturas)

  • Wrapper: paginas/planos.php
  • Listagem: paginas/planos/listar.php
  • Consulta pagamento PIX: chama ../../../../pagamentos/consultar_pagamento.php quando há ref_pix e o status ainda não é pago.
  • Baixa automática: tenta chamar aprovar_plano.php (via cURL).
Pendência detectada: aprovar_plano.php não existe neste pacote do painel_cliente. Sem esse endpoint, a baixa automática não acontece (dependência externa / arquivo ausente).

3) Receber (Contas do cliente)

  • Wrapper: paginas/receber.php
  • Listagem: paginas/receber/listar.php
  • Anexos: link aponta para ../painel/img/contas/<arquivo> (depende do painel admin existir nesse caminho).
  • Link de pagamento: rota ../../conta/<id>.

Perfil (editar-perfil.php)

  • editar-perfil.php recebe POST e faz UPDATE na tabela clientes usando PDO parametrizado.
  • O front costuma validar sucesso pelo texto retornado (ex.: Editado com Sucesso).
Pontos críticos de manutenção:
  • O arquivo aceita id via POST e não compara com $_SESSION['id']. Recomendado: validar que o cliente só edita o próprio perfil.
  • A senha é sempre atualizada: se senha vier vazia, o sistema grava um hash de string vazia. Recomendado: só atualizar senha se vier preenchida.

Relatórios e comprovantes (rel/)

O diretório rel/ contém páginas HTML/PHP de recibos e comprovantes (alguns com classe/geração). Arquivos presentes:

  • comprovante_class.php
  • comprovante_html.php
  • recibo.php
  • recibo_html.php
Dica: verifique dependências de geração (ex.: bibliotecas PDF, caminhos absolutos e permissões de leitura de imagens) antes de mover o painel para outro servidor/pasta.

Bibliotecas e assets

CSS carregado pelo index.php

- css/bootstrap.min.css
- css/animate.css
- css/style.css
- css/colors/blue.css
- css/custom.css
- css/sidebar-nav.min.css
- css/metisMenu.min.css
- css/Monthly.css
- css/select2.min.css
- DataTables/datatables.min.css

JS carregado pelo index.php

- js/jquery.min.js
- js/bootstrap.min.js
- js/metisMenu.min.js
- js/jquery.slimscroll.js
- js/waves.js
- js/custom.min.js
- js/select2.min.js
- js/chart.min.js
- js/Monthly.js
- js/ajax.js
- DataTables/datatables.min.js
- js/jquery.mask.min.js

Externo (CDN)

Scripts:

- https://unpkg.com/lucide@latest

Links:

- //fonts.googleapis.com/css?family=Poppins:300,400,500,600,700
Bibliotecas identificadas: Bootstrap, jQuery, DataTables, Select2, MetisMenu, SlimScroll, Waves, Chart.js, jQuery Mask e plugin Monthly (calendário).

Checklist para o próximo dev

  • Login: garantir $_SESSION['id'] + token de sessão (aut_token_505052022) corretos no fluxo de autenticação.
  • Allowlist do router: travar pag em uma lista segura antes do require_once.
  • Rotas: revisar .htaccess e remover rotas sem módulo (ou criar os módulos faltantes).
  • Planos: providenciar o endpoint externo aprovar_plano.php (ausente no pacote).
  • Perfil: validar ID do POST contra a sessão + não atualizar senha quando vazia.
  • Dependências: confirmar caminho de ajax/excluir.php, pagamentos/consultar_pagamento.php e anexos em ../painel/img/contas/.