Skip to content

Planos & Limites

Visão Geral

O sistema usa um modelo freemium com 3 planos. Cada tenant (igreja) tem um plano associado que define limites de membros, usuários, e features habilitadas.

Plan Model

Namespace: App\Models\Plan (banco central)

CampoTipoDescrição
slugstringsemente, crescimento, expansao
namestringNome do plano
max_membersintegerLimite de membros (0 = ilimitado)
max_usersintegerLimite de usuários admin (0 = ilimitado)
pricedecimalPreço mensal
featuresJSONFeatures habilitadas
is_activebooleanDisponível para contratação
sort_orderintegerOrdenação na UI

Importante: O model usa getConnectionName() para sempre consultar o banco central, mesmo quando em contexto de tenant.

Planos Configurados

PlanoMembrosUsuáriosPreçoFeatures
Semente501Grátis
Crescimento2505R$ 99/mêsaudit_full, notifications_push, volunteers_schedule
ExpansãoIlimitadoIlimitadoR$ 249/mêsTudo do Crescimento + custom_roles, api_access, events_management

Tenant Helpers

O model Tenant tem métodos helper:

php
tenant()->hasFeature('audit_full')    // verifica plan.features + extra_features
tenant()->memberLimit()               // retorna max_members do plano
tenant()->isAtMemberLimit()           // true se count >= limit
tenant()->isNearMemberLimit(90)       // true se count >= 90% do limit
tenant()->isAtUserLimit()             // true se count >= limit

Limites

Soft Limit (90%)

Quando o tenant atinge 90% do limite de membros, o MemberObserver registra um log de warning. Notificação real-time via Reverb será implementada em fase futura.

Hard Limit (100%)

Ao tentar criar o membro que excede o limite, o MemberController::store() retorna back()->with('upgrade_required', true). O frontend exibe o UpgradeModal automaticamente.

Bloqueio seletivo

Membros existentes continuam acessíveis. Apenas novas inserções são bloqueadas até o upgrade.

Feature Flags

Middleware CheckFeature para proteger rotas de módulos premium:

php
Route::middleware('feature:checkin_kids')->group(function () {
    // Rotas só acessíveis se o plano tiver a feature
});

Features armazenadas em dois lugares:

  • plans.features (JSON) — features do plano base
  • tenants.extra_features (JSON) — add-ons comprados à parte

Painel Admin Central

Acesso via http://igreja.test/admin/tenants?token=ADMIN_TOKEN

Funcionalidades:

  • Lista todos os tenants com plano, contagem de membros/users
  • Troca de plano por tenant (select + save)
  • Protegido por token configurado via ADMIN_TOKEN no .env

Página de Upgrade (Tenant)

Acesso via /upgrade (qualquer user autenticado).

Mostra os 3 planos com preços, limites e features. Plano atual destacado. CTA "Entrar em contato" (sem gateway de pagamento nesta fase).