# ESTRUTURA DO PROJETO WEBMONEY

**Versão:** 1.27.1  
**Última atualização:** 13 de Dezembro de 2025

---

## 📁 Estrutura Geral

```
webmoney/
├── backend/                    # Laravel 12 API
├── frontend/                   # React 18 SPA
├── VERSION                     # Versão atual
├── CHANGELOG.md                # Histórico de versões
├── README.md                   # Documentação principal
├── ESTRUTURA_PROJETO.md        # Este arquivo
├── CREDENCIAIS_SERVIDOR.md     # Acessos (confidencial)
├── ESPECIFICACIONES_WEBMONEY.md # Especificação funcional
├── APRENDIZADOS_TECNICOS.md    # Soluções de problemas
└── .DIRETRIZES_DESENVOLVIMENTO_v3  # Regras de dev
```

---

## 🔧 Backend (Laravel 12)

```
backend/
├── app/
│   ├── Http/
│   │   ├── Controllers/Api/
│   │   │   ├── AccountController.php
│   │   │   ├── AuthController.php
│   │   │   ├── CategoryController.php
│   │   │   ├── CostCenterController.php
│   │   │   ├── DashboardController.php
│   │   │   ├── EmailTestController.php
│   │   │   ├── ImportController.php
│   │   │   ├── LiabilityAccountController.php
│   │   │   ├── RecurringTemplateController.php  # Transações recorrentes
│   │   │   ├── TransactionController.php
│   │   │   └── TransferDetectionController.php  # Inclui RefundDetection
│   │   │
│   │   └── Middleware/
│   │       └── SecurityHeaders.php          # Headers de segurança
│   │
│   ├── Models/
│   │   ├── Account.php
│   │   ├── Category.php
│   │   ├── CategoryKeyword.php
│   │   ├── CostCenter.php
│   │   ├── CostCenterKeyword.php
│   │   ├── ImportLog.php
│   │   ├── ImportMapping.php
│   │   ├── LiabilityAccount.php
│   │   ├── LiabilityInstallment.php
│   │   ├── RecurringInstance.php            # Parcelas de recorrência
│   │   ├── RecurringTemplate.php            # Templates de recorrência
│   │   ├── Transaction.php
│   │   └── User.php
│   │
│   ├── Services/
│   │   ├── Import/
│   │   │   ├── ImportService.php
│   │   │   ├── ExcelParser.php
│   │   │   ├── CsvParser.php
│   │   │   ├── OfxParser.php
│   │   │   └── PdfParser.php
│   │   └── RecurringService.php             # Lógica de recorrências
│   │
│   ├── Policies/
│   │   └── RecurringTemplatePolicy.php      # Autorização
│   │
│   └── Providers/
│       └── AppServiceProvider.php           # Rate limiting config
│
├── config/
│   ├── cors.php                             # CORS configuration
│   ├── sanctum.php                          # Token expiration
│   └── session.php                          # Cookie settings
│
├── database/migrations/                     # 30+ migrations
│
├── routes/
│   └── api.php                              # Todas as rotas da API
│
└── deploy.sh                                # Script de deploy
```

---

## 🎨 Frontend (React 18)

```
frontend/
├── src/
│   ├── components/
│   │   ├── CookieConsent.jsx               # Banner LGPD/GDPR
│   │   ├── CreateRecurrenceModal.jsx       # Modal criar recorrência
│   │   ├── CurrencySelector.jsx
│   │   ├── Footer.jsx                      # Rodapé
│   │   ├── IconSelector.jsx
│   │   ├── LanguageSelector.jsx
│   │   ├── Layout.jsx                      # Menu com grupos colapsáveis
│   │   ├── Modal.jsx
│   │   ├── ProtectedRoute.jsx
│   │   ├── Toast.jsx
│   │   └── dashboard/
│   │       ├── CalendarWidget.jsx          # Calendário interativo
│   │       ├── CashflowChart.jsx           # Gráfico fluxo de caixa
│   │       ├── OverdueWidget.jsx           # Widget de vencidos
│   │       ├── OverpaymentsAnalysis.jsx    # Análise sobrepagamentos
│   │       ├── PaymentVariancesChart.jsx   # Variações de pagamento
│   │       └── UpcomingWidget.jsx          # Próximos 7 dias
│   │
│   ├── pages/
│   │   ├── Accounts.jsx
│   │   ├── Categories.jsx
│   │   ├── CostCenters.jsx
│   │   ├── Dashboard.jsx                   # Inclui todos os widgets
│   │   ├── ImportTransactions.jsx
│   │   ├── LiabilityAccounts.jsx
│   │   ├── Login.jsx
│   │   ├── RecurringTransactions.jsx       # Página de recorrentes
│   │   ├── RefundDetection.jsx             # Detecção de reembolsos
│   │   ├── Register.jsx
│   │   ├── TransactionsByWeek.jsx
│   │   └── TransferDetection.jsx
│   │
│   ├── services/
│   │   └── api.js                          # Axios + todos services
│   │
│   ├── i18n/
│   │   ├── index.js                        # Config i18next + detecção país
│   │   └── locales/
│   │       ├── es.json
│   │       ├── en.json
│   │       └── pt-BR.json
│   │
│   ├── context/
│   │   └── AuthContext.jsx
│   │
│   └── App.jsx
│
├── dist/                                    # Build de produção
└── deploy.sh                                # Script de deploy
```

---

## 🔗 Endpoints da API

### Autenticação
| Método | Endpoint | Descrição |
|--------|----------|-----------|
| POST | `/api/register` | Criar conta |
| POST | `/api/login` | Login (retorna token) |
| POST | `/api/logout` | Logout |
| GET | `/api/user` | Usuário autenticado |

### Contas Bancárias
| Método | Endpoint | Descrição |
|--------|----------|-----------|
| GET | `/api/accounts` | Listar contas |
| POST | `/api/accounts` | Criar conta |
| PUT | `/api/accounts/{id}` | Atualizar conta |
| DELETE | `/api/accounts/{id}` | Excluir conta |
| POST | `/api/accounts/{id}/recalculate-balance` | Recalcular saldo |

### Transações
| Método | Endpoint | Descrição |
|--------|----------|-----------|
| GET | `/api/transactions` | Listar (com filtros) |
| GET | `/api/transactions/by-week` | Agrupadas por semana |
| POST | `/api/transactions` | Criar |
| PUT | `/api/transactions/{id}` | Atualizar |
| DELETE | `/api/transactions/{id}` | Excluir |
| POST | `/api/transactions/{id}/toggle-status` | Alternar status |
| POST | `/api/transactions/{id}/split` | Dividir transação |

### Dashboard
| Método | Endpoint | Descrição |
|--------|----------|-----------|
| GET | `/api/dashboard/stats` | Estatísticas gerais |
| GET | `/api/dashboard/cashflow` | Fluxo de caixa mensal |
| GET | `/api/dashboard/overpayments` | Análise de sobrepagamentos |
| GET | `/api/dashboard/calendar` | Dados do calendário (mês) |
| GET | `/api/dashboard/calendar-day` | Transações de um dia |
| GET | `/api/dashboard/upcoming` | Próximos N dias pendentes |
| GET | `/api/dashboard/overdue` | Transações vencidas pendentes |

### Transações Recorrentes
| Método | Endpoint | Descrição |
|--------|----------|-----------|
| GET | `/api/recurring` | Listar templates |
| POST | `/api/recurring` | Criar template |
| POST | `/api/recurring/from-transaction` | Criar de transação |
| GET | `/api/recurring/{id}` | Detalhe do template |
| PUT | `/api/recurring/{id}` | Atualizar template |
| DELETE | `/api/recurring/{id}` | Excluir template |
| POST | `/api/recurring/{id}/pause` | Pausar template |
| POST | `/api/recurring/{id}/resume` | Retomar template |
| GET | `/api/recurring/{id}/instances` | Listar parcelas |
| GET | `/api/recurring/pending` | Todas pendentes |
| GET | `/api/recurring/overdue` | Vencidas |
| GET | `/api/recurring/due-soon` | Próximas do vencimento |
| GET | `/api/recurring/frequencies` | Frequências disponíveis |
| POST | `/api/recurring-instances/{id}/pay` | Pagar (cria transação) |
| POST | `/api/recurring-instances/{id}/reconcile` | Conciliar |
| POST | `/api/recurring-instances/{id}/skip` | Pular |
| POST | `/api/recurring-instances/{id}/cancel` | Cancelar |
| GET | `/api/recurring-instances/{id}/candidates` | Transações candidatas |

### Duplicatas
| Método | Endpoint | Descrição |
|--------|----------|-----------|
| GET | `/api/duplicates` | Listar grupos |
| POST | `/api/duplicates/{id}/ignore` | Ignorar par |
| DELETE | `/api/duplicates/{id}/auto-delete` | Auto-delete grupo |
| POST | `/api/duplicates/batch-ignore` | Ignorar em lote |
| DELETE | `/api/duplicates/batch-auto-delete` | Auto-delete em lote |

### Transferências
| Método | Endpoint | Descrição |
|--------|----------|-----------|
| GET | `/api/transfers/potential` | Transferências potenciais |
| POST | `/api/transfers/confirm` | Confirmar transferência |
| POST | `/api/transfers/ignore` | Ignorar par |

### Detecção de Reembolsos
| Método | Endpoint | Descrição |
|--------|----------|-----------|
| GET | `/api/refund-detection/potential` | Pares despesa/reembolso potenciais |
| POST | `/api/refund-detection/confirm` | Confirmar par de reembolso |
| POST | `/api/refund-detection/ignore` | Ignorar par |

### Importação
| Método | Endpoint | Descrição |
|--------|----------|-----------|
| POST | `/api/import/parse` | Parsear arquivo |
| POST | `/api/import/execute` | Executar importação |

---

## ��️ Banco de Dados

### Tabelas Principais

| Tabela | Descrição |
|--------|-----------|
| `users` | Usuários do sistema |
| `accounts` | Contas bancárias |
| `transactions` | Transações financeiras |
| `categories` | Categorias (175 pré-configuradas) |
| `category_keywords` | Keywords para auto-classificação |
| `cost_centers` | Centros de custo |
| `cost_center_keywords` | Keywords de centros de custo |
| `liability_accounts` | Contas passivo (financiamentos) |
| `liability_installments` | Parcelas de financiamentos |
| `recurring_templates` | Templates de transações recorrentes |
| `recurring_instances` | Parcelas/instâncias de recorrências |
| `import_logs` | Log de importações |
| `import_mappings` | Mapeamentos salvos |
| `ignored_duplicate_pairs` | Pares de duplicatas ignorados |
| `ignored_transfer_pairs` | Pares de transferências ignorados |
| `ignored_refund_pairs` | Pares de reembolso ignorados |

### Campos Especiais de Transações

| Campo | Tipo | Descrição |
|-------|------|-----------|
| `is_transfer` | boolean | É uma transferência |
| `transfer_pair_id` | int | ID da transação par |
| `is_refund_pair` | boolean | É parte de par reembolso |
| `refund_linked_id` | int | ID da transação vinculada (reembolso) |
| `is_split` | boolean | Foi dividida |
| `split_from_id` | int | ID da transação original |
| `recurring_instance_id` | int | ID da instância recorrente vinculada |
| `import_hash` | string | Hash SHA-256 para duplicidade |
| `original_description` | string | Descrição original do banco |

---

## 🖥️ Servidor de Produção

| Item | Valor |
|------|-------|
| **IP** | 213.165.93.60 |
| **Domínio** | webmoney.cnxifly.com |
| **Backend** | /var/www/webmoney/backend |
| **Frontend** | /var/www/webmoney/frontend/dist |
| **PHP** | 8.4-FPM |
| **Web Server** | Nginx |
| **SSL** | Let's Encrypt |
| **Sessões** | Redis |

---

## 🔐 Segurança Implementada

| Recurso | Configuração |
|---------|--------------|
| **Rate Limiting** | Login: 5/min, Register: 10/hour, API: 60/min |
| **CORS** | Restrito a webmoney.cnxifly.com |
| **Token Expiration** | 7 dias |
| **Cookies** | HttpOnly, Secure, SameSite=lax, Encrypt=true |
| **Headers** | X-XSS-Protection, X-Content-Type-Options, X-Frame-Options, CSP |

---

## 📝 Comandos Úteis

### Deploy
```bash
# Frontend
cd frontend && ./deploy.sh

# Backend
cd backend && ./deploy.sh
```

### Conectar ao Servidor
```bash
sshpass -p 'Master9354' ssh root@213.165.93.60
```

### Artisan no Servidor
```bash
cd /var/www/webmoney/backend && php artisan [comando]
```
