# 📌 Regra Global de Conversão Monetária → Pontos

## 🎯 Regra Estabelecida

**1 Metical (MT) = 10 Pontos Maktubia**

Esta taxa de conversão é **única, padrão e imutável** para toda a plataforma, aplicando-se a todas as transações que gerem pontos — seja em compras, campanhas, promoções ou outras formas de atribuição de pontos.

---

## ✅ Implicações da Regra

### 1. **Nenhum merchant pode alterar a taxa**
- ✅ Merchants não podem personalizar ou redefinir a taxa de conversão
- ✅ Qualquer tentativa de definir taxa customizada é ignorada
- ✅ Sistema sempre usa taxa fixa: 1 MT = 10 Pontos

### 2. **Padronização dos saldos**
- ✅ Todos os pontos acumulados obedecem à mesma unidade de cálculo
- ✅ Independentemente da loja, campanha, produto ou valor pago
- ✅ Garante interoperabilidade entre merchants

### 3. **Campanhas podem multiplicar, mas não alterar taxa base**
- ✅ Campanhas podem usar `bonus_multiplier` para multiplicar pontos
- ✅ Exemplo: `bonus_multiplier = 2.0` → 100 MT = 2000 pontos (100 * 10 * 2)
- ✅ **NÃO** podem alterar a taxa base de 10 pontos por Metical

### 4. **Garantias do sistema**
- ✅ Padronização dos saldos
- ✅ Interoperabilidade entre merchants
- ✅ Liquidez do sistema
- ✅ Controle de risco e contabilidade de pontos

---

## 🔒 Exceções

- ❌ **Não existem exceções permitidas ao nível do merchant**
- ❌ **Nenhum estabelecimento pode ter taxa customizada**
- ✅ Alterações só podem ocorrer por decisão da Administração Maktubia mediante aviso prévio global aos utilizadores

---

## 💻 Implementação Técnica

### **Constante Global**

```javascript
// config/pointsConversion.js
const BASE_CONVERSION_RATE = 10; // 1 MT = 10 Pontos (fixo)
```

### **Fórmula de Cálculo**

```javascript
// Pontos = (Valor da Compra em MT * 10) * Multiplicador de Bônus
points = purchaseAmount * BASE_CONVERSION_RATE * bonusMultiplier
```

### **Exemplos**

| Valor da Compra | Multiplicador | Pontos Calculados |
|----------------|---------------|-------------------|
| 100 MT | 1.0 (padrão) | 1,000 pontos |
| 100 MT | 2.0 (dobro) | 2,000 pontos |
| 50 MT | 1.5 (50% bônus) | 750 pontos |
| 200 MT | 3.0 (triplo) | 6,000 pontos |

---

## 🛡️ Proteções Implementadas

### **1. Validação Automática**
- ✅ Sistema ignora qualquer `conversion_rate` fornecido por merchants
- ✅ Sempre usa taxa base fixa: 10 pontos por Metical

### **2. Função Centralizada**
```javascript
// config/pointsConversion.js
function calculatePoints(purchaseAmount, bonusMultiplier = 1.0) {
    return Math.floor(purchaseAmount * BASE_CONVERSION_RATE * bonusMultiplier);
}
```

### **3. Validação de Campanhas**
- ✅ Campanhas podem definir `bonus_multiplier`
- ✅ Campanhas **NÃO** podem definir `conversion_rate`
- ✅ Qualquer tentativa é ignorada pelo sistema

---

## 📊 Impacto no Sistema

### **Antes (com taxa variável)**
- ❌ Merchants podiam definir taxas diferentes
- ❌ Pontos não eram padronizados
- ❌ Risco de inconsistência

### **Agora (com taxa fixa)**
- ✅ Taxa única e imutável: 1 MT = 10 Pontos
- ✅ Todos os pontos seguem a mesma regra
- ✅ Padronização completa
- ✅ Interoperabilidade garantida

---

## 📝 Arquivos Modificados

1. **`config/pointsConversion.js`** - Nova constante e funções
2. **`models/PurchasesModel.js`** - Usa taxa fixa
3. **`controllers/purchaseController.js`** - Usa taxa fixa
4. **`models/CampaignsModel.js`** - Ignora taxa customizada

---

## ✅ Status

- ✅ Constante global implementada
- ✅ Função de cálculo centralizada
- ✅ Validação automática implementada
- ✅ Proteção contra taxas customizadas
- ✅ Documentação completa

**Regra global implementada e ativa! 🔒**

