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