- Add UserManagementController@store for creating users - Add POST /api/admin/users endpoint - Support user types: Free, Pro, Admin - Auto-create 100-year subscription for Pro/Admin users - Add user creation modal to Users.jsx - Complete SaaS limit testing: - Free user limits: 1 account, 10 categories, 3 budgets, 100 tx - Middleware blocks correctly at limits - Error messages are user-friendly - Usage stats API working correctly - Update SAAS_STATUS.md with test results - Bump version to 1.51.0
3243 lines
135 KiB
Markdown
3243 lines
135 KiB
Markdown
# CHANGELOG
|
||
|
||
Todas as mudanças relevantes neste projeto serão documentadas neste arquivo.
|
||
O formato segue [Keep a Changelog](https://keepachangelog.com/pt-BR/).
|
||
Este projeto adota [Versionamento Semântico](https://semver.org/pt-BR/).
|
||
|
||
|
||
## [1.51.0] - 2025-12-17
|
||
|
||
### Added
|
||
- 👥 **Gestão de Usuários Admin** - Interface completa para administradores criarem usuários
|
||
- **Backend**:
|
||
- `UserManagementController@store`: Novo endpoint para criar usuários
|
||
- Rota `POST /api/admin/users` para criação
|
||
- Suporte a tipos de usuário: Free, Pro, Admin
|
||
- Assinatura automática Pro/Admin (100 anos, sem PayPal)
|
||
|
||
- **Frontend**:
|
||
- Modal de criação de usuário em `/users`
|
||
- Seleção de tipo: Free (sem assinatura), Pro (com assinatura), Admin (admin + assinatura)
|
||
- Feedback visual após criação
|
||
|
||
### Tested
|
||
- 🧪 **Testes Completos do SaaS** - Validação do sistema de limites
|
||
- **Usuário Free testfree2@webmoney.test (ID: 4)**:
|
||
- ✅ Limite de contas: 1/1 → Bloqueia corretamente
|
||
- ✅ Limite de categorias: 10/10 → Bloqueia corretamente
|
||
- ✅ Limite de budgets: 3/3 → Bloqueia corretamente
|
||
- ✅ Mensagens de erro amigáveis em espanhol
|
||
- ✅ API retorna `usage` e `usage_percentages` corretos
|
||
- **Usuário Pro (admin)**:
|
||
- ✅ Limites `null` = ilimitado
|
||
- ✅ 173 categorias, 1204 transações sem bloqueio
|
||
|
||
### Technical Details
|
||
- Middleware `CheckPlanLimits` validado em produção
|
||
- Endpoint `/subscription/status` retorna uso atual corretamente
|
||
- Widget `PlanUsageWidget` funcional no Dashboard
|
||
|
||
---
|
||
|
||
## [1.50.0] - 2025-12-17
|
||
|
||
### Added
|
||
- 💳 **Integração PayPal Subscriptions (Fase 3)** - Sistema completo de assinaturas com PayPal
|
||
- **Backend**:
|
||
- `PayPalService`: Integração completa com PayPal Subscriptions API
|
||
- Autenticação OAuth2 com cache de token
|
||
- Criação de produtos e planos de billing no PayPal
|
||
- Criação e cancelamento de assinaturas
|
||
- Verificação de assinatura de webhooks
|
||
- `SubscriptionController`: Endpoints para gestão de assinaturas
|
||
- `GET /api/subscription/status`: Status da assinatura atual
|
||
- `POST /api/subscription/subscribe`: Criar nova assinatura
|
||
- `POST /api/subscription/confirm`: Confirmar após retorno PayPal
|
||
- `POST /api/subscription/cancel`: Cancelar assinatura
|
||
- `GET /api/subscription/invoices`: Listar faturas do usuário
|
||
- `POST /api/paypal/webhook`: Receber eventos do PayPal
|
||
- Webhooks suportados: BILLING.SUBSCRIPTION.ACTIVATED, CANCELLED, EXPIRED, PAYMENT.SALE.COMPLETED
|
||
|
||
- **Frontend**:
|
||
- `Pricing.jsx`: Página de planos e preços
|
||
- Cards de planos com destaque para mais popular
|
||
- Badge de economia para plano anual (17%)
|
||
- Indicador de trial de 7 dias
|
||
- FAQ com perguntas frequentes
|
||
- Badges de segurança (PayPal, cancelamento)
|
||
- `Billing.jsx`: Página de faturamento
|
||
- Card com plano atual e status
|
||
- Features e limites do plano
|
||
- Lista de faturas com download PDF
|
||
- Modal de confirmação para cancelar
|
||
- Confirmação automática após retorno PayPal
|
||
|
||
- **Traduções**: Completas em ES, PT-BR, EN
|
||
- pricing.* (title, free, month, trial, FAQ, etc.)
|
||
- billing.* (status, invoices, cancel, limits, etc.)
|
||
- nav.billing, nav.pricing
|
||
|
||
- **Navegação**: Novas opções no menu Settings
|
||
- /pricing (público) - Página de planos
|
||
- /billing (auth) - Gestão de assinatura
|
||
|
||
### Technical Details
|
||
- **PayPal API v1**: Subscriptions API com OAuth2
|
||
- **Webhook Events**: Validação HMAC para segurança
|
||
- **Invoice Generation**: Numeração automática WM-YYYY-NNNNNN
|
||
- **Trial Support**: 7 dias com status 'trialing'
|
||
- **Multi-currency**: EUR (default), USD, BRL suportados
|
||
|
||
### Roadmap SaaS
|
||
1. ✅ **Fase 1**: Perfil completo do usuário
|
||
2. ✅ **Fase 2**: Tabelas de assinaturas (plans, subscriptions, invoices)
|
||
3. ✅ **Fase 3**: Integração PayPal Subscriptions
|
||
4. ⏳ **Fase 4**: Enforcement de limites por plano
|
||
|
||
### Configuration Required
|
||
Para ativar PayPal, configurar no .env:
|
||
```
|
||
PAYPAL_CLIENT_ID=your_client_id
|
||
PAYPAL_CLIENT_SECRET=your_client_secret
|
||
PAYPAL_MODE=sandbox # ou 'live' para produção
|
||
PAYPAL_WEBHOOK_ID=your_webhook_id
|
||
```
|
||
|
||
|
||
## [1.49.0] - 2025-12-17
|
||
|
||
### Added
|
||
- 💳 **Sistema de Assinaturas (Fase 2)** - Infraestrutura completa para modelo SaaS
|
||
- **Tabela `plans`**: Planos de assinatura com preços, features e limites
|
||
- Free: Grátis, até 3 contas, 10 categorias, 3 orçamentos, 1 meta
|
||
- Pro Mensual: €9.99/mês, 7 dias trial, tudo ilimitado
|
||
- Pro Anual: €99.99/ano, 17% desconto, 7 dias trial
|
||
- **Tabela `subscriptions`**: Assinaturas dos usuários
|
||
- Status: trialing, active, past_due, canceled, expired
|
||
- Suporte a trial, grace period, cancelamento
|
||
- Campos para integração PayPal
|
||
- **Tabela `invoices`**: Faturas com numeração sequencial (WM-2025-NNNNNN)
|
||
- Suporte a IVA/VAT (21% para EU)
|
||
- Snapshot de dados de billing
|
||
- **API pública**: `GET /api/plans` e `GET /api/plans/{slug}`
|
||
|
||
### Technical Details
|
||
- **Migrations**: 3 novas tabelas (plans, subscriptions, invoices)
|
||
- **Models**: Plan, Subscription, Invoice com relacionamentos e helpers
|
||
- **User Model**: Novos métodos hasActiveSubscription(), onTrial(), subscribedTo(), hasFeature(), getLimit(), currentPlan()
|
||
- **PlanController**: Endpoint público para listar planos
|
||
- **PlansSeeder**: Criação dos 3 planos base
|
||
|
||
### Roadmap SaaS
|
||
1. ✅ **Fase 1**: Perfil completo do usuário
|
||
2. ✅ **Fase 2**: Tabelas de assinaturas (plans, subscriptions, invoices)
|
||
3. ⏳ **Fase 3**: Integração PayPal Subscriptions
|
||
4. ⏳ **Fase 4**: Página de Billing e gestão de assinatura
|
||
|
||
|
||
## [1.48.0] - 2025-12-17
|
||
|
||
### Added
|
||
- 🌍 **Perfil Completo para SaaS** - Expansão da página de perfil para suportar modelo de assinaturas
|
||
- **Dados pessoais expandidos**: nome, sobrenome, email
|
||
- **Telefone internacional**: código do país selecionável (+34, +55, +1, etc.) com bandeiras
|
||
- **Preferências de comunicação**:
|
||
- Checkbox "Aceitar notificações por WhatsApp"
|
||
- Checkbox "Aceitar emails promocionais"
|
||
- **Localização**: país, timezone e idioma selecionáveis
|
||
- **Alteração de senha**: seção separada com validação
|
||
|
||
### Technical Details
|
||
- **Backend**:
|
||
- Nova migration: `add_profile_fields_to_users_table`
|
||
- Campos adicionados: `first_name`, `last_name`, `phone_country_code`, `phone`, `accept_whatsapp`, `accept_emails`, `avatar`, `country`, `timezone`, `locale`
|
||
- User Model: accessors `getFullNameAttribute()`, `getFullPhoneAttribute()`
|
||
- AuthController: `me()` e `updateProfile()` atualizados
|
||
- **Frontend**:
|
||
- Componente `Profile.jsx` redesenhado com formulário completo
|
||
- Listas de códigos de país, países e timezones
|
||
- Traduções em ES, PT-BR, EN para todos os novos campos
|
||
|
||
### Roadmap SaaS
|
||
Esta release é a **Fase 1** da transformação para SaaS:
|
||
1. ✅ **Fase 1**: Perfil completo do usuário
|
||
2. ⏳ **Fase 2**: Tabelas de assinaturas (plans, subscriptions, invoices)
|
||
3. ⏳ **Fase 3**: Integração PayPal Subscriptions
|
||
4. ⏳ **Fase 4**: Página de Billing e gestão de assinatura
|
||
|
||
|
||
## [1.47.0] - 2025-12-17
|
||
|
||
### Added
|
||
- 👤 **Página Meu Perfil** - Gerenciamento de dados pessoais do usuário
|
||
- Editar nome e email
|
||
- Alterar senha (validação de senha atual obrigatória)
|
||
- Validação em tempo real dos campos
|
||
- Feedback visual de erros e sucesso
|
||
- Traduções completas: PT-BR, EN, ES
|
||
- Link no menu Configurações > Perfil
|
||
|
||
### Technical Details
|
||
- Backend: `PUT /api/profile` no AuthController
|
||
- Frontend: `Profile.jsx` com formulários separados para dados e senha
|
||
- Service: `profileService` em api.js com atualização automática do localStorage
|
||
|
||
## [1.44.6] - 2025-12-17
|
||
|
||
### Changed
|
||
- 🛡️ **Configuração Anti-Spam para Emails** - Melhorias para garantir entrega de emails
|
||
- Headers anti-spam adicionados: X-Mailer, X-Priority, Precedence, List-Unsubscribe
|
||
- Template HTML com DOCTYPE XHTML 1.0 e charset UTF-8 correto
|
||
- DKIM validado com selector `default` (opendkim-testkey OK)
|
||
- Documentação atualizada: SPF ✅, DMARC ✅, DKIM ✅, PTR ✅
|
||
|
||
## [1.44.5] - 2025-12-17
|
||
|
||
### Added
|
||
- 📧 **Notificações de Pagamentos Vencidos** - Sistema completo de alertas diários por email
|
||
- **Email diário** no horário configurado pelo usuário (padrão: 20:00)
|
||
- **Conteúdo do email**:
|
||
- Resumo geral: total vencido, total amanhã, saldo disponível, déficit
|
||
- Lista de itens vencidos (ordenados pelo mais antigo primeiro)
|
||
- Lista de itens que vencem amanhã
|
||
- Saldos de todas as contas
|
||
- Lista de pagamentos que podem ser feitos com saldo atual
|
||
- Lista de pagamentos que não podem ser feitos (sem saldo)
|
||
- Sugestões de transferência entre contas para cobrir déficits
|
||
- **Fontes de dados**: transactions pendentes, liability_installments pendentes, recurring_instances pendentes
|
||
- **Template responsivo** em HTML com fallback para texto puro
|
||
|
||
- ⚙️ **Página de Preferências do Usuário** - Nova seção de configurações
|
||
- Ativar/desativar notificações de pagamentos
|
||
- Configurar horário de envio (input tipo time)
|
||
- Email personalizado (opcional, padrão é email do usuário)
|
||
- Botão de teste para enviar notificação imediatamente
|
||
- Configurações de idioma, timezone e moeda
|
||
- Interface com traduções em PT-BR, EN e ES
|
||
|
||
### Technical Details
|
||
- **Backend**:
|
||
- Nova tabela: `user_preferences` (notify_due_payments, notify_due_payments_time, notify_due_payments_email, language, timezone, currency)
|
||
- Novo Model: `UserPreference` com relação ao User
|
||
- Novo Artisan Command: `notify:due-payments` - executa a cada minuto via scheduler
|
||
- Nova Mailable: `DuePaymentsAlert` com templates HTML e texto
|
||
- Novo Controller: `UserPreferenceController` (GET/PUT preferences, POST test-notification)
|
||
- Scheduler configurado em `routes/console.php`
|
||
|
||
- **Frontend**:
|
||
- Nova página: `Preferences.jsx` com formulário de configurações
|
||
- Novo serviço: `preferencesService` em api.js
|
||
- Nova rota: `/preferences`
|
||
- Link no menu de configurações (dropdown do usuário)
|
||
|
||
- **Servidor**:
|
||
- Cron configurado: `* * * * * cd /var/www/webmoney/backend && php artisan schedule:run`
|
||
|
||
## [1.44.4] - 2025-12-17
|
||
|
||
### Fixed
|
||
- **Reports - Vencidos** - Corrigido endpoint `/api/reports/overdue` para exibir todas as transações vencidas
|
||
- Adicionada busca direta em `recurring_instances` pendentes com `due_date < hoje`
|
||
- Antes: apenas 1 vencido era exibido (dependia de `getOverdueRecurrences` que só buscava templates ativos)
|
||
- Agora: todas as instâncias de recorrências pendentes vencidas são exibidas (igual a parcelas de passivos e transações pendentes)
|
||
- Identificação clara com sufixo "(Recorrente)" na descrição
|
||
- `source_type: 'recurring_instance'` para diferenciar de outros tipos
|
||
|
||
## [1.44.3] - 2025-12-17
|
||
|
||
### Fixed
|
||
- 🐛 **CORREÇÃO DEFINITIVA**: Propagação Espaçada de Orçamentos por Período
|
||
- **Comportamento Desejado**: Orçamentos devem ser criados de forma **espaçada** ao longo do ano
|
||
- **Implementação Correta**:
|
||
* **monthly**: A cada 1 mês → Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec = **12 orçamentos**
|
||
* **bimestral**: A cada 2 meses → Jan, Mar, May, Jul, Sep, Nov = **6 orçamentos**
|
||
* **trimestral**: A cada 3 meses → Jan, Apr, Jul, Oct = **4 orçamentos**
|
||
* **semestral**: A cada 6 meses → Jan, Jul = **2 orçamentos**
|
||
* **yearly**: Apenas 1 vez → Jan = **1 orçamento**
|
||
- Exemplo prático: Criar orçamento **bimestral** em Janeiro → sistema cria automaticamente para Jan, Mar, Mai, Jul, Set, Nov
|
||
- v1.44.2 estava criando apenas 2 meses consecutivos (Jan, Fev) em vez de espaçados
|
||
|
||
### Technical Details
|
||
- Arquivo: `backend/app/Http/Controllers/Api/BudgetController.php`
|
||
- Método: `store()` - linhas 110-130
|
||
- Mudança: Implementado `$periodStepMap` com salto de meses baseado no período
|
||
- Lógica: `for ($monthsAhead = $step; $monthsAhead < 12; $monthsAhead += $step)`
|
||
- Resultado: Orçamentos distribuídos uniformemente ao longo de 12 meses
|
||
|
||
## [1.44.2] - 2025-12-17
|
||
|
||
### Fixed
|
||
- 🐛 **CORREÇÃO CRÍTICA**: Propagação de Orçamentos por Tipo de Período
|
||
- **BUG**: Orçamentos bimestrais, trimestrais, semestrais e anuais estavam sendo propagados para TODOS os 12 meses seguintes, ignorando o tipo de período selecionado
|
||
- **CAUSA**: Loop fixo `for ($i = 1; $i <= 12; $i++)` no método `store()` do `BudgetController`
|
||
- **SOLUÇÃO**: Implementado mapa dinâmico de propagação por tipo de período:
|
||
* **monthly**: Propaga 12 meses adicionais (mês atual + 12 seguintes) ✓
|
||
* **bimestral**: Propaga 1 mês adicional (2 meses totais) ✓
|
||
* **trimestral**: Propaga 2 meses adicionais (3 meses totais) ✓
|
||
* **semestral**: Propaga 5 meses adicionais (6 meses totais) ✓
|
||
* **yearly**: SEM propagação (1 mês apenas) ✓
|
||
- Exemplo: Orçamento bimestral criado em Janeiro → cria Janeiro + Fevereiro (2 meses)
|
||
- Antes: Orçamento bimestral criado em Janeiro → criava Janeiro até Dezembro (12 meses) ❌
|
||
|
||
### Technical Details
|
||
- Arquivo: `backend/app/Http/Controllers/Api/BudgetController.php`
|
||
- Método: `store()` - linhas 110-161
|
||
- Mudança: Loop dinâmico baseado em `$monthsToPropagateMap`
|
||
- Compatibilidade: Mantida para orçamentos existentes (não afetados)
|
||
|
||
## [1.44.1] - 2025-12-17
|
||
|
||
### Fixed
|
||
- 🐛 **HOTFIX**: Erro de sintaxe no BudgetController.php linha 158
|
||
- Removida vírgula dupla e código solto que causava erro 500 em todas as rotas de budgets
|
||
- Corrigido: `'message' => 'Presupuesto creado y propagado',, 'costCenter'`
|
||
- Para: `'message' => 'Presupuesto creado y propagado',`
|
||
- Adicionado `costCenter` ao load() corretamente
|
||
|
||
## [1.44.0] - 2025-12-17
|
||
|
||
### Added
|
||
- ✨ **NOVA FUNCIONALIDADE**: Centros de Custos em Orçamentos
|
||
- Orçamentos agora podem ser filtrados por Centro de Custos (opcional)
|
||
- Validação aceita: categoria OU subcategoria OU centro de custos
|
||
- Backend: Migration adiciona coluna `cost_center_id` na tabela `budgets`
|
||
- Frontend: Seletor de centro de custos no modal de criação de orçamento
|
||
- Frontend: Exibição do nome do centro de custos nos cards de orçamento
|
||
|
||
- ✨ **NOVA FUNCIONALIDADE**: Tipos de Período Completos
|
||
- Migration atualiza enum `period_type` com todos os períodos:
|
||
* monthly (mensal) - 1 mês
|
||
* bimestral (bimestral) - 2 meses
|
||
* trimestral (trimestral) - 3 meses
|
||
* semestral (semestral) - 6 meses
|
||
* yearly (anual) - 12 meses
|
||
- Cálculo de períodos já estava implementado no modelo Budget.php
|
||
|
||
### Changed
|
||
- 📝 BudgetController: Atualizado para incluir `costCenter` em relacionamentos eager loading
|
||
- 📝 BudgetController: Validação de duplicatas agora considera `cost_center_id`
|
||
- 📝 Budget Model: Cálculo de `spent_amount` agora filtra por `cost_center_id`
|
||
- 📝 Budget Model: Adicionado relacionamento `costCenter()`
|
||
- 🌐 Traduções: Adicionadas chaves para cost center e tipos de período (pt-BR, es, en)
|
||
|
||
### Technical
|
||
- 🗄️ Migration: `2025_12_17_000001_add_cost_center_and_update_periods_to_budgets.php`
|
||
- Adiciona coluna `cost_center_id` (nullable, foreign key)
|
||
- Atualiza `period_type` ENUM para incluir bimestral, trimestral, semestral
|
||
|
||
## [1.43.26] - 2025-12-16
|
||
|
||
### Fixed
|
||
- 🐛 **FIX CRITICAL**: Erro 500 em projection-chart por variável indefinida
|
||
- Removido uso de `$overdueTransactions` (variável que não existe mais após reescrita)
|
||
- Substituído por `$overdueImpact` calculado anteriormente
|
||
- Linhas 1306-1307: removido `overdue_count` e simplificado `overdue_impact`
|
||
|
||
## [1.43.25] - 2025-12-16
|
||
|
||
### Fixed
|
||
- 🐛 **REESCRITA COMPLETA - Projeção de Saldo Widget**
|
||
- **Bug crítico corrigido**: Estava duplicando valores (templates + instâncias)
|
||
- **Bug crítico corrigido**: Lógica de overdue invertida (somava ao invés de subtrair)
|
||
- Nova lógica simplificada e correta:
|
||
* Ponto inicial = Saldo atual real (current_balance das contas)
|
||
* Vencidos aplicados imediatamente no primeiro ponto (bizum 94€ + aluguel 1003€ = -1097€)
|
||
* Apenas recurring_instances (não templates) são processadas
|
||
* Vencidos processados uma única vez no início
|
||
* Futuros processados em cada período (dia/semana)
|
||
- Cálculo correto: 64.55€ (saldo) - 1097.81€ (vencidos) = -1033.26€ (projeção inicial)
|
||
|
||
## [1.43.24] - 2025-12-16
|
||
|
||
### Fixed
|
||
- 🐛 **Projeção de Saldo - Instâncias Recorrentes Vencidas**
|
||
- FIX: Widget de projeção agora inclui `recurring_instances` com status pendente e vencidas
|
||
- Corrigida query para usar `planned_date` ao invés de `effective_date` nas transações pendentes
|
||
- Adicionada query separada para `recurring_instances` vencidas e futuras
|
||
- Impacto: Projeção agora reflete corretamente valores como Aluguel (1003.59€) e Bizum Asenergy (94.22€) vencidos
|
||
- Cálculo: Saldo Atual - Transações Vencidas - Instâncias Recorrentes Vencidas = Projeção Correta
|
||
|
||
## [1.43.23] - 2025-12-16
|
||
|
||
### Fixed
|
||
- 🐛 **Critical**: Erro de inicialização circular no Dashboard causado por dependências no useEffect de eventos
|
||
- Removidas dependências `loadSummary`, `loadCashflow`, `loadVariances` do array de dependências
|
||
- useEffect agora apenas atualiza `refreshKey`, permitindo que componentes façam seus próprios fetches
|
||
- Corrigido erro: "Cannot access 'O' before initialization"
|
||
|
||
## [1.43.22] - 2025-12-16
|
||
|
||
### Fixed
|
||
- **Widget de Projeção - Refresh Automático**
|
||
- FIX: Widget de projeção agora atualiza automaticamente quando há mudanças
|
||
- Sistema de eventos customizados para comunicação entre componentes
|
||
- Eventos implementados: `recurring-paid`, `transaction-created`, `transaction-updated`, `transaction-deleted`, `recurring-updated`
|
||
- Dashboard escuta eventos e força recarregamento via `refreshKey`
|
||
- CalendarWidget emite eventos após pagar/conciliar instâncias
|
||
- Widget de projeção desmonta e remonta para recarregar dados atualizados
|
||
|
||
## [1.43.21] - 2025-12-16
|
||
|
||
### Fixed
|
||
- **Projeção de Saldo - Instâncias de Recorrências Vencidas**
|
||
- FIX CRÍTICO: Projeção agora inclui instâncias de recorrências pendentes vencidas
|
||
- Exemplo: "Aluguel" (1003,59€, vencida há 15 dias) e "Compra Bizum Asenergy" (94,22€, vencida há 29 dias)
|
||
- Query adicional para `recurring_instances` com `status='pending'` e `due_date < hoje`
|
||
- Separa receitas e despesas vencidas corretamente
|
||
- Valores agora aparecem em `overdue.income` e `overdue.expense`
|
||
|
||
## [1.43.20] - 2025-12-16
|
||
|
||
### Fixed
|
||
- **Projeção de Saldo - Transações Pendentes Vencidas**
|
||
- FIX: Projeção agora inclui transações pendentes vencidas (status='pending' e planned_date < hoje)
|
||
- Adicionadas transações pendentes futuras (planned_date entre hoje e fim do mês)
|
||
- Separação clara entre transações vencidas (overdue) e pendentes (pending_this_month)
|
||
- Response JSON atualizado com breakdown completo:
|
||
* `overdue.income` e `overdue.expense` (transações vencidas)
|
||
* `pending_this_month.pending_income` e `pending_expense` (transações futuras)
|
||
- Projeção inteligente agora considera: realizado + recorrências + passivos + vencidos + pendentes
|
||
|
||
## [1.43.19] - 2025-12-16
|
||
|
||
### Changed
|
||
- **Revisão Completa do Modal de Editar Template Recorrente**
|
||
- Adicionados TODOS os campos disponíveis no modelo (17 campos totais)
|
||
- Campos adicionados: `transaction_description`, `frequency_interval`, `start_date`, `end_date`, `max_occurrences`, `cost_center_id`, `is_active`
|
||
- Interface reorganizada com ícones e labels claros
|
||
- Campos condicionais (day_of_month apenas para frequências mensais)
|
||
- Validação e parsing corretos dos dados antes do envio
|
||
- Placeholders e textos de ajuda para melhor UX
|
||
- Informações do template (ID, data criação, ocorrências geradas) exibidas no rodapé
|
||
- Suporte a status ativo/pausado com toggle visual
|
||
- Campo de intervalo para repetições personalizadas (ex: a cada 2 meses)
|
||
|
||
## [1.43.18] - 2025-12-16
|
||
|
||
### Changed
|
||
- **Hard Delete de Templates Recorrentes**
|
||
- Exclusão agora remove permanentemente template e TODAS as instâncias do banco de dados
|
||
- Backend: `forceDelete()` em vez de soft delete ou desativação
|
||
- Remove todas as instâncias (futuras, pagas, canceladas, etc.)
|
||
- Modal de confirmação atualizado com avisos claros sobre exclusão permanente
|
||
- Ação irreversível - dados não podem ser recuperados
|
||
|
||
## [1.43.17] - 2025-12-16
|
||
|
||
### Changed
|
||
- **Categorias - Revisão Completa de Cores para Máximo Contraste**
|
||
- **170 categorias revisadas e padronizadas** com cores escuras para perfeito contraste
|
||
- Sistema de cores por família:
|
||
* **Alimentação**: Vermelhos escuros (#dc2626 a #450a0a)
|
||
* **Transporte**: Azuis escuros (#2563eb a #172554)
|
||
* **Moradia**: Roxos escuros (#7c3aed a #2e1065)
|
||
* **Saúde**: Verdes escuros (#059669 a #064e3b)
|
||
* **Educação**: Laranjas escuros (#d97706 a #78350f)
|
||
* **Lazer**: Rosas escuros (#db2777 a #881337)
|
||
* **Vestuário**: Cianos escuros (#0891b2 a #164e63)
|
||
* **Beleza**: Roxos escuros (#9333ea a #581c87)
|
||
* **Tecnologia**: Índigos escuros (#4f46e5 a #312e81)
|
||
* **Pets**: Teals escuros (#0d9488 a #134e4a)
|
||
* **Vending**: Laranjas escuros (#ea580c a #7c2d12)
|
||
* **Vaper/Tabaco**: Azuis escuros (#1e40af a #2563eb)
|
||
* **Investimentos**: Verdes escuros (#16a34a a #14532d)
|
||
* **Impostos**: Vermelhos escuros (#b91c1c a #450a0a)
|
||
* **Seguros**: Azuis escuros (#0284c7 a #0c4a6e)
|
||
* **Presentes**: Rosas escuros (#e11d48 a #881337)
|
||
* **Empréstimos**: Limas escuros (#65a30d a #365314)
|
||
* **Salário**: Verdes escuros (#16a34a a #14532d)
|
||
* **Negócios**: Azuis escuros (#1d4ed8 a #172554)
|
||
* **Outras Receitas**: Roxos escuros (#7c3aed a #3b0a78)
|
||
* **Viagens**: Vermelhos escuros (#b91c1c a #7f1d1d)
|
||
* **Passeios Turísticos**: Laranjas escuros (#d97706 a #78350f)
|
||
* **Filhos**: Cores diversas escuras por subcategoria
|
||
- **Garantia**: 100% das categorias com contraste WCAG AA+ (texto branco legível)
|
||
- **Consistência**: Cores relacionadas dentro da mesma família
|
||
- **Identificação visual**: Cada grupo tem sua paleta única
|
||
|
||
## [1.43.16] - 2025-12-16
|
||
|
||
### Changed
|
||
- **Categorias - Padronização Global de Contraste**
|
||
- Ajustadas **TODAS** as cores de categorias para garantir contraste adequado com texto branco
|
||
- 18 categorias com cores muito claras foram escurecidas:
|
||
* Delivery: #FCA5A5 → #dc2626 (vermelho escuro)
|
||
* Tapas/Pinchos: #FCA5A5 → #dc2626
|
||
* Bar/Cervecería: #F87171 → #dc2626
|
||
* Pedágio: #93C5FD → #2563eb (azul escuro)
|
||
* Seguro Veículo: #60A5FA → #3b82f6
|
||
* Bicicleta/Patinete: #60A5FA → #3b82f6
|
||
* Plano de Saúde: #6EE7B7 → #059669 (verde escuro)
|
||
* Academia: #34D399 → #10b981
|
||
* Idiomas: #FCD34D → #d97706 (laranja escuro)
|
||
* Hobbies: #F9A8D4 → #db2777 (rosa escuro)
|
||
* Eventos: #F472B6 → #ec4899
|
||
* Cosméticos: #E9D5FF → #9333ea (roxo escuro)
|
||
* Cloud/SaaS: #C7D2FE → #4f46e5 (índigo escuro)
|
||
* Aluguel Máquinas: #FDBA74 → #f97316 (laranja)
|
||
* Flamenco & Cultura: #FCD34D → #FCD34D (mantido, limite aceitável)
|
||
* Excursões Guiadas: #FDE68A → #FCD34D
|
||
* Passeios & Tours: #FCA5A5 → #B91C1C (vermelho escuro)
|
||
* Seguro Viagem: #F87171 → #DC2626
|
||
- **Resultado**: 100% das categorias agora têm excelente legibilidade
|
||
- Padrão uniforme em toda a aplicação
|
||
|
||
## [1.43.15] - 2025-12-16
|
||
|
||
### Changed
|
||
- **Categorias - Melhor Contraste para Moradia**
|
||
- Cores da categoria "Moradia" e subcategorias ajustadas para tons mais escuros
|
||
- Melhora significativa no contraste com texto branco
|
||
- Cores atualizadas:
|
||
* Moradia: #8B5CF6 → #7c3aed (roxo mais escuro)
|
||
* Aluguel: #7C3AED → #6d28d9
|
||
* Condomínio: #6D28D9 → #5b21b6
|
||
* Luz: #5B21B6 → #4c1d95
|
||
* Água: #4C1D95 → #3b0a78
|
||
* Gás: #2E1065 → #2e1065 (mantido)
|
||
* Internet: #C4B5FD → #8b5cf6 (muito mais escuro)
|
||
* Telefone: #A78BFA → #7c3aed (muito mais escuro)
|
||
* Reparos: #8B5CF6 → #6d28d9
|
||
- Todas agora têm legibilidade excelente em badges
|
||
|
||
## [1.43.14] - 2025-12-16
|
||
|
||
### Fixed
|
||
- **Relatórios - Badges de Categoria (Recorrentes e Futuras)**
|
||
- Adicionado `fontSize: '0.75rem'` aos badges de categoria
|
||
- Aplicado em:
|
||
* Transações Recorrentes
|
||
* Transações Futuras
|
||
- Agora todos os badges de categoria têm tamanho consistente
|
||
|
||
## [1.43.13] - 2025-12-16
|
||
|
||
### Changed
|
||
- **Relatórios - Padronização de Badges**
|
||
- **Categorias**: Agora usam cores personalizadas (category_color) ao invés de `bg-primary`
|
||
* Mostram ícone da categoria quando disponível
|
||
* Fallback para `bg-secondary` quando sem categoria
|
||
* Aplicado em: Maiores Gastos, Transações Futuras
|
||
- **Tamanhos de fonte**: Padronizados em `0.75rem` para todos os badges
|
||
* Porcentagens, contadores, dias, frequências, tipos
|
||
- **Tipo de Passivo**: Alterado de `bg-secondary` para `bg-info` (azul)
|
||
- **Frequência (Recorrentes)**: Alterado de `bg-secondary` para `bg-primary` (destaque)
|
||
- **Consistência visual**: Todos os badges agora seguem o mesmo padrão de estilo
|
||
|
||
### Fixed
|
||
- Cards mobile de Maiores Gastos agora mostram cor e ícone corretos da categoria
|
||
- Transações Futuras mostram fallback quando sem categoria
|
||
|
||
## [1.43.12] - 2025-12-16
|
||
|
||
### Fixed
|
||
- **Transações Recorrentes - Badge de Tipo**
|
||
- Badge de "Débito" agora aparece em vermelho (`bg-danger`) ✅
|
||
- Badge de "Crédito" continua em verde (`bg-success`) ✅
|
||
- Problema: Código comparava `template.type === 'expense'` mas banco usa 'debit'/'credit'
|
||
- Solução: Corrigido para `template.type === 'debit'`
|
||
- Aplicado em:
|
||
* Cards mobile
|
||
* Tabela desktop
|
||
|
||
## [1.43.11] - 2025-12-16
|
||
|
||
### Added
|
||
- **Relatórios - Filtro de Período**
|
||
- Seletores de "Data Início" e "Data Fim" nos relatórios:
|
||
* Por Categoria
|
||
* Por Centro de Custo
|
||
* Maiores Gastos
|
||
- Período padrão: Início do ano (01/01/2025) até hoje (16/12/2025)
|
||
- Usuário pode alterar o período livremente
|
||
- Interface responsiva: campos lado a lado em desktop, empilhados em mobile
|
||
- Parâmetros `start_date` e `end_date` enviados à API
|
||
- Traduções:
|
||
* pt-BR: "Data Início", "Data Fim"
|
||
* en: "Start Date", "End Date"
|
||
* es: "Fecha Inicio", "Fecha Fin"
|
||
|
||
### Changed
|
||
- **Frontend - Reports.jsx**
|
||
- Estados `startDate` e `endDate` adicionados
|
||
- useEffect atualizado com dependências `startDate` e `endDate`
|
||
- Parâmetros de data incluídos em:
|
||
* `reportService.getByCategory()`
|
||
* `reportService.getByCostCenter()`
|
||
* `reportService.getTopExpenses()`
|
||
|
||
## [1.43.10] - 2025-12-16
|
||
|
||
### Fixed
|
||
- **Relatórios - Drill-down de Categorias e Centros de Custo**
|
||
- **FIX CRÍTICO**: Ao clicar em uma categoria/centro pai, a soma das subcategorias não batia com o total
|
||
- Problema: Query do nível 3 filtrava apenas `c.parent_id = ?`, excluindo transações da categoria pai
|
||
- Exemplo: "Vaper/Tabaco" mostrava 784,68€ (correto), mas subcategorias somavam 297,33€
|
||
- Causa: 487,35€ estavam na própria categoria pai, não nas subcategorias
|
||
- Solução: Query agora usa `(c.id = ? OR c.parent_id = ?)` para incluir categoria pai e subcategorias
|
||
- Aplicado em:
|
||
* `/api/reports/by-category` (parâmetro `parent_id`)
|
||
* `/api/reports/by-cost-center` (parâmetros `cost_center_id` + `category_id`)
|
||
- Agora mostra corretamente:
|
||
* Categoria pai: 487,35€
|
||
* Subcategoria 1: 240,45€
|
||
* Subcategoria 2: 44,20€
|
||
* Subcategoria 3: 12,68€
|
||
* **Total: 784,68€** ✅
|
||
|
||
## [1.43.9] - 2025-12-16
|
||
|
||
### Added
|
||
- **Relatório de Centros de Custo - Drill-down de 3 Níveis**
|
||
- Nível 1: Mostra todos os centros de custo
|
||
- Nível 2: Clicar em um centro de custo mostra categorias (agrupadas por categoria pai)
|
||
- Nível 3: Clicar em uma categoria mostra suas subcategorias
|
||
- Navegação com breadcrumbs: "Todos os Centros" > Nome do Centro > Nome da Categoria
|
||
- Botões "Voltar" em cada nível
|
||
- Otimização mobile: cards responsivos em todos os 3 níveis
|
||
- Hover visual em tabelas e cards clicáveis
|
||
|
||
- **Backend - API /reports/by-cost-center**
|
||
- Parâmetros: `cost_center_id` (nível 2) e `category_id` (nível 3)
|
||
- Sem parâmetros: lista centros de custo
|
||
- Com `cost_center_id`: lista categorias pai do centro de custo
|
||
- Com `cost_center_id` + `category_id`: lista subcategorias da categoria
|
||
- Query usa COALESCE para agregar subcategorias na categoria pai
|
||
- Suporte para transações sem centro de custo (id=0, "Sem classificar")
|
||
|
||
- **Tradução i18n**
|
||
- pt-BR: "Todos os Centros", "Voltar para Todos os Centros", "Voltar para {nome}"
|
||
- es: "Todos los Centros"
|
||
- en: "All Centers"
|
||
|
||
### Changed
|
||
- **Frontend - Reports.jsx**
|
||
- Adicionados estados: `selectedCostCenter` e `selectedCostCenterCategory`
|
||
- Função `renderCostCenter` reescrita com lógica de 3 níveis
|
||
- useEffect reage a mudanças de `selectedCostCenter` e `selectedCostCenterCategory`
|
||
- Estilo condicional: cursor pointer e hover apenas para itens clicáveis
|
||
- Breadcrumbs dinâmicos baseados no nível de navegação
|
||
|
||
## [1.43.8] - 2025-12-16
|
||
|
||
### Added
|
||
- **Relatório de Categorias - Drill-down para Subcategorias**
|
||
- Clicar em uma categoria pai agora mostra suas subcategorias em um novo gráfico
|
||
- Mesmo layout visual (gráfico de pizza + lista/cards)
|
||
- Botão "Voltar" para retornar às categorias principais
|
||
- Hover visual em tabelas e cards clicáveis
|
||
- Backend suporta filtro `parent_id` para mostrar apenas subcategorias de uma categoria específica
|
||
|
||
- **Tradução i18n**
|
||
- pt-BR: "Distribuição de Subcategorias"
|
||
- es: "Distribución de Subcategorías"
|
||
- en: "Subcategory Distribution"
|
||
|
||
### Changed
|
||
- **Backend - API /reports/by-category**
|
||
- Novo parâmetro `parent_id` para filtrar subcategorias
|
||
- Query padrão agrupa por categoria pai, somando transações de todas as subcategorias
|
||
- Query com `parent_id` filtra subcategorias da categoria especificada
|
||
- **FIX**: Transações em subcategorias agora aparecem corretamente agrupadas na categoria pai
|
||
|
||
## [1.43.7] - 2025-12-16
|
||
|
||
### Changed
|
||
- **Backend - Relatório de Centros de Custo incluindo transações sem centro**
|
||
- Transações sem centro de custo (`cost_center_id = NULL`) agora aparecem como categoria "General"
|
||
- Cor padrão: #6b7280 para transações não classificadas
|
||
- Query modificada: COALESCE para tratar NULLs como id=0, nome='General'
|
||
- Relatório completo: todas as transações aparecem no relatório byCostCenter
|
||
|
||
### Added
|
||
- **Frontend - Tradução i18n 'general'**
|
||
- pt-BR: "Geral"
|
||
- es: "General"
|
||
- en: "General"
|
||
|
||
- **Frontend - Reports Mobile Optimization (Continuação)**
|
||
- **Tab Category**: col-12 mobile, gráfico 300px, lista em cards compactos
|
||
- **Tab Evolution**: Cards 2x2, gráficos 250px/200px, botões xs, fontes 0.7-0.85rem
|
||
- **Tab TopExpenses - Lista Detalhada**: Cards compactos mobile vs tabela desktop
|
||
|
||
|
||
## [1.43.6] - 2025-12-16
|
||
|
||
### Improved
|
||
- **Modal Detalhes Liabilities - Mobile Otimizado** - Visualização completa mobile
|
||
- Modal: fullscreen mobile vs xl desktop
|
||
- Header: fontes 0.95rem, ícone 0.9rem, texto truncado
|
||
- Summary cards: Grid 2x2 mobile, padding 0.5rem, fontes 0.65-0.85rem
|
||
- Taxas: Grid 3 colunas mobile, labels curtos (Mensal/Anual/Total)
|
||
- Progress bar: 12px mobile, fontes 0.65-0.75rem
|
||
- Parcelas: **Cards layout mobile** com todas as info compactas
|
||
- Cards parcelas: status badge, valores, juros, taxas, botões de ação
|
||
- Botão footer: full-width mobile, fonte 0.85rem
|
||
- Desktop: Tabela completa preservada
|
||
- i18n: Adicionadas chaves 'monthly', 'annual', 'total' em pt-BR e es
|
||
|
||
|
||
## [1.43.5] - 2025-12-16
|
||
|
||
### Improved
|
||
- **Página Liabilities - Mobile Otimizado** - Contas Passivo adaptadas para mobile
|
||
- Header: Layout flex-column, botão full-width, fontes reduzidas (1.1rem/0.75rem)
|
||
- Summary Cards: Grid 2 colunas mobile, sem ícones laterais, texto truncado
|
||
- Valores compactos: 0.9rem mobile vs 1.25rem desktop
|
||
- Filtros: Grid 50/50 mobile sem label, fontes 0.8rem
|
||
- Cards de Contratos: col-12 mobile, padding 0.75rem, fontes 0.65-0.85rem
|
||
- Progress bar: 6px mobile vs 8px desktop
|
||
- Botões: fontes 0.75rem mobile, mantém ícones e funcionalidade
|
||
- Desktop: Layout original preservado
|
||
|
||
|
||
## [1.43.4] - 2025-12-16
|
||
|
||
### Improved
|
||
- **Badges Padronizados** - Estilo translúcido consistente em todo o sistema
|
||
- Padrão global via CSS: `bg-{color}` → estilo `bg-opacity-25 text-{color}` automático
|
||
- Aparência moderna e uniforme: background translúcido + texto colorido
|
||
- Afetados: RecurringTransactions, Accounts, Categories, TransactionsByWeek, FinancialHealth, CostCenters
|
||
- Widgets: UpcomingWidget, OverdueWidget, CalendarWidget, OverpaymentsAnalysis
|
||
- Simplificação: remover classes redundantes dos JSX, CSS aplica estilo
|
||
|
||
- **Botões de Ação Padronizados** - RecurringTransactions
|
||
- Estilo outline consistente: `btn-outline-{color}` em todas as abas
|
||
- Templates e Instâncias usam mesmo padrão visual
|
||
- Info (visualizar), Primary (executar), Success (editar), Warning (adiar), Danger (excluir)
|
||
|
||
|
||
## [1.43.3] - 2025-12-16
|
||
|
||
### Improved
|
||
- **Página Transações - Mobile Completo** - Lista de transações otimizada para mobile
|
||
- Cards individuais: data + badges (tipo/status) + descrição + conta + categoria + valor
|
||
- Menu dropdown com todas as ações (completar, editar, duplicar, dividir, etc.)
|
||
- Descrição original do banco visível quando diferente
|
||
- Fontes: 0.65-1rem, padding p-3, borders secundários
|
||
- Desktop mantém tabela completa
|
||
|
||
- **Paginação Mobile** - Controles otimizados
|
||
- Mobile: Mostra apenas 3 botões (anterior, atual, próxima)
|
||
- Indicador "/ total" para contexto
|
||
- Botões maiores (36px) para facilitar toque
|
||
- Desktop: Mantém visualização de até 7 páginas
|
||
|
||
### Fixed
|
||
- **CategorySelector - Scroll e Visualização** - Problemas em modais corrigidos
|
||
- Position fixed com z-index 100000 (acima de modais)
|
||
- Scroll sempre visível com scrollbar customizada (8px)
|
||
- Altura fixa garantindo funcionamento: 280px (mobile) / 350px (desktop)
|
||
- Largura mínima inteligente: 280px (mobile) / 320px (desktop)
|
||
- Ajuste automático de posição se ultrapassar viewport
|
||
- Margens de segurança: 10-20px das bordas
|
||
- Cores da scrollbar harmonizadas com tema escuro
|
||
- `-webkit-overflow-scrolling: touch` para iOS
|
||
- Modal com `overflow: auto` para scroll adequado
|
||
- Cálculo simplificado e robusto de posição
|
||
- Funciona perfeitamente em todos os lugares (modais e páginas)
|
||
|
||
|
||
## [1.43.2] - 2025-12-16
|
||
|
||
### Improved
|
||
- **Página Accounts - Contas Passivo Mobile** - Layout em cards para mobile
|
||
- Seção "Passivos" convertida para cards em dispositivos mobile
|
||
- Cards mostram: ícone + nome + status + número contrato + credor
|
||
- Valores principal e saldo devedor lado a lado
|
||
- Barra de progresso com percentagem visual
|
||
- Fontes otimizadas: 0.65-0.85rem para legibilidade mobile
|
||
- Padding compacto: p-3, background escuro (#0f172a)
|
||
- Mantém onClick para navegar para /liabilities
|
||
- Desktop mantém layout de tabela completo
|
||
|
||
|
||
## [1.43.1] - 2025-12-16
|
||
|
||
### Fixed
|
||
- **Espaços em branco desnecessários em Mobile** - Otimização completa de altura e padding
|
||
- Widget Fluxo de Caixa:
|
||
- Removido `h-100` em mobile (agora se ajusta ao conteúdo)
|
||
- Card-body padding reduzido: 1rem
|
||
- Estados loading/erro: altura 280px (antes 350px fixo)
|
||
- Gráfico: 280px (mobile) vs 350px (desktop)
|
||
- Resumo: margens reduzidas `mt-3 pt-2`
|
||
- Widget Projeção de Saldo:
|
||
- Card-body padding: 1rem em mobile
|
||
- Gráfico reduzido: 250px (mobile) vs 350px (desktop)
|
||
- Alertas compactos: padding `p-2`, margens `mb-2/mb-3`, fonte 0.75rem
|
||
- Textos abreviados em alertas para economizar espaço
|
||
|
||
### Improved
|
||
- **Abreviações em textos mobile** - Labels compactos sem quebra de linha
|
||
- Fluxo de Caixa: "RECEITAS", "DESPESAS", "MÉD. REC.", "MÉD. DESP."
|
||
- Sobrepagamentos: "TOTAL", "QTD", "MÉDIA"
|
||
- Alertas: "Saldo negativo em" ao invés de "Previsão de saldo negativo em"
|
||
- Todos com `whiteSpace: 'nowrap'` para prevenir quebras
|
||
|
||
## [1.43.0] - 2025-12-16
|
||
|
||
### Added
|
||
- **Widget Projeção de Saldo Mobile** - Comportamento colapsável implementado
|
||
- Inicia colapsado em mobile, expande automaticamente se houver dados
|
||
- Botão toggle chevron up/down no header
|
||
- Botões de período (1, 2, 3, 6, 12 meses) otimizados:
|
||
- Desktop: btn-group horizontal
|
||
- Mobile: layout flex-wrap em 3 colunas (33.333% cada)
|
||
- Altura do gráfico ajustada: 300px (mobile) vs 350px (desktop)
|
||
- Cards de estatísticas otimizados para mobile:
|
||
- Padding reduzido: p-2 (mobile) vs p-3 (desktop)
|
||
- Gap menor: g-2 vs g-3
|
||
- Fontes menores: labels 0.7rem, valores 0.9rem
|
||
- Percentual de variação oculto em mobile
|
||
|
||
- **Widget Análise de Sobrepagamentos Mobile** - UX completamente redesenhada
|
||
- Comportamento colapsável com auto-expansão quando há dados
|
||
- Header otimizado: texto menor, badge compacto, "(12 meses)" oculto
|
||
- Gráfico responsivo: 180px (mobile) vs 220px (desktop)
|
||
- Cards de resumo compactos: padding p-1, fontes 0.65-0.85rem
|
||
- **Layout de transações revolucionário**:
|
||
- Mobile: Cards verticais ao invés de tabela horizontal
|
||
- Cada card mostra: descrição, valor (+), categoria, data, percentual
|
||
- Fontes otimizadas: 0.6-0.75rem
|
||
- Border amarelo sutil para destaque
|
||
- Altura máxima: 200px com scroll
|
||
- Desktop: Tabela completa mantida com todas as colunas
|
||
|
||
### Fixed
|
||
- **React Hooks Error #310** - Corrigida violação das regras de hooks
|
||
- Problema: `useEffect` sendo chamado após returns condicionais
|
||
- Solução: Movido cálculo de `monthsData` para antes dos returns
|
||
- Adicionado `useEffect` na importação: `import { useEffect }`
|
||
- Todos os hooks agora executam na ordem correta
|
||
- Dependências corretas em useEffect: `[isMobile, monthsData.length, isExpanded]`
|
||
|
||
### Improved
|
||
- **Consistência Mobile Global** - Todos os widgets principais otimizados:
|
||
- ✅ Calendário: navegação entre semanas + colapso
|
||
- ✅ Próximos 7 Dias: colapso + sync altura desktop
|
||
- ✅ Transações em Atraso: colapso + auto-expansão
|
||
- ✅ Projeção de Saldo: colapso + botões otimizados + cards compactos
|
||
- ✅ Análise Sobrepagamentos: colapso + layout cards mobile
|
||
- UX mobile profissional e consistente em todo Dashboard
|
||
|
||
## [1.42.0] - 2025-12-16
|
||
|
||
### Added
|
||
- **Navegação entre semanas no Calendário Mobile** - Implementada paginação completa
|
||
- Botões chevron esquerda/direita para navegar entre semanas
|
||
- Título dinâmico: "Esta Semana", "+1 semana", "-2 semanas", etc.
|
||
- Botão "Hoje" reseta para semana atual (weekOffset = 0)
|
||
- Calendário carrega dados automaticamente da semana selecionada
|
||
- Offset de semanas persistente durante navegação
|
||
|
||
### Fixed
|
||
- **Calendário não exibia em Mobile** - Corrigida lógica de renderização
|
||
- Problema: condição `day.isCurrentMonth` escondia dias em mobile
|
||
- Solução: `(isMobile || day.isCurrentMonth)` permite mostrar semana completa
|
||
- Adicionado grid CSS: `.calendar-grid` e `.calendar-grid-week` (7 colunas)
|
||
- Botão toggle (chevron) implementado no header mobile
|
||
- Badge mostra quantidade de transações do dia selecionado
|
||
- Tamanhos específicos: mobile (11px, 50px min-height) vs desktop (12px, 32px)
|
||
- Destaque visual do dia atual com border primary
|
||
|
||
### Changed
|
||
- **Widget Transações em Atraso - Comportamento Mobile** - Consistência com outros widgets
|
||
- Inicia colapsado em mobile (apenas header visível)
|
||
- Auto-expansão quando há transações vencidas
|
||
- Botão toggle chevron up/down no header
|
||
- Badge mostra total de itens vencidos
|
||
- Altura dinâmica: `height: auto` em mobile
|
||
- Body com `display: none` quando colapsado
|
||
|
||
### Improved
|
||
- **Consistência Mobile** - Todos os widgets do Dashboard seguem mesmo padrão:
|
||
- ✅ Calendário: colapso + navegação entre semanas
|
||
- ✅ Próximos 7 Dias: colapso + auto-expansão com dados
|
||
- ✅ Transações em Atraso: colapso + auto-expansão com dados
|
||
- UX unificada e previsível em dispositivos móveis
|
||
|
||
## [1.41.1] - 2025-12-16
|
||
|
||
### Fixed
|
||
- **Sincronização de altura em Desktop** - Widget "Próximos 7 Dias" agora sincroniza perfeitamente com o card central de transações
|
||
- Corrigido seletor para buscar `.col-lg-8 .col-lg-7 .card` (lista de transações do dia)
|
||
- Aumentado timeout de 100ms para 200ms para garantir renderização completa
|
||
- Altura idêntica entre os 3 widgets em desktop: calendário, transações do dia e próximos 7 dias
|
||
|
||
### Validated
|
||
- ✅ Mobile: Widgets colapsam corretamente, expandem apenas com dados
|
||
- ✅ Desktop: Altura sincronizada perfeitamente entre todos os widgets
|
||
|
||
## [1.41.0] - 2025-12-16
|
||
|
||
### Changed
|
||
- **WIDGETS COLAPSÁVEIS EM MOBILE** - Otimização do Dashboard para telas pequenas
|
||
- Calendário e Próximos 7 Dias iniciam colapsados em mobile (<768px)
|
||
- Expansão automática quando houver dados para exibir
|
||
- Botão toggle (chevron up/down) no header para expandir/colapsar manualmente
|
||
- Badge com contagem de itens no header quando há dados
|
||
- CalendarWidget: mostra quantidade de transações do dia selecionado
|
||
- UpcomingWidget: mostra quantidade total de transações pendentes
|
||
- Comportamento desktop mantido: sempre expandido
|
||
|
||
### Improved
|
||
- **UX Mobile** - Menos scroll necessário, informação visível apenas quando relevante
|
||
- **Performance** - Reduz altura inicial da página em mobile
|
||
- **Feedback visual** - Badges indicam quantidade de dados sem necessidade de expandir
|
||
|
||
## [1.40.0] - 2025-12-16
|
||
|
||
### Changed
|
||
- **SIDEBAR MOBILE OVERLAY** - UX completamente reimaginada para mobile
|
||
- Sidebar escondida por padrão em mobile (<768px) - conteúdo em tela cheia
|
||
- Hamburger menu (☰) no header para abrir sidebar
|
||
- Sidebar slide-in overlay (280px) sobre o conteúdo
|
||
- Backdrop escuro (rgba(0,0,0,0.5)) para fechar ao clicar fora
|
||
- Animação suave: cubic-bezier(0.4, 0, 0.2, 1) 0.3s
|
||
- Shadow: 4px 0 12px quando aberta
|
||
- App-main: margin-left 0 em mobile (100% width)
|
||
- Fechamento automático ao redimensionar para desktop
|
||
- Mantém comportamento desktop: sidebar fixa colapsável
|
||
|
||
### Fixed
|
||
- **Layout mobile** - Agora conteúdo usa 100% da largura da tela
|
||
- **Touch target** - Hamburger menu 44x44px (Apple HIG)
|
||
- **Safe areas** - Removido padding-left/right do body para permitir overlay
|
||
- **Backdrop** - Escondido em desktop, visível apenas em mobile
|
||
|
||
## [1.39.2] - 2025-12-16
|
||
|
||
### Fixed
|
||
- **Responsividade iPhone CORRIGIDA** - CSS com !important para forçar aplicação
|
||
- Sidebar forçada para 60px em mobile (<768px) com !important
|
||
- Sidebar extra-compacta (56px) em telas <430px
|
||
- Sidebar 50px em landscape mode (<430px altura)
|
||
- App-main margin-left ajustado automaticamente
|
||
- Texto sidebar 100% escondido em mobile (display/opacity/visibility: none)
|
||
- Touch targets 44x44px em todos elementos interativos
|
||
- Safe area insets aplicadas a sidebar e app-main
|
||
- Cards ultra-compactas: padding 0.5rem em <430px
|
||
- Gráficos: 250px (portrait) / 180px (landscape)
|
||
- Modais: margin 0.5rem, width calc(100% - 1rem)
|
||
- Row margins: -0.25rem para aproveitar espaço
|
||
- Tabelas: font 0.8rem, padding 0.3rem/0.2rem
|
||
- Inputs: font-size 16px para prevenir zoom
|
||
- PWA: overscroll-behavior none, sidebar fixed position
|
||
- Todos os !important necessários para sobrescrever CSS existente
|
||
|
||
## [1.39.1] - 2025-12-16
|
||
|
||
### Fixed
|
||
- **Responsividade iPhone** - Otimizações para telas verticais iOS
|
||
- Viewport otimizado: viewport-fit=cover, user-scalable=no
|
||
- Safe Area Insets: suporte completo para notch e Dynamic Island
|
||
- Touch targets mínimos de 44x44px (Apple Human Interface Guidelines)
|
||
- Inputs com font-size 16px para prevenir zoom automático no iOS
|
||
- Previne bounce scroll (overscroll-behavior-y: none)
|
||
- -webkit-overflow-scrolling: touch para scroll suave
|
||
- Media queries específicas para iPhone (max-width: 430px)
|
||
- Landscape mode otimizado (max-height: 430px)
|
||
- Reduz padding/margens em telas <430px
|
||
- Canvas gráficos: max-height 250px (portrait) / 180px (landscape)
|
||
- Tap highlight otimizado: rgba azul translúcido
|
||
- Dropdowns com max-height e touch scrolling
|
||
- Modais ajustados para safe area (notch/island)
|
||
- Remove bounce quando instalado como PWA (display-mode: standalone)
|
||
|
||
### Changed
|
||
- **Tamanhos de fonte** ajustados para iPhone: 10pt base em telas <430px
|
||
- **Cards e modais** com padding reduzido em telas pequenas
|
||
- **Tabelas** com fonte 10pt e padding compacto em mobile
|
||
|
||
## [1.39.0] - 2025-12-16
|
||
|
||
### Added
|
||
- **PWA para iOS** - Aplicativo instalável em iPhone/iPad
|
||
- Service Worker com estratégias de cache offline-first
|
||
- Cache versionado (v1.39.0) com limpeza automática de versões antigas
|
||
- Estratégias de cache por tipo: Cache-First (imagens/fontes), Network-First (API), Stale-While-Revalidate (HTML/CSS/JS)
|
||
- Registro automático do Service Worker em main.jsx
|
||
- Verificação de atualizações a cada 1 hora
|
||
- Prompt de atualização quando nova versão disponível
|
||
- manifest.json otimizado: scope, categories (finance/productivity/business)
|
||
- Meta tags iOS: apple-mobile-web-app-capable, black-translucent status bar
|
||
- Meta tag format-detection para desabilitar auto-detecção de telefones
|
||
- Ícone Apple Touch Icon (180x180) no manifest
|
||
- Suporte completo para instalação via Safari iOS
|
||
|
||
### Changed
|
||
- **Service Worker** atualizado para versão 1.39.0
|
||
- **manifest.json** - Adicionado prefer_related_applications: false
|
||
- **index.html** - Status bar style alterado de "default" para "black-translucent" (melhor em iOS)
|
||
|
||
## [1.38.0] - 2025-12-15
|
||
|
||
### Added
|
||
- **Projeção de Saldo** - Agora considera transações em atraso
|
||
- Backend busca todas as transações pendentes (incluindo atrasadas)
|
||
- Processa transações atrasadas ANTES do ponto inicial da projeção
|
||
- Adiciona informações de transações em atraso no summary da API
|
||
- Frontend exibe alerta amarelo quando há transações em atraso incluídas
|
||
- Alerta mostra quantidade de transações e impacto no saldo
|
||
- Traduções completas: overdueIncluded, overdueTransactions, includedInProjection (pt-BR, en, es)
|
||
- Melhora precisão da projeção ao incluir todas as pendências
|
||
|
||
## [1.37.0] - 2025-12-15
|
||
|
||
### Added
|
||
- **Dashboard** - Gráfico de Projeção de Saldo
|
||
- Adicionado componente BalanceProjectionChart ao Dashboard
|
||
- Exibe projeção futura do saldo baseado em transações pendentes e recorrentes
|
||
- Posicionado após transações vencidas, antes do fluxo de caixa
|
||
- Mesmo gráfico disponível na seção de Relatórios > Projeção
|
||
- Oferece visualização rápida do saldo esperado nos próximos meses
|
||
|
||
## [1.36.2] - 2025-12-15
|
||
|
||
### Added
|
||
- **Categorias** - Nova subcategoria em Tecnologia
|
||
- 🔄 Subscrições (ID: 180, Cor: #06B6D4, Ícone: bi-arrow-repeat)
|
||
- Ideal para Netflix, Spotify, Amazon Prime, Office 365, etc.
|
||
|
||
### Fixed
|
||
- **i18n** - Corrigida tradução financialHealth.insights.high_concentration
|
||
- Backend gera insights com tipo `high_concentration` (snake_case)
|
||
- Adicionada chave em snake_case além da camelCase existente
|
||
- Traduções completas: pt-BR, en, es
|
||
- Insight agora exibe corretamente quando categoria representa >40% dos gastos
|
||
|
||
## [1.36.1] - 2025-12-15
|
||
|
||
### Fixed
|
||
- **Bug Critical - Relatórios Passivos** - Corrigido erro "n is not a function"
|
||
- Problema: `formatDate` estava sendo importado incorretamente do hook useFormatters
|
||
- Solução: Hook exporta `date`, ajustado para `date: formatDate` na desestruturação
|
||
- Erro ocorria ao clicar na aba de Passivos devido à formatação da próxima parcela
|
||
- Seção de Passivos agora funciona corretamente
|
||
|
||
## [1.36.0] - 2025-12-15
|
||
|
||
### Improved
|
||
- **UI/UX da Seção Maiores Despesas** - Interface completamente redesenhada
|
||
- 4 Cards KPI com gradientes: Maior Despesa, Média, Menor Despesa, Total de Transações
|
||
- Gráfico de Barras Horizontais mostrando Top 10 despesas com degradê de cores
|
||
- Tabela detalhada completa com:
|
||
* Badges coloridos para posições (top 3 em vermelho, top 10 em amarelo)
|
||
* Barra de progresso visual mostrando % do total
|
||
* Categorias em badges
|
||
* Formatação profissional com sticky header
|
||
* Scroll independente para listas longas
|
||
- Layout responsivo em grid com altura controlada
|
||
- Tooltips do gráfico com informações completas (valor, categoria, data)
|
||
- Traduções: topExpensesAnalysis, highestExpense, averageExpense, lowestExpense, totalTransactions, top10Expenses, detailedList
|
||
|
||
## [1.35.0] - 2025-12-15
|
||
|
||
### Improved
|
||
- **UI/UX da Comparação de Períodos** - Interface completamente redesenhada
|
||
- Cards KPI com gradientes e ícones grandes para cada métrica
|
||
- Badges de variação com validação de NaN/Infinity
|
||
- Tabela comparativa detalhada com métricas lado a lado
|
||
- Gráfico de barras agrupadas com tooltips aprimorados
|
||
- Layout responsivo: tabela 5 colunas + gráfico 7 colunas
|
||
- Design profissional com hierarquia visual clara
|
||
- Traduções: periodComparison, vsPreviousPeriod, detailedComparison, visualComparison, metric, variation
|
||
|
||
## [1.34.7] - 2025-12-15
|
||
|
||
### Fixed
|
||
- **i18n** - Adicionada tradução costCenters.name
|
||
- Adicionado `costCenters.name` ("Nome" / "Name" / "Nombre")
|
||
- Corrige coluna de nome em relatórios por centro de custo
|
||
- Traduções completas em pt-BR, en, es
|
||
|
||
### Added
|
||
- **Categorias** - Adicionadas subcategorias em "Filhos"
|
||
- 💰 Mesada - Mesada, semanada, dinheiro de bolso
|
||
- 🎈 Passeios - Parques, cinema, zoológico, eventos
|
||
- 🎂 Festas - Aniversário, festas, eventos infantis
|
||
- ✏️ Material Escolar - Cadernos, lápis, mochilas, uniformes
|
||
- 🚌 Transporte Escolar - Ônibus escolar, transporte particular
|
||
- Total: 12 subcategorias em "Filhos"
|
||
|
||
## [1.34.6] - 2025-12-15
|
||
|
||
### Fixed
|
||
- **i18n** - Adicionadas traduções para credit e debit
|
||
- Adicionado `transactions.credit` ("Crédito" / "Credit" / "Crédito")
|
||
- Adicionado `transactions.debit` ("Débito" / "Debit" / "Débito")
|
||
- Corrige exibição de tipo em Templates de Recorrência
|
||
- Traduções completas em pt-BR, en, es
|
||
|
||
## [1.34.5] - 2025-12-15
|
||
|
||
### Fixed
|
||
- **i18n** - Adicionadas traduções faltantes em Templates de Recorrência
|
||
- Adicionado `transactions.expense` ("Despesa" / "Expense" / "Gasto")
|
||
- Adicionado `transactions.income` ("Receita" / "Income" / "Ingreso")
|
||
- Corrige exibição dos filtros de tipo na página de recorrência
|
||
- Traduções completas em pt-BR, en, es
|
||
|
||
## [1.34.4] - 2025-12-15
|
||
|
||
### Fixed
|
||
- **Templates de Recorrência** - Corrigido carregamento da lista de templates
|
||
- Filtros vazios (`""`) eram enviados à API causando resultado vazio
|
||
- Agora remove parâmetros vazios antes de fazer a requisição
|
||
- Templates agora aparecem corretamente na aba "Templates de Recorrência"
|
||
|
||
## [1.34.3] - 2025-12-15
|
||
|
||
### Fixed
|
||
- **Relatório de Passivos** - Corrigida formatação da data da próxima parcela
|
||
- Data agora usa `formatDate()` para exibição legível
|
||
- Corrige exibição de timestamp ISO bruto (ex: "2026-01-05T00:00:00.000000Z")
|
||
- Formato final: "05/01/2026" (localizado conforme idioma)
|
||
|
||
## [1.34.2] - 2025-12-15
|
||
|
||
### Fixed
|
||
- **Resumo de Relatórios** - Corrigido exibição de "NaN%" nos badges de variação
|
||
- Adicionada validação `isNaN()` e `isFinite()` antes de exibir percentuais
|
||
- Badges de variação agora só aparecem com valores válidos
|
||
- Corrige problema quando dados do ano anterior são zero ou inexistentes
|
||
|
||
## [1.34.1] - 2025-12-15
|
||
|
||
### Improved
|
||
- **UI/UX do Resumo de Relatórios** - Interface redesenhada com visual mais profissional
|
||
- Cards KPI com ícones grandes e hierarquia visual clara
|
||
- Badges de variação com fundo branco para melhor contraste
|
||
- Adicionadas métricas de média mensal em todos os cards
|
||
- Novo card dedicado para Taxa de Poupança com barra de progresso
|
||
- Feedback visual inteligente baseado na taxa de poupança:
|
||
* 🎯 ≥20%: "Excelente poupança!"
|
||
* 👍 ≥10%: "Boa poupança"
|
||
* 💡 <10%: "Pode melhorar"
|
||
- Gráfico comparativo melhorado com bordas arredondadas e tooltips aprimorados
|
||
- Header do resumo com ícone e seletor de ano redesenhado
|
||
- Tradução completa: pt-BR, en, es
|
||
|
||
## [1.34.0] - 2025-12-14
|
||
|
||
### Fixed
|
||
- **Relatório de Passivos** - Correção de campo para valor total da dívida
|
||
- Alterado `total_amount` para `total_contract_value` (campo correto do modelo)
|
||
- Dívida Total agora exibe o valor correto das contas de passivo
|
||
|
||
- **Relatório de Transações Futuras** - Padronização de nomenclatura
|
||
- Alterado `total_items` para `total_transactions` no resumo
|
||
- Melhora consistência com outros endpoints da API
|
||
|
||
## [1.33.0] - 2025-12-14
|
||
|
||
### Added
|
||
- **Gráfico de Projeção de Saldo** - Nova funcionalidade para visualizar projeções futuras
|
||
- Endpoint `GET /api/reports/projection-chart?months={1-12}`
|
||
- Componente React `BalanceProjectionChart.jsx` com Chart.js
|
||
- Seletor de período: 1, 2, 3, 6 ou 12 meses
|
||
- Projeções diárias/semanais baseadas em:
|
||
* Templates recorrentes ativos
|
||
* Parcelas de passivos pendentes
|
||
* Transações agendadas
|
||
- Cartões de resumo: saldo atual/final, mínimo/máximo, variação
|
||
- Alerta automático se projeção indicar saldo negativo
|
||
- Tradução completa: pt-BR, en, es
|
||
|
||
### Fixed
|
||
- **Projection Chart API** - Correção de type casting
|
||
- Adicionado cast `(int)` no parâmetro `months` para evitar erro Carbon
|
||
- Simplificada query SQL para evitar tabela `exchange_rates` inexistente
|
||
|
||
- **Migrações** - Corrigidas dependências e ordem de execução
|
||
- Migration 2025_12_08_170001 movida temporariamente (dependência de `transactions`)
|
||
- Migration 2025_12_08_230001 ajustada (referência a `import_hash`)
|
||
- Todas as 35 migrações executadas com sucesso
|
||
|
||
- **Permissões** - Ajustadas permissões do backend
|
||
- `bootstrap/cache` alterado de root para www-data
|
||
- `chmod -R 775` nos diretórios críticos
|
||
|
||
### Changed
|
||
- **Banco de Dados** - Reset completo com `migrate:fresh`
|
||
- 37 tabelas recriadas do zero
|
||
- Usuário recriado: Marco Leite (marco@cnxifly.com)
|
||
- Novo token API gerado: 1|5Zg7Uxrc9qmV5h13YqLj8FbM2HAZZyultCillkDif3c7be04
|
||
|
||
- **Deploy** - Limpeza completa do servidor e redeploy
|
||
- Removidos arquivos enviados manualmente (fora do processo)
|
||
- Deploy obrigatório via scripts `./deploy.sh`
|
||
- Preservados `storage/logs` e `.env`
|
||
|
||
|
||
## [1.32.2] - 2025-12-14
|
||
|
||
### Fixed
|
||
- **Endpoint `/api/reports/future-transactions`** - Corregido error 500 y datos vacíos
|
||
- Reescrito completamente para incluir 3 fuentes de datos:
|
||
1. Transacciones pendientes/programadas (usando `planned_date` en lugar de `effective_date`)
|
||
2. Cuotas de pasivos pendientes (`liability_installments`)
|
||
3. Proyecciones de recurrencias activas (`recurring_templates`)
|
||
- Añadidos helpers `getNextRecurrenceDates()` y `advanceToNextOccurrence()` para calcular fechas futuras
|
||
- Corregida query SQL: removida referencia a columna `c.name` inexistente en tabla de cuotas
|
||
- Soporta frecuencias: diaria, semanal, quincenal, mensual, bimestral, trimestral, semestral, anual
|
||
|
||
- **Endpoint `/api/reports/overdue`** - Corregido para mostrar todos los vencidos
|
||
- Incluye cuotas de pasivos vencidas (due_date < hoy)
|
||
- Incluye transacciones pending/scheduled con fecha pasada
|
||
- Calcula días de atraso correctamente
|
||
|
||
- **Deploy** - Usado script oficial `deploy.sh` con rsync
|
||
- Evita problemas de caché y archivos en ubicaciones incorrectas
|
||
- Sincronización completa de directorios
|
||
|
||
|
||
## [1.32.1] - 2025-12-14
|
||
|
||
### Fixed
|
||
- **Reportes por Categoría** - Corregido bug de agrupación que mostraba totales incorrectos
|
||
- El total de "Garagem" mostraba 3062.88€ (todo "Transporte") en lugar de 1201.25€
|
||
- La query agrupaba por parent_id pero mostraba nombre de subcategoría
|
||
- Ahora cada subcategoría muestra su total individual correcto
|
||
- Añadido parámetro opcional `group_by_parent=true` para agrupar por categoría padre
|
||
|
||
- **Endpoint `/api/reports/overdue`** - Corregido error 500
|
||
- Cambiado `li.amount` a `li.installment_amount` (nombre correcto de la columna)
|
||
- Añadida condición `deleted_at IS NULL` para excluir registros eliminados
|
||
|
||
### Changed
|
||
- **Servidor actualizado** - Aplicadas 12 actualizaciones de seguridad
|
||
- Kernel Linux 6.8.0-90
|
||
- Nginx 1.29.4
|
||
- PHP-common actualizado
|
||
- AppArmor 4.0.1
|
||
|
||
- **Actualizaciones automáticas configuradas**
|
||
- Unattended-upgrades habilitado
|
||
- Actualizaciones semanales (cada 7 días)
|
||
- Auto-limpieza cada 30 días
|
||
- Incluye: Ubuntu security, updates, Nginx, PHP PPA
|
||
|
||
|
||
## [1.32.0] - 2025-12-14
|
||
|
||
### Added
|
||
- **Salud Financiera (Financial Health)** - Nueva página completa
|
||
- Puntuación de 0-100 con anillo visual animado
|
||
- 6 métricas de salud: Capacidad de Ahorro, Control de Deudas, Gestión de Presupuesto, Inversiones, Fondo de Emergencia, Planificación Futura
|
||
- Tarjetas de métricas con gradientes de color
|
||
- Gráfico de evolución histórica de score
|
||
- Sección de insights con alertas y sugerencias
|
||
- Recomendaciones personalizadas
|
||
- Cards de estadísticas rápidas (balance, ingresos, gastos, tasa de ahorro)
|
||
|
||
- **Metas Financieras (Goals)** - Sistema completo de objetivos de ahorro
|
||
- Crear, editar y eliminar metas con icono y color personalizable
|
||
- Barra de progreso visual con porcentaje
|
||
- Estados: Activo, Completado, Pausado, Cancelado
|
||
- Fecha objetivo y cálculo de meses restantes
|
||
- Contribuciones con modal dedicado
|
||
- Indicador "On Track" basado en contribución mensual requerida
|
||
- Estadísticas: total metas, activas, total ahorrado, restante
|
||
- Acciones: contribuir, pausar, reanudar, marcar completada
|
||
|
||
- **Presupuestos Mensuales (Budgets)** - Control de gastos por categoría
|
||
- Crear presupuestos por categoría y mes
|
||
- Selector de mes/año con navegación
|
||
- Barra de progreso con colores semáforo (verde/amarillo/rojo)
|
||
- Alertas de "Excedido" y "Casi al límite"
|
||
- Resumen mensual: presupuestado, gastado, restante, % uso
|
||
- Copiar presupuestos al mes siguiente
|
||
- Tabla de resumen anual con click para navegar
|
||
|
||
- **Reportes (Reports)** - Dashboard de análisis financiero
|
||
- 7 pestañas: Resumen, Por Categoría, Evolución Mensual, Comparativa, Mayores Gastos, Proyección, Por Día
|
||
- Gráficos: Barras, Líneas, Dona (usando Chart.js)
|
||
- Resumen anual con comparativa vs año anterior
|
||
- Distribución de gastos por categoría con tabla detallada
|
||
- Evolución mensual de ingresos/gastos/balance
|
||
- Tasa de ahorro mensual con colores semáforo
|
||
- Top 20 gastos del mes
|
||
- Proyección de fin de mes
|
||
- Gastos por día de la semana
|
||
|
||
- **Backend API** - Nuevos endpoints
|
||
- `GET/POST /api/financial-goals` - CRUD de metas
|
||
- `POST /api/financial-goals/{id}/contributions` - Añadir contribución
|
||
- `DELETE /api/financial-goals/{id}/contributions/{contributionId}` - Eliminar contribución
|
||
- `GET/POST /api/budgets` - CRUD de presupuestos
|
||
- `GET /api/budgets/available-categories` - Categorías sin presupuesto
|
||
- `POST /api/budgets/copy-to-next-month` - Copiar al mes siguiente
|
||
- `GET /api/budgets/year-summary` - Resumen anual
|
||
- `GET /api/financial-health` - Score y métricas de salud financiera
|
||
- `GET /api/financial-health/history` - Histórico de scores
|
||
- `GET /api/reports/summary` - Resumen por período
|
||
- `GET /api/reports/by-category` - Gastos por categoría
|
||
- `GET /api/reports/monthly-evolution` - Evolución mensual
|
||
- `GET /api/reports/by-day-of-week` - Gastos por día de semana
|
||
- `GET /api/reports/top-expenses` - Mayores gastos
|
||
- `GET /api/reports/compare-periods` - Comparativa de períodos
|
||
- `GET /api/reports/projection` - Proyección del mes
|
||
|
||
- **Base de datos** - Nuevas tablas
|
||
- `financial_goals` - Metas de ahorro con objetivo, fecha, estado
|
||
- `goal_contributions` - Contribuciones a metas
|
||
- `budgets` - Presupuestos mensuales por categoría
|
||
|
||
- **Navegación** - Nuevo grupo "Planificación" en sidebar
|
||
- Salud Financiera
|
||
- Metas
|
||
- Presupuestos
|
||
- Reportes
|
||
|
||
### Changed
|
||
- **Layout.jsx** - Nuevo grupo de navegación "planning" con 4 items
|
||
- **App.jsx** - 4 nuevas rutas: /financial-health, /goals, /budgets, /reports
|
||
- **api.js** - Nuevos services: financialGoalService, budgetService, reportService, financialHealthService
|
||
|
||
|
||
## [1.31.2] - 2025-12-14
|
||
|
||
### Added
|
||
- **ConfirmModal** - Componente de confirmação customizado
|
||
- Substitui todos os `window.confirm` nativos do navegador
|
||
- Suporta variantes: danger (vermelho), warning (amarelo), primary (azul)
|
||
- Ícones dinâmicos baseados na variante
|
||
- Design dark theme consistente com a aplicação
|
||
- Integrado em TransactionsByWeek (delete, cancel, unsplit, unlink)
|
||
- Integrado em BusinessSettingsTab, CampaignsTab, ServiceSheetsTab, ProductSheetsTab
|
||
|
||
### Changed
|
||
- **CategorySelector em Modal Categorizar em Lote** - Adicionado dropdown hierárquico no modal de categorização em lote
|
||
- **OverdueWidget Redesenhado** - Layout horizontal em fila própria no Dashboard
|
||
- 4 colunas para níveis de urgência (Crítico, Alto, Médio, Baixo)
|
||
- Scroll interno por coluna
|
||
- Total de itens vencidos no header
|
||
- Responsivo: 2 colunas tablet, 4 desktop
|
||
- **UpcomingWidget Ajustado** - Altura fixa com scroll interno
|
||
|
||
### Fixed
|
||
- **Duplicate Transaction Error** - Corrigido erro 500 ao duplicar transação (import_hash unique constraint)
|
||
- **CategorySelector Selection** - Corrigido onChange para permitir seleção de subcategorias
|
||
- **Dropdown Positioning** - Melhorado cálculo de posição para evitar dropdown fora da tela
|
||
|
||
|
||
## [1.31.1] - 2025-12-14
|
||
|
||
### Added
|
||
- **CategorySelector Colapsável** - Novo componente para seleção de categorias
|
||
- Categorias exibidas colapsadas por padrão
|
||
- Expande subcategorias ao clicar na categoria pai (chevron ou nome)
|
||
- Campo de busca integrado para filtrar categorias
|
||
- Usa `position: fixed` para evitar corte por `overflow: hidden`
|
||
- Badge com quantidade de subcategorias
|
||
- Mostra caminho completo da categoria selecionada (ex: "Alimentação → Supermercado")
|
||
|
||
### Changed
|
||
- **Layout de Filtros** - Reorganizado em 3 linhas harmônicas
|
||
- Linha 1: Busca (50%) + Data Inicial (25%) + Data Final (25%)
|
||
- Linha 2: Conta + Categoria + Centro de Custo + Tipo + Estado + Limpar
|
||
- Linha 3: Botão "Categorizar em Lote" alinhado à direita
|
||
|
||
- **CategorySelector aplicado em**:
|
||
- Modal de Editar Transação
|
||
- Filtros de Transações
|
||
- Modal de Categorização Rápida
|
||
|
||
### Fixed
|
||
- **Dropdown cortado** - Corrigido problema do dropdown sendo cortado por containers com overflow:hidden
|
||
|
||
|
||
## [1.31.0] - 2025-12-14
|
||
|
||
### Added
|
||
- **Variantes de Producto** - Sistema de porciones para Wine House
|
||
- Permite vender mismo producto en diferentes porciones (Botella, Copa, Media Copa, Degustación)
|
||
- Cálculo automático: CMV proporcional, markup, precio de venta por porción
|
||
- Nueva tabla `product_variants` con campos: portion_ratio, quantity_per_unit, volume_ml
|
||
- Modelo `ProductVariant` con métodos: calculateCmvPortion(), calculateSalePrice(), recalculate()
|
||
- Relación HasMany en ProductSheet para variantes
|
||
|
||
- **Vinoteca Madrid** - Nuevo negocio de ejemplo en seeder
|
||
- 10 vinos españoles: Rioja, Ribera del Duero, Rías Baixas, Rueda, Cava, Porto
|
||
- Cada vino con 4 variantes automáticas:
|
||
- Garrafa (750ml) - 1 por botella
|
||
- Taça (100ml) - 7.5 por botella
|
||
- Meia Taça (50ml) - 15 por botella
|
||
- Degustação (25ml) - 30 por botella
|
||
- Markup calculado automáticamente según configuración del negocio
|
||
|
||
- **UI Variantes en ProductSheetModal**
|
||
- Toggle para mostrar/ocultar sección de variantes
|
||
- Inputs de volume base (ml) y porción estándar (ml)
|
||
- Botón "Generar para Vino" que crea 4 variantes automáticas
|
||
- Tabla con columnas: Nombre, Porción, Cantidad/Unidad, CMV, Markup, PVP
|
||
- Vista previa de cálculos en tiempo real
|
||
|
||
- **Traducciones i18n para Variantes**
|
||
- `business.variants.*`: title, description, add, noVariants
|
||
- Nombres de porciones: bottle, glass, halfGlass, tasting
|
||
- Labels: baseVolume, portionSize, autoGenerate
|
||
- Soporte: PT-BR, ES, EN
|
||
|
||
|
||
## [1.30.0] - 2025-12-14
|
||
|
||
### Added
|
||
- **Fichas Técnicas de Servicios** - Sistema completo de costos para servicios
|
||
- Duración del servicio en minutos
|
||
- Insumos/materiales con costos unitarios
|
||
- Cálculo automático de CSV (Costo del Servicio Vendido)
|
||
- Integración con configuración de negocio para horas productivas
|
||
|
||
- **Horas Productivas** - Cálculo de costo fijo por hora
|
||
- Nueva métrica clave: `hours_per_week` (horas por semana)
|
||
- Derivación automática: `hours_per_day = hours_per_week / days_per_week`
|
||
- Fórmula: Horas Productivas = Empleados × Horas/Día × Días/Mes × Productividad%
|
||
- Costo Fijo/Hora = Gastos Fijos / Horas Productivas
|
||
|
||
- **Seeder de Ejemplos** - `BusinessExampleSeeder` con 3 tipos de negocio
|
||
- TechStore: 5 productos (electrónicos)
|
||
- DevPro: 5 servicios (desarrollo/consultoría)
|
||
- Print & Design: 4 productos + 4 servicios (mixto)
|
||
|
||
- **Traducciones i18n Completas** - Sección business totalmente internacionalizada
|
||
- `business.common.*`: CMV, CSV, SKU, Markup, unidades de tiempo
|
||
- `business.settings.*`: totalProductiveHours, fixedCostPerHour
|
||
- `business.products.*`: skuPlaceholder, strategyLabels, components
|
||
- `business.services.*`: codePlaceholder, fixedCost, price
|
||
- Soporte: PT-BR, ES, EN
|
||
|
||
### Changed
|
||
- **Modal Tipo de Negocio** - Rediseño responsivo
|
||
- Antes: Radio buttons horizontales que excedían el ancho
|
||
- Ahora: Cards seleccionables en grid 3 columnas
|
||
- Visual mejorado con iconos grandes y bordes coloreados
|
||
|
||
### Fixed
|
||
- **Error 500 en /api/service-sheets** - Columna `hours_per_day` no existe
|
||
- Causa: Eager loading usaba columna antigua en lugar de `hours_per_week`
|
||
- Solución: Actualizado ServiceSheetController con columnas correctas
|
||
|
||
- **TypeError margin_percentage.toFixed** - Valor llegaba como string
|
||
- Solución: `parseFloat()` antes de operaciones numéricas
|
||
|
||
- **Frontend en directorio incorrecto** - Error 500 en raíz
|
||
- Causa: Archivos en /frontend/ en vez de /frontend/dist/
|
||
- Solución: Movidos archivos al directorio correcto
|
||
|
||
### Technical
|
||
- Migración: `2025_12_14_130001_change_hours_per_day_to_hours_per_week`
|
||
- Renombra `hours_per_day` a `hours_per_week`
|
||
- Agrega `working_days_per_week` (días por semana)
|
||
- Conversión automática: hours_per_week = hours_per_day * 5
|
||
- Atributo derivado en BusinessSetting: `getHoursPerDayAttribute()`
|
||
- Deploy limpio con todos los caches regenerados
|
||
|
||
|
||
## [1.29.0] - 2025-12-14
|
||
|
||
### Added
|
||
- **Campañas Promocionales** - Sistema completo de gestión de ofertas y descuentos
|
||
- **Presets Rápidos**: Black Friday, Cyber Monday, Navidad, Año Nuevo, Liquidación
|
||
- **Tipos de Descuento**: Porcentaje, Valor Fijo, Precio Fijo
|
||
- **Programación**: Fechas y horas de inicio/fin con estados automáticos
|
||
- **Badges Visuales**: Texto, color y preview en tiempo real
|
||
- **Selección de Productos**: Individual o aplicar a todos
|
||
|
||
- **Protección de Rentabilidad** - Sistema de 4 capas para evitar vender con pérdida
|
||
- Capa 1: Precio nunca menor que CMV (costo)
|
||
- Capa 2: Respeta precio mínimo del producto
|
||
- Capa 3: Respeta precio mínimo de campaña
|
||
- Capa 4: Garantiza margen mínimo sobre CMV
|
||
- Preview con análisis de rentabilidad antes de crear campaña
|
||
|
||
- **Precificación Estratégica** en Fichas Técnicas
|
||
- Precio del Competidor con comparación visual
|
||
- Precio Mínimo/Máximo para control de rango
|
||
- Multiplicador Premium (ajuste fino)
|
||
- Estrategias: Agresivo (-5%), Neutro, Premium (+10%)
|
||
- Margen Objetivo por producto (sobrescribe global)
|
||
- Redondeo Psicológico (€26.04 → €25.99)
|
||
|
||
- **Soporte B2B/B2C** - Manejo diferenciado de IVA/VAT
|
||
- **B2C**: Precios finales incluyen IVA (venta al consumidor)
|
||
- **B2B**: Precios sin IVA (venta entre empresas)
|
||
- Campo `vat_rate` separado de otros impuestos
|
||
- Preview muestra: Markup Base × (1 + IVA) = Multiplicador Final
|
||
- El IVA NO se deduce del margen, se añade al precio final
|
||
|
||
- **Documentación** - Guía completa del Módulo de Negocios
|
||
- `docs/MODULO_NEGOCIOS.txt`: Manual detallado de funcionamiento
|
||
- Casos de uso prácticos con ejemplos numéricos
|
||
- Explicación técnica del sistema de protección
|
||
|
||
### Fixed
|
||
- **Error React #310** - Corregido hook `useMemo` después de return condicional
|
||
- **Scroll en Modales** - Agregado scroll para contenido largo
|
||
- ProductSheetModal: maxHeight 90vh con overflowY auto
|
||
- BusinessSettingModal: maxHeight 90vh con overflowY auto
|
||
- **Relación BelongsToMany** - Foreign key explícita en `PromotionalCampaign.products()`
|
||
- **Traducciones Duplicadas** - Eliminadas claves repetidas en i18n
|
||
- **Claves i18n Faltantes** - Agregadas traducciones para componentes de producto
|
||
|
||
### Technical
|
||
- Nueva migración: `add_profitability_protection_to_campaigns`
|
||
- Campos: `min_margin_percent`, `protect_against_loss`, `margin_warning_threshold`
|
||
- Pivot: `promo_margin`, `promo_margin_percent`, `is_profitable`
|
||
- Nueva migración: `add_price_includes_tax_to_business_settings`
|
||
- Campos: `price_includes_tax` (boolean), `vat_rate` (decimal)
|
||
- Modelo PromotionalCampaign mejorado con métodos de protección
|
||
- Controller con análisis de rentabilidad en preview() y show()
|
||
- i18n: Traducciones completas en ES, PT-BR, EN para campañas
|
||
|
||
|
||
## [1.28.0] - 2025-12-14
|
||
|
||
### Added
|
||
- **Nueva Sección Business** - Módulo completo para cálculo de precios con Markup
|
||
- **Configuraciones de Markup**: Define parámetros de cada unidad de negocio
|
||
- Facturación mensual y gastos fijos
|
||
- Costos variables: impuestos, comisiones, tasas de tarjeta
|
||
- Tasa de inversión y margen de ganancia
|
||
- Cálculo automático del factor de markup: `Markup = 1 / (1 - deductions)`
|
||
|
||
- **Fichas Técnicas de Productos**: Gestión del CMV (Costo de Mercancía Vendida)
|
||
- Componentes de costo: producto, embalaje, etiqueta, envío, manipulación, otros
|
||
- Cálculo automático del CMV total y precio de venta sugerido
|
||
- Margen de contribución calculado en tiempo real
|
||
- Función duplicar para crear variantes rápidamente
|
||
|
||
- **Calculadora de Precios**: Simulador interactivo
|
||
- Ingresa un CMV y visualiza precio de venta instantáneamente
|
||
- Desglose completo de la configuración seleccionada
|
||
- Tabla de precios rápidos para productos existentes
|
||
- Fórmula visible: `Precio de Venta = CMV × Markup`
|
||
|
||
- **Multi-divisa**: Soporte completo para EUR, BRL, USD
|
||
|
||
### Technical
|
||
- Backend: 3 migraciones, 3 modelos, 2 controladores con endpoints especializados
|
||
- Frontend: Página Business.jsx con 3 tabs y 5 componentes React
|
||
- API: Routes para business-settings y product-sheets con CRUD completo
|
||
- i18n: Traducciones completas en ES, PT-BR, EN
|
||
|
||
|
||
## [1.27.6] - 2025-12-13
|
||
|
||
### Fixed
|
||
- **Divisa en Widgets Overdue/Upcoming** - Corregido campo `currency` faltante
|
||
- Backend: Agregado campo `currency` directo en items de `upcomingTransactions` y `overdueTransactions`
|
||
- Liability items ahora incluyen su moneda desde `liabilityAccount->currency`
|
||
- Frontend: Usa `item.currency` como primera opción, fallback a `item.account?.currency`
|
||
|
||
- **Traducción i18n faltante** - Agregado `common.item` y `common.items` en ES, PT-BR, EN
|
||
|
||
|
||
## [1.27.5] - 2025-12-13
|
||
|
||
### Fixed
|
||
- **Dashboard Multi-Divisa Completo** - Corrigido Flujo de Caja para usar divisa dinâmica
|
||
- CashflowChart agora recebe `primaryCurrency` como prop
|
||
- Tooltips do gráfico mostram a divisa correta
|
||
- Totais do período (receita, despesa, médias) usam `primary_currency`
|
||
|
||
- **Widgets Vencidos/Futuros** - Removidas divisas fixas (BRL/EUR)
|
||
- UpcomingWidget: Footer mostra contagem de items em vez de totais monetários
|
||
- OverdueWidget: Rangos mostram contagem, footer mostra média de dias
|
||
|
||
|
||
## [1.27.4] - 2025-12-13
|
||
|
||
### Added
|
||
- **Categorização Rápida Individual** - Novo botão de ação no menu de transações
|
||
- Modal simplificado para categorizar transação individual
|
||
- Seleção de categoria (com subcategorias) e centro de custo
|
||
- Opção de criar keyword para futuras importações automáticas
|
||
- Traduções em ES, PT-BR e EN
|
||
|
||
### Changed
|
||
- **Dashboard Multi-Divisa** - Valores agrupados por moeda
|
||
- Saldo total, receitas e despesas mostram valores separados por divisa
|
||
- Backend agrupa transações por currency da conta
|
||
- Suporte para múltiplas moedas simultaneamente (EUR, BRL, USD, etc.)
|
||
|
||
- **Sidebar Responsivo** - Estado inicial baseado no tamanho da tela
|
||
- Mobile (< 1024px): Sidebar inicia colapsado
|
||
- Desktop (≥ 1024px): Sidebar inicia expandido
|
||
- Ajusta automaticamente ao redimensionar
|
||
|
||
- **Responsividade iPad Pro** - Otimizações para tablets
|
||
- Media queries para 12.9" (1024-1366px) e 11" (834-1024px)
|
||
- Colunas da tabela de transações com classes CSS para ocultar em tablets
|
||
- Oculta coluna "Conta" em tablets grandes, "Conta" e "Status" em menores
|
||
|
||
### Fixed
|
||
- **API Dashboard Summary** - Corrigido erro de coluna ambígua
|
||
- Erro: "Column 'user_id' in WHERE is ambiguous" ao fazer JOIN
|
||
- Prefixado todas as colunas com `transactions.` nas queries com JOIN
|
||
|
||
|
||
## [1.27.3] - 2025-12-13
|
||
|
||
### Fixed
|
||
- **Categorização em Lote** - Corrigido bug que impedia a atualização das transações
|
||
- Problema: Cache de opcodes do PHP-FPM não era limpo após deploy
|
||
- Solução: Script deploy.ps1 agora executa `php artisan optimize:clear` e reinicia PHP-FPM
|
||
- Fluxo corrigido: Seleção com checkboxes → API → UPDATE no banco funciona corretamente
|
||
|
||
### Changed
|
||
- **Script deploy.ps1 (backend)** - Melhorado para garantir limpeza completa de cache
|
||
- Adicionado `php artisan optimize:clear` antes das otimizações
|
||
- Reinício de PHP-FPM com mensagem explicativa sobre cache de opcodes
|
||
- Previne problemas de código antigo sendo servido após deploy
|
||
|
||
### Removed
|
||
- **Console.logs de debug** - Removidos logs de depuração do frontend (TransactionsByWeek.jsx)
|
||
|
||
|
||
## [1.27.2] - 2025-12-13
|
||
|
||
### Changed
|
||
- **Ícone de Tabaco** - Atualizado ícone da subcategoria "Tabaco" em MadridCategoriesSeeder
|
||
- De `bi-circle-fill` (genérico) para `bi-cloud-haze2-fill` (fumaça/névoa)
|
||
- Ícone mais semântico e representativo para gastos com cigarro/estánco
|
||
- Adicionado `bi-cloud-haze2` e `bi-cloud-haze2-fill` ao catálogo de ícones (icons.js)
|
||
|
||
### Fixed
|
||
- **Sintaxe icons.js** - Corrigida vírgula faltante após `bi-outlet` na categoria housing
|
||
|
||
|
||
## [1.27.1] - 2025-12-12
|
||
|
||
### Fixed
|
||
- **Traducción faltante** - Agregada clave `common.months` en es.json y en.json
|
||
- Dashboard mostraba "12 common.months" en vez de "12 meses"
|
||
|
||
|
||
## [1.27.0] - 2025-12-12
|
||
|
||
### Added
|
||
- **Widget de Transações Vencidas** - Novo widget no Dashboard mostrando itens em atraso
|
||
- Endpoint: `GET /api/dashboard/overdue` - Agrupa por urgência (crítico, alto, médio, baixo)
|
||
- Inclui transações, parcelas recorrentes e passivos vencidos
|
||
- Clique para navegar diretamente ao item
|
||
- Código de cores por nível de urgência
|
||
- Traduções em ES, PT-BR e EN
|
||
|
||
- **Modais de Confirmação Detalhados** - Melhorados todos os botões de ação na página /recurring
|
||
- Modal de Pausar/Reanudar com advertências detalhadas
|
||
- Modal de Excluir Template com avisos de irreversibilidade
|
||
- Modal de Omitir Cuota (Skip) com explicação de consequências
|
||
- Ícones visuais e informações do item afetado em todos os modais
|
||
- Traduções completas em ES, PT-BR e EN
|
||
|
||
### Fixed
|
||
- **Conciliação Incorreta** - Desfeita conciliação acidental de "Alquiler Seguro Sa" primeira parcela
|
||
- recurring_instance #71 revertido para status 'pending'
|
||
- transaction #2372 desvinculada
|
||
|
||
|
||
## [1.26.0] - 2025-12-11
|
||
|
||
### Added
|
||
- **Detecção de Reembolsos** - Sistema para detectar pares gasto/reembolso que se anulam
|
||
- Novo endpoint: `GET /api/refund-detection` - Detectar pares potenciais
|
||
- Novo endpoint: `POST /api/refund-detection/confirm` - Confirmar par de reembolso
|
||
- Novo endpoint: `POST /api/refund-detection/confirm-batch` - Confirmar múltiplos pares
|
||
- Novo endpoint: `POST /api/refund-detection/ignore` - Ignorar par
|
||
- Novo endpoint: `POST /api/refund-detection/undo` - Desfazer confirmação
|
||
- Nova migração: campos `is_refund_pair` e `refund_linked_id` na tabela transactions
|
||
- Nova tabela: `ignored_refund_pairs` para pares ignorados
|
||
- Frontend: Nova página `/refunds` com UI similar à detecção de transferências
|
||
- Detecção baseada em: mesmo valor, mesma conta, tipos opostos (débito/crédito)
|
||
- Cálculo de confiança com indicadores traduzidos (data, descrição similar, palavras-chave)
|
||
- Tolerância configurável de 1-30 dias
|
||
- Suporte a seleção em lote com confirmação batch
|
||
- Traduções completas em ES, PT-BR e EN
|
||
|
||
### Changed
|
||
- **Ordenação de Transações** - Lista por semana agora ordena por data efetiva
|
||
- Usa `COALESCE(effective_date, planned_date)` para ordenação
|
||
- Fallback para data planejada quando não há data efetiva
|
||
- Parâmetro `date_field: 'effective_date'` adicionado ao frontend
|
||
|
||
### Fixed
|
||
- **Indicadores de Reembolso** - Traduções para os motivos de confiança
|
||
- `same_amount_same_account` → "Mismo monto, misma cuenta"
|
||
- `same_date` → "Misma fecha"
|
||
- `refund_keyword` → "Palabra clave de reembolso"
|
||
- `medium_description_similarity` → "Descripción similar"
|
||
- `same_status` → "Mismo estado"
|
||
|
||
|
||
## [1.23.8] - 2025-12-11
|
||
|
||
### Fixed
|
||
- **Modais de Confirmação** - Substituídos alertas nativos do navegador por modais customizados
|
||
- Modal de confirmação para excluir template
|
||
- Modal de confirmação para pular parcela
|
||
- Modal de confirmação para cancelar parcela
|
||
- Novo componente `ConfirmModal` reutilizável
|
||
|
||
|
||
## [1.23.7] - 2025-06-20
|
||
|
||
### Added
|
||
- **Edição de Transações Recorrentes** - Possibilidade de editar templates e instâncias individuais
|
||
- Novo endpoint: `PUT /api/recurring-instances/{id}` - Editar parcela pendente
|
||
- Modal de edição de template com todos os campos (nome, valor, frequência, conta, categoria)
|
||
- Modal de edição de parcela com valor planejado, data de vencimento e notas
|
||
- Botões de edição na tabela de templates e na tabela de parcelas pendentes
|
||
- Botão de edição também no modal de detalhes do template
|
||
- Traduções em português, inglês e espanhol
|
||
|
||
|
||
## [1.25.0] - 2025-12-10
|
||
|
||
### Added
|
||
- **Transações Recorrentes** - Sistema completo de gestão de pagamentos recorrentes
|
||
- Novo modelo: `RecurringTemplate` - Templates de recorrência com frequência configurável
|
||
- Novo modelo: `RecurringInstance` - Instâncias/parcelas geradas automaticamente
|
||
- Novo serviço: `RecurringService` - Lógica de geração e gestão de instâncias
|
||
- Nova política: `RecurringTemplatePolicy` - Autorização de acesso
|
||
- Endpoints:
|
||
- `GET /api/recurring` - Listar templates
|
||
- `POST /api/recurring` - Criar template manual
|
||
- `POST /api/recurring/from-transaction` - Criar a partir de transação
|
||
- `GET/PUT/DELETE /api/recurring/{id}` - CRUD de templates
|
||
- `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` - Listar todas pendentes
|
||
- `GET /api/recurring/overdue` - Listar vencidas
|
||
- `GET /api/recurring/due-soon` - Próximas do vencimento
|
||
- `POST /api/recurring-instances/{id}/pay` - Pagar (cria transação)
|
||
- `POST /api/recurring-instances/{id}/reconcile` - Conciliar com transação existente
|
||
- `POST /api/recurring-instances/{id}/skip` - Pular parcela
|
||
- `GET /api/recurring-instances/{id}/candidates` - Buscar transações candidatas
|
||
- Frontend: Nova página `/recurring` com tabs Templates e Pendentes
|
||
- Modal para criar recorrência a partir de transação existente
|
||
- Frequências: diária, semanal, quinzenal, mensal, bimestral, trimestral, semestral, anual
|
||
- Ajuste automático de dias em meses curtos (ex: 31 → 28 em fevereiro)
|
||
|
||
- **Calendário no Dashboard** - Widget interativo com visão mensal
|
||
- Novo endpoint: `GET /api/dashboard/calendar` - Dados do mês
|
||
- Novo endpoint: `GET /api/dashboard/calendar-day` - Transações de um dia
|
||
- Novo componente: `CalendarWidget.jsx`
|
||
- Mostra transações e recorrentes pendentes por dia
|
||
- Indicadores visuais (azul=transação, laranja=recorrente)
|
||
- Clique no dia mostra detalhes com ações (Pagar/Omitir)
|
||
- Resumo mensal de pendentes
|
||
|
||
- **Widget Próximos 7 Dias** - Previsão de transações pendentes
|
||
- Novo endpoint: `GET /api/dashboard/upcoming` - Transações dos próximos N dias
|
||
- Novo componente: `UpcomingWidget.jsx`
|
||
- Agrupa por dia com badges (Hoje, Amanhã, X dias)
|
||
- Ícones coloridos por tipo (recorrente, transferência, débito, crédito)
|
||
- Resumo de ingressos/gastos previstos (exclui transferências)
|
||
|
||
- **Menu Reorganizado com Grupos Colapsáveis**
|
||
- Grupos: Movimentos (Transações, Recurrentes, Importar, Transferências) e Configuração (Categorias, Centros de Custo)
|
||
- Estado persistente de expansão
|
||
- Suporte a sidebar colapsado
|
||
|
||
- **Campo start_date no Modal de Recorrência**
|
||
- Permite definir data inicial diferente da transação original
|
||
|
||
### Changed
|
||
- Script de deploy backend alterado de `php8.3-fpm` para `php8.4-fpm`
|
||
- Layout.jsx refatorado com estrutura de grupos no menu
|
||
|
||
### Fixed
|
||
- **AuthorizesRequests** - Adicionado trait ao Controller base para resolver erro 500 em ações de autorização
|
||
- **Cálculo de ingresos/gastos no calendário** - Transferências agora são excluídas do resumo
|
||
- **Duplicação de Layout** - Removido wrapper Layout duplicado em RecurringTransactions.jsx
|
||
|
||
### Migrations
|
||
- `2025_12_10_100001_create_recurring_templates_table.php`
|
||
- `2025_12_10_100002_create_recurring_instances_table.php`
|
||
- Adicionado campo `recurring_instance_id` na tabela `transactions`
|
||
|
||
|
||
## [1.12.0] - 2025-12-09
|
||
|
||
### Added
|
||
- **Categorização em Lote** - Nova funcionalidade para categorizar transações automaticamente
|
||
- Novo endpoint: POST `/api/categories/categorize-batch/preview` - Preview das transações que serão categorizadas
|
||
- Novo endpoint: POST `/api/categories/categorize-batch` - Executar categorização em lote
|
||
- Botão "Categorizar em Lote" na página de Categorias
|
||
- Botão "Categorizar" na página de Transações por Semana
|
||
- Modal com preview mostrando: total sem categoria, quantas serão categorizadas, keywords ativas
|
||
- Categorização baseada em keywords das categorias vs descrição das transações
|
||
- Traduções completas em pt-BR, es, en
|
||
|
||
- **Detecção de Pagamentos Suspeitos** - Nova aba na página de Duplicatas
|
||
- Novo endpoint: GET `/api/duplicate-transactions/suspicious` - Lista pagamentos suspeitos
|
||
- Detecta transações com mesmo valor, mesma conta, datas diferentes (até 7 dias)
|
||
- Calcula % de similaridade da descrição entre transações
|
||
- Sistema de confiança com níveis (high/medium/low) baseado em múltiplos critérios
|
||
- Aba "Pagamentos Suspeitos" ao lado de "Duplicatas Exatas"
|
||
- Botões para ignorar par ou excluir transação individual
|
||
- Traduções completas em pt-BR, es, en
|
||
|
||
- **UserSetupService** - Serviço para configuração de novos usuários
|
||
- Cria categorias padrão automaticamente no registro
|
||
- Cria centro de custo "Principal" automaticamente
|
||
- 18 categorias principais com subcategorias e keywords
|
||
|
||
### Changed
|
||
- Categorias do usuário não são mais bloqueadas como "sistema"
|
||
- Removida validação is_system no update() e destroy() do CategoryController
|
||
- Todas as categorias do usuário podem ser editadas/excluídas
|
||
- MadridCategoriesSeeder agora cria com is_system = false
|
||
|
||
### Fixed
|
||
- Corrigido problema de reconciliação de passivos não encontrando transações
|
||
- Adicionado COALESCE(amount, planned_amount) na busca de transações elegíveis
|
||
- Transações com amount NULL agora são encontradas usando planned_amount
|
||
|
||
|
||
## [1.11.0] - 2025-12-08
|
||
|
||
### Added
|
||
- Funcionalidade de ajuste de saldo de contas
|
||
- Novo endpoint: POST `/api/accounts/{id}/adjust-balance`
|
||
- Usuário informa o saldo real e sistema calcula o initial_balance automaticamente
|
||
- Fórmula: initial_balance = saldo_desejado - créditos + débitos
|
||
- Botão de ajuste (icone sliders) na lista de contas
|
||
- Modal com explicação e campo para digitar saldo real
|
||
- Traduções em pt-BR, es, en
|
||
|
||
|
||
## [1.10.1] - 2025-12-08
|
||
|
||
### Changed
|
||
- Recálculo automático de saldos ao carregar página de Contas (/accounts)
|
||
- Não é mais necessário clicar no botão de recalcular manualmente
|
||
|
||
|
||
## [1.10.0] - 2025-12-08
|
||
|
||
### Added
|
||
- Agrupamento de transferências entre contas no resumo semanal
|
||
- Transferências agora aparecem em seção separada "Transferências entre contas"
|
||
- Cada transferência mostra: Conta Origem → Conta Destino com valor
|
||
- Transferências não contam mais nos totais de Ingresos/Gastos
|
||
- API retorna campo `transfers` com transferências agrupadas em pares
|
||
- Campo `transfers_count` no summary indica quantidade de transferências
|
||
- Tradução adicionada: "transfers" em pt-BR, es, en
|
||
|
||
### Fixed
|
||
- Corrigido cálculo de totais quando transações têm `amount: 0` com `status: completed`
|
||
- Agora usa `planned_amount` como fallback quando `amount` é zero
|
||
- Afeta cálculo de créditos, débitos e total de completed
|
||
- Resolve problema de semanas mostrando totais zerados incorretamente
|
||
|
||
|
||
## [1.9.1] - 2025-12-08
|
||
|
||
### Fixed
|
||
- Corrigido erro SQL "Column 'type' in SELECT is ambiguous" no DuplicateTransactionController
|
||
- Corrigido erro SQL "a.name isn't in GROUP BY" removendo JOIN e buscando account_name separadamente
|
||
- Corrigido erro React ao renderizar objeto confidence (alterado para confidence?.percentage)
|
||
- Corrigido path de deploy do frontend (era /public, correto é /var/www/webmoney/frontend/dist)
|
||
|
||
|
||
## [1.9.0] - 2025-12-08
|
||
|
||
### Changed
|
||
- Reestruturação completa de detecção de duplicatas (de pares para grupos)
|
||
- OLD: Comparava transações 2x2 (pairwise), gerando múltiplos pares para 3+ idênticos
|
||
- NEW: Agrupa todas as transações idênticas em um único grupo
|
||
- OLD: Estrutura: {transaction1, transaction2}
|
||
- NEW: Estrutura: {transactions: [{id, desc, ...}, {...}], count, max_id}
|
||
- Permite visualizar todas as transações duplicadas lado a lado
|
||
- Identifica claramente qual será mantida (a com maior ID)
|
||
|
||
### Added
|
||
- Auto-Delete automático de duplicatas
|
||
- Novo endpoint: POST `/api/v1/duplicate-transactions/auto-delete`
|
||
- Deleta todas as duplicatas mantendo apenas a com maior ID por grupo
|
||
- Usa Soft Delete (respeiта `deleted_at`)
|
||
- Botão "Auto-Delete em Lote" - para grupos selecionados
|
||
- Botão "⚡ Auto-Delete Todos" - para todos os grupos
|
||
- Modals de confirmação com avisos de ação irreversível
|
||
- Mensagens de sucesso com contador de grupos deletados
|
||
- Traduções completas em PT-BR, EN, ES
|
||
|
||
### Frontend Updates
|
||
- DuplicateTransactions.jsx completamente reescrito
|
||
- Suporta novo formato de resposta (grupos ao invés de pares)
|
||
- Layout adaptado: 3 colunas para transações (em vez de VS layout)
|
||
- Badge "Será mantida" destaca transação com maior ID
|
||
- Badge "Grupo: X transações" mostra tamanho do grupo
|
||
- Serviço API atualizado com método `autoDelete()`
|
||
- Traduções incluem strings para auto-delete
|
||
|
||
### Backend Updates
|
||
- DuplicateTransactionController::index() refatorizado
|
||
- Query principal usa GROUP BY em vez de INNER JOIN
|
||
- GROUP_CONCAT(id ORDER BY id DESC) para ordenar por ID
|
||
- Retorna array de todas as transações do grupo
|
||
- Confiança sempre 100% (grupos = transações idênticas)
|
||
- Calcula max_id para indicar qual será mantida
|
||
|
||
- Novo método: DuplicateTransactionController::autoDeleteDuplicates()
|
||
- Busca grupos com HAVING count > 1
|
||
- Para cada grupo, deleta tudo menos o ID máximo
|
||
- UPDATE transactions SET deleted_at = NOW()
|
||
- Retorna total de transações deletadas
|
||
|
||
### Database
|
||
- Nenhuma migração nova necessária
|
||
- Campo `deleted_at` já existe (SoftDeletes trait)
|
||
- Campo `duplicate_ignored_with` continua funcional
|
||
|
||
|
||
## [1.8.1] - 2025-12-08
|
||
|
||
### Fixed
|
||
- Seleção em lote: corrigida lógica de exclusão
|
||
- Agora exclui a transação com menor ID (ao invés de sempre transaction1)
|
||
- Mantém consistência com lógica individual de seleção
|
||
- Usa Soft Delete (SoftDeletes do Laravel)
|
||
|
||
|
||
## [1.8.0] - 2025-12-08
|
||
|
||
### Added
|
||
- Seleção em lote para transações duplicadas
|
||
- Checkbox em cada duplicata para marcar/desmarcar
|
||
- "Selecionar Todos" na barra de ações
|
||
- Contador de duplicatas selecionadas
|
||
- Destaque visual (cor azul) para itens selecionados
|
||
- Botões: "Ignorar em Lote" e "Excluir em Lote"
|
||
- Modals de confirmação para ações em lote
|
||
- Mensagens de sucesso com contador (ex: "5 duplicatas ignoradas")
|
||
- Funções executam em paralelo com Promise.all()
|
||
- Limpa seleções ao recarregar dados
|
||
- Traduções em PT-BR, ES e EN
|
||
|
||
|
||
## [1.7.4] - 2025-12-08
|
||
|
||
### Fixed
|
||
- Removidas mensagens de navegador (window.confirm, window.alert)
|
||
- Transações: Cancelar e Excluir agora usam modais de confirmação
|
||
- Duplicatas: Excluir agora usa modal de confirmação
|
||
- Modal centralizado com botões "Cancelar" e "Confirmar"
|
||
- Traduções adicionadas em PT-BR, ES e EN
|
||
- Mantém funcionalidade, apenas substituiu padrão de UI
|
||
|
||
|
||
## [1.7.3] - 2025-12-08
|
||
|
||
### Fixed
|
||
- Corrigida busca por valores em transações
|
||
- Usa comparação numérica em vez de LIKE em string
|
||
- "147" encontra 147.00 (busca exata + range até 147.99)
|
||
- "147.00" encontra apenas 147.00 (busca exata)
|
||
- Funciona em ambos os métodos: index e byWeek
|
||
|
||
|
||
## [1.7.2] - 2025-12-08
|
||
|
||
### Added
|
||
- Nível de confiança na detecção de duplicatas
|
||
- Badge colorido com percentual (vermelho: alto, amarelo: médio, azul: baixo)
|
||
- Critérios de cálculo:
|
||
- Base 50%: mesmo valor, data, conta e tipo
|
||
- +15%: mesma categoria
|
||
- +10%: mesmo status
|
||
- +25%: descrição idêntica ou similar
|
||
- Resultados ordenados por nível de confiança (maior primeiro)
|
||
- Traduções em PT-BR, ES e EN
|
||
|
||
|
||
## [1.7.1] - 2025-12-08
|
||
|
||
### Improved
|
||
- Filtro de busca em transações agora também busca por valores
|
||
- Busca por planned_amount e amount
|
||
- Suporta busca exata e parcial (ex: "150" encontra 150.00, 1500.00)
|
||
- Aceita formato com vírgula ou ponto como separador decimal
|
||
- Placeholder atualizado para indicar busca por valor
|
||
|
||
|
||
## [1.7.0] - 2025-12-08
|
||
|
||
### Added
|
||
- Nova funcionalidade: Detecção de Transações Duplicadas
|
||
- Página dedicada para visualizar e gerenciar duplicatas potenciais
|
||
- Critérios de detecção: mesmo valor, mesma data, mesma conta, mesmo tipo
|
||
- Opção de excluir transação duplicada
|
||
- Opção de ignorar permanentemente (marcar como não-duplicata)
|
||
- Campo `duplicate_ignored_with` na tabela transactions
|
||
- Endpoint API: GET /duplicate-transactions
|
||
- Endpoint API: DELETE /duplicate-transactions/{id}
|
||
- Endpoint API: POST /duplicate-transactions/ignore
|
||
- Traduções em PT-BR, ES e EN
|
||
- Menu lateral com link para página de duplicatas
|
||
|
||
|
||
## [1.6.13] - 2025-12-08
|
||
|
||
### Changed
|
||
- Tamanho de fonte 11pt aplicado a modais, toasts e outros componentes:
|
||
- Modal: .modal-title, .modal-body, .modal-header, .modal-footer
|
||
- Toast: .toast, .toast-body, .toast-header
|
||
- Popover/Tooltip: .popover-body, .popover-header, .tooltip-inner
|
||
- Outros: .alert, .card-body, .card-text, .card-title
|
||
- Listas/Acordion: .list-group-item, .accordion-body, .accordion-button
|
||
|
||
|
||
## [1.6.12] - 2025-12-08
|
||
|
||
### Changed
|
||
- Tamanho mínimo de fonte ajustado para 11pt (era 12pt)
|
||
- Adicionados elementos de formulário à regra de tamanho mínimo:
|
||
- input, select, textarea, .form-control, .form-select
|
||
- option, .input-group-text
|
||
- Garantia de tamanho consistente em todos os campos de formulário
|
||
|
||
|
||
## [1.6.11] - 2025-12-08
|
||
|
||
### Changed
|
||
- Tamanho mínimo de fonte padronizado para 12pt em todo o sistema
|
||
- Body, parágrafos, spans, células, labels, botões, listas
|
||
- Textos small/muted também agora usam 12pt mínimo
|
||
- Melhor legibilidade em todos os dispositivos
|
||
|
||
|
||
## [1.6.10] - 2025-12-08
|
||
|
||
### Fixed
|
||
- Corrigida tradução do cabeçalho "Estado" no dropdown de ações
|
||
- Alterado de `t('transactions.status')` para `t('transactions.status.label')`
|
||
- Erro: "key returned an object instead of string"
|
||
|
||
|
||
## [1.6.9] - 2025-12-08
|
||
|
||
### Changed
|
||
- Reduzida largura da coluna de ações de 150px para 50px
|
||
- Botão de ações mais compacto (link style sem bordas)
|
||
- Ícone alterado para três pontos verticais
|
||
- Melhor aproveitamento do espaço horizontal na tabela
|
||
|
||
|
||
## [1.6.8] - 2025-12-08
|
||
|
||
### Changed
|
||
- Aumentado tamanho das fontes no sistema para melhor legibilidade
|
||
- Tamanho base: 14px (mínimo 10pt)
|
||
- Textos pequenos (small): 12px
|
||
- Cabeçalhos ajustados proporcionalmente
|
||
- Aplicado globalmente via index.css
|
||
|
||
|
||
## [1.6.7] - 2025-12-08
|
||
|
||
### Improved
|
||
- Melhorado visual do menu dropdown de ações nas transações
|
||
- Botão com borda (btn-outline-secondary) mais visível
|
||
- Ícones coloridos para cada ação (verde para completar, amarelo para reverter, etc.)
|
||
- Cabeçalhos de seção para agrupar ações de status
|
||
- Sombra no menu (shadow-sm) para melhor destaque
|
||
- Organização lógica: Status > Ações principais > Excluir
|
||
|
||
|
||
## [1.6.6] - 2025-12-08
|
||
|
||
### Changed
|
||
- Substituído botões de ação por menu dropdown elegante na página de Transações
|
||
- Ícone de três pontos (⋮) para abrir menu de ações
|
||
- Menu organizado com ícones e texto descritivo
|
||
- Botão excluir separado por linha divisória
|
||
- Aplicado em TransactionsByWeek.jsx e Transactions.jsx
|
||
|
||
### Improved
|
||
- Interface mais limpa e profissional na listagem de transações
|
||
- Melhor uso do espaço horizontal na tabela
|
||
|
||
|
||
## [1.6.5] - 2025-12-08
|
||
|
||
### Improved
|
||
- Ampliada janela de busca de transações elegíveis de ±15 para ±45 dias
|
||
- Permite encontrar pagamentos atrasados ou antecipados
|
||
- Conciliação agora busca transações de todas as contas correntes
|
||
- Corrigida exibição de data nas transações elegíveis (effective_date/planned_date)
|
||
|
||
### Removed
|
||
- Removido filtro de conta corrente desnecessário no modal de conciliação
|
||
|
||
|
||
## [1.6.4] - 2025-12-08
|
||
|
||
### Improved
|
||
- Melhorado filtro de transações elegíveis para conciliação
|
||
- Agora filtra por valores próximos (±20% do valor da parcela)
|
||
- Ordena por similaridade de valor (mais próximo primeiro)
|
||
- Retorna diferença percentual para cada transação
|
||
- Limita resultados a 30 transações mais relevantes
|
||
- Retorna faixa de valor utilizada no filtro
|
||
|
||
|
||
## [1.6.3] - 2025-12-08
|
||
|
||
### Added
|
||
- Novo endpoint `POST /api/accounts/recalculate-all` para recalcular saldos de todas as contas
|
||
- Novo endpoint `POST /api/accounts/{id}/recalculate` para recalcular saldo de uma conta específica
|
||
- Método `recalculateBalance()` no model Account
|
||
- Botão "Recalcular" na página de Contas para atualizar saldos baseados nas transações
|
||
- Traduções para recálculo de saldos (pt-BR, en, es)
|
||
|
||
### Fixed
|
||
- Correção nos saldos das contas (current_balance) que não atualizavam com transações importadas
|
||
|
||
|
||
## [1.6.2] - 2025-12-08
|
||
|
||
### Fixed
|
||
- Corrigido erro no endpoint `eligibleTransactions` - coluna `date` não existe
|
||
- Atualizado para usar `effective_date` ou `planned_date` (com fallback)
|
||
- Corrigido tipo de transação de `expense` para `debit`
|
||
|
||
|
||
## [1.6.1] - 2025-12-08
|
||
|
||
### Added - Sistema de Conciliação de Parcelas
|
||
|
||
#### Backend (Laravel)
|
||
|
||
**Conciliação de Parcelas com Transações**
|
||
- ✅ Novo endpoint: `GET /api/liability-accounts/pending-reconciliation`
|
||
- Lista todas as parcelas pendentes de conciliação
|
||
- ✅ Novo endpoint: `GET /api/liability-accounts/{id}/installments/{id}/eligible-transactions`
|
||
- Busca transações elegíveis para vincular a uma parcela
|
||
- Filtra por período (+/- 15 dias do vencimento)
|
||
- Suporta busca por descrição
|
||
- ✅ Novo endpoint: `POST /api/liability-accounts/{id}/installments/{id}/reconcile`
|
||
- Vincula parcela a uma transação existente
|
||
- Opção de marcar automaticamente como paga
|
||
- ✅ Novo endpoint: `DELETE /api/liability-accounts/{id}/installments/{id}/reconcile`
|
||
- Remove vínculo entre parcela e transação
|
||
|
||
#### Frontend (React)
|
||
|
||
**Modal de Conciliação**
|
||
- ✅ Novo modal para vincular parcela a transação
|
||
- ✅ Lista de transações elegíveis com busca
|
||
- ✅ Checkbox para marcar como paga ao conciliar
|
||
- ✅ Botões de ação na tabela de parcelas (conciliar/desconciliar)
|
||
- ✅ Badge indicando status de conciliação
|
||
- ✅ Traduções em pt-BR, en e es
|
||
|
||
### Fixed
|
||
- ✅ Ordem das rotas no api.php (rotas específicas antes do apiResource)
|
||
|
||
|
||
## [1.6.0] - 2025-12-08
|
||
|
||
### Added - Transferências, Divisão, Passivos e Sistema de Importação
|
||
|
||
#### Backend (Laravel)
|
||
|
||
**Sistema de Transferências entre Contas**
|
||
- ✅ Novo endpoint: `POST /api/transactions/transfer`
|
||
- ✅ Cria automaticamente par de transações (débito origem + crédito destino)
|
||
- ✅ Campos `transfer_pair_id` e `is_transfer` na tabela transactions
|
||
|
||
**Efetivação Rápida de Transações**
|
||
- ✅ Novo endpoint: `POST /api/transactions/{id}/quick-complete`
|
||
- ✅ Efetiva transação pendente com um clique (usa valores planejados)
|
||
|
||
**Divisão de Transações**
|
||
- ✅ Novo endpoint: `POST /api/transactions/{id}/split`
|
||
- ✅ Divide transação em múltiplas categorias
|
||
- ✅ Campos `is_split_parent`, `is_split_child`, `parent_transaction_id`
|
||
- ✅ Validação: soma das divisões deve igualar valor original
|
||
|
||
**Sistema de Passivos (Empréstimos/Financiamentos)**
|
||
- ✅ Nova migration: `create_liability_accounts_table`
|
||
- Contrato de passivo com valores calculados
|
||
- Taxas de juros (mensal, anual, total)
|
||
- Progresso de pagamento
|
||
- ✅ Nova migration: `create_liability_installments_table`
|
||
- Parcelas individuais com composição (capital + juros + taxas)
|
||
- Status: pending, paid, partial, overdue, cancelled
|
||
- ✅ Novo model: LiabilityAccount e LiabilityInstallment
|
||
- ✅ Novo controller: LiabilityAccountController
|
||
- ✅ Importação de contratos via Excel
|
||
- ✅ Cálculo automático de taxas de juros
|
||
|
||
**Sistema de Importação Avançado**
|
||
- ✅ Nova migration: `create_import_mappings_table`
|
||
- ✅ Nova migration: `add_import_hash_to_transactions_table`
|
||
- ✅ Suporte a múltiplos formatos: XLSX, XLS, CSV, OFX, PDF
|
||
- ✅ Mapeamento de colunas flexível com concatenação
|
||
- ✅ Anti-duplicidade via hash único (data + valor + saldo + descrição)
|
||
- ✅ Novos parsers: OfxParser, PdfParser
|
||
- ✅ Histórico de importações
|
||
|
||
**Correções e Melhorias**
|
||
- ✅ Removido campo `balance_after` (saldo sempre calculado dinamicamente)
|
||
- ✅ Transações importadas sempre sem categoria (category_id = null)
|
||
|
||
#### Frontend (React)
|
||
|
||
**Página de Transações por Semana (TransactionsByWeek.jsx)**
|
||
- ✅ Botão "Transferência" na barra superior
|
||
- ✅ Modal de transferência entre contas
|
||
- ✅ Botão de efetivação rápida (⚡) para pendentes
|
||
- ✅ Botão de divisão para transações
|
||
- ✅ Modal de divisão com múltiplas categorias
|
||
- ✅ Validação em tempo real (soma = valor original)
|
||
|
||
**Nova Página: Importação de Transações (ImportTransactions.jsx)**
|
||
- ✅ Upload com drag & drop
|
||
- ✅ Wizard de 4 etapas: Upload → Configurar → Mapear → Resultado
|
||
- ✅ Preview dos dados do arquivo
|
||
- ✅ Mapeamento visual de colunas
|
||
- ✅ Salvamento de mapeamentos para reutilização
|
||
- ✅ Histórico de importações
|
||
|
||
**Nova Página: Contas Passivo (LiabilityAccounts.jsx)**
|
||
- ✅ Cards de resumo por moeda
|
||
- ✅ Importação de contratos via Excel
|
||
- ✅ Visualização de parcelas com status
|
||
- ✅ Barra de progresso de pagamento
|
||
- ✅ Taxas de juros calculadas
|
||
|
||
**Traduções**
|
||
- ✅ Novas chaves em pt-BR, en, es para todas as funcionalidades
|
||
|
||
### Technical Details
|
||
- Migration: 2025_12_08_170001_add_transfer_and_split_fields_to_transactions
|
||
- Migration: 2025_12_08_200001_create_liability_accounts_table
|
||
- Migration: 2025_12_08_200002_create_liability_installments_table
|
||
- Migration: 2025_12_09_100001_create_import_mappings_table
|
||
- Migration: 2025_12_09_150001_add_import_hash_to_transactions_table
|
||
- Migration: 2025_12_09_160001_remove_balance_after_from_transactions_table
|
||
|
||
---
|
||
|
||
## [1.5.0] - 2025-12-08
|
||
|
||
### Added - Sistema de Transações Completo
|
||
|
||
#### Backend (Laravel)
|
||
- ✅ **Nova migration: create_transactions_table**
|
||
- `id`, `user_id`, `account_id`, `category_id`, `cost_center_id`
|
||
- `amount` (valor efetivo), `planned_amount` (valor previsto)
|
||
- `type` (credit/debit)
|
||
- `description`, `notes`, `reference`
|
||
- `effective_date` (data efetiva), `planned_date` (data planejada)
|
||
- `status` (pending/completed/cancelled)
|
||
- `is_recurring`, `recurring_parent_id` (preparado para recorrências)
|
||
- SoftDeletes e índices otimizados
|
||
|
||
- ✅ **Novo model: Transaction.php**
|
||
- Relacionamentos: user, account, category, costCenter, recurringParent/Children
|
||
- Scopes: ofUser, pending, completed, cancelled, credits, debits, inPeriod, etc.
|
||
- Atributos computados: finalAmount, finalDate, isOverdue, signedAmount
|
||
- Métodos: markAsCompleted(), markAsCancelled(), markAsPending()
|
||
|
||
- ✅ **Novo controller: TransactionController.php**
|
||
- CRUD completo com filtros avançados
|
||
- Endpoints especiais: complete, cancel, revert, duplicate, summary
|
||
- Filtros por: conta, categoria, centro de custo, tipo, status, período, busca
|
||
|
||
- ✅ **Novas rotas API**
|
||
- `GET/POST /api/transactions` - Listar/Criar
|
||
- `GET/PUT/DELETE /api/transactions/{id}` - CRUD individual
|
||
- `POST /api/transactions/{id}/complete` - Marcar como concluída
|
||
- `POST /api/transactions/{id}/cancel` - Cancelar
|
||
- `POST /api/transactions/{id}/revert` - Reverter para pendente
|
||
- `POST /api/transactions/{id}/duplicate` - Duplicar
|
||
- `GET /api/transactions-summary` - Resumo com totais
|
||
|
||
#### Frontend (React)
|
||
- ✅ **Nova página: Transactions.jsx**
|
||
- Cards de resumo: Entradas, Saídas, Saldo, Pendentes
|
||
- Indicador de transações atrasadas
|
||
- Filtros avançados: conta, categoria, tipo, status, período, busca
|
||
- Tabela com todas as transações
|
||
- Badge de categoria com cor e ícone
|
||
- Ações: editar, duplicar, completar, reverter, cancelar, excluir
|
||
- Modal de criação/edição com todos os campos
|
||
- Modal de detalhes completo
|
||
- Modal de conclusão com valor efetivo e data
|
||
|
||
- ✅ **Novo service: transactionService**
|
||
- Métodos: getAll, getById, create, update, delete
|
||
- complete, cancel, revert, duplicate, getSummary
|
||
|
||
- ✅ **Traduções completas** (pt-BR, es, en)
|
||
- Todos os labels, mensagens e placeholders
|
||
- Tipos: Crédito/Débito
|
||
- Status: Pendente/Concluída/Cancelada
|
||
|
||
- ✅ **Menu lateral atualizado**
|
||
- Novo item "Transações" com ícone bi-arrow-left-right
|
||
- Rota /transactions configurada
|
||
|
||
|
||
## [1.4.2] - 2025-12-08
|
||
|
||
### Added - Seeder de Categorias para Madrid
|
||
|
||
#### Backend (Laravel)
|
||
- ✅ **MadridCategoriesSeeder.php** - Seeder com categorias comuns do dia a dia
|
||
- **22 categorias principais** organizadas por tipo (expense/income/both)
|
||
- **150 subcategorias** detalhadas para classificação precisa
|
||
- **825 palavras-chave** em espanhol para categorização automática
|
||
|
||
- ✅ **Categorias de Despesa (expense)**:
|
||
- 🏠 Moradia (12 subcategorias): aluguel, hipoteca, água, luz, gás, internet...
|
||
- 🍽️ Alimentação (8): supermercados Madrid (Mercadona, Carrefour, Lidl...)
|
||
- 🍴 Restaurantes e Bares (9): fast food, tapas, comida asiática, kebab...
|
||
- 🚗 Transporte (14): metro/EMT, taxi/Cabify, AVE, BiciMAD, carsharing...
|
||
- 🛒 Compras (9): roupas (Zara, Mango, Primark), eletrônicos, Amazon...
|
||
- 💊 Saúde (9): farmácias, seguros (Sanitas, Adeslas), dentista, ótica...
|
||
- 💇 Beleza (7): peluquería, spa, cosméticos (Sephora, Primor)...
|
||
- 🎓 Educação (6): universidades Madrid, cursos, idiomas...
|
||
- 🎮 Entretenimento (9): streaming, cinema (Yelmo, Cinesa), teatro Gran Vía...
|
||
- 🏋️ Fitness (7): gimnasios (Basic-Fit, McFit), padel, running...
|
||
- ✈️ Viagens (6): hotéis, Booking, Airbnb, tours...
|
||
- 🐕 Pets (5): Tiendanimal, Kiwoko, veterinário...
|
||
- 🏦 Financeiro (6): taxas bancárias, impostos, Hacienda...
|
||
- 👶 Família (5): guardería, extraescolares, brinquedos...
|
||
- 📱 Assinaturas (6): cloud, apps, jornais digitais...
|
||
- 🎁 Doações (3): ONGs, crowdfunding, igreja...
|
||
- 📦 Outros (6): correios, loteria, lavanderia...
|
||
|
||
- ✅ **Categorias de Renda (income)**:
|
||
- 💰 Salário e Trabalho (6): nómina, bonus, freelance...
|
||
- 📈 Investimentos (5): dividendos, cripto, fundos...
|
||
- 🏠 Rendas/Aluguéis (3): aluguel recebido, Airbnb...
|
||
- 🎁 Outros Rendimentos (5): reembolsos, Wallapop, ajudas governo...
|
||
|
||
- ✅ **Categorias Mistas (both)**:
|
||
- 🔄 Transferências (4): entre contas, Bizum, PayPal, Wise/Revolut
|
||
|
||
|
||
## [1.4.1] - 2025-12-08
|
||
|
||
### Added - Contas Passivo na Página de Contas
|
||
|
||
#### Frontend (React)
|
||
- ✅ **Integração de contas passivo na página /accounts**
|
||
- Seção dedicada "Contas Passivo (Empréstimos e Dívidas)"
|
||
- Cards de resumo combinam totais de contas ativas + passivo
|
||
- Linhas clicáveis navegam para página /liabilities
|
||
- Barra de progresso visual (parcelas pagas vs total)
|
||
- Exibe: credor, saldo devedor, status
|
||
|
||
|
||
## [1.4.0] - 2025-12-08
|
||
|
||
### Added - Sistema de Contas Passivo (Empréstimos/Financiamentos)
|
||
|
||
#### Backend (Laravel)
|
||
- ✅ **Novas migrations**
|
||
- `liability_accounts` - Tabela para contratos de passivo com todos os metadados
|
||
- `liability_installments` - Tabela para parcelas individuais de cada contrato
|
||
|
||
- ✅ **Novos models**
|
||
- `LiabilityAccount` - Model com relacionamentos, cálculos de taxas de juros e progresso
|
||
- `LiabilityInstallment` - Model com status de parcela e método markAsPaid()
|
||
|
||
- ✅ **Novo controller (LiabilityAccountController)**
|
||
- CRUD completo para contas passivo
|
||
- Importação de arquivos Excel (.xlsx/.xls)
|
||
- Parser inteligente de colunas (Pago, Fecha, Cuota, Intereses, Capital, Estado)
|
||
- Cálculo automático de taxas extras (multas/atrasos)
|
||
- Cálculo de taxas de juros (mensal, anual, total)
|
||
- Resumo por moeda
|
||
|
||
- ✅ **Novas rotas API**
|
||
- `GET/POST /api/liability-accounts` - Listar/Criar contratos
|
||
- `GET/PUT/DELETE /api/liability-accounts/{id}` - Ver/Atualizar/Excluir contrato
|
||
- `POST /api/liability-accounts/import` - Importar Excel
|
||
- `GET /api/liability-accounts/{id}/installments` - Listar parcelas
|
||
- `PUT /api/liability-accounts/{accountId}/installments/{installmentId}` - Atualizar parcela
|
||
- `GET /api/liability-summary` - Resumo geral
|
||
|
||
- ✅ **Dependência adicionada**
|
||
- `phpoffice/phpspreadsheet ^5.3` para leitura de Excel
|
||
|
||
#### Frontend (React)
|
||
- ✅ **Nova página LiabilityAccounts.jsx**
|
||
- Cards de resumo por moeda (Dívida Total, Total Pago, Total Pendente, Juros Totais)
|
||
- Lista de contratos em formato de cards com:
|
||
- Barra de progresso de pagamento
|
||
- Taxa de juros mensal
|
||
- Parcelas pagas/total
|
||
- Saldo devedor
|
||
- Modal de importação de Excel com campos para:
|
||
- Nome do contrato
|
||
- Credor/Banco
|
||
- Número do contrato
|
||
- Moeda
|
||
- Descrição
|
||
- Modal de detalhes com:
|
||
- Cards de valores (Principal, Juros, Taxas, Total)
|
||
- Cards de taxas (Mensal, Anual, Total do contrato)
|
||
- Tabela de parcelas com status colorido
|
||
- Botão para marcar parcela como paga
|
||
- Filtros por status e ativo/inativo
|
||
- Confirmação de exclusão
|
||
|
||
- ✅ **Serviço API (api.js)**
|
||
- `liabilityAccountService` com todos os métodos CRUD e importação
|
||
|
||
- ✅ **Navegação**
|
||
- Item "Passivos" adicionado ao menu lateral
|
||
- Rota `/liabilities`
|
||
|
||
- ✅ **Internacionalização (i18n)**
|
||
- Traduções completas em pt-BR, es e en
|
||
- Seção `liabilities` com todas as strings
|
||
|
||
### Features de Contas Passivo
|
||
- **Importação de Excel**: Suporte completo ao formato do arquivo ContratoWanna.xlsx
|
||
- **Cálculo automático de juros**: Taxa mensal, anual e total do contrato
|
||
- **Detecção de taxas extras**: Identifica automaticamente multas e atrasos
|
||
- **Progresso visual**: Barra de progresso mostra quanto do principal foi amortizado
|
||
- **Status de parcelas**: Pendente, Pago, Parcial, Atrasado, Cancelado
|
||
- **Preparado para conciliação**: Campos para vincular transações futuras
|
||
|
||
---
|
||
|
||
## [1.3.14] - 2025-12-08
|
||
|
||
### Changed - Saldo Total por Moeda
|
||
|
||
#### Frontend (Accounts.jsx)
|
||
- ✅ **Saldo total agora exibido separadamente por moeda**
|
||
- Função `getTotalsByCurrency()` agrupa saldos por currency
|
||
- Cada moeda (BRL, EUR, USD, etc.) exibida com seu próprio total
|
||
- Layout responsivo com cards lado a lado
|
||
- Verde para saldo positivo, vermelho para negativo
|
||
|
||
---
|
||
|
||
## [1.3.13] - 2025-12-08
|
||
|
||
### Fixed - Tradução i18n faltando
|
||
|
||
#### Frontend (i18n)
|
||
- ✅ **Adicionada chave de tradução `accounts.descriptionPlaceholder`**
|
||
- pt-BR: "Observações sobre esta conta (opcional)"
|
||
- es: "Observaciones sobre esta cuenta (opcional)"
|
||
- en: "Notes about this account (optional)"
|
||
|
||
---
|
||
|
||
## [1.3.12] - 2025-12-08
|
||
|
||
### Changed - Layout Desktop Compacto (25% menor)
|
||
|
||
#### Frontend (CSS)
|
||
- ✅ **Reduzido tamanho geral dos elementos em 25% para desktop**
|
||
- Font size base: 16px → 13px (em telas ≥992px)
|
||
- Headings reduzidos proporcionalmente (h1: 2.5rem → 1.875rem, etc.)
|
||
- Buttons mais compactos (padding reduzido)
|
||
- Forms: inputs e labels menores
|
||
- Tables: células mais compactas
|
||
- Spacing utilities (.p-3, .p-4, .mb-3, etc.) reduzidos
|
||
- Modais: tamanhos máximos reduzidos
|
||
- Badges e alerts mais compactos
|
||
|
||
#### Frontend (Layout.jsx)
|
||
- ✅ **Sidebar mais compacta**
|
||
- Largura: 250px → 200px
|
||
- Colapsada: 70px → 55px
|
||
- Fonte do menu reduzida
|
||
- Avatar do usuário menor (35px → 28px)
|
||
|
||
---
|
||
|
||
## [1.3.11] - 2025-12-08
|
||
|
||
### Fixed - Modal de Confirmação (Excluir Conta)
|
||
|
||
#### Frontend (React)
|
||
- ✅ **Refatorado componente Modal.jsx para funcionar sem Bootstrap JS**
|
||
- Bootstrap 5 JS API não funciona bem com React (problemas de inicialização)
|
||
- Implementado modal 100% controlado via React (show/hide via props)
|
||
- Adicionado suporte a ESC para fechar (se keyboard=true)
|
||
- Adicionado bloqueio de scroll do body quando modal está aberto
|
||
- Suporte a backdrop "static" (não fecha ao clicar fora)
|
||
- **Botão de excluir conta agora funciona corretamente**
|
||
|
||
---
|
||
|
||
## [1.3.10] - 2025-12-08
|
||
|
||
### Fixed - Posicionamento do Dropdown em CostCenters
|
||
|
||
#### Frontend (React)
|
||
- ✅ **Adicionado posicionamento absoluto ao dropdown**
|
||
- `position: relative` no container do dropdown
|
||
- `position: absolute`, `right: 0`, `top: 100%`, `zIndex: 1000` no menu
|
||
- Dropdown agora aparece corretamente abaixo do botão
|
||
|
||
---
|
||
|
||
## [1.3.9] - 2025-12-08
|
||
|
||
### Fixed - Dropdown de Ações em CostCenters
|
||
|
||
#### Frontend (React)
|
||
- ✅ **Corrigido dropdown de ações nos cards de centros de custo**
|
||
- Bootstrap 5 com React não funciona bem com `data-bs-toggle="dropdown"`
|
||
- Implementado dropdown controlado via estado React (useState)
|
||
- Adicionado `useRef` para detectar cliques fora e fechar dropdown
|
||
- Dropdown agora abre/fecha corretamente ao clicar nos três pontinhos
|
||
|
||
---
|
||
|
||
## [1.3.8] - 2025-12-08
|
||
|
||
### Fixed - Import Bootstrap JS (não funcionou)
|
||
|
||
#### Frontend (React)
|
||
- Tentativa de correção adicionando `bootstrap.bundle.min.js` no main.jsx
|
||
- **Nota:** Não resolveu o problema - Bootstrap 5 precisa de inicialização manual com React
|
||
|
||
---
|
||
|
||
## [1.3.7] - 2025-12-08
|
||
|
||
### Added - Campo is_admin para Usuários
|
||
|
||
#### Backend (Laravel)
|
||
- ✅ **Campo `is_admin` na tabela users**
|
||
- Migration para adicionar coluna `is_admin` (boolean, default false)
|
||
- Atualizado modelo User com novo campo, cast e método `isAdmin()`
|
||
- Marco (id=2) também definido como admin
|
||
|
||
---
|
||
|
||
## [1.3.6] - 2025-12-08
|
||
|
||
### Added - Centro de Custo do Sistema
|
||
|
||
#### Backend (Laravel)
|
||
- ✅ **Campo `is_system` na tabela cost_centers**
|
||
- Migration para adicionar coluna `is_system` (boolean, default false)
|
||
- Atualizado modelo CostCenter com novo campo e scope `system()`
|
||
|
||
- ✅ **Auto-criação do centro de custo "Geral"**
|
||
- Criado automaticamente quando usuário não tem nenhum centro de custo
|
||
- Nome: "Geral", Código: "GERAL"
|
||
- Para agrupar transações sem centro de custo definido
|
||
|
||
- ✅ **Proteção contra edição/exclusão**
|
||
- Centros de custo com `is_system=true` não podem ser editados
|
||
- Centros de custo com `is_system=true` não podem ser excluídos
|
||
- Retorna erro 403 com mensagem apropriada
|
||
|
||
#### Frontend (React)
|
||
- ✅ **Indicação visual do centro de custo do sistema**
|
||
- Ícone de cadeado (🔒) ao lado do nome
|
||
- Dropdown de ações oculto para centros de custo do sistema
|
||
|
||
- ✅ **Traduções adicionadas (i18n)**
|
||
- `costCenters.systemCostCenter` em pt-BR, en, es
|
||
|
||
---
|
||
|
||
## [1.3.5] - 2025-12-08
|
||
|
||
### Fixed - Sistema de Traduções i18n
|
||
|
||
#### Frontend (React)
|
||
- ✅ **Revisão completa do sistema de traduções**
|
||
- Accounts.jsx: Todos os textos hardcoded substituídos por `t('...')`
|
||
- Categories.jsx: Todos os textos hardcoded substituídos por `t('...')`
|
||
- CostCenters.jsx: Todos os textos hardcoded substituídos por `t('...')`
|
||
- Dashboard.jsx: Todos os textos hardcoded substituídos por `t('...')`
|
||
|
||
- ✅ **Elementos traduzidos:**
|
||
- Headers, botões, labels de formulários
|
||
- Mensagens de erro e sucesso (toast)
|
||
- Placeholders, tooltips, badges de status
|
||
- Modais de confirmação de exclusão
|
||
- Contadores e filtros
|
||
|
||
- ✅ **Arquivos de tradução verificados:**
|
||
- pt-BR.json: Completo
|
||
- en.json: Completo
|
||
- es.json: Completo
|
||
|
||
---
|
||
|
||
## [1.3.4] - 2025-12-08
|
||
|
||
### Fixed - Fundo Branco em Tabelas
|
||
|
||
#### Frontend (React)
|
||
- ✅ **Correção definitiva do fundo branco em tabelas**
|
||
- Adicionado `backgroundColor: 'transparent'` inline em todos os elementos de tabela
|
||
- `<table>`, `<thead>`, `<tbody>`, `<tr>`, `<th>`, `<td>` todos com estilo inline
|
||
- CSS variables do Bootstrap redefinidas com `--bs-table-bg: 'transparent'`
|
||
- Corrigido em Accounts.jsx e Dashboard.jsx
|
||
|
||
---
|
||
|
||
## [1.3.3] - 2025-12-08
|
||
|
||
### Changed - IconSelector Modal
|
||
|
||
#### Frontend (React)
|
||
- ✅ **IconSelector refatorado** - Mudança de dropdown para modal
|
||
- Modal grande com grid visual de ícones
|
||
- Experiência de seleção muito melhorada
|
||
- Campo de busca com ícone
|
||
- Filtros por categoria em botões
|
||
- Ícone selecionado destacado com borda azul
|
||
- Fechamento ao clicar fora do modal
|
||
- Footer com contagem de ícones e botão cancelar
|
||
|
||
- ✅ **Correção de tabelas com tema dark**
|
||
- Hover das linhas com fundo azul translúcido
|
||
- Variáveis CSS do Bootstrap redefinidas
|
||
|
||
---
|
||
|
||
## [1.3.2] - 2025-12-08
|
||
|
||
### Added - Seletor Visual de Ícones
|
||
|
||
#### Frontend (React)
|
||
- ✅ **IconSelector** - Componente visual para seleção de ícones
|
||
- Grid visual com mais de 200 ícones organizados por categoria
|
||
- Busca por nome de ícone
|
||
- Filtro por categoria (money, bank, card, food, shopping, etc.)
|
||
- Suporte para 3 tipos: account, category, costCenter
|
||
- Visual consistente com tema dark
|
||
|
||
- ✅ **Biblioteca de Ícones Expandida** (`icons.js`)
|
||
- **Contas**: 50+ ícones (wallets, banks, cards, currencies, investments)
|
||
- **Categorias**: 150+ ícones (food, shopping, housing, transport, health, education, leisure, travel, work, utilities, etc.)
|
||
- **Centros de Custo**: 40+ ícones (buildings, projects, departments)
|
||
- Organização por subcategorias para facilitar busca
|
||
|
||
- ✅ **Correções de Tema Dark**
|
||
- Correção de fundos brancos em autocomplete de formulários
|
||
- Correção de fundos em checkboxes e radio buttons
|
||
- Correção de color picker com tema dark
|
||
- Correção de modals, dropdowns, alerts, badges
|
||
|
||
#### Arquivos Criados
|
||
```
|
||
frontend/src/config/icons.js # Biblioteca de 200+ ícones
|
||
frontend/src/components/IconSelector.jsx # Componente visual de seleção
|
||
```
|
||
|
||
#### Arquivos Modificados
|
||
```
|
||
frontend/src/pages/Accounts.jsx # Integração IconSelector + i18n
|
||
frontend/src/pages/Categories.jsx # Integração IconSelector + i18n
|
||
frontend/src/pages/CostCenters.jsx # Integração IconSelector + i18n
|
||
frontend/src/index.css # Correções tema dark
|
||
```
|
||
|
||
---
|
||
|
||
## [1.3.1] - 2025-12-08
|
||
|
||
### Added - Suporte Multi-idioma e Multi-divisa
|
||
|
||
#### Frontend (React)
|
||
- ✅ **Internacionalização (i18n)** com react-i18next
|
||
- 3 idiomas: Español (es), English (en), Português (pt-BR)
|
||
- Arquivos de tradução completos em `src/i18n/locales/`
|
||
- Detecção automática do idioma do navegador
|
||
- Persistência da preferência no localStorage
|
||
|
||
- ✅ **Sistema Multi-divisa**
|
||
- 15 moedas suportadas: BRL, USD, EUR, GBP, JPY, CNY, ARS, CLP, COP, MXN, PEN, UYU, CHF, CAD, AUD
|
||
- Formatação automática por locale
|
||
- Componente `CurrencySelector` para seleção
|
||
- Componente `CurrencyDisplay` para exibição formatada
|
||
|
||
- ✅ **Novos Componentes**
|
||
- `LanguageSelector.jsx` - Seletor de idioma com bandeiras
|
||
- `CurrencySelector.jsx` - Seletor de moeda
|
||
- `useFormatters.js` - Hook para formatação de valores e datas
|
||
|
||
#### Arquivos Criados
|
||
```
|
||
frontend/src/i18n/
|
||
├── index.js # Configuração i18next
|
||
└── locales/
|
||
├── es.json # Tradução Español (padrão)
|
||
├── en.json # Tradução English
|
||
└── pt-BR.json # Tradução Português
|
||
|
||
frontend/src/config/
|
||
└── currencies.js # Lista de moedas e formatadores
|
||
|
||
frontend/src/hooks/
|
||
├── index.js # Exportações
|
||
└── useFormatters.js # Hook de formatação
|
||
|
||
frontend/src/components/
|
||
├── LanguageSelector.jsx # Seletor de idioma
|
||
└── CurrencySelector.jsx # Seletor de moeda
|
||
```
|
||
|
||
### Changed
|
||
- `main.jsx` - Adicionado Suspense e import do i18n
|
||
- `Layout.jsx` - Adicionado seletor de idioma no header, traduções nos menus
|
||
- `Dashboard.jsx` - Atualizado com traduções e formatação de moeda
|
||
|
||
### Dependencies Added
|
||
- `i18next: ^24.x`
|
||
- `react-i18next: ^15.x`
|
||
- `i18next-browser-languagedetector: ^8.x`
|
||
|
||
### Deployed
|
||
- ✅ Frontend atualizado em https://webmoney.cnxifly.com
|
||
|
||
---
|
||
|
||
## [1.3.0] - 2025-12-08
|
||
|
||
### Added - Fase 1: Gerenciadores Base
|
||
|
||
#### Backend (Laravel)
|
||
- ✅ **Gerenciador de Contas** - API completa CRUD
|
||
- Tipos: Dinheiro, Conta Corrente, Poupança, Cartão de Crédito, Ativos, Passivos
|
||
- Campos: nome, tipo, banco, número da conta, saldo inicial/atual, cor, ícone
|
||
- Modelo `Account` com relacionamento ao usuário
|
||
- Migration `create_accounts_table`
|
||
|
||
- ✅ **Gerenciador de Centros de Custo** - API completa CRUD
|
||
- Campos: nome, código, descrição, cor, orçamento
|
||
- Sistema de palavras-chave para matching automático em lote
|
||
- Modelos `CostCenter` e `CostCenterKeyword`
|
||
- Migration `create_cost_centers_table` (com tabela de keywords)
|
||
- Endpoints: `/api/cost-centers/{id}/keywords` para gerenciar keywords
|
||
|
||
- ✅ **Gerenciador de Categorias** - API completa CRUD
|
||
- Tipos: Receita, Despesa, Ambos
|
||
- Suporte a hierarquia (categoria pai e subcategorias)
|
||
- Sistema de palavras-chave para matching automático em lote
|
||
- Modelos `Category` e `CategoryKeyword`
|
||
- Migration `create_categories_table` (com tabela de keywords)
|
||
- Endpoints: `/api/categories/{id}/keywords` para gerenciar keywords
|
||
|
||
#### Frontend (React)
|
||
- ✅ **Layout com Sidebar** - Navegação lateral moderna
|
||
- Componente `Layout.jsx` reutilizável
|
||
- Menu colapsável responsivo
|
||
- Ícones Bootstrap Icons
|
||
- Tema escuro integrado
|
||
|
||
- ✅ **Componentes Reutilizáveis**
|
||
- `Modal.jsx` - Modal Bootstrap para formulários (sem uso de alert())
|
||
- `Toast.jsx` - Sistema de notificações com ToastProvider
|
||
|
||
- ✅ **Página de Contas** (`Accounts.jsx`)
|
||
- Listagem com cards coloridos
|
||
- Formulário completo com todos os campos
|
||
- CRUD completo via modal
|
||
- Formatação de valores em BRL
|
||
|
||
- ✅ **Página de Centros de Custo** (`CostCenters.jsx`)
|
||
- Listagem com badges de keywords
|
||
- Formulário com gerenciamento de keywords
|
||
- CRUD completo via modal
|
||
|
||
- ✅ **Página de Categorias** (`Categories.jsx`)
|
||
- Listagem hierárquica (pai > subcategoria)
|
||
- Formulário com seleção de categoria pai
|
||
- Gerenciamento de keywords por categoria
|
||
- CRUD completo via modal
|
||
|
||
- ✅ **Dashboard Atualizado** (`Dashboard.jsx`)
|
||
- Cards de resumo (Contas, Categorias, Centros de Custo)
|
||
- Links de acesso rápido
|
||
- Design moderno com tema escuro
|
||
|
||
#### Novos Arquivos Criados
|
||
```
|
||
backend/
|
||
├── database/migrations/
|
||
│ ├── 2025_12_08_000001_create_accounts_table.php
|
||
│ ├── 2025_12_08_000002_create_cost_centers_table.php
|
||
│ └── 2025_12_08_000003_create_categories_table.php
|
||
├── app/Models/
|
||
│ ├── Account.php
|
||
│ ├── CostCenter.php
|
||
│ ├── CostCenterKeyword.php
|
||
│ ├── Category.php
|
||
│ └── CategoryKeyword.php
|
||
└── app/Http/Controllers/Api/
|
||
├── AccountController.php
|
||
├── CostCenterController.php
|
||
└── CategoryController.php
|
||
|
||
frontend/src/
|
||
├── components/
|
||
│ ├── Layout.jsx
|
||
│ ├── Modal.jsx
|
||
│ └── Toast.jsx
|
||
└── pages/
|
||
├── Accounts.jsx
|
||
├── CostCenters.jsx
|
||
└── Categories.jsx
|
||
```
|
||
|
||
### Changed
|
||
- `routes/api.php` - Adicionadas rotas para accounts, cost-centers, categories
|
||
- `services/api.js` - Adicionados accountService, costCenterService, categoryService
|
||
- `App.jsx` - Novas rotas e ToastProvider
|
||
- `Dashboard.jsx` - Reescrito com cards de resumo
|
||
- `index.css` - Estilos para sidebar, cards, formulários
|
||
|
||
### Database
|
||
- 6 novas tabelas criadas:
|
||
- `accounts` - Contas financeiras
|
||
- `cost_centers` - Centros de custo
|
||
- `cost_center_keywords` - Palavras-chave de centros de custo
|
||
- `categories` - Categorias (com self-reference para hierarquia)
|
||
- `category_keywords` - Palavras-chave de categorias
|
||
|
||
### Deployed
|
||
- ✅ Backend atualizado em https://webmoney.cnxifly.com/api
|
||
- ✅ Frontend atualizado em https://webmoney.cnxifly.com
|
||
- ✅ Todas as APIs testadas e funcionando
|
||
|
||
---
|
||
|
||
## [1.2.2] - 2025-12-07
|
||
|
||
### Added
|
||
- ✅ Página "Em Construção" para cnxifly.com
|
||
- ✅ Design moderno com tema escuro azul profissional
|
||
- ✅ Links para WEBMoney App e contato
|
||
- ✅ Animações suaves (fadeIn, pulse)
|
||
- ✅ Layout responsivo para mobile
|
||
|
||
### Changed
|
||
- Nginx: cnxifly.com agora serve página estática em `/var/www/cnxifly`
|
||
- Separação clara: cnxifly.com (institucional) vs webmoney.cnxifly.com (app)
|
||
|
||
### Deployed
|
||
- ✅ https://cnxifly.com - Página em construção
|
||
- ✅ https://www.cnxifly.com - Redirecionamento para cnxifly.com
|
||
|
||
|
||
## [1.2.1] - 2025-12-07
|
||
|
||
### Fixed
|
||
- ✅ Removido fundo branco (`bg-light`) do Dashboard - agora usa tema escuro
|
||
- ✅ Adicionada classe `.dashboard-dark` com gradiente escuro azul
|
||
- ✅ Corrigido navbar e footer para usar cores escuras (#1e293b)
|
||
- ✅ Tabelas agora têm texto claro (#e2e8f0) em fundo escuro
|
||
- ✅ Override de `.bg-light` do Bootstrap para garantir tema escuro
|
||
- ✅ Atualizada versão no footer para v1.2.0
|
||
|
||
### Changed
|
||
- Dashboard.jsx: Substituído `bg-light` por `dashboard-dark`
|
||
- index.css: Adicionados novos estilos para tema escuro completo
|
||
|
||
### Deployed
|
||
- ✅ Frontend atualizado em https://webmoney.cnxifly.com
|
||
|
||
|
||
## [1.2.0] - 2025-12-07
|
||
|
||
### Added
|
||
- ✅ Deploy completo do backend Laravel e frontend React para produção
|
||
- ✅ Documento `CREDENCIAIS_SERVIDOR.md` com todas as credenciais organizadas
|
||
- ✅ Suporte IPv6 em todos os vhosts Nginx (listen [::]:443 ssl)
|
||
- ✅ Redis 7.0.15 instalado e configurado
|
||
- ✅ PM2 6.0.14 para gerenciamento de processos Node.js
|
||
|
||
### Changed
|
||
- Atualizado ROTEIRO_INSTALACAO_SERVIDOR.md com versões reais instaladas
|
||
- Nginx atualizado para 1.29.3 mainline (era 1.27.x no roteiro)
|
||
- PHP atualizado para 8.4.15
|
||
- Composer atualizado para 2.9.2
|
||
- Node.js 22.21.0 LTS
|
||
|
||
### Fixed
|
||
- ✅ webmail.cnxifly.com agora serve Roundcube corretamente (antes mostrava phpMyAdmin)
|
||
- ✅ Corrigido problema de IPv6 nos vhosts que causava resposta incorreta
|
||
- ✅ mail.cnxifly.com agora serve exclusivamente PostfixAdmin
|
||
|
||
### Validated
|
||
- ✅ 7/7 serviços ativos (nginx, mariadb, php8.4-fpm, redis, postfix, dovecot, opendkim)
|
||
- ✅ 6/6 sites HTTPS funcionando
|
||
- ✅ SSL válido para 6 domínios (expira 2026-03-07)
|
||
- ✅ DKIM key OK
|
||
- ✅ SPF configurado com hard fail (-all)
|
||
- ✅ 4 databases criados (webmoney, postfixadmin, roundcube, phpmyadmin)
|
||
- ✅ 2 contas de email (admin@cnxifly.com, test@cnxifly.com)
|
||
|
||
## [1.1.5] - 2025-12-07
|
||
|
||
### Added
|
||
- phpMyAdmin instalado em `https://phpmyadmin.cnxifly.com` com SSL (Let's Encrypt)
|
||
- Usuários administrativos criados (sistema e MariaDB) usando senha única fornecida
|
||
- Documento `CREDENCIAIS.md` com todas as credenciais criadas
|
||
|
||
### Changed
|
||
- Tela de login agora aplica tema escuro/azul conforme especificação (background, cards, botões)
|
||
|
||
### Fixed
|
||
- Erro de dependências ausentes (MariaDB) para phpMyAdmin
|
||
|
||
## [1.1.4] - 2025-12-07
|
||
|
||
### Added
|
||
- ✓ Documentação completa do tema escuro/azul profissional em ESPECIFICACIONES
|
||
- ✓ Paleta de cores detalhada com códigos hex e variáveis SCSS
|
||
- ✓ Certificado SSL expandido para incluir `webmail.cnxifly.com`
|
||
- ✓ Configuração Nginx para `webmail.cnxifly.com` com HTTPS
|
||
- ✓ Documentação de uso dos subdomínios mail/webmail
|
||
|
||
### Changed
|
||
- Removida rota `/register` do frontend - usuários NÃO podem se auto-registrar
|
||
- Login sem link para registro (apenas admins criam usuários)
|
||
- Subdominios documentados: `mail.cnxifly.com` = admin email, `webmail.cnxifly.com` = usuários finais
|
||
|
||
### Fixed
|
||
- ❌ ERR_CERT_COMMON_NAME_INVALID em `webmail.cnxifly.com` → ✅ Certificado SSL válido
|
||
- Let's Encrypt agora inclui 6 domínios: cnxifly.com, www, webmoney, mail, webmail, ftp
|
||
|
||
### Security
|
||
- Certificado wildcard Let's Encrypt válido até 2026-03-07
|
||
- TLS 1.2/1.3 configurado em webmail.cnxifly.com
|
||
- Redirecionamento automático HTTP → HTTPS
|
||
|
||
---
|
||
|
||
## [1.1.3] - 2025-12-07
|
||
|
||
### Added
|
||
- ✓ Frontend React completo com Vite + React Router + Bootstrap 5
|
||
- ✓ Tela de Login (`/login`) com validação e feedback de erros
|
||
- ✓ Tela de Registro (`/register`) com confirmação de senha
|
||
- ✓ Dashboard (`/dashboard`) protegido com informações do usuário
|
||
- ✓ Sistema de autenticação com Context API e localStorage
|
||
- ✓ Interceptor Axios para token automático em todas as requisições
|
||
- ✓ ProtectedRoute para rotas que requerem autenticação
|
||
- ✓ Deploy script para frontend (`frontend/deploy.sh`)
|
||
- ✓ Configuração Nginx ajustada para React SPA + Laravel API
|
||
|
||
### Changed
|
||
- Nginx agora serve React SPA em `/` e Laravel API em `/api`
|
||
- Index do Nginx mudado de `index.php` para `index.html` (React)
|
||
|
||
### Validation
|
||
- ✅ Frontend acessível em `https://webmoney.cnxifly.com`
|
||
- ✅ Login/Register funcionando com backend Laravel
|
||
- ✅ Dashboard mostra informações do usuário autenticado
|
||
- ✅ Logout revoga token e redireciona para login
|
||
- ✅ API `/api/*` respondendo corretamente via Nginx
|
||
|
||
### Tech Stack
|
||
- React 18 + Vite (rolldown-vite experimental)
|
||
- React Router DOM para navegação
|
||
- Axios para requisições HTTP
|
||
- Bootstrap 5 + Bootstrap Icons
|
||
- Laravel Sanctum (backend)
|
||
|
||
---
|
||
|
||
## [1.1.2] - 2025-12-07
|
||
|
||
### Added
|
||
- ✓ Registro DMARC publicado em `_dmarc.cnxifly.com` com política `p=quarantine`, alinhamento estrito (adkim/aspf=s) e coleta de relatórios (rua/ruf para postmaster@cnxifly.com)
|
||
- ✓ Cabeçalhos anti-spam adicionados aos emails de boas-vindas: `List-Unsubscribe` (mailto) e `List-Unsubscribe-Post: List-Unsubscribe=One-Click`
|
||
|
||
### Changed
|
||
- Fluxo de envio de email configurado para validar SPF/DKIM/DMARC end-to-end após publicação do DMARC
|
||
|
||
### Validation
|
||
- ✅ SPF=pass, DKIM=pass, DMARC=pass em entrega real para Gmail (forward iCloud) com chegada em INBOX
|
||
- ✅ Endpoint `POST /api/email/send-test` respondendo 200 e entregando com autenticações válidas
|
||
|
||
### Notes
|
||
- Política DMARC pode ser elevada para `p=reject` após estabilização
|
||
- Manter aquecimento do domínio com baixo volume antes de campanhas
|
||
|
||
---
|
||
|
||
## [1.0.5] - 2025-12-07
|
||
|
||
### Added
|
||
- ✓ Certificado SSL Let's Encrypt expandido para incluir mail.cnxifly.com e ftp.cnxifly.com
|
||
- ✓ Virtual host Nginx para mail.cnxifly.com com HTTPS e HTTP/2
|
||
- ✓ Virtual host Nginx para ftp.cnxifly.com com HTTPS e HTTP/2
|
||
- ✓ Registro DNS DKIM (default._domainkey.cnxifly.com) adicionado e validado
|
||
|
||
### Fixed
|
||
- ✓ Certificado SSL agora cobre TODOS os domínios: cnxifly.com, www, webmoney, mail, ftp
|
||
- ✓ Postfix e vsftpd recarregados com certificados atualizados
|
||
- ✓ Todos os 5 domínios agora respondem HTTPS 200 com HTTP/2
|
||
|
||
### Configuration
|
||
- Certificado SSL: válido até 2026-03-07 (5 domínios)
|
||
- Nginx: 4 sites habilitados (cnxifly.com, webmoney, mail, ftp)
|
||
- DKIM DNS: TXT record publicado e propagado
|
||
- Security headers: HSTS, nosniff, XFO, XSS-Protection em todos os vhosts
|
||
|
||
### Validation
|
||
- ✅ 5/5 domínios com HTTPS funcional
|
||
- ✅ 6/6 serviços ativos (nginx, postfix, opendkim, vsftpd, php-fpm, postgresql)
|
||
- ✅ 18/18 regras de firewall UFW configuradas
|
||
- ✅ DKIM DNS propagado e validado via dig
|
||
- ✅ Certificado SSL multi-domínio ativo
|
||
|
||
### Notes
|
||
- **INFRAESTRUTURA 100% COMPLETA** - Todas as correções aplicadas
|
||
- Todos os certificados SSL configurados e válidos
|
||
- Email anti-spam funcional com DKIM publicado em DNS
|
||
- Pronto para desenvolvimento de aplicação Laravel + React
|
||
|
||
---
|
||
|
||
## [1.0.4] - 2025-12-07
|
||
|
||
### Added
|
||
- ✓ Servidor de Email Postfix 3.8.6 instalado e configurado com TLS
|
||
- ✓ OpenDKIM 2.11.0 instalado com chaves DKIM geradas para cnxifly.com
|
||
- ✓ Integração Postfix + OpenDKIM via milter (porta 8891)
|
||
- ✓ Contas de email criadas: admin@cnxifly.com, no-reply@cnxifly.com, support@cnxifly.com
|
||
- ✓ Aliases de email configurados em /etc/aliases
|
||
- ✓ vsftpd 3.0.5 instalado com suporte SSL/TLS usando certificados Let's Encrypt
|
||
- ✓ FTP passivo configurado (portas 40000-50000)
|
||
- ✓ Virtual host Nginx dedicado para webmoney.cnxifly.com com PHP-FPM
|
||
- ✓ Diretório /var/www/webmoney/public criado para aplicação Laravel
|
||
- ✓ PHP-FPM 8.3 ativo e integrado com Nginx
|
||
- ✓ Portas adicionais abertas no UFW: 25, 587, 465 (SMTP), 21, 20 (FTP), 40000-50000 (FTP passivo)
|
||
|
||
### Configuration
|
||
- Postfix: myhostname=mail.cnxifly.com, TLS ativo, DKIM signing habilitado
|
||
- OpenDKIM: selector=default, domain=cnxifly.com, chave RSA 2048-bit
|
||
- vsftpd: SSL ativo, write_enable=YES, pasv_mode ativo
|
||
- Nginx webmoney: root=/var/www/webmoney/public, PHP-FPM via socket, HTTPS only
|
||
|
||
### Security
|
||
- Anti-spam: DKIM assinatura digital em emails enviados
|
||
- Registro DNS TXT necessário: default._domainkey.cnxifly.com (ver chave pública gerada)
|
||
- FTP com SSL/TLS obrigatório
|
||
- 18 regras ativas no UFW (IPv4 + IPv6)
|
||
|
||
### Notes
|
||
- ✅ Servidor 100% pronto conforme ESPECIFICACIONES_WEBMONEY.md
|
||
- Email SMTP disponível para envio de notificações da aplicação
|
||
- FTP disponível para deploy manual de arquivos (usar FTPS)
|
||
- Laravel pode ser instalado em /var/www/webmoney
|
||
- React build pode ser servido via Nginx (SPA mode)
|
||
|
||
---
|
||
|
||
## [1.0.3] - 2025-12-07
|
||
|
||
### Added
|
||
- ✓ Firewall UFW ativado permitindo apenas 22/80/443 (IPv4 e IPv6)
|
||
- ✓ Instalação e configuração do Nginx com gzip, charset UTF-8 e cabeçalhos de segurança (HSTS, nosniff, XFO, XSS-Protection, Referrer-Policy, Permissions-Policy)
|
||
- ✓ Certificados SSL Let’s Encrypt emitidos para cnxifly.com, www.cnxifly.com e webmoney.cnxifly.com com redirecionamento HTTPS
|
||
- ✓ Banco PostgreSQL `webmoney` criado com ENCODING `UTF8` e LOCALE `es_ES.UTF-8`
|
||
- ✓ Usuário PostgreSQL `webmoney_user` criado com senha forte e privilégios na base `webmoney`
|
||
- ✓ Apache desabilitado para liberar portas web e Nginx habilitado em 80/443
|
||
|
||
### Notes
|
||
- Certbot agendado para renovação automática
|
||
- Root web atual: `/var/www/html` (placeholder; pronto para app)
|
||
- Manter porta 22 aberta garante acesso via workspace/local conforme solicitado
|
||
|
||
---
|
||
|
||
## [1.0.2] - 2025-12-07
|
||
|
||
### Added
|
||
- ✓ Configuración obligatoria: Timezone Europe/Madrid
|
||
- ✓ Configuración obligatoria: Encoding UTF-8 en todo el sistema
|
||
- ✓ Instrucciones de configuración del sistema (timedatectl, locale)
|
||
- ✓ Configuración de Timezone y Encoding en Base de Datos:
|
||
- PostgreSQL: client_encoding = 'UTF8'
|
||
- MySQL/MariaDB: utf8mb4 + utf8mb4_unicode_ci
|
||
- ✓ Configuración de Encoding en Laravel:
|
||
- config/app.php: timezone y locale
|
||
- config/database.php: opciones de conexión UTF-8
|
||
- ✓ Configuración de Encoding en Frontend (React/Vite):
|
||
- .env variables para timezone
|
||
- date-fns con locale es_ES
|
||
- i18n con español como idioma por defecto
|
||
- ✓ Configuración de Encoding en Servidores Web:
|
||
- Nginx: charset utf-8 headers
|
||
- Apache: AddDefaultCharset utf-8
|
||
- ✓ Verificación de configuración (comandos de testing)
|
||
- ✓ Sección de seguridad ampliada con timezone/encoding
|
||
|
||
### Configuration
|
||
- Timezone: Europe/Madrid (WET/WEST, UTC±0/±1)
|
||
- Encoding: UTF-8 (obligatorio en todos los servicios)
|
||
- Locale: es_ES.UTF-8
|
||
- Aplicaciones: PostgreSQL, MySQL, Laravel, React, Nginx, Apache
|
||
|
||
### Notes
|
||
- DEBE configurarse ANTES de instalar servicios
|
||
- Afecta: BD, Web Server, PHP, Node, Emails, Archivos
|
||
- Verificaciones incluidas para confirmar configuración
|
||
- Tablas de configuração por serviço
|
||
|
||
---
|
||
|
||
## [1.0.1] - 2025-12-07
|
||
|
||
## [1.1.2] - 2025-12-07
|
||
|
||
### Added
|
||
- ✓ Fluxo padrão documentado: desenvolver localmente, executar `backend/deploy.sh` e validar diretamente em `https://webmoney.cnxifly.com`
|
||
- ✓ Sample de email anti-spam (`EMAIL_SAMPLE.md`) com HTML e texto, usando From/Reply-To e headers de opt-out
|
||
- ✓ PAINEL_CONTROLE atualizado com status real de SPF/DKIM/DMARC e versão corrente
|
||
|
||
### Changed
|
||
- README detalha entregabilidade, DMARC e passo a passo de validação no domínio
|
||
|
||
### Validation
|
||
- 🛈 Mudança apenas documental; nenhum binário ou configuração de produção alterado
|
||
|
||
|
||
### Added
|
||
- ✓ Documento de Especificaciones del Proyecto (ESPECIFICACIONES_WEBMONEY.md)
|
||
- ✓ Definición completa del proyecto WEBMoney
|
||
- ✓ Configuración de dominios y subdomínios
|
||
- ✓ Stack tecnológico detallado (React + Laravel)
|
||
- ✓ Base de datos: PostgreSQL/MySQL recomendado
|
||
- ✓ Servidor web: Nginx/Apache configuración
|
||
- ✓ Servidor de email: Postfix + Dovecot
|
||
- ✓ FTP/SFTP: vsftpd
|
||
- ✓ SSL/TLS: Let's Encrypt
|
||
- ✓ Listado completo de funcionalidades previstas (18 grupos)
|
||
- ✓ Requisitos UI/UX:
|
||
- 3 idiomas (Español, Inglés, Portugués Brasil)
|
||
- Tema oscuro profissional
|
||
- Modales Bootstrap (sin alert() del navegador)
|
||
- Responsivo para móvil, tablet, desktop
|
||
- ✓ Matriz de tareas por fases
|
||
- ✓ Cronograma de implementação
|
||
- ✓ Estructura de directorios recomendada
|
||
- ✓ Convenciones de código (JS/React e Laravel/PHP)
|
||
- ✓ Variables de entorno templates
|
||
- ✓ Checklist de segurança (10 items)
|
||
- ✓ Targets de performance (Web Vitals)
|
||
|
||
### Specifications
|
||
- Proyecto: WEBMoney - Gerenciador Financeiro Pessoal WEB
|
||
- Proveedor: ConneXiFly
|
||
- Servidor: 213.165.93.60 (Ubuntu 24.04.3 LTS)
|
||
- Dominio: cnxifly.com
|
||
- Subdominio: webmoney.cnxifly.com
|
||
- Email: @cnxifly.com
|
||
- Estado: En Desarrollo
|
||
|
||
### Development Notes
|
||
- Instalación comando a comando (sin scripts automáticos)
|
||
- Documentación completa requerida
|
||
- Desarrollo incremental (solo lo solicitado cuando se solicite)
|
||
- Validación en domínio requerida para cada cambio
|
||
- Prohibido: alertas del navegador (alert, confirm, prompt)
|
||
- Usar: Bootstrap Modals y Toast en su lugar
|
||
|
||
---
|
||
|
||
## [1.0.0] - 2025-12-07
|
||
|
||
### Added
|
||
- ✓ Auditoria Inicial Completa do servidor 213.165.93.60
|
||
- ✓ Auditoria de domínio cnxifly.com e subdomínios
|
||
- ✓ Documentação: AUDITORIA_INICIAL_CNXIFLY.md
|
||
- ✓ Sistema de Controle de Versão (SemVer 1.0.0)
|
||
- ✓ Arquivo de Diretrizes de Desenvolvimento (IMUTÁVEL)
|
||
- ✓ Arquivo de Changelog (este arquivo)
|
||
- ✓ Arquivo de Versão (VERSION)
|
||
- ✓ Conexão SSH automática via sshpass
|
||
- ✓ Coleta de informações de DNS, nameservers, zona DNS
|
||
- ✓ Descoberta de subdomínios (www, mail, ftp)
|
||
- ✓ Análise de registros SPF, MX, AAAA, SOA
|
||
- ✓ Verificação de processos e portas abertas
|
||
- ✓ Recomendações de segurança e próximas ações
|
||
|
||
### Infrastructure
|
||
- Servidor: 213.165.93.60 (Ubuntu 24.04.3 LTS, Kernel 6.8.0-88-generic)
|
||
- IPv4: 213.165.93.60
|
||
- IPv6: 2001:ba0:268:ab00::1
|
||
- Domínio: cnxifly.com
|
||
- Nameservers: UI-DNS (ns1028.ui-dns.biz, ns1114.ui-dns.com, ns1016.ui-dns.org, ns1119.ui-dns.de)
|
||
|
||
### Status do Servidor v1.0.0
|
||
- [x] Conectividade verificada
|
||
- [x] DNS funcional (systemd-resolved)
|
||
- [x] Serviço SSH ativo
|
||
- [x] Firewall apropriadamente configurado
|
||
- [x] Sem serviços adicionais instalados (pronto para configuração)
|
||
|
||
### Métodos Utilizados
|
||
- sshpass 1.09-1 para automação SSH
|
||
- dig (BIND 9) para consultas DNS
|
||
- systemd-resolved para gerenciamento DNS local
|
||
- ss para análise de portas abertas
|
||
- Enumeração manual de subdomínios comuns
|
||
|
||
### Documentação
|
||
- Criado arquivo AUDITORIA_INICIAL_CNXIFLY.md com:
|
||
- Informações do servidor e rede
|
||
- Configuração DNS detalhada
|
||
- Mapeamento de domínio e subdomínios
|
||
- Registros DNS (A, AAAA, MX, TXT, NS, SOA)
|
||
- Análise de segurança
|
||
- Recomendações de próximas ações
|
||
- Ferramentas e métodos utilizados
|
||
|
||
### Security Notes
|
||
- ⚠️ SPF com softfail (~all) - considerar migração para hard fail (-all)
|
||
- ⚠️ Sem DNSSEC configurado
|
||
- ⚠️ Sem DKIM detectado
|
||
- ✓ DNS não exposto para resolução pública
|
||
- ✓ Apenas SSH em porta 22 (acesso controlado)
|
||
|
||
---
|
||
|
||
## Notas Importantes
|
||
|
||
### Directives de Desenvolvimento
|
||
Este projeto segue as DIRETRIZES_DESENVOLVIMENTO estabelecidas em v1.0.0:
|
||
- Controle de versão incremental para CADA commit/push
|
||
- Validação de mudanças através do domínio (cnxifly.com)
|
||
- Nenhum arquivo pendente pode ser editado sem commit prévio
|
||
- Documentação obrigatória em CHANGELOG.md
|
||
|
||
### Próximas Ações Recomendadas (v1.1.0+)
|
||
- [ ] Configurar DNSSEC para o domínio
|
||
- [ ] Implementar DKIM para emails
|
||
- [ ] Revisar e atualizar SPF (softfail → hard fail)
|
||
- [ ] Instalar certificados SSL/TLS
|
||
- [ ] Configurar servidor web (nginx/Apache)
|
||
- [ ] Implementar monitoramento DNS
|
||
- [ ] Autenticação SSH via chaves públicas
|
||
- [ ] Configurar HTTPS em subdomínios
|
||
- [ ] Implementar backup de zona DNS
|
||
|
||
---
|
||
|
||
**Formato de Data:** ISO 8601 (YYYY-MM-DD)
|
||
**Mantido por:** GitHub Copilot
|
||
**Servidor:** 213.165.93.60 (cnxifly.com)
|