feat: Restringir cancelamento em Billing apenas ao período de garantia

🔒 RESTRIÇÃO DE CANCELAMENTO

📍 Página /billing:
- Botão "Cancelar Assinatura" SOMENTE aparece nos primeiros 7 dias
- Após período de garantia: botão removido
- Mensagem informativa: "Para cancelar após o período de garantia, vá em Perfil"

⚖️ LÓGICA:
- withinGuaranteePeriod === true → Botão visível
- withinGuaranteePeriod === false → Botão oculto + alerta info

📄 Página /profile:
- Cancelamento sempre disponível (sem restrição)
- Wizard completo de 5 etapas
- Sistema de retenção com oferta

🌍 i18n (3 idiomas):
- pt-BR: "Para cancelar após o período de garantia, vá em Perfil"
- ES: "Para cancelar después del período de garantía, ve a Perfil"
- EN: "To cancel after the guarantee period, go to Profile"

 RESULTADO:
- Garantia (0-7 dias): Cancelamento fácil em Billing
- Após garantia: Cancelamento via Profile (wizard)
This commit is contained in:
marco 2025-12-19 17:25:30 +01:00
parent 806bfc1a89
commit b14ff0ab89
4 changed files with 17 additions and 6 deletions

View File

@ -2254,6 +2254,7 @@
"upgradePlan": "Upgrade Plan",
"changePlan": "Change Plan",
"cancelSubscription": "Cancel Subscription",
"cancelAfterGuarantee": "To cancel after the guarantee period, go to Profile",
"planFeatures": "Plan Features",
"limits": "Limits",
"accounts": "Accounts",

View File

@ -2256,6 +2256,7 @@
"upgradePlan": "Mejorar Plan",
"changePlan": "Cambiar Plan",
"cancelSubscription": "Cancelar Suscripción",
"cancelAfterGuarantee": "Para cancelar después del período de garantía, ve a Perfil",
"planFeatures": "Características del Plan",
"limits": "Límites",
"accounts": "Cuentas",

View File

@ -2274,6 +2274,7 @@
"upgradePlan": "Fazer Upgrade",
"changePlan": "Trocar Plano",
"cancelSubscription": "Cancelar Assinatura",
"cancelAfterGuarantee": "Para cancelar após o período de garantia, vá em Perfil",
"planFeatures": "Recursos do Plano",
"limits": "Limites",
"accounts": "Contas",

View File

@ -234,12 +234,20 @@ export default function Billing() {
>
{t('billing.changePlan')}
</button>
{withinGuaranteePeriod && (
<button
className="btn btn-outline-danger"
onClick={() => setShowCancelModal(true)}
>
{t('billing.cancelSubscription')}
</button>
)}
{!withinGuaranteePeriod && (
<div className="alert alert-info mb-0 mt-2" style={{ fontSize: '13px' }}>
<i className="bi bi-info-circle me-2"></i>
{t('billing.cancelAfterGuarantee')}
</div>
)}
</div>
)}
</div>