webmoney/ESTRUTURA_PROJETO.md
marco 54cccdd095 refactor: migração para desenvolvimento direto no servidor
- Removido README.md padrão do Laravel (backend)
- Removidos scripts de deploy (não mais necessários)
- Atualizado copilot-instructions.md para novo fluxo
- Adicionada documentação de auditoria do servidor
- Sincronizado código de produção com repositório

Novo workflow:
- Trabalhamos diretamente em /root/webmoney (symlink para /var/www/webmoney)
- Mudanças PHP são instantâneas
- Mudanças React requerem 'npm run build'
- Commit após validação funcional
2025-12-19 11:45:32 +01:00

332 lines
12 KiB
Markdown
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 |
---
## <20><> 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]
```