- Add business_settings table for Markup configuration - Add product_sheets table for product technical sheets (CMV) - Add product_sheet_items table for cost components - Create BusinessSetting model with calculateMarkup() method - Create ProductSheet model with recalculateCmv() method - Create ProductSheetItem model for cost breakdown - Add BusinessSettingController with CRUD + simulate-price endpoint - Add ProductSheetController with CRUD + items management + duplicate - Add Business page with 3 tabs (Settings, Products, Calculator) - Add BusinessSettingsTab component with markup cards - Add ProductSheetsTab component with product grid - Add PriceCalculatorTab component with interactive simulator - Add i18n translations in ES, PT-BR, EN - Multi-currency support (EUR, BRL, USD)
1755 lines
68 KiB
Markdown
1755 lines
68 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.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)
|