Módulo: Assinaturas e Planos — BarberBot

Catálogo de planos (grupo + itens), contratação, cobrança no financeiro (receber), baixa/aprovação e cancelamento. Documentação baseada nos arquivos do módulo (assinaturas/ e planos/).
Escopo: sistema/painel/paginas/assinaturas + sistema/painel/paginas/planos • Atualizado em 14/01/2026

📌 Visão geral e conceitos

O módulo é dividido em duas partes complementares:

  • Catálogo (assinaturas/): onde o admin define o que é um plano. Na prática, existe um grupo_assinaturas (o “plano”) e seus itens_assinaturas (o que o plano entrega: limites, recursos, valores, dias, etc).
  • Contratações (planos/): onde o admin gerencia as assinaturas dos clientes na tabela assinaturas (vencimento, pago, cancelamento, aprovação/baixa).

Importante: apesar do nome da pasta planos/, a tabela principal de contratação é assinaturas. Já o “plano” que o cliente contrata vem do catálogo (grupo_assinaturas + itens_assinaturas).

Regra de ouro do BarberBot: várias telas do painel dependem de respostas de texto exatas (strings). Se você alterar um echo sem atualizar o JS, vai “quebrar” o fluxo de atualização/alerta.

🗂️ Estrutura de arquivos

Baseado no módulo enviado (ZIP):

sistema/painel/paginas/
  ├─ assinaturas.php               (tela do catálogo)
  ├─ planos.php                    (tela de assinaturas dos clientes)
  │
  ├─ assinaturas/
  │   ├─ inserir.php               (carrega modal/form)
  │   ├─ listar.php                (lista grupo_assinaturas)
  │   ├─ salvar.php                (CRUD grupo_assinaturas)
  │   ├─ mudar-status.php          (ativa/inativa grupo)
  │   ├─ excluir.php               (exclui grupo)
  │   ├─ listar_itens.php          (lista itens_assinaturas por grupo)
  │   ├─ salvar_itens.php          (CRUD itens_assinaturas)
  │   └─ mudar-status-itens.php    (ativa/inativa item)
  │
  └─ planos/
      ├─ listar.php                (lista assinaturas — contratações)
      ├─ salvar.php                (cria assinatura para um cliente)
      ├─ status.php                (altera status/ativo e regras de ajuste)
      ├─ valor.php                 (retorna valor do item)
      ├─ dados_conta.php           (retorna dados do cliente para o modal)
      ├─ listar_planos.php         (lista itens do catálogo por grupo)
      ├─ aprovar_plano.php         (rotina central de baixa/aprovação)
      ├─ baixar.php                (atalho: aprova e dá baixa)
      ├─ cancelar.php              (cancelamento + limpeza de contas)
      └─ excluir.php               (exclui assinatura)

O que cada parte “resolve”

  • assinaturas/* → define e mantém o catálogo de planos (o que existe para contratar).
  • planos/* → controla a vida útil das assinaturas dos clientes (pagar, vencer, cancelar, ativar/inativar).

🧱 Modelo de dados (tabelas reais do módulo)

As tabelas abaixo são referenciadas diretamente nos scripts do módulo:

Tabela Uso no módulo Campos encontrados no código
grupo_assinaturas Cadastro do “plano” (nome/descrição/valor + flags de recursos). id, nome, descricao, valor, ativo, c1..c12
itens_assinaturas Itens do plano (o que o plano entrega) associados ao grupo. id, grupo, nome, valor, dias, ativo
assinaturas Assinatura do cliente (contratação): controla vencimento, pago, status e cancelamento. id, cliente, grupo, item, frequencia, data, vencimento, pago, ref_pix, ativo, cancelado
receber Contas a receber geradas pela assinatura (tipo “Plano”, por referência). referencia (usada), além de campos de valor/vencimento/baixa
frequencias Define periodicidade (dias) usada para calcular próximo vencimento. id, frequencia, dias
formas_pgto Catálogo de formas de pagamento (ex.: “MP”). nome
clientes Busca do nome e telefone para exibição e notificações. id, nome, telefone
caixas Usada na aprovação para validar/registrar operador ligado ao “Painel Assinaturas”. operador (referenciado)

Campos exatos de receber e regras de baixa variam conforme o seu financeiro. O módulo trabalha por “referência”.

🧾 Contratação e gestão de planos do cliente

Arquivos principais

  • Tela: planos.php
  • Listagem: planos/listar.php (tabela assinaturas)
  • Criar assinatura: planos/salvar.php (retorna Salvo com Sucesso)
  • Ativar/Inativar: planos/status.php (retorna Alterado com Sucesso)
  • Excluir: planos/excluir.php (retorna Excluído com Sucesso)

Status e estados (na prática)

Campo Valores observados Impacto no módulo
pago Sim / Não Quando Não e existe ref_pix, o módulo tenta consultar o pagamento.
ativo Sim / Não Usado para habilitar/desabilitar a assinatura no sistema.
cancelado Sim / Não Cancelamento via planos/cancelar.php + remoção de contas em receber.
vencimento Data (YYYY-MM-DD) Na aprovação, o próximo vencimento é calculado via frequencias.dias.

Operações “críticas”

  • Baixa (pagar/aprovar): planos/baixar.php chama planos/aprovar_plano.php e retorna Baixado com Sucesso.
  • Cancelamento: planos/cancelar.php remove a cobrança em receber e marca cancelado = Sim.
  • Consulta modal: planos/dados_conta.php busca dados de clientes para preenchimento.

💳 Integração de pagamento (MP / PIX)

No arquivo planos/listar.php, ao detectar pago = Não e ref_pix preenchido, tenta validar o pagamento automaticamente.

// Resumo do fluxo
if ($pago == 'Não' and $ref_pix != '') {
  require_once('../../../../pagamentos/consultar_pagamento.php');
  if ($status_api == 'approved') {
    // marca pago, forma_pgto = 'MP', grava data_pgto
    require_once('aprovar_plano.php');
  }
}

O módulo espera que consultar_pagamento.php exponha $status_api com valor approved.

Idempotência: aprovação automática pode rodar várias vezes. Garanta que:
  • não gere duplicidade em receber;
  • não reenvie integrações em duplicidade;
  • o UPDATE de pago seja atômico (ideal: transação).

💰 Financeiro: geração/baixa em receber

A rotina central de baixa é planos/aprovar_plano.php. O arquivo:

  1. Busca a assinatura em assinaturas e o cliente em clientes.
  2. Marca pago = Sim (e em alguns fluxos grava forma/data).
  3. Calcula o próximo vencimento via frequencias.dias.
  4. Registra/ajusta a cobrança em receber usando o id da assinatura como referência.
  5. Se WhatsApp habilitado, dispara mensagem de confirmação.

O arquivo também referencia operador "Painel Assinaturas - $usuario" em caixas.

🔁 Contratos de retorno (strings do AJAX)

Strings vistas no módulo (mantenha exatamente se o JS comparar por texto):

  • Salvo com Sucessoassinaturas/salvar.php, assinaturas/salvar_itens.php, planos/salvar.php
  • Alterado com Sucessoassinaturas/mudar-status.php, assinaturas/mudar-status-itens.php, planos/status.php
  • Excluído com Sucessoassinaturas/excluir.php, planos/excluir.php
  • Baixado com Sucessoplanos/baixar.php
  • Cancelado com Sucessoplanos/cancelar.php

Dica: padronize também erros (ex.: Erro: ...) para o front tratar.

🛡️ Pontos de segurança e manutenção

1) Validação de entrada (POST/GET)

  • Valide id, cliente, grupo, item como inteiros.
  • Cheque sessão/permissão antes de rodar query (endpoints AJAX do painel).

2) SQL Injection

  • Há consultas com interpolação. Em refactors, use prepare() + bind.
  • Operações críticas (aprovar_plano.php) devem usar transação.

3) Bugs silenciosos

  • Duplicidade: pode gerar mais de uma cobrança em receber.
  • Cancelamento: confirme se exclusão em receber filtra tipo e referencia certo.
  • WhatsApp: disparos idempotentes pra evitar spam.

✅ Checklist para dev

  • Catálogo: criar/editar grupo e itens; validar ativo.
  • Contratação: criar assinatura e garantir frequência em frequencias.
  • Pagamento: validar contrato de consultar_pagamento.php ($status_api).
  • Financeiro: revisar geração/baixa em receber e impactos no caixa.
  • Strings: não alterar textos de sucesso sem revisar JS do painel.
  • Logs: logar aprovação/cancelamento com usuário, IP e timestamp.