A query padrão agora agrupa por categoria pai usando COALESCE(c.parent_id, c.id), somando as transações de todas as subcategorias. Antes: Transações em subcategorias (Supermercado, Restaurantes) não apareciam Agora: Alimentação mostra total de Supermercado + Restaurantes + todas subcategorias
107 KiB
CHANGELOG
Todas as mudanças relevantes neste projeto serão documentadas neste arquivo. O formato segue Keep a Changelog. Este projeto adota Versionamento Semântico.
[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_idpara 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_idpara filtrar subcategorias - Query padrão agrupa por categoria pai, somando transações de todas as subcategorias
- Query com
parent_idfiltra subcategorias da categoria especificada - FIX: Transações em subcategorias agora aparecem corretamente agrupadas na categoria pai
- Novo parâmetro
[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
- Transações sem centro de custo (
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}→ estilobg-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
- Padrão global via CSS:
-
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)
- Estilo outline consistente:
[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: touchpara iOS- Modal com
overflow: autopara 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-100em 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
- Removido
- Widget Projeção de Saldo:
- Card-body padding: 1rem em mobile
- Gráfico reduzido: 250px (mobile) vs 350px (desktop)
- Alertas compactos: padding
p-2, margensmb-2/mb-3, fonte 0.75rem - Textos abreviados em alertas para economizar espaço
- Widget Fluxo de Caixa:
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:
useEffectsendo chamado após returns condicionais - Solução: Movido cálculo de
monthsDatapara antes dos returns - Adicionado
useEffectna importação:import { useEffect } - Todos os hooks agora executam na ordem correta
- Dependências corretas em useEffect:
[isMobile, monthsData.length, isExpanded]
- Problema:
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.isCurrentMonthescondia dias em mobile - Solução:
(isMobile || day.isCurrentMonth)permite mostrar semana completa - Adicionado grid CSS:
.calendar-gride.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
- Problema: condição
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: autoem mobile - Body com
display: nonequando 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
- Corrigido seletor para buscar
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
- Backend gera insights com tipo
[1.36.1] - 2025-12-15
Fixed
- Bug Critical - Relatórios Passivos - Corrigido erro "n is not a function"
- Problema:
formatDateestava sendo importado incorretamente do hook useFormatters - Solução: Hook exporta
date, ajustado paradate: formatDatena desestruturação - Erro ocorria ao clicar na aba de Passivos devido à formatação da próxima parcela
- Seção de Passivos agora funciona corretamente
- Problema:
[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
- Adicionado
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
- Adicionado
[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
- Adicionado
[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"
- Filtros vazios (
[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)
- Data agora usa
[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()eisFinite()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
- Adicionada validação
[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_amountparatotal_contract_value(campo correto do modelo) - Dívida Total agora exibe o valor correto das contas de passivo
- Alterado
-
Relatório de Transações Futuras - Padronização de nomenclatura
- Alterado
total_itemsparatotal_transactionsno resumo - Melhora consistência com outros endpoints da API
- Alterado
[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.jsxcom 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
- Endpoint
Fixed
-
Projection Chart API - Correção de type casting
- Adicionado cast
(int)no parâmetromonthspara evitar erro Carbon - Simplificada query SQL para evitar tabela
exchange_ratesinexistente
- Adicionado cast
-
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
- Migration 2025_12_08_170001 movida temporariamente (dependência de
-
Permissões - Ajustadas permissões do backend
bootstrap/cachealterado de root para www-datachmod -R 775nos 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/logse.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:
- Transacciones pendientes/programadas (usando
planned_dateen lugar deeffective_date) - Cuotas de pasivos pendientes (
liability_installments) - Proyecciones de recurrencias activas (
recurring_templates)
- Transacciones pendientes/programadas (usando
- Añadidos helpers
getNextRecurrenceDates()yadvanceToNextOccurrence()para calcular fechas futuras - Corregida query SQL: removida referencia a columna
c.nameinexistente en tabla de cuotas - Soporta frecuencias: diaria, semanal, quincenal, mensual, bimestral, trimestral, semestral, anual
- Reescrito completamente para incluir 3 fuentes de datos:
-
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.shcon 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=truepara agrupar por categoría padre
-
Endpoint
/api/reports/overdue- Corregido error 500- Cambiado
li.amountali.installment_amount(nombre correcto de la columna) - Añadida condición
deleted_at IS NULLpara excluir registros eliminados
- Cambiado
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 metasPOST /api/financial-goals/{id}/contributions- Añadir contribuciónDELETE /api/financial-goals/{id}/contributions/{contributionId}- Eliminar contribuciónGET/POST /api/budgets- CRUD de presupuestosGET /api/budgets/available-categories- Categorías sin presupuestoPOST /api/budgets/copy-to-next-month- Copiar al mes siguienteGET /api/budgets/year-summary- Resumen anualGET /api/financial-health- Score y métricas de salud financieraGET /api/financial-health/history- Histórico de scoresGET /api/reports/summary- Resumen por períodoGET /api/reports/by-category- Gastos por categoríaGET /api/reports/monthly-evolution- Evolución mensualGET /api/reports/by-day-of-week- Gastos por día de semanaGET /api/reports/top-expenses- Mayores gastosGET /api/reports/compare-periods- Comparativa de períodosGET /api/reports/projection- Proyección del mes
-
Base de datos - Nuevas tablas
financial_goals- Metas de ahorro con objetivo, fecha, estadogoal_contributions- Contribuciones a metasbudgets- 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.confirmnativos 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
- Substitui todos os
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: fixedpara evitar corte poroverflow: 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_variantscon campos: portion_ratio, quantity_per_unit, volume_ml - Modelo
ProductVariantcon 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
- Nueva métrica clave:
-
Seeder de Ejemplos -
BusinessExampleSeedercon 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 tiempobusiness.settings.*: totalProductiveHours, fixedCostPerHourbusiness.products.*: skuPlaceholder, strategyLabels, componentsbusiness.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_dayno existe- Causa: Eager loading usaba columna antigua en lugar de
hours_per_week - Solución: Actualizado ServiceSheetController con columnas correctas
- Causa: Eager loading usaba columna antigua en lugar de
-
TypeError margin_percentage.toFixed - Valor llegaba como string
- Solución:
parseFloat()antes de operaciones numéricas
- Solución:
-
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_dayahours_per_week - Agrega
working_days_per_week(días por semana) - Conversión automática: hours_per_week = hours_per_day * 5
- Renombra
- 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_rateseparado 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
useMemodespué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
- Campos:
- Nueva migración:
add_price_includes_tax_to_business_settings- Campos:
price_includes_tax(boolean),vat_rate(decimal)
- Campos:
- 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
currencyfaltante- Backend: Agregado campo
currencydirecto en items deupcomingTransactionsyoverdueTransactions - Liability items ahora incluyen su moneda desde
liabilityAccount->currency - Frontend: Usa
item.currencycomo primera opción, fallback aitem.account?.currency
- Backend: Agregado campo
-
Traducción i18n faltante - Agregado
common.itemycommon.itemsen 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
primaryCurrencycomo prop - Tooltips do gráfico mostram a divisa correta
- Totais do período (receita, despesa, médias) usam
primary_currency
- CashflowChart agora recebe
-
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:cleare 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:clearantes 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
- Adicionado
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) parabi-cloud-haze2-fill(fumaça/névoa) - Ícone mais semântico e representativo para gastos com cigarro/estánco
- Adicionado
bi-cloud-haze2ebi-cloud-haze2-fillao catálogo de ícones (icons.js)
- De
Fixed
- Sintaxe icons.js - Corrigida vírgula faltante após
bi-outletna categoria housing
[1.27.1] - 2025-12-12
Fixed
- Traducción faltante - Agregada clave
common.monthsen 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
- Endpoint:
-
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_pairerefund_linked_idna tabela transactions - Nova tabela:
ignored_refund_pairspara pares ignorados - Frontend: Nova página
/refundscom 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
- Novo endpoint:
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
- Usa
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
ConfirmModalreutilizá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
- Novo endpoint:
[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 templatesPOST /api/recurring- Criar template manualPOST /api/recurring/from-transaction- Criar a partir de transaçãoGET/PUT/DELETE /api/recurring/{id}- CRUD de templatesPOST /api/recurring/{id}/pause- Pausar templatePOST /api/recurring/{id}/resume- Retomar templateGET /api/recurring/{id}/instances- Listar parcelasGET /api/recurring/pending- Listar todas pendentesGET /api/recurring/overdue- Listar vencidasGET /api/recurring/due-soon- Próximas do vencimentoPOST /api/recurring-instances/{id}/pay- Pagar (cria transação)POST /api/recurring-instances/{id}/reconcile- Conciliar com transação existentePOST /api/recurring-instances/{id}/skip- Pular parcelaGET /api/recurring-instances/{id}/candidates- Buscar transações candidatas
- Frontend: Nova página
/recurringcom 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)
- Novo modelo:
-
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
- Novo endpoint:
-
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)
- Novo endpoint:
-
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-fpmparaphp8.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.php2025_12_10_100002_create_recurring_instances_table.php- Adicionado campo
recurring_instance_idna tabelatransactions
[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
- Novo endpoint: POST
-
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
- Novo endpoint: GET
-
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
- Novo endpoint: POST
[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
transferscom transferências agrupadas em pares - Campo
transfers_countno 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: 0comstatus: completed- Agora usa
planned_amountcomo fallback quandoamounté zero - Afeta cálculo de créditos, débitos e total de completed
- Resolve problema de semanas mostrando totais zerados incorretamente
- Agora usa
[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
- Novo endpoint: POST
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_atjá existe (SoftDeletes trait) - Campo
duplicate_ignored_withcontinua funcional
- Campo
[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_withna 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')parat('transactions.status.label') - Erro: "key returned an object instead of string"
- Alterado de
[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-allpara recalcular saldos de todas as contas - Novo endpoint
POST /api/accounts/{id}/recalculatepara 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- colunadatenão existe - Atualizado para usar
effective_dateouplanned_date(com fallback) - Corrigido tipo de transação de
expenseparadebit
[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_ideis_transferna 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_idamount(valor efetivo),planned_amount(valor previsto)type(credit/debit)description,notes,referenceeffective_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/CriarGET/PUT/DELETE /api/transactions/{id}- CRUD individualPOST /api/transactions/{id}/complete- Marcar como concluídaPOST /api/transactions/{id}/cancel- CancelarPOST /api/transactions/{id}/revert- Reverter para pendentePOST /api/transactions/{id}/duplicate- DuplicarGET /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 metadadosliability_installments- Tabela para parcelas individuais de cada contrato
-
✅ Novos models
LiabilityAccount- Model com relacionamentos, cálculos de taxas de juros e progressoLiabilityInstallment- 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 contratosGET/PUT/DELETE /api/liability-accounts/{id}- Ver/Atualizar/Excluir contratoPOST /api/liability-accounts/import- Importar ExcelGET /api/liability-accounts/{id}/installments- Listar parcelasPUT /api/liability-accounts/{accountId}/installments/{installmentId}- Atualizar parcelaGET /api/liability-summary- Resumo geral
-
✅ Dependência adicionada
phpoffice/phpspreadsheet ^5.3para 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)
liabilityAccountServicecom 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
liabilitiescom 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
- Função
[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: relativeno container do dropdownposition: absolute,right: 0,top: 100%,zIndex: 1000no 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
useRefpara detectar cliques fora e fechar dropdown - Dropdown agora abre/fecha corretamente ao clicar nos três pontinhos
- Bootstrap 5 com React não funciona bem com
[1.3.8] - 2025-12-08
Fixed - Import Bootstrap JS (não funcionou)
Frontend (React)
- Tentativa de correção adicionando
bootstrap.bundle.min.jsno 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_adminna 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
- Migration para adicionar coluna
[1.3.6] - 2025-12-08
Added - Centro de Custo do Sistema
Backend (Laravel)
-
✅ Campo
is_systemna tabela cost_centers- Migration para adicionar coluna
is_system(boolean, default false) - Atualizado modelo CostCenter com novo campo e scope
system()
- Migration para adicionar coluna
-
✅ 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=truenão podem ser editados - Centros de custo com
is_system=truenão podem ser excluídos - Retorna erro 403 com mensagem apropriada
- Centros de custo com
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.systemCostCenterem 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('...')
- Accounts.jsx: Todos os textos hardcoded substituídos por
-
✅ 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
- Adicionado
[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
CurrencySelectorpara seleção - Componente
CurrencyDisplaypara exibição formatada
-
✅ Novos Componentes
LanguageSelector.jsx- Seletor de idioma com bandeirasCurrencySelector.jsx- Seletor de moedauseFormatters.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 i18nLayout.jsx- Adicionado seletor de idioma no header, traduções nos menusDashboard.jsx- Atualizado com traduções e formatação de moeda
Dependencies Added
i18next: ^24.xreact-i18next: ^15.xi18next-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
Accountcom 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
CostCentereCostCenterKeyword - Migration
create_cost_centers_table(com tabela de keywords) - Endpoints:
/api/cost-centers/{id}/keywordspara 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
CategoryeCategoryKeyword - Migration
create_categories_table(com tabela de keywords) - Endpoints:
/api/categories/{id}/keywordspara gerenciar keywords
Frontend (React)
-
✅ Layout com Sidebar - Navegação lateral moderna
- Componente
Layout.jsxreutilizável - Menu colapsável responsivo
- Ícones Bootstrap Icons
- Tema escuro integrado
- Componente
-
✅ 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, categoriesservices/api.js- Adicionados accountService, costCenterService, categoryServiceApp.jsx- Novas rotas e ToastProviderDashboard.jsx- Reescrito com cards de resumoindex.css- Estilos para sidebar, cards, formulários
Database
- 6 novas tabelas criadas:
accounts- Contas financeirascost_centers- Centros de custocost_center_keywords- Palavras-chave de centros de custocategories- 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-darkcom 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-lightdo Bootstrap para garantir tema escuro - ✅ Atualizada versão no footer para v1.2.0
Changed
- Dashboard.jsx: Substituído
bg-lightpordashboard-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.mdcom 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.comcom SSL (Let's Encrypt) - Usuários administrativos criados (sistema e MariaDB) usando senha única fornecida
- Documento
CREDENCIAIS.mdcom 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.comcom HTTPS - ✓ Documentação de uso dos subdomínios mail/webmail
Changed
- Removida rota
/registerdo 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.phpparaindex.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.comcom políticap=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) eList-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-testrespondendo 200 e entregando com autenticações válidas
Notes
- Política DMARC pode ser elevada para
p=rejectapó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
webmoneycriado com ENCODINGUTF8e LOCALEes_ES.UTF-8 - ✓ Usuário PostgreSQL
webmoney_usercriado com senha forte e privilégios na basewebmoney - ✓ 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.she validar diretamente emhttps://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
- Conectividade verificada
- DNS funcional (systemd-resolved)
- Serviço SSH ativo
- Firewall apropriadamente configurado
- 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)