# 🚀 Sistema de Proration - Executar AGORA

## ✅ O que Foi Implementado

Sistema completo de **cálculo proporcional** para mudanças de plano:

### 📊 Funcionalidades

1. **Upgrade (Plano Mais Caro)**
   - ✅ Calcula valor proporcional baseado em dias restantes
   - ✅ Desconta crédito do plano atual
   - ✅ Cobra apenas a diferença
   - ✅ Mantém data de vencimento

2. **Downgrade (Plano Mais Barato)**
   - ✅ Aplica mudança imediatamente (sem pagamento)
   - ✅ Gera crédito proporcional
   - ✅ Crédito usado em renovações futuras
   - ✅ Mantém data de vencimento

3. **Renovação com Crédito**
   - ✅ Aplica crédito automaticamente
   - ✅ Reduz valor da renovação
   - ✅ Histórico de créditos

### 🎯 Cálculo Baseado em Mês

- ✅ Considera dias do **mês atual** (28, 29, 30 ou 31)
- ✅ Não usa 30 dias fixos
- ✅ Mais justo para o usuário

---

## 🚀 Deploy no Servidor

Execute estes comandos:

```bash
cd /var/www/gestorstream

# Dar permissão
chmod +x deploy_proration.sh

# Executar deploy
./deploy_proration.sh
```

**O script irá:**
1. ✅ Atualizar código do Git
2. ✅ Limpar cache do Laravel
3. ✅ Verificar se a rota foi criada
4. ✅ Testar o endpoint automaticamente

---

## 🧪 Testar o Sistema

### Teste Automático

```bash
cd /var/www/gestorstream
php test_proration.php
```

**Este script testa:**
- ✅ Cálculo de upgrade
- ✅ Cálculo de downgrade
- ✅ Geração de créditos
- ✅ Consumo de créditos
- ✅ Renovação com crédito

### Teste Manual (API)

```bash
# 1. Obter token
TOKEN="seu_token_aqui"

# 2. Calcular proration para mudança de plano
curl -X POST https://gestor.jf.eng.br/api/v1/subscriptions/calculate-proration \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"plan_id": 2}'

# Resposta esperada:
{
  "type": "upgrade",
  "amount": 24.20,
  "credit": 0,
  "description": "Upgrade com cálculo proporcional (15 dias restantes)",
  "calculation": {
    "current_plan_price": 50.00,
    "new_plan_price": 100.00,
    "days_remaining": 15,
    "days_in_period": 31,
    "unused_credit": 24.19,
    "new_plan_prorated": 48.39,
    "difference": 24.20
  },
  "current_plan": {
    "id": 1,
    "name": "Basic",
    "price": 50.00
  },
  "new_plan": {
    "id": 2,
    "name": "Pro",
    "price": 100.00
  }
}
```

---

## 📊 Exemplos de Uso

### Exemplo 1: Upgrade

**Cenário:**
- Plano atual: R$ 50/mês (Basic)
- Novo plano: R$ 100/mês (Pro)
- Dias restantes: 15 dias
- Mês: Janeiro (31 dias)

**Cálculo:**
```
Crédito não usado = (50 / 31) × 15 = R$ 24,19
Novo plano (proporcional) = (100 / 31) × 15 = R$ 48,39
Valor a pagar = R$ 48,39 - R$ 24,19 = R$ 24,20
```

**Resultado:**
- Usuário paga R$ 24,20
- Plano muda após pagamento
- Vencimento mantém-se em 15 dias

### Exemplo 2: Downgrade

**Cenário:**
- Plano atual: R$ 100/mês (Pro)
- Novo plano: R$ 50/mês (Basic)
- Dias restantes: 15 dias
- Mês: Janeiro (31 dias)

**Cálculo:**
```
Crédito não usado = (100 / 31) × 15 = R$ 48,39
Novo plano (proporcional) = (50 / 31) × 15 = R$ 24,19
Crédito gerado = R$ 48,39 - R$ 24,19 = R$ 24,20
```

**Resultado:**
- Plano muda **imediatamente** (sem pagamento)
- R$ 24,20 de crédito adicionado
- Vencimento mantém-se em 15 dias
- Crédito usado na próxima renovação

### Exemplo 3: Renovação com Crédito

**Cenário:**
- Plano: R$ 50/mês
- Crédito disponível: R$ 24,20

**Cálculo:**
```
Valor base = R$ 50,00
Crédito aplicado = R$ 24,20
Valor final = R$ 50,00 - R$ 24,20 = R$ 25,80
```

**Resultado:**
- Usuário paga R$ 25,80
- Crédito consumido

---

## 🔧 Arquivos Criados/Modificados

### Backend

1. **`app/Services/ProrationService.php`** (NOVO)
   - Serviço de cálculo proporcional
   - Métodos: `calculateProration()`, `applyProration()`, `getCreditBalance()`, `consumeCredit()`

2. **`app/Http/Controllers/Api/SubscriptionController.php`** (MODIFICADO)
   - Novo método: `calculateProration()`
   - Método `store()` modificado para usar proration
   - Downgrade aplicado imediatamente

3. **`routes/api.php`** (MODIFICADO)
   - Nova rota: `POST /subscriptions/calculate-proration`

### Scripts

1. **`deploy_proration.sh`** - Deploy automático
2. **`test_proration.php`** - Testes automáticos
3. **`SISTEMA_PRORATION.md`** - Documentação completa

---

## 📱 Frontend (Próximo Passo)

O backend está pronto. Para completar, o frontend precisa:

1. **Chamar `/calculate-proration` antes do checkout**
   - Mostrar valor calculado ao usuário
   - Explicar o cálculo (upgrade/downgrade)

2. **Mostrar saldo de crédito**
   - Na página de assinatura
   - Badge com valor disponível

3. **Confirmar downgrade**
   - Modal explicando que o crédito será gerado
   - Aplicação imediata

---

## ✅ Checklist

- [x] ✅ `ProrationService` criado
- [x] ✅ Endpoint `/calculate-proration` implementado
- [x] ✅ `store()` modificado para usar proration
- [x] ✅ Rota adicionada
- [x] ✅ Scripts de teste criados
- [x] ✅ Documentação completa
- [ ] ⏳ Deploy no servidor
- [ ] ⏳ Testes manuais
- [ ] ⏳ Frontend atualizado

---

## 🎯 Próximos Passos

1. **Execute o deploy:**
   ```bash
   cd /var/www/gestorstream
   ./deploy_proration.sh
   ```

2. **Execute os testes:**
   ```bash
   php test_proration.php
   ```

3. **Verifique os resultados**

4. **Me confirme se funcionou!**

---

**Data**: 2026-01-12  
**Status**: Backend completo, aguardando deploy  
**Documentação**: `SISTEMA_PRORATION.md`
