webmoney/CHANGELOG.md

101 KiB
Raw Blame History

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.1] - 2025-12-16

Fixed

  • Espaços em branco desnecessários em Mobile - Otimização completa de altura e padding
    • Widget Fluxo de Caixa:
      • Removido h-100 em mobile (agora se ajusta ao conteúdo)
      • Card-body padding reduzido: 1rem
      • Estados loading/erro: altura 280px (antes 350px fixo)
      • Gráfico: 280px (mobile) vs 350px (desktop)
      • Resumo: margens reduzidas mt-3 pt-2
    • Widget Projeção de Saldo:
      • Card-body padding: 1rem em mobile
      • Gráfico reduzido: 250px (mobile) vs 350px (desktop)
      • Alertas compactos: padding p-2, margens mb-2/mb-3, fonte 0.75rem
      • Textos abreviados em alertas para economizar espaço

Improved

  • Abreviações em textos mobile - Labels compactos sem quebra de linha
    • Fluxo de Caixa: "RECEITAS", "DESPESAS", "MÉD. REC.", "MÉD. DESP."
    • Sobrepagamentos: "TOTAL", "QTD", "MÉDIA"
    • Alertas: "Saldo negativo em" ao invés de "Previsão de saldo negativo em"
    • Todos com whiteSpace: 'nowrap' para prevenir quebras

[1.43.0] - 2025-12-16

Added

  • Widget Projeção de Saldo Mobile - Comportamento colapsável implementado

    • Inicia colapsado em mobile, expande automaticamente se houver dados
    • Botão toggle chevron up/down no header
    • Botões de período (1, 2, 3, 6, 12 meses) otimizados:
      • Desktop: btn-group horizontal
      • Mobile: layout flex-wrap em 3 colunas (33.333% cada)
    • Altura do gráfico ajustada: 300px (mobile) vs 350px (desktop)
    • Cards de estatísticas otimizados para mobile:
      • Padding reduzido: p-2 (mobile) vs p-3 (desktop)
      • Gap menor: g-2 vs g-3
      • Fontes menores: labels 0.7rem, valores 0.9rem
      • Percentual de variação oculto em mobile
  • Widget Análise de Sobrepagamentos Mobile - UX completamente redesenhada

    • Comportamento colapsável com auto-expansão quando há dados
    • Header otimizado: texto menor, badge compacto, "(12 meses)" oculto
    • Gráfico responsivo: 180px (mobile) vs 220px (desktop)
    • Cards de resumo compactos: padding p-1, fontes 0.65-0.85rem
    • Layout de transações revolucionário:
      • Mobile: Cards verticais ao invés de tabela horizontal
      • Cada card mostra: descrição, valor (+), categoria, data, percentual
      • Fontes otimizadas: 0.6-0.75rem
      • Border amarelo sutil para destaque
      • Altura máxima: 200px com scroll
      • Desktop: Tabela completa mantida com todas as colunas

Fixed

  • React Hooks Error #310 - Corrigida violação das regras de hooks
    • Problema: useEffect sendo chamado após returns condicionais
    • Solução: Movido cálculo de monthsData para antes dos returns
    • Adicionado useEffect na importação: import { useEffect }
    • Todos os hooks agora executam na ordem correta
    • Dependências corretas em useEffect: [isMobile, monthsData.length, isExpanded]

Improved

  • Consistência Mobile Global - Todos os widgets principais otimizados:
    • Calendário: navegação entre semanas + colapso
    • Próximos 7 Dias: colapso + sync altura desktop
    • Transações em Atraso: colapso + auto-expansão
    • Projeção de Saldo: colapso + botões otimizados + cards compactos
    • Análise Sobrepagamentos: colapso + layout cards mobile
    • UX mobile profissional e consistente em todo Dashboard

[1.42.0] - 2025-12-16

Added

  • Navegação entre semanas no Calendário Mobile - Implementada paginação completa
    • Botões chevron esquerda/direita para navegar entre semanas
    • Título dinâmico: "Esta Semana", "+1 semana", "-2 semanas", etc.
    • Botão "Hoje" reseta para semana atual (weekOffset = 0)
    • Calendário carrega dados automaticamente da semana selecionada
    • Offset de semanas persistente durante navegação

Fixed

  • Calendário não exibia em Mobile - Corrigida lógica de renderização
    • Problema: condição day.isCurrentMonth escondia dias em mobile
    • Solução: (isMobile || day.isCurrentMonth) permite mostrar semana completa
    • Adicionado grid CSS: .calendar-grid e .calendar-grid-week (7 colunas)
    • Botão toggle (chevron) implementado no header mobile
    • Badge mostra quantidade de transações do dia selecionado
    • Tamanhos específicos: mobile (11px, 50px min-height) vs desktop (12px, 32px)
    • Destaque visual do dia atual com border primary

Changed

  • Widget Transações em Atraso - Comportamento Mobile - Consistência com outros widgets
    • Inicia colapsado em mobile (apenas header visível)
    • Auto-expansão quando há transações vencidas
    • Botão toggle chevron up/down no header
    • Badge mostra total de itens vencidos
    • Altura dinâmica: height: auto em mobile
    • Body com display: none quando colapsado

Improved

  • Consistência Mobile - Todos os widgets do Dashboard seguem mesmo padrão:
    • Calendário: colapso + navegação entre semanas
    • Próximos 7 Dias: colapso + auto-expansão com dados
    • Transações em Atraso: colapso + auto-expansão com dados
    • UX unificada e previsível em dispositivos móveis

[1.41.1] - 2025-12-16

Fixed

  • Sincronização de altura em Desktop - Widget "Próximos 7 Dias" agora sincroniza perfeitamente com o card central de transações
    • Corrigido seletor para buscar .col-lg-8 .col-lg-7 .card (lista de transações do dia)
    • Aumentado timeout de 100ms para 200ms para garantir renderização completa
    • Altura idêntica entre os 3 widgets em desktop: calendário, transações do dia e próximos 7 dias

Validated

  • Mobile: Widgets colapsam corretamente, expandem apenas com dados
  • Desktop: Altura sincronizada perfeitamente entre todos os widgets

[1.41.0] - 2025-12-16

Changed

  • WIDGETS COLAPSÁVEIS EM MOBILE - Otimização do Dashboard para telas pequenas
    • Calendário e Próximos 7 Dias iniciam colapsados em mobile (<768px)
    • Expansão automática quando houver dados para exibir
    • Botão toggle (chevron up/down) no header para expandir/colapsar manualmente
    • Badge com contagem de itens no header quando há dados
    • CalendarWidget: mostra quantidade de transações do dia selecionado
    • UpcomingWidget: mostra quantidade total de transações pendentes
    • Comportamento desktop mantido: sempre expandido

Improved

  • UX Mobile - Menos scroll necessário, informação visível apenas quando relevante
  • Performance - Reduz altura inicial da página em mobile
  • Feedback visual - Badges indicam quantidade de dados sem necessidade de expandir

[1.40.0] - 2025-12-16

Changed

  • SIDEBAR MOBILE OVERLAY - UX completamente reimaginada para mobile
    • Sidebar escondida por padrão em mobile (<768px) - conteúdo em tela cheia
    • Hamburger menu (☰) no header para abrir sidebar
    • Sidebar slide-in overlay (280px) sobre o conteúdo
    • Backdrop escuro (rgba(0,0,0,0.5)) para fechar ao clicar fora
    • Animação suave: cubic-bezier(0.4, 0, 0.2, 1) 0.3s
    • Shadow: 4px 0 12px quando aberta
    • App-main: margin-left 0 em mobile (100% width)
    • Fechamento automático ao redimensionar para desktop
    • Mantém comportamento desktop: sidebar fixa colapsável

Fixed

  • Layout mobile - Agora conteúdo usa 100% da largura da tela
  • Touch target - Hamburger menu 44x44px (Apple HIG)
  • Safe areas - Removido padding-left/right do body para permitir overlay
  • Backdrop - Escondido em desktop, visível apenas em mobile

[1.39.2] - 2025-12-16

Fixed

  • Responsividade iPhone CORRIGIDA - CSS com !important para forçar aplicação
    • Sidebar forçada para 60px em mobile (<768px) com !important
    • Sidebar extra-compacta (56px) em telas <430px
    • Sidebar 50px em landscape mode (<430px altura)
    • App-main margin-left ajustado automaticamente
    • Texto sidebar 100% escondido em mobile (display/opacity/visibility: none)
    • Touch targets 44x44px em todos elementos interativos
    • Safe area insets aplicadas a sidebar e app-main
    • Cards ultra-compactas: padding 0.5rem em <430px
    • Gráficos: 250px (portrait) / 180px (landscape)
    • Modais: margin 0.5rem, width calc(100% - 1rem)
    • Row margins: -0.25rem para aproveitar espaço
    • Tabelas: font 0.8rem, padding 0.3rem/0.2rem
    • Inputs: font-size 16px para prevenir zoom
    • PWA: overscroll-behavior none, sidebar fixed position
    • Todos os !important necessários para sobrescrever CSS existente

[1.39.1] - 2025-12-16

Fixed

  • Responsividade iPhone - Otimizações para telas verticais iOS
    • Viewport otimizado: viewport-fit=cover, user-scalable=no
    • Safe Area Insets: suporte completo para notch e Dynamic Island
    • Touch targets mínimos de 44x44px (Apple Human Interface Guidelines)
    • Inputs com font-size 16px para prevenir zoom automático no iOS
    • Previne bounce scroll (overscroll-behavior-y: none)
    • -webkit-overflow-scrolling: touch para scroll suave
    • Media queries específicas para iPhone (max-width: 430px)
    • Landscape mode otimizado (max-height: 430px)
    • Reduz padding/margens em telas <430px
    • Canvas gráficos: max-height 250px (portrait) / 180px (landscape)
    • Tap highlight otimizado: rgba azul translúcido
    • Dropdowns com max-height e touch scrolling
    • Modais ajustados para safe area (notch/island)
    • Remove bounce quando instalado como PWA (display-mode: standalone)

Changed

  • Tamanhos de fonte ajustados para iPhone: 10pt base em telas <430px
  • Cards e modais com padding reduzido em telas pequenas
  • Tabelas com fonte 10pt e padding compacto em mobile

[1.39.0] - 2025-12-16

Added

  • PWA para iOS - Aplicativo instalável em iPhone/iPad
    • Service Worker com estratégias de cache offline-first
    • Cache versionado (v1.39.0) com limpeza automática de versões antigas
    • Estratégias de cache por tipo: Cache-First (imagens/fontes), Network-First (API), Stale-While-Revalidate (HTML/CSS/JS)
    • Registro automático do Service Worker em main.jsx
    • Verificação de atualizações a cada 1 hora
    • Prompt de atualização quando nova versão disponível
    • manifest.json otimizado: scope, categories (finance/productivity/business)
    • Meta tags iOS: apple-mobile-web-app-capable, black-translucent status bar
    • Meta tag format-detection para desabilitar auto-detecção de telefones
    • Ícone Apple Touch Icon (180x180) no manifest
    • Suporte completo para instalação via Safari iOS

Changed

  • Service Worker atualizado para versão 1.39.0
  • manifest.json - Adicionado prefer_related_applications: false
  • index.html - Status bar style alterado de "default" para "black-translucent" (melhor em iOS)

[1.38.0] - 2025-12-15

Added

  • Projeção de Saldo - Agora considera transações em atraso
    • Backend busca todas as transações pendentes (incluindo atrasadas)
    • Processa transações atrasadas ANTES do ponto inicial da projeção
    • Adiciona informações de transações em atraso no summary da API
    • Frontend exibe alerta amarelo quando há transações em atraso incluídas
    • Alerta mostra quantidade de transações e impacto no saldo
    • Traduções completas: overdueIncluded, overdueTransactions, includedInProjection (pt-BR, en, es)
    • Melhora precisão da projeção ao incluir todas as pendências

[1.37.0] - 2025-12-15

Added

  • Dashboard - Gráfico de Projeção de Saldo
    • Adicionado componente BalanceProjectionChart ao Dashboard
    • Exibe projeção futura do saldo baseado em transações pendentes e recorrentes
    • Posicionado após transações vencidas, antes do fluxo de caixa
    • Mesmo gráfico disponível na seção de Relatórios > Projeção
    • Oferece visualização rápida do saldo esperado nos próximos meses

[1.36.2] - 2025-12-15

Added

  • Categorias - Nova subcategoria em Tecnologia
    • 🔄 Subscrições (ID: 180, Cor: #06B6D4, Ícone: bi-arrow-repeat)
    • Ideal para Netflix, Spotify, Amazon Prime, Office 365, etc.

Fixed

  • i18n - Corrigida tradução financialHealth.insights.high_concentration
    • Backend gera insights com tipo high_concentration (snake_case)
    • Adicionada chave em snake_case além da camelCase existente
    • Traduções completas: pt-BR, en, es
    • Insight agora exibe corretamente quando categoria representa >40% dos gastos

[1.36.1] - 2025-12-15

Fixed

  • Bug Critical - Relatórios Passivos - Corrigido erro "n is not a function"
    • Problema: formatDate estava sendo importado incorretamente do hook useFormatters
    • Solução: Hook exporta date, ajustado para date: formatDate na desestruturação
    • Erro ocorria ao clicar na aba de Passivos devido à formatação da próxima parcela
    • Seção de Passivos agora funciona corretamente

[1.36.0] - 2025-12-15

Improved

  • UI/UX da Seção Maiores Despesas - Interface completamente redesenhada
    • 4 Cards KPI com gradientes: Maior Despesa, Média, Menor Despesa, Total de Transações
    • Gráfico de Barras Horizontais mostrando Top 10 despesas com degradê de cores
    • Tabela detalhada completa com:
      • Badges coloridos para posições (top 3 em vermelho, top 10 em amarelo)
      • Barra de progresso visual mostrando % do total
      • Categorias em badges
      • Formatação profissional com sticky header
      • Scroll independente para listas longas
    • Layout responsivo em grid com altura controlada
    • Tooltips do gráfico com informações completas (valor, categoria, data)
    • Traduções: topExpensesAnalysis, highestExpense, averageExpense, lowestExpense, totalTransactions, top10Expenses, detailedList

[1.35.0] - 2025-12-15

Improved

  • UI/UX da Comparação de Períodos - Interface completamente redesenhada
    • Cards KPI com gradientes e ícones grandes para cada métrica
    • Badges de variação com validação de NaN/Infinity
    • Tabela comparativa detalhada com métricas lado a lado
    • Gráfico de barras agrupadas com tooltips aprimorados
    • Layout responsivo: tabela 5 colunas + gráfico 7 colunas
    • Design profissional com hierarquia visual clara
    • Traduções: periodComparison, vsPreviousPeriod, detailedComparison, visualComparison, metric, variation

[1.34.7] - 2025-12-15

Fixed

  • i18n - Adicionada tradução costCenters.name
    • Adicionado costCenters.name ("Nome" / "Name" / "Nombre")
    • Corrige coluna de nome em relatórios por centro de custo
    • Traduções completas em pt-BR, en, es

Added

  • Categorias - Adicionadas subcategorias em "Filhos"
    • 💰 Mesada - Mesada, semanada, dinheiro de bolso
    • 🎈 Passeios - Parques, cinema, zoológico, eventos
    • 🎂 Festas - Aniversário, festas, eventos infantis
    • ✏️ Material Escolar - Cadernos, lápis, mochilas, uniformes
    • 🚌 Transporte Escolar - Ônibus escolar, transporte particular
    • Total: 12 subcategorias em "Filhos"

[1.34.6] - 2025-12-15

Fixed

  • i18n - Adicionadas traduções para credit e debit
    • Adicionado transactions.credit ("Crédito" / "Credit" / "Crédito")
    • Adicionado transactions.debit ("Débito" / "Debit" / "Débito")
    • Corrige exibição de tipo em Templates de Recorrência
    • Traduções completas em pt-BR, en, es

[1.34.5] - 2025-12-15

Fixed

  • i18n - Adicionadas traduções faltantes em Templates de Recorrência
    • Adicionado transactions.expense ("Despesa" / "Expense" / "Gasto")
    • Adicionado transactions.income ("Receita" / "Income" / "Ingreso")
    • Corrige exibição dos filtros de tipo na página de recorrência
    • Traduções completas em pt-BR, en, es

[1.34.4] - 2025-12-15

Fixed

  • Templates de Recorrência - Corrigido carregamento da lista de templates
    • Filtros vazios ("") eram enviados à API causando resultado vazio
    • Agora remove parâmetros vazios antes de fazer a requisição
    • Templates agora aparecem corretamente na aba "Templates de Recorrência"

[1.34.3] - 2025-12-15

Fixed

  • Relatório de Passivos - Corrigida formatação da data da próxima parcela
    • Data agora usa formatDate() para exibição legível
    • Corrige exibição de timestamp ISO bruto (ex: "2026-01-05T00:00:00.000000Z")
    • Formato final: "05/01/2026" (localizado conforme idioma)

[1.34.2] - 2025-12-15

Fixed

  • Resumo de Relatórios - Corrigido exibição de "NaN%" nos badges de variação
    • Adicionada validação isNaN() e isFinite() antes de exibir percentuais
    • Badges de variação agora só aparecem com valores válidos
    • Corrige problema quando dados do ano anterior são zero ou inexistentes

[1.34.1] - 2025-12-15

Improved

  • UI/UX do Resumo de Relatórios - Interface redesenhada com visual mais profissional
    • Cards KPI com ícones grandes e hierarquia visual clara
    • Badges de variação com fundo branco para melhor contraste
    • Adicionadas métricas de média mensal em todos os cards
    • Novo card dedicado para Taxa de Poupança com barra de progresso
    • Feedback visual inteligente baseado na taxa de poupança:
      • 🎯 ≥20%: "Excelente poupança!"
      • 👍 ≥10%: "Boa poupança"
      • 💡 <10%: "Pode melhorar"
    • Gráfico comparativo melhorado com bordas arredondadas e tooltips aprimorados
    • Header do resumo com ícone e seletor de ano redesenhado
    • Tradução completa: pt-BR, en, es

[1.34.0] - 2025-12-14

Fixed

  • Relatório de Passivos - Correção de campo para valor total da dívida

    • Alterado total_amount para total_contract_value (campo correto do modelo)
    • Dívida Total agora exibe o valor correto das contas de passivo
  • Relatório de Transações Futuras - Padronização de nomenclatura

    • Alterado total_items para total_transactions no resumo
    • Melhora consistência com outros endpoints da API

[1.33.0] - 2025-12-14

Added

  • Gráfico de Projeção de Saldo - Nova funcionalidade para visualizar projeções futuras
    • Endpoint GET /api/reports/projection-chart?months={1-12}
    • Componente React BalanceProjectionChart.jsx com Chart.js
    • Seletor de período: 1, 2, 3, 6 ou 12 meses
    • Projeções diárias/semanais baseadas em:
      • Templates recorrentes ativos
      • Parcelas de passivos pendentes
      • Transações agendadas
    • Cartões de resumo: saldo atual/final, mínimo/máximo, variação
    • Alerta automático se projeção indicar saldo negativo
    • Tradução completa: pt-BR, en, es

Fixed

  • Projection Chart API - Correção de type casting

    • Adicionado cast (int) no parâmetro months para evitar erro Carbon
    • Simplificada query SQL para evitar tabela exchange_rates inexistente
  • Migrações - Corrigidas dependências e ordem de execução

    • Migration 2025_12_08_170001 movida temporariamente (dependência de transactions)
    • Migration 2025_12_08_230001 ajustada (referência a import_hash)
    • Todas as 35 migrações executadas com sucesso
  • Permissões - Ajustadas permissões do backend

    • bootstrap/cache alterado de root para www-data
    • chmod -R 775 nos diretórios críticos

Changed

  • Banco de Dados - Reset completo com migrate:fresh

    • 37 tabelas recriadas do zero
    • Usuário recriado: Marco Leite (marco@cnxifly.com)
    • Novo token API gerado: 1|5Zg7Uxrc9qmV5h13YqLj8FbM2HAZZyultCillkDif3c7be04
  • Deploy - Limpeza completa do servidor e redeploy

    • Removidos arquivos enviados manualmente (fora do processo)
    • Deploy obrigatório via scripts ./deploy.sh
    • Preservados storage/logs e .env

[1.32.2] - 2025-12-14

Fixed

  • Endpoint /api/reports/future-transactions - Corregido error 500 y datos vacíos

    • Reescrito completamente para incluir 3 fuentes de datos:
      1. Transacciones pendientes/programadas (usando planned_date en lugar de effective_date)
      2. Cuotas de pasivos pendientes (liability_installments)
      3. Proyecciones de recurrencias activas (recurring_templates)
    • Añadidos helpers getNextRecurrenceDates() y advanceToNextOccurrence() para calcular fechas futuras
    • Corregida query SQL: removida referencia a columna c.name inexistente en tabla de cuotas
    • Soporta frecuencias: diaria, semanal, quincenal, mensual, bimestral, trimestral, semestral, anual
  • Endpoint /api/reports/overdue - Corregido para mostrar todos los vencidos

    • Incluye cuotas de pasivos vencidas (due_date < hoy)
    • Incluye transacciones pending/scheduled con fecha pasada
    • Calcula días de atraso correctamente
  • Deploy - Usado script oficial deploy.sh con rsync

    • Evita problemas de caché y archivos en ubicaciones incorrectas
    • Sincronización completa de directorios

[1.32.1] - 2025-12-14

Fixed

  • Reportes por Categoría - Corregido bug de agrupación que mostraba totales incorrectos

    • El total de "Garagem" mostraba 3062.88€ (todo "Transporte") en lugar de 1201.25€
    • La query agrupaba por parent_id pero mostraba nombre de subcategoría
    • Ahora cada subcategoría muestra su total individual correcto
    • Añadido parámetro opcional group_by_parent=true para agrupar por categoría padre
  • Endpoint /api/reports/overdue - Corregido error 500

    • Cambiado li.amount a li.installment_amount (nombre correcto de la columna)
    • Añadida condición deleted_at IS NULL para excluir registros eliminados

Changed

  • Servidor actualizado - Aplicadas 12 actualizaciones de seguridad

    • Kernel Linux 6.8.0-90
    • Nginx 1.29.4
    • PHP-common actualizado
    • AppArmor 4.0.1
  • Actualizaciones automáticas configuradas

    • Unattended-upgrades habilitado
    • Actualizaciones semanales (cada 7 días)
    • Auto-limpieza cada 30 días
    • Incluye: Ubuntu security, updates, Nginx, PHP PPA

[1.32.0] - 2025-12-14

Added

  • Salud Financiera (Financial Health) - Nueva página completa

    • Puntuación de 0-100 con anillo visual animado
    • 6 métricas de salud: Capacidad de Ahorro, Control de Deudas, Gestión de Presupuesto, Inversiones, Fondo de Emergencia, Planificación Futura
    • Tarjetas de métricas con gradientes de color
    • Gráfico de evolución histórica de score
    • Sección de insights con alertas y sugerencias
    • Recomendaciones personalizadas
    • Cards de estadísticas rápidas (balance, ingresos, gastos, tasa de ahorro)
  • Metas Financieras (Goals) - Sistema completo de objetivos de ahorro

    • Crear, editar y eliminar metas con icono y color personalizable
    • Barra de progreso visual con porcentaje
    • Estados: Activo, Completado, Pausado, Cancelado
    • Fecha objetivo y cálculo de meses restantes
    • Contribuciones con modal dedicado
    • Indicador "On Track" basado en contribución mensual requerida
    • Estadísticas: total metas, activas, total ahorrado, restante
    • Acciones: contribuir, pausar, reanudar, marcar completada
  • Presupuestos Mensuales (Budgets) - Control de gastos por categoría

    • Crear presupuestos por categoría y mes
    • Selector de mes/año con navegación
    • Barra de progreso con colores semáforo (verde/amarillo/rojo)
    • Alertas de "Excedido" y "Casi al límite"
    • Resumen mensual: presupuestado, gastado, restante, % uso
    • Copiar presupuestos al mes siguiente
    • Tabla de resumen anual con click para navegar
  • Reportes (Reports) - Dashboard de análisis financiero

    • 7 pestañas: Resumen, Por Categoría, Evolución Mensual, Comparativa, Mayores Gastos, Proyección, Por Día
    • Gráficos: Barras, Líneas, Dona (usando Chart.js)
    • Resumen anual con comparativa vs año anterior
    • Distribución de gastos por categoría con tabla detallada
    • Evolución mensual de ingresos/gastos/balance
    • Tasa de ahorro mensual con colores semáforo
    • Top 20 gastos del mes
    • Proyección de fin de mes
    • Gastos por día de la semana
  • Backend API - Nuevos endpoints

    • GET/POST /api/financial-goals - CRUD de metas
    • POST /api/financial-goals/{id}/contributions - Añadir contribución
    • DELETE /api/financial-goals/{id}/contributions/{contributionId} - Eliminar contribución
    • GET/POST /api/budgets - CRUD de presupuestos
    • GET /api/budgets/available-categories - Categorías sin presupuesto
    • POST /api/budgets/copy-to-next-month - Copiar al mes siguiente
    • GET /api/budgets/year-summary - Resumen anual
    • GET /api/financial-health - Score y métricas de salud financiera
    • GET /api/financial-health/history - Histórico de scores
    • GET /api/reports/summary - Resumen por período
    • GET /api/reports/by-category - Gastos por categoría
    • GET /api/reports/monthly-evolution - Evolución mensual
    • GET /api/reports/by-day-of-week - Gastos por día de semana
    • GET /api/reports/top-expenses - Mayores gastos
    • GET /api/reports/compare-periods - Comparativa de períodos
    • GET /api/reports/projection - Proyección del mes
  • Base de datos - Nuevas tablas

    • financial_goals - Metas de ahorro con objetivo, fecha, estado
    • goal_contributions - Contribuciones a metas
    • budgets - Presupuestos mensuales por categoría
  • Navegación - Nuevo grupo "Planificación" en sidebar

    • Salud Financiera
    • Metas
    • Presupuestos
    • Reportes

Changed

  • Layout.jsx - Nuevo grupo de navegación "planning" con 4 items
  • App.jsx - 4 nuevas rutas: /financial-health, /goals, /budgets, /reports
  • api.js - Nuevos services: financialGoalService, budgetService, reportService, financialHealthService

[1.31.2] - 2025-12-14

Added

  • ConfirmModal - Componente de confirmação customizado
    • Substitui todos os window.confirm nativos do navegador
    • Suporta variantes: danger (vermelho), warning (amarelo), primary (azul)
    • Ícones dinâmicos baseados na variante
    • Design dark theme consistente com a aplicação
    • Integrado em TransactionsByWeek (delete, cancel, unsplit, unlink)
    • Integrado em BusinessSettingsTab, CampaignsTab, ServiceSheetsTab, ProductSheetsTab

Changed

  • CategorySelector em Modal Categorizar em Lote - Adicionado dropdown hierárquico no modal de categorização em lote
  • OverdueWidget Redesenhado - Layout horizontal em fila própria no Dashboard
    • 4 colunas para níveis de urgência (Crítico, Alto, Médio, Baixo)
    • Scroll interno por coluna
    • Total de itens vencidos no header
    • Responsivo: 2 colunas tablet, 4 desktop
  • UpcomingWidget Ajustado - Altura fixa com scroll interno

Fixed

  • Duplicate Transaction Error - Corrigido erro 500 ao duplicar transação (import_hash unique constraint)
  • CategorySelector Selection - Corrigido onChange para permitir seleção de subcategorias
  • Dropdown Positioning - Melhorado cálculo de posição para evitar dropdown fora da tela

[1.31.1] - 2025-12-14

Added

  • CategorySelector Colapsável - Novo componente para seleção de categorias
    • Categorias exibidas colapsadas por padrão
    • Expande subcategorias ao clicar na categoria pai (chevron ou nome)
    • Campo de busca integrado para filtrar categorias
    • Usa position: fixed para evitar corte por overflow: hidden
    • Badge com quantidade de subcategorias
    • Mostra caminho completo da categoria selecionada (ex: "Alimentação → Supermercado")

Changed

  • Layout de Filtros - Reorganizado em 3 linhas harmônicas

    • Linha 1: Busca (50%) + Data Inicial (25%) + Data Final (25%)
    • Linha 2: Conta + Categoria + Centro de Custo + Tipo + Estado + Limpar
    • Linha 3: Botão "Categorizar em Lote" alinhado à direita
  • CategorySelector aplicado em:

    • Modal de Editar Transação
    • Filtros de Transações
    • Modal de Categorização Rápida

Fixed

  • Dropdown cortado - Corrigido problema do dropdown sendo cortado por containers com overflow:hidden

[1.31.0] - 2025-12-14

Added

  • Variantes de Producto - Sistema de porciones para Wine House

    • Permite vender mismo producto en diferentes porciones (Botella, Copa, Media Copa, Degustación)
    • Cálculo automático: CMV proporcional, markup, precio de venta por porción
    • Nueva tabla product_variants con campos: portion_ratio, quantity_per_unit, volume_ml
    • Modelo ProductVariant con métodos: calculateCmvPortion(), calculateSalePrice(), recalculate()
    • Relación HasMany en ProductSheet para variantes
  • Vinoteca Madrid - Nuevo negocio de ejemplo en seeder

    • 10 vinos españoles: Rioja, Ribera del Duero, Rías Baixas, Rueda, Cava, Porto
    • Cada vino con 4 variantes automáticas:
      • Garrafa (750ml) - 1 por botella
      • Taça (100ml) - 7.5 por botella
      • Meia Taça (50ml) - 15 por botella
      • Degustação (25ml) - 30 por botella
    • Markup calculado automáticamente según configuración del negocio
  • UI Variantes en ProductSheetModal

    • Toggle para mostrar/ocultar sección de variantes
    • Inputs de volume base (ml) y porción estándar (ml)
    • Botón "Generar para Vino" que crea 4 variantes automáticas
    • Tabla con columnas: Nombre, Porción, Cantidad/Unidad, CMV, Markup, PVP
    • Vista previa de cálculos en tiempo real
  • Traducciones i18n para Variantes

    • business.variants.*: title, description, add, noVariants
    • Nombres de porciones: bottle, glass, halfGlass, tasting
    • Labels: baseVolume, portionSize, autoGenerate
    • Soporte: PT-BR, ES, EN

[1.30.0] - 2025-12-14

Added

  • Fichas Técnicas de Servicios - Sistema completo de costos para servicios

    • Duración del servicio en minutos
    • Insumos/materiales con costos unitarios
    • Cálculo automático de CSV (Costo del Servicio Vendido)
    • Integración con configuración de negocio para horas productivas
  • Horas Productivas - Cálculo de costo fijo por hora

    • Nueva métrica clave: hours_per_week (horas por semana)
    • Derivación automática: hours_per_day = hours_per_week / days_per_week
    • Fórmula: Horas Productivas = Empleados × Horas/Día × Días/Mes × Productividad%
    • Costo Fijo/Hora = Gastos Fijos / Horas Productivas
  • Seeder de Ejemplos - BusinessExampleSeeder con 3 tipos de negocio

    • TechStore: 5 productos (electrónicos)
    • DevPro: 5 servicios (desarrollo/consultoría)
    • Print & Design: 4 productos + 4 servicios (mixto)
  • Traducciones i18n Completas - Sección business totalmente internacionalizada

    • business.common.*: CMV, CSV, SKU, Markup, unidades de tiempo
    • business.settings.*: totalProductiveHours, fixedCostPerHour
    • business.products.*: skuPlaceholder, strategyLabels, components
    • business.services.*: codePlaceholder, fixedCost, price
    • Soporte: PT-BR, ES, EN

Changed

  • Modal Tipo de Negocio - Rediseño responsivo
    • Antes: Radio buttons horizontales que excedían el ancho
    • Ahora: Cards seleccionables en grid 3 columnas
    • Visual mejorado con iconos grandes y bordes coloreados

Fixed

  • Error 500 en /api/service-sheets - Columna hours_per_day no existe

    • Causa: Eager loading usaba columna antigua en lugar de hours_per_week
    • Solución: Actualizado ServiceSheetController con columnas correctas
  • TypeError margin_percentage.toFixed - Valor llegaba como string

    • Solución: parseFloat() antes de operaciones numéricas
  • Frontend en directorio incorrecto - Error 500 en raíz

    • Causa: Archivos en /frontend/ en vez de /frontend/dist/
    • Solución: Movidos archivos al directorio correcto

Technical

  • Migración: 2025_12_14_130001_change_hours_per_day_to_hours_per_week
    • Renombra hours_per_day a hours_per_week
    • Agrega working_days_per_week (días por semana)
    • Conversión automática: hours_per_week = hours_per_day * 5
  • Atributo derivado en BusinessSetting: getHoursPerDayAttribute()
  • Deploy limpio con todos los caches regenerados

[1.29.0] - 2025-12-14

Added

  • Campañas Promocionales - Sistema completo de gestión de ofertas y descuentos

    • Presets Rápidos: Black Friday, Cyber Monday, Navidad, Año Nuevo, Liquidación
    • Tipos de Descuento: Porcentaje, Valor Fijo, Precio Fijo
    • Programación: Fechas y horas de inicio/fin con estados automáticos
    • Badges Visuales: Texto, color y preview en tiempo real
    • Selección de Productos: Individual o aplicar a todos
  • Protección de Rentabilidad - Sistema de 4 capas para evitar vender con pérdida

    • Capa 1: Precio nunca menor que CMV (costo)
    • Capa 2: Respeta precio mínimo del producto
    • Capa 3: Respeta precio mínimo de campaña
    • Capa 4: Garantiza margen mínimo sobre CMV
    • Preview con análisis de rentabilidad antes de crear campaña
  • Precificación Estratégica en Fichas Técnicas

    • Precio del Competidor con comparación visual
    • Precio Mínimo/Máximo para control de rango
    • Multiplicador Premium (ajuste fino)
    • Estrategias: Agresivo (-5%), Neutro, Premium (+10%)
    • Margen Objetivo por producto (sobrescribe global)
    • Redondeo Psicológico (€26.04 → €25.99)
  • Soporte B2B/B2C - Manejo diferenciado de IVA/VAT

    • B2C: Precios finales incluyen IVA (venta al consumidor)
    • B2B: Precios sin IVA (venta entre empresas)
    • Campo vat_rate separado de otros impuestos
    • Preview muestra: Markup Base × (1 + IVA) = Multiplicador Final
    • El IVA NO se deduce del margen, se añade al precio final
  • Documentación - Guía completa del Módulo de Negocios

    • docs/MODULO_NEGOCIOS.txt: Manual detallado de funcionamiento
    • Casos de uso prácticos con ejemplos numéricos
    • Explicación técnica del sistema de protección

Fixed

  • Error React #310 - Corregido hook useMemo después de return condicional
  • Scroll en Modales - Agregado scroll para contenido largo
    • ProductSheetModal: maxHeight 90vh con overflowY auto
    • BusinessSettingModal: maxHeight 90vh con overflowY auto
  • Relación BelongsToMany - Foreign key explícita en PromotionalCampaign.products()
  • Traducciones Duplicadas - Eliminadas claves repetidas en i18n
  • Claves i18n Faltantes - Agregadas traducciones para componentes de producto

Technical

  • Nueva migración: add_profitability_protection_to_campaigns
    • Campos: min_margin_percent, protect_against_loss, margin_warning_threshold
    • Pivot: promo_margin, promo_margin_percent, is_profitable
  • Nueva migración: add_price_includes_tax_to_business_settings
    • Campos: price_includes_tax (boolean), vat_rate (decimal)
  • Modelo PromotionalCampaign mejorado con métodos de protección
  • Controller con análisis de rentabilidad en preview() y show()
  • i18n: Traducciones completas en ES, PT-BR, EN para campañas

[1.28.0] - 2025-12-14

Added

  • Nueva Sección Business - Módulo completo para cálculo de precios con Markup
    • Configuraciones de Markup: Define parámetros de cada unidad de negocio

      • Facturación mensual y gastos fijos
      • Costos variables: impuestos, comisiones, tasas de tarjeta
      • Tasa de inversión y margen de ganancia
      • Cálculo automático del factor de markup: Markup = 1 / (1 - deductions)
    • Fichas Técnicas de Productos: Gestión del CMV (Costo de Mercancía Vendida)

      • Componentes de costo: producto, embalaje, etiqueta, envío, manipulación, otros
      • Cálculo automático del CMV total y precio de venta sugerido
      • Margen de contribución calculado en tiempo real
      • Función duplicar para crear variantes rápidamente
    • Calculadora de Precios: Simulador interactivo

      • Ingresa un CMV y visualiza precio de venta instantáneamente
      • Desglose completo de la configuración seleccionada
      • Tabla de precios rápidos para productos existentes
      • Fórmula visible: Precio de Venta = CMV × Markup
    • Multi-divisa: Soporte completo para EUR, BRL, USD

Technical

  • Backend: 3 migraciones, 3 modelos, 2 controladores con endpoints especializados
  • Frontend: Página Business.jsx con 3 tabs y 5 componentes React
  • API: Routes para business-settings y product-sheets con CRUD completo
  • i18n: Traducciones completas en ES, PT-BR, EN

[1.27.6] - 2025-12-13

Fixed

  • Divisa en Widgets Overdue/Upcoming - Corregido campo currency faltante

    • Backend: Agregado campo currency directo en items de upcomingTransactions y overdueTransactions
    • Liability items ahora incluyen su moneda desde liabilityAccount->currency
    • Frontend: Usa item.currency como primera opción, fallback a item.account?.currency
  • Traducción i18n faltante - Agregado common.item y common.items en ES, PT-BR, EN

[1.27.5] - 2025-12-13

Fixed

  • Dashboard Multi-Divisa Completo - Corrigido Flujo de Caja para usar divisa dinâmica

    • CashflowChart agora recebe primaryCurrency como prop
    • Tooltips do gráfico mostram a divisa correta
    • Totais do período (receita, despesa, médias) usam primary_currency
  • Widgets Vencidos/Futuros - Removidas divisas fixas (BRL/EUR)

    • UpcomingWidget: Footer mostra contagem de items em vez de totais monetários
    • OverdueWidget: Rangos mostram contagem, footer mostra média de dias

[1.27.4] - 2025-12-13

Added

  • Categorização Rápida Individual - Novo botão de ação no menu de transações
    • Modal simplificado para categorizar transação individual
    • Seleção de categoria (com subcategorias) e centro de custo
    • Opção de criar keyword para futuras importações automáticas
    • Traduções em ES, PT-BR e EN

Changed

  • Dashboard Multi-Divisa - Valores agrupados por moeda

    • Saldo total, receitas e despesas mostram valores separados por divisa
    • Backend agrupa transações por currency da conta
    • Suporte para múltiplas moedas simultaneamente (EUR, BRL, USD, etc.)
  • Sidebar Responsivo - Estado inicial baseado no tamanho da tela

    • Mobile (< 1024px): Sidebar inicia colapsado
    • Desktop (≥ 1024px): Sidebar inicia expandido
    • Ajusta automaticamente ao redimensionar
  • Responsividade iPad Pro - Otimizações para tablets

    • Media queries para 12.9" (1024-1366px) e 11" (834-1024px)
    • Colunas da tabela de transações com classes CSS para ocultar em tablets
    • Oculta coluna "Conta" em tablets grandes, "Conta" e "Status" em menores

Fixed

  • API Dashboard Summary - Corrigido erro de coluna ambígua
    • Erro: "Column 'user_id' in WHERE is ambiguous" ao fazer JOIN
    • Prefixado todas as colunas com transactions. nas queries com JOIN

[1.27.3] - 2025-12-13

Fixed

  • Categorização em Lote - Corrigido bug que impedia a atualização das transações
    • Problema: Cache de opcodes do PHP-FPM não era limpo após deploy
    • Solução: Script deploy.ps1 agora executa php artisan optimize:clear e reinicia PHP-FPM
    • Fluxo corrigido: Seleção com checkboxes → API → UPDATE no banco funciona corretamente

Changed

  • Script deploy.ps1 (backend) - Melhorado para garantir limpeza completa de cache
    • Adicionado php artisan optimize:clear antes das otimizações
    • Reinício de PHP-FPM com mensagem explicativa sobre cache de opcodes
    • Previne problemas de código antigo sendo servido após deploy

Removed

  • Console.logs de debug - Removidos logs de depuração do frontend (TransactionsByWeek.jsx)

[1.27.2] - 2025-12-13

Changed

  • Ícone de Tabaco - Atualizado ícone da subcategoria "Tabaco" em MadridCategoriesSeeder
    • De bi-circle-fill (genérico) para bi-cloud-haze2-fill (fumaça/névoa)
    • Ícone mais semântico e representativo para gastos com cigarro/estánco
    • Adicionado bi-cloud-haze2 e bi-cloud-haze2-fill ao catálogo de ícones (icons.js)

Fixed

  • Sintaxe icons.js - Corrigida vírgula faltante após bi-outlet na categoria housing

[1.27.1] - 2025-12-12

Fixed

  • Traducción faltante - Agregada clave common.months en es.json y en.json
    • Dashboard mostraba "12 common.months" en vez de "12 meses"

[1.27.0] - 2025-12-12

Added

  • Widget de Transações Vencidas - Novo widget no Dashboard mostrando itens em atraso

    • Endpoint: GET /api/dashboard/overdue - Agrupa por urgência (crítico, alto, médio, baixo)
    • Inclui transações, parcelas recorrentes e passivos vencidos
    • Clique para navegar diretamente ao item
    • Código de cores por nível de urgência
    • Traduções em ES, PT-BR e EN
  • Modais de Confirmação Detalhados - Melhorados todos os botões de ação na página /recurring

    • Modal de Pausar/Reanudar com advertências detalhadas
    • Modal de Excluir Template com avisos de irreversibilidade
    • Modal de Omitir Cuota (Skip) com explicação de consequências
    • Ícones visuais e informações do item afetado em todos os modais
    • Traduções completas em ES, PT-BR e EN

Fixed

  • Conciliação Incorreta - Desfeita conciliação acidental de "Alquiler Seguro Sa" primeira parcela
    • recurring_instance #71 revertido para status 'pending'
    • transaction #2372 desvinculada

[1.26.0] - 2025-12-11

Added

  • Detecção de Reembolsos - Sistema para detectar pares gasto/reembolso que se anulam
    • Novo endpoint: GET /api/refund-detection - Detectar pares potenciais
    • Novo endpoint: POST /api/refund-detection/confirm - Confirmar par de reembolso
    • Novo endpoint: POST /api/refund-detection/confirm-batch - Confirmar múltiplos pares
    • Novo endpoint: POST /api/refund-detection/ignore - Ignorar par
    • Novo endpoint: POST /api/refund-detection/undo - Desfazer confirmação
    • Nova migração: campos is_refund_pair e refund_linked_id na tabela transactions
    • Nova tabela: ignored_refund_pairs para pares ignorados
    • Frontend: Nova página /refunds com UI similar à detecção de transferências
    • Detecção baseada em: mesmo valor, mesma conta, tipos opostos (débito/crédito)
    • Cálculo de confiança com indicadores traduzidos (data, descrição similar, palavras-chave)
    • Tolerância configurável de 1-30 dias
    • Suporte a seleção em lote com confirmação batch
    • Traduções completas em ES, PT-BR e EN

Changed

  • Ordenação de Transações - Lista por semana agora ordena por data efetiva
    • Usa COALESCE(effective_date, planned_date) para ordenação
    • Fallback para data planejada quando não há data efetiva
    • Parâmetro date_field: 'effective_date' adicionado ao frontend

Fixed

  • Indicadores de Reembolso - Traduções para os motivos de confiança
    • same_amount_same_account → "Mismo monto, misma cuenta"
    • same_date → "Misma fecha"
    • refund_keyword → "Palabra clave de reembolso"
    • medium_description_similarity → "Descripción similar"
    • same_status → "Mismo estado"

[1.23.8] - 2025-12-11

Fixed

  • Modais de Confirmação - Substituídos alertas nativos do navegador por modais customizados
    • Modal de confirmação para excluir template
    • Modal de confirmação para pular parcela
    • Modal de confirmação para cancelar parcela
    • Novo componente ConfirmModal reutilizável

[1.23.7] - 2025-06-20

Added

  • Edição de Transações Recorrentes - Possibilidade de editar templates e instâncias individuais
    • Novo endpoint: PUT /api/recurring-instances/{id} - Editar parcela pendente
    • Modal de edição de template com todos os campos (nome, valor, frequência, conta, categoria)
    • Modal de edição de parcela com valor planejado, data de vencimento e notas
    • Botões de edição na tabela de templates e na tabela de parcelas pendentes
    • Botão de edição também no modal de detalhes do template
    • Traduções em português, inglês e espanhol

[1.25.0] - 2025-12-10

Added

  • Transações Recorrentes - Sistema completo de gestão de pagamentos recorrentes

    • Novo modelo: RecurringTemplate - Templates de recorrência com frequência configurável
    • Novo modelo: RecurringInstance - Instâncias/parcelas geradas automaticamente
    • Novo serviço: RecurringService - Lógica de geração e gestão de instâncias
    • Nova política: RecurringTemplatePolicy - Autorização de acesso
    • Endpoints:
      • GET /api/recurring - Listar templates
      • POST /api/recurring - Criar template manual
      • POST /api/recurring/from-transaction - Criar a partir de transação
      • GET/PUT/DELETE /api/recurring/{id} - CRUD de templates
      • POST /api/recurring/{id}/pause - Pausar template
      • POST /api/recurring/{id}/resume - Retomar template
      • GET /api/recurring/{id}/instances - Listar parcelas
      • GET /api/recurring/pending - Listar todas pendentes
      • GET /api/recurring/overdue - Listar vencidas
      • GET /api/recurring/due-soon - Próximas do vencimento
      • POST /api/recurring-instances/{id}/pay - Pagar (cria transação)
      • POST /api/recurring-instances/{id}/reconcile - Conciliar com transação existente
      • POST /api/recurring-instances/{id}/skip - Pular parcela
      • GET /api/recurring-instances/{id}/candidates - Buscar transações candidatas
    • Frontend: Nova página /recurring com tabs Templates e Pendentes
    • Modal para criar recorrência a partir de transação existente
    • Frequências: diária, semanal, quinzenal, mensal, bimestral, trimestral, semestral, anual
    • Ajuste automático de dias em meses curtos (ex: 31 → 28 em fevereiro)
  • Calendário no Dashboard - Widget interativo com visão mensal

    • Novo endpoint: GET /api/dashboard/calendar - Dados do mês
    • Novo endpoint: GET /api/dashboard/calendar-day - Transações de um dia
    • Novo componente: CalendarWidget.jsx
    • Mostra transações e recorrentes pendentes por dia
    • Indicadores visuais (azul=transação, laranja=recorrente)
    • Clique no dia mostra detalhes com ações (Pagar/Omitir)
    • Resumo mensal de pendentes
  • Widget Próximos 7 Dias - Previsão de transações pendentes

    • Novo endpoint: GET /api/dashboard/upcoming - Transações dos próximos N dias
    • Novo componente: UpcomingWidget.jsx
    • Agrupa por dia com badges (Hoje, Amanhã, X dias)
    • Ícones coloridos por tipo (recorrente, transferência, débito, crédito)
    • Resumo de ingressos/gastos previstos (exclui transferências)
  • Menu Reorganizado com Grupos Colapsáveis

    • Grupos: Movimentos (Transações, Recurrentes, Importar, Transferências) e Configuração (Categorias, Centros de Custo)
    • Estado persistente de expansão
    • Suporte a sidebar colapsado
  • Campo start_date no Modal de Recorrência

    • Permite definir data inicial diferente da transação original

Changed

  • Script de deploy backend alterado de php8.3-fpm para php8.4-fpm
  • Layout.jsx refatorado com estrutura de grupos no menu

Fixed

  • AuthorizesRequests - Adicionado trait ao Controller base para resolver erro 500 em ações de autorização
  • Cálculo de ingresos/gastos no calendário - Transferências agora são excluídas do resumo
  • Duplicação de Layout - Removido wrapper Layout duplicado em RecurringTransactions.jsx

Migrations

  • 2025_12_10_100001_create_recurring_templates_table.php
  • 2025_12_10_100002_create_recurring_instances_table.php
  • Adicionado campo recurring_instance_id na tabela transactions

[1.12.0] - 2025-12-09

Added

  • Categorização em Lote - Nova funcionalidade para categorizar transações automaticamente

    • Novo endpoint: POST /api/categories/categorize-batch/preview - Preview das transações que serão categorizadas
    • Novo endpoint: POST /api/categories/categorize-batch - Executar categorização em lote
    • Botão "Categorizar em Lote" na página de Categorias
    • Botão "Categorizar" na página de Transações por Semana
    • Modal com preview mostrando: total sem categoria, quantas serão categorizadas, keywords ativas
    • Categorização baseada em keywords das categorias vs descrição das transações
    • Traduções completas em pt-BR, es, en
  • Detecção de Pagamentos Suspeitos - Nova aba na página de Duplicatas

    • Novo endpoint: GET /api/duplicate-transactions/suspicious - Lista pagamentos suspeitos
    • Detecta transações com mesmo valor, mesma conta, datas diferentes (até 7 dias)
    • Calcula % de similaridade da descrição entre transações
    • Sistema de confiança com níveis (high/medium/low) baseado em múltiplos critérios
    • Aba "Pagamentos Suspeitos" ao lado de "Duplicatas Exatas"
    • Botões para ignorar par ou excluir transação individual
    • Traduções completas em pt-BR, es, en
  • UserSetupService - Serviço para configuração de novos usuários

    • Cria categorias padrão automaticamente no registro
    • Cria centro de custo "Principal" automaticamente
    • 18 categorias principais com subcategorias e keywords

Changed

  • Categorias do usuário não são mais bloqueadas como "sistema"
    • Removida validação is_system no update() e destroy() do CategoryController
    • Todas as categorias do usuário podem ser editadas/excluídas
    • MadridCategoriesSeeder agora cria com is_system = false

Fixed

  • Corrigido problema de reconciliação de passivos não encontrando transações
    • Adicionado COALESCE(amount, planned_amount) na busca de transações elegíveis
    • Transações com amount NULL agora são encontradas usando planned_amount

[1.11.0] - 2025-12-08

Added

  • Funcionalidade de ajuste de saldo de contas
    • Novo endpoint: POST /api/accounts/{id}/adjust-balance
    • Usuário informa o saldo real e sistema calcula o initial_balance automaticamente
    • Fórmula: initial_balance = saldo_desejado - créditos + débitos
    • Botão de ajuste (icone sliders) na lista de contas
    • Modal com explicação e campo para digitar saldo real
    • Traduções em pt-BR, es, en

[1.10.1] - 2025-12-08

Changed

  • Recálculo automático de saldos ao carregar página de Contas (/accounts)
  • Não é mais necessário clicar no botão de recalcular manualmente

[1.10.0] - 2025-12-08

Added

  • Agrupamento de transferências entre contas no resumo semanal
    • Transferências agora aparecem em seção separada "Transferências entre contas"
    • Cada transferência mostra: Conta Origem → Conta Destino com valor
    • Transferências não contam mais nos totais de Ingresos/Gastos
    • API retorna campo transfers com transferências agrupadas em pares
    • Campo transfers_count no summary indica quantidade de transferências
    • Tradução adicionada: "transfers" em pt-BR, es, en

Fixed

  • Corrigido cálculo de totais quando transações têm amount: 0 com status: completed
    • Agora usa planned_amount como fallback quando amount é zero
    • Afeta cálculo de créditos, débitos e total de completed
    • Resolve problema de semanas mostrando totais zerados incorretamente

[1.9.1] - 2025-12-08

Fixed

  • Corrigido erro SQL "Column 'type' in SELECT is ambiguous" no DuplicateTransactionController
  • Corrigido erro SQL "a.name isn't in GROUP BY" removendo JOIN e buscando account_name separadamente
  • Corrigido erro React ao renderizar objeto confidence (alterado para confidence?.percentage)
  • Corrigido path de deploy do frontend (era /public, correto é /var/www/webmoney/frontend/dist)

[1.9.0] - 2025-12-08

Changed

  • Reestruturação completa de detecção de duplicatas (de pares para grupos)
    • OLD: Comparava transações 2x2 (pairwise), gerando múltiplos pares para 3+ idênticos
    • NEW: Agrupa todas as transações idênticas em um único grupo
    • OLD: Estrutura: {transaction1, transaction2}
    • NEW: Estrutura: {transactions: [{id, desc, ...}, {...}], count, max_id}
    • Permite visualizar todas as transações duplicadas lado a lado
    • Identifica claramente qual será mantida (a com maior ID)

Added

  • Auto-Delete automático de duplicatas
    • Novo endpoint: POST /api/v1/duplicate-transactions/auto-delete
    • Deleta todas as duplicatas mantendo apenas a com maior ID por grupo
    • Usa Soft Delete (respeiта deleted_at)
    • Botão "Auto-Delete em Lote" - para grupos selecionados
    • Botão " Auto-Delete Todos" - para todos os grupos
    • Modals de confirmação com avisos de ação irreversível
    • Mensagens de sucesso com contador de grupos deletados
    • Traduções completas em PT-BR, EN, ES

Frontend Updates

  • DuplicateTransactions.jsx completamente reescrito
    • Suporta novo formato de resposta (grupos ao invés de pares)
    • Layout adaptado: 3 colunas para transações (em vez de VS layout)
    • Badge "Será mantida" destaca transação com maior ID
    • Badge "Grupo: X transações" mostra tamanho do grupo
    • Serviço API atualizado com método autoDelete()
    • Traduções incluem strings para auto-delete

Backend Updates

  • DuplicateTransactionController::index() refatorizado

    • Query principal usa GROUP BY em vez de INNER JOIN
    • GROUP_CONCAT(id ORDER BY id DESC) para ordenar por ID
    • Retorna array de todas as transações do grupo
    • Confiança sempre 100% (grupos = transações idênticas)
    • Calcula max_id para indicar qual será mantida
  • Novo método: DuplicateTransactionController::autoDeleteDuplicates()

    • Busca grupos com HAVING count > 1
    • Para cada grupo, deleta tudo menos o ID máximo
    • UPDATE transactions SET deleted_at = NOW()
    • Retorna total de transações deletadas

Database

  • Nenhuma migração nova necessária
    • Campo deleted_at já existe (SoftDeletes trait)
    • Campo duplicate_ignored_with continua funcional

[1.8.1] - 2025-12-08

Fixed

  • Seleção em lote: corrigida lógica de exclusão
    • Agora exclui a transação com menor ID (ao invés de sempre transaction1)
    • Mantém consistência com lógica individual de seleção
    • Usa Soft Delete (SoftDeletes do Laravel)

[1.8.0] - 2025-12-08

Added

  • Seleção em lote para transações duplicadas
    • Checkbox em cada duplicata para marcar/desmarcar
    • "Selecionar Todos" na barra de ações
    • Contador de duplicatas selecionadas
    • Destaque visual (cor azul) para itens selecionados
    • Botões: "Ignorar em Lote" e "Excluir em Lote"
    • Modals de confirmação para ações em lote
    • Mensagens de sucesso com contador (ex: "5 duplicatas ignoradas")
    • Funções executam em paralelo com Promise.all()
    • Limpa seleções ao recarregar dados
    • Traduções em PT-BR, ES e EN

[1.7.4] - 2025-12-08

Fixed

  • Removidas mensagens de navegador (window.confirm, window.alert)
    • Transações: Cancelar e Excluir agora usam modais de confirmação
    • Duplicatas: Excluir agora usa modal de confirmação
    • Modal centralizado com botões "Cancelar" e "Confirmar"
    • Traduções adicionadas em PT-BR, ES e EN
    • Mantém funcionalidade, apenas substituiu padrão de UI

[1.7.3] - 2025-12-08

Fixed

  • Corrigida busca por valores em transações
    • Usa comparação numérica em vez de LIKE em string
    • "147" encontra 147.00 (busca exata + range até 147.99)
    • "147.00" encontra apenas 147.00 (busca exata)
    • Funciona em ambos os métodos: index e byWeek

[1.7.2] - 2025-12-08

Added

  • Nível de confiança na detecção de duplicatas
    • Badge colorido com percentual (vermelho: alto, amarelo: médio, azul: baixo)
    • Critérios de cálculo:
      • Base 50%: mesmo valor, data, conta e tipo
      • +15%: mesma categoria
      • +10%: mesmo status
      • +25%: descrição idêntica ou similar
    • Resultados ordenados por nível de confiança (maior primeiro)
    • Traduções em PT-BR, ES e EN

[1.7.1] - 2025-12-08

Improved

  • Filtro de busca em transações agora também busca por valores
    • Busca por planned_amount e amount
    • Suporta busca exata e parcial (ex: "150" encontra 150.00, 1500.00)
    • Aceita formato com vírgula ou ponto como separador decimal
    • Placeholder atualizado para indicar busca por valor

[1.7.0] - 2025-12-08

Added

  • Nova funcionalidade: Detecção de Transações Duplicadas
    • Página dedicada para visualizar e gerenciar duplicatas potenciais
    • Critérios de detecção: mesmo valor, mesma data, mesma conta, mesmo tipo
    • Opção de excluir transação duplicada
    • Opção de ignorar permanentemente (marcar como não-duplicata)
    • Campo duplicate_ignored_with na tabela transactions
    • Endpoint API: GET /duplicate-transactions
    • Endpoint API: DELETE /duplicate-transactions/{id}
    • Endpoint API: POST /duplicate-transactions/ignore
    • Traduções em PT-BR, ES e EN
    • Menu lateral com link para página de duplicatas

[1.6.13] - 2025-12-08

Changed

  • Tamanho de fonte 11pt aplicado a modais, toasts e outros componentes:
    • Modal: .modal-title, .modal-body, .modal-header, .modal-footer
    • Toast: .toast, .toast-body, .toast-header
    • Popover/Tooltip: .popover-body, .popover-header, .tooltip-inner
    • Outros: .alert, .card-body, .card-text, .card-title
    • Listas/Acordion: .list-group-item, .accordion-body, .accordion-button

[1.6.12] - 2025-12-08

Changed

  • Tamanho mínimo de fonte ajustado para 11pt (era 12pt)
  • Adicionados elementos de formulário à regra de tamanho mínimo:
    • input, select, textarea, .form-control, .form-select
    • option, .input-group-text
  • Garantia de tamanho consistente em todos os campos de formulário

[1.6.11] - 2025-12-08

Changed

  • Tamanho mínimo de fonte padronizado para 12pt em todo o sistema
    • Body, parágrafos, spans, células, labels, botões, listas
    • Textos small/muted também agora usam 12pt mínimo
    • Melhor legibilidade em todos os dispositivos

[1.6.10] - 2025-12-08

Fixed

  • Corrigida tradução do cabeçalho "Estado" no dropdown de ações
    • Alterado de t('transactions.status') para t('transactions.status.label')
    • Erro: "key returned an object instead of string"

[1.6.9] - 2025-12-08

Changed

  • Reduzida largura da coluna de ações de 150px para 50px
  • Botão de ações mais compacto (link style sem bordas)
  • Ícone alterado para três pontos verticais
  • Melhor aproveitamento do espaço horizontal na tabela

[1.6.8] - 2025-12-08

Changed

  • Aumentado tamanho das fontes no sistema para melhor legibilidade
    • Tamanho base: 14px (mínimo 10pt)
    • Textos pequenos (small): 12px
    • Cabeçalhos ajustados proporcionalmente
    • Aplicado globalmente via index.css

[1.6.7] - 2025-12-08

Improved

  • Melhorado visual do menu dropdown de ações nas transações
    • Botão com borda (btn-outline-secondary) mais visível
    • Ícones coloridos para cada ação (verde para completar, amarelo para reverter, etc.)
    • Cabeçalhos de seção para agrupar ações de status
    • Sombra no menu (shadow-sm) para melhor destaque
    • Organização lógica: Status > Ações principais > Excluir

[1.6.6] - 2025-12-08

Changed

  • Substituído botões de ação por menu dropdown elegante na página de Transações
    • Ícone de três pontos (⋮) para abrir menu de ações
    • Menu organizado com ícones e texto descritivo
    • Botão excluir separado por linha divisória
    • Aplicado em TransactionsByWeek.jsx e Transactions.jsx

Improved

  • Interface mais limpa e profissional na listagem de transações
  • Melhor uso do espaço horizontal na tabela

[1.6.5] - 2025-12-08

Improved

  • Ampliada janela de busca de transações elegíveis de ±15 para ±45 dias
    • Permite encontrar pagamentos atrasados ou antecipados
  • Conciliação agora busca transações de todas as contas correntes
  • Corrigida exibição de data nas transações elegíveis (effective_date/planned_date)

Removed

  • Removido filtro de conta corrente desnecessário no modal de conciliação

[1.6.4] - 2025-12-08

Improved

  • Melhorado filtro de transações elegíveis para conciliação
    • Agora filtra por valores próximos (±20% do valor da parcela)
    • Ordena por similaridade de valor (mais próximo primeiro)
    • Retorna diferença percentual para cada transação
    • Limita resultados a 30 transações mais relevantes
    • Retorna faixa de valor utilizada no filtro

[1.6.3] - 2025-12-08

Added

  • Novo endpoint POST /api/accounts/recalculate-all para recalcular saldos de todas as contas
  • Novo endpoint POST /api/accounts/{id}/recalculate para recalcular saldo de uma conta específica
  • Método recalculateBalance() no model Account
  • Botão "Recalcular" na página de Contas para atualizar saldos baseados nas transações
  • Traduções para recálculo de saldos (pt-BR, en, es)

Fixed

  • Correção nos saldos das contas (current_balance) que não atualizavam com transações importadas

[1.6.2] - 2025-12-08

Fixed

  • Corrigido erro no endpoint eligibleTransactions - coluna date não existe
  • Atualizado para usar effective_date ou planned_date (com fallback)
  • Corrigido tipo de transação de expense para debit

[1.6.1] - 2025-12-08

Added - Sistema de Conciliação de Parcelas

Backend (Laravel)

Conciliação de Parcelas com Transações

  • Novo endpoint: GET /api/liability-accounts/pending-reconciliation
    • Lista todas as parcelas pendentes de conciliação
  • Novo endpoint: GET /api/liability-accounts/{id}/installments/{id}/eligible-transactions
    • Busca transações elegíveis para vincular a uma parcela
    • Filtra por período (+/- 15 dias do vencimento)
    • Suporta busca por descrição
  • Novo endpoint: POST /api/liability-accounts/{id}/installments/{id}/reconcile
    • Vincula parcela a uma transação existente
    • Opção de marcar automaticamente como paga
  • Novo endpoint: DELETE /api/liability-accounts/{id}/installments/{id}/reconcile
    • Remove vínculo entre parcela e transação

Frontend (React)

Modal de Conciliação

  • Novo modal para vincular parcela a transação
  • Lista de transações elegíveis com busca
  • Checkbox para marcar como paga ao conciliar
  • Botões de ação na tabela de parcelas (conciliar/desconciliar)
  • Badge indicando status de conciliação
  • Traduções em pt-BR, en e es

Fixed

  • Ordem das rotas no api.php (rotas específicas antes do apiResource)

[1.6.0] - 2025-12-08

Added - Transferências, Divisão, Passivos e Sistema de Importação

Backend (Laravel)

Sistema de Transferências entre Contas

  • Novo endpoint: POST /api/transactions/transfer
  • Cria automaticamente par de transações (débito origem + crédito destino)
  • Campos transfer_pair_id e is_transfer na tabela transactions

Efetivação Rápida de Transações

  • Novo endpoint: POST /api/transactions/{id}/quick-complete
  • Efetiva transação pendente com um clique (usa valores planejados)

Divisão de Transações

  • Novo endpoint: POST /api/transactions/{id}/split
  • Divide transação em múltiplas categorias
  • Campos is_split_parent, is_split_child, parent_transaction_id
  • Validação: soma das divisões deve igualar valor original

Sistema de Passivos (Empréstimos/Financiamentos)

  • Nova migration: create_liability_accounts_table
    • Contrato de passivo com valores calculados
    • Taxas de juros (mensal, anual, total)
    • Progresso de pagamento
  • Nova migration: create_liability_installments_table
    • Parcelas individuais com composição (capital + juros + taxas)
    • Status: pending, paid, partial, overdue, cancelled
  • Novo model: LiabilityAccount e LiabilityInstallment
  • Novo controller: LiabilityAccountController
  • Importação de contratos via Excel
  • Cálculo automático de taxas de juros

Sistema de Importação Avançado

  • Nova migration: create_import_mappings_table
  • Nova migration: add_import_hash_to_transactions_table
  • Suporte a múltiplos formatos: XLSX, XLS, CSV, OFX, PDF
  • Mapeamento de colunas flexível com concatenação
  • Anti-duplicidade via hash único (data + valor + saldo + descrição)
  • Novos parsers: OfxParser, PdfParser
  • Histórico de importações

Correções e Melhorias

  • Removido campo balance_after (saldo sempre calculado dinamicamente)
  • Transações importadas sempre sem categoria (category_id = null)

Frontend (React)

Página de Transações por Semana (TransactionsByWeek.jsx)

  • Botão "Transferência" na barra superior
  • Modal de transferência entre contas
  • Botão de efetivação rápida () para pendentes
  • Botão de divisão para transações
  • Modal de divisão com múltiplas categorias
  • Validação em tempo real (soma = valor original)

Nova Página: Importação de Transações (ImportTransactions.jsx)

  • Upload com drag & drop
  • Wizard de 4 etapas: Upload → Configurar → Mapear → Resultado
  • Preview dos dados do arquivo
  • Mapeamento visual de colunas
  • Salvamento de mapeamentos para reutilização
  • Histórico de importações

Nova Página: Contas Passivo (LiabilityAccounts.jsx)

  • Cards de resumo por moeda
  • Importação de contratos via Excel
  • Visualização de parcelas com status
  • Barra de progresso de pagamento
  • Taxas de juros calculadas

Traduções

  • Novas chaves em pt-BR, en, es para todas as funcionalidades

Technical Details

  • Migration: 2025_12_08_170001_add_transfer_and_split_fields_to_transactions
  • Migration: 2025_12_08_200001_create_liability_accounts_table
  • Migration: 2025_12_08_200002_create_liability_installments_table
  • Migration: 2025_12_09_100001_create_import_mappings_table
  • Migration: 2025_12_09_150001_add_import_hash_to_transactions_table
  • Migration: 2025_12_09_160001_remove_balance_after_from_transactions_table

[1.5.0] - 2025-12-08

Added - Sistema de Transações Completo

Backend (Laravel)

  • Nova migration: create_transactions_table

    • id, user_id, account_id, category_id, cost_center_id
    • amount (valor efetivo), planned_amount (valor previsto)
    • type (credit/debit)
    • description, notes, reference
    • effective_date (data efetiva), planned_date (data planejada)
    • status (pending/completed/cancelled)
    • is_recurring, recurring_parent_id (preparado para recorrências)
    • SoftDeletes e índices otimizados
  • Novo model: Transaction.php

    • Relacionamentos: user, account, category, costCenter, recurringParent/Children
    • Scopes: ofUser, pending, completed, cancelled, credits, debits, inPeriod, etc.
    • Atributos computados: finalAmount, finalDate, isOverdue, signedAmount
    • Métodos: markAsCompleted(), markAsCancelled(), markAsPending()
  • Novo controller: TransactionController.php

    • CRUD completo com filtros avançados
    • Endpoints especiais: complete, cancel, revert, duplicate, summary
    • Filtros por: conta, categoria, centro de custo, tipo, status, período, busca
  • Novas rotas API

    • GET/POST /api/transactions - Listar/Criar
    • GET/PUT/DELETE /api/transactions/{id} - CRUD individual
    • POST /api/transactions/{id}/complete - Marcar como concluída
    • POST /api/transactions/{id}/cancel - Cancelar
    • POST /api/transactions/{id}/revert - Reverter para pendente
    • POST /api/transactions/{id}/duplicate - Duplicar
    • GET /api/transactions-summary - Resumo com totais

Frontend (React)

  • Nova página: Transactions.jsx

    • Cards de resumo: Entradas, Saídas, Saldo, Pendentes
    • Indicador de transações atrasadas
    • Filtros avançados: conta, categoria, tipo, status, período, busca
    • Tabela com todas as transações
    • Badge de categoria com cor e ícone
    • Ações: editar, duplicar, completar, reverter, cancelar, excluir
    • Modal de criação/edição com todos os campos
    • Modal de detalhes completo
    • Modal de conclusão com valor efetivo e data
  • Novo service: transactionService

    • Métodos: getAll, getById, create, update, delete
    • complete, cancel, revert, duplicate, getSummary
  • Traduções completas (pt-BR, es, en)

    • Todos os labels, mensagens e placeholders
    • Tipos: Crédito/Débito
    • Status: Pendente/Concluída/Cancelada
  • Menu lateral atualizado

    • Novo item "Transações" com ícone bi-arrow-left-right
    • Rota /transactions configurada

[1.4.2] - 2025-12-08

Added - Seeder de Categorias para Madrid

Backend (Laravel)

  • MadridCategoriesSeeder.php - Seeder com categorias comuns do dia a dia

    • 22 categorias principais organizadas por tipo (expense/income/both)
    • 150 subcategorias detalhadas para classificação precisa
    • 825 palavras-chave em espanhol para categorização automática
  • Categorias de Despesa (expense):

    • 🏠 Moradia (12 subcategorias): aluguel, hipoteca, água, luz, gás, internet...
    • 🍽️ Alimentação (8): supermercados Madrid (Mercadona, Carrefour, Lidl...)
    • 🍴 Restaurantes e Bares (9): fast food, tapas, comida asiática, kebab...
    • 🚗 Transporte (14): metro/EMT, taxi/Cabify, AVE, BiciMAD, carsharing...
    • 🛒 Compras (9): roupas (Zara, Mango, Primark), eletrônicos, Amazon...
    • 💊 Saúde (9): farmácias, seguros (Sanitas, Adeslas), dentista, ótica...
    • 💇 Beleza (7): peluquería, spa, cosméticos (Sephora, Primor)...
    • 🎓 Educação (6): universidades Madrid, cursos, idiomas...
    • 🎮 Entretenimento (9): streaming, cinema (Yelmo, Cinesa), teatro Gran Vía...
    • 🏋️ Fitness (7): gimnasios (Basic-Fit, McFit), padel, running...
    • ✈️ Viagens (6): hotéis, Booking, Airbnb, tours...
    • 🐕 Pets (5): Tiendanimal, Kiwoko, veterinário...
    • 🏦 Financeiro (6): taxas bancárias, impostos, Hacienda...
    • 👶 Família (5): guardería, extraescolares, brinquedos...
    • 📱 Assinaturas (6): cloud, apps, jornais digitais...
    • 🎁 Doações (3): ONGs, crowdfunding, igreja...
    • 📦 Outros (6): correios, loteria, lavanderia...
  • Categorias de Renda (income):

    • 💰 Salário e Trabalho (6): nómina, bonus, freelance...
    • 📈 Investimentos (5): dividendos, cripto, fundos...
    • 🏠 Rendas/Aluguéis (3): aluguel recebido, Airbnb...
    • 🎁 Outros Rendimentos (5): reembolsos, Wallapop, ajudas governo...
  • Categorias Mistas (both):

    • 🔄 Transferências (4): entre contas, Bizum, PayPal, Wise/Revolut

[1.4.1] - 2025-12-08

Added - Contas Passivo na Página de Contas

Frontend (React)

  • Integração de contas passivo na página /accounts
    • Seção dedicada "Contas Passivo (Empréstimos e Dívidas)"
    • Cards de resumo combinam totais de contas ativas + passivo
    • Linhas clicáveis navegam para página /liabilities
    • Barra de progresso visual (parcelas pagas vs total)
    • Exibe: credor, saldo devedor, status

[1.4.0] - 2025-12-08

Added - Sistema de Contas Passivo (Empréstimos/Financiamentos)

Backend (Laravel)

  • Novas migrations

    • liability_accounts - Tabela para contratos de passivo com todos os metadados
    • liability_installments - Tabela para parcelas individuais de cada contrato
  • Novos models

    • LiabilityAccount - Model com relacionamentos, cálculos de taxas de juros e progresso
    • LiabilityInstallment - Model com status de parcela e método markAsPaid()
  • Novo controller (LiabilityAccountController)

    • CRUD completo para contas passivo
    • Importação de arquivos Excel (.xlsx/.xls)
    • Parser inteligente de colunas (Pago, Fecha, Cuota, Intereses, Capital, Estado)
    • Cálculo automático de taxas extras (multas/atrasos)
    • Cálculo de taxas de juros (mensal, anual, total)
    • Resumo por moeda
  • Novas rotas API

    • GET/POST /api/liability-accounts - Listar/Criar contratos
    • GET/PUT/DELETE /api/liability-accounts/{id} - Ver/Atualizar/Excluir contrato
    • POST /api/liability-accounts/import - Importar Excel
    • GET /api/liability-accounts/{id}/installments - Listar parcelas
    • PUT /api/liability-accounts/{accountId}/installments/{installmentId} - Atualizar parcela
    • GET /api/liability-summary - Resumo geral
  • Dependência adicionada

    • phpoffice/phpspreadsheet ^5.3 para leitura de Excel

Frontend (React)

  • Nova página LiabilityAccounts.jsx

    • Cards de resumo por moeda (Dívida Total, Total Pago, Total Pendente, Juros Totais)
    • Lista de contratos em formato de cards com:
      • Barra de progresso de pagamento
      • Taxa de juros mensal
      • Parcelas pagas/total
      • Saldo devedor
    • Modal de importação de Excel com campos para:
      • Nome do contrato
      • Credor/Banco
      • Número do contrato
      • Moeda
      • Descrição
    • Modal de detalhes com:
      • Cards de valores (Principal, Juros, Taxas, Total)
      • Cards de taxas (Mensal, Anual, Total do contrato)
      • Tabela de parcelas com status colorido
      • Botão para marcar parcela como paga
    • Filtros por status e ativo/inativo
    • Confirmação de exclusão
  • Serviço API (api.js)

    • liabilityAccountService com todos os métodos CRUD e importação
  • Navegação

    • Item "Passivos" adicionado ao menu lateral
    • Rota /liabilities
  • Internacionalização (i18n)

    • Traduções completas em pt-BR, es e en
    • Seção liabilities com todas as strings

Features de Contas Passivo

  • Importação de Excel: Suporte completo ao formato do arquivo ContratoWanna.xlsx
  • Cálculo automático de juros: Taxa mensal, anual e total do contrato
  • Detecção de taxas extras: Identifica automaticamente multas e atrasos
  • Progresso visual: Barra de progresso mostra quanto do principal foi amortizado
  • Status de parcelas: Pendente, Pago, Parcial, Atrasado, Cancelado
  • Preparado para conciliação: Campos para vincular transações futuras

[1.3.14] - 2025-12-08

Changed - Saldo Total por Moeda

Frontend (Accounts.jsx)

  • Saldo total agora exibido separadamente por moeda
    • Função getTotalsByCurrency() agrupa saldos por currency
    • Cada moeda (BRL, EUR, USD, etc.) exibida com seu próprio total
    • Layout responsivo com cards lado a lado
    • Verde para saldo positivo, vermelho para negativo

[1.3.13] - 2025-12-08

Fixed - Tradução i18n faltando

Frontend (i18n)

  • Adicionada chave de tradução accounts.descriptionPlaceholder
    • pt-BR: "Observações sobre esta conta (opcional)"
    • es: "Observaciones sobre esta cuenta (opcional)"
    • en: "Notes about this account (optional)"

[1.3.12] - 2025-12-08

Changed - Layout Desktop Compacto (25% menor)

Frontend (CSS)

  • Reduzido tamanho geral dos elementos em 25% para desktop
    • Font size base: 16px → 13px (em telas ≥992px)
    • Headings reduzidos proporcionalmente (h1: 2.5rem → 1.875rem, etc.)
    • Buttons mais compactos (padding reduzido)
    • Forms: inputs e labels menores
    • Tables: células mais compactas
    • Spacing utilities (.p-3, .p-4, .mb-3, etc.) reduzidos
    • Modais: tamanhos máximos reduzidos
    • Badges e alerts mais compactos

Frontend (Layout.jsx)

  • Sidebar mais compacta
    • Largura: 250px → 200px
    • Colapsada: 70px → 55px
    • Fonte do menu reduzida
    • Avatar do usuário menor (35px → 28px)

[1.3.11] - 2025-12-08

Fixed - Modal de Confirmação (Excluir Conta)

Frontend (React)

  • Refatorado componente Modal.jsx para funcionar sem Bootstrap JS
    • Bootstrap 5 JS API não funciona bem com React (problemas de inicialização)
    • Implementado modal 100% controlado via React (show/hide via props)
    • Adicionado suporte a ESC para fechar (se keyboard=true)
    • Adicionado bloqueio de scroll do body quando modal está aberto
    • Suporte a backdrop "static" (não fecha ao clicar fora)
    • Botão de excluir conta agora funciona corretamente

[1.3.10] - 2025-12-08

Fixed - Posicionamento do Dropdown em CostCenters

Frontend (React)

  • Adicionado posicionamento absoluto ao dropdown
    • position: relative no container do dropdown
    • position: absolute, right: 0, top: 100%, zIndex: 1000 no menu
    • Dropdown agora aparece corretamente abaixo do botão

[1.3.9] - 2025-12-08

Fixed - Dropdown de Ações em CostCenters

Frontend (React)

  • Corrigido dropdown de ações nos cards de centros de custo
    • Bootstrap 5 com React não funciona bem com data-bs-toggle="dropdown"
    • Implementado dropdown controlado via estado React (useState)
    • Adicionado useRef para detectar cliques fora e fechar dropdown
    • Dropdown agora abre/fecha corretamente ao clicar nos três pontinhos

[1.3.8] - 2025-12-08

Fixed - Import Bootstrap JS (não funcionou)

Frontend (React)

  • Tentativa de correção adicionando bootstrap.bundle.min.js no main.jsx
  • Nota: Não resolveu o problema - Bootstrap 5 precisa de inicialização manual com React

[1.3.7] - 2025-12-08

Added - Campo is_admin para Usuários

Backend (Laravel)

  • Campo is_admin na tabela users
    • Migration para adicionar coluna is_admin (boolean, default false)
    • Atualizado modelo User com novo campo, cast e método isAdmin()
    • Marco (id=2) também definido como admin

[1.3.6] - 2025-12-08

Added - Centro de Custo do Sistema

Backend (Laravel)

  • Campo is_system na tabela cost_centers

    • Migration para adicionar coluna is_system (boolean, default false)
    • Atualizado modelo CostCenter com novo campo e scope system()
  • Auto-criação do centro de custo "Geral"

    • Criado automaticamente quando usuário não tem nenhum centro de custo
    • Nome: "Geral", Código: "GERAL"
    • Para agrupar transações sem centro de custo definido
  • Proteção contra edição/exclusão

    • Centros de custo com is_system=true não podem ser editados
    • Centros de custo com is_system=true não podem ser excluídos
    • Retorna erro 403 com mensagem apropriada

Frontend (React)

  • Indicação visual do centro de custo do sistema

    • Ícone de cadeado (🔒) ao lado do nome
    • Dropdown de ações oculto para centros de custo do sistema
  • Traduções adicionadas (i18n)

    • costCenters.systemCostCenter em pt-BR, en, es

[1.3.5] - 2025-12-08

Fixed - Sistema de Traduções i18n

Frontend (React)

  • Revisão completa do sistema de traduções

    • Accounts.jsx: Todos os textos hardcoded substituídos por t('...')
    • Categories.jsx: Todos os textos hardcoded substituídos por t('...')
    • CostCenters.jsx: Todos os textos hardcoded substituídos por t('...')
    • Dashboard.jsx: Todos os textos hardcoded substituídos por t('...')
  • Elementos traduzidos:

    • Headers, botões, labels de formulários
    • Mensagens de erro e sucesso (toast)
    • Placeholders, tooltips, badges de status
    • Modais de confirmação de exclusão
    • Contadores e filtros
  • Arquivos de tradução verificados:

    • pt-BR.json: Completo
    • en.json: Completo
    • es.json: Completo

[1.3.4] - 2025-12-08

Fixed - Fundo Branco em Tabelas

Frontend (React)

  • Correção definitiva do fundo branco em tabelas
    • Adicionado backgroundColor: 'transparent' inline em todos os elementos de tabela
    • <table>, <thead>, <tbody>, <tr>, <th>, <td> todos com estilo inline
    • CSS variables do Bootstrap redefinidas com --bs-table-bg: 'transparent'
    • Corrigido em Accounts.jsx e Dashboard.jsx

[1.3.3] - 2025-12-08

Changed - IconSelector Modal

Frontend (React)

  • IconSelector refatorado - Mudança de dropdown para modal

    • Modal grande com grid visual de ícones
    • Experiência de seleção muito melhorada
    • Campo de busca com ícone
    • Filtros por categoria em botões
    • Ícone selecionado destacado com borda azul
    • Fechamento ao clicar fora do modal
    • Footer com contagem de ícones e botão cancelar
  • Correção de tabelas com tema dark

    • Hover das linhas com fundo azul translúcido
    • Variáveis CSS do Bootstrap redefinidas

[1.3.2] - 2025-12-08

Added - Seletor Visual de Ícones

Frontend (React)

  • IconSelector - Componente visual para seleção de ícones

    • Grid visual com mais de 200 ícones organizados por categoria
    • Busca por nome de ícone
    • Filtro por categoria (money, bank, card, food, shopping, etc.)
    • Suporte para 3 tipos: account, category, costCenter
    • Visual consistente com tema dark
  • Biblioteca de Ícones Expandida (icons.js)

    • Contas: 50+ ícones (wallets, banks, cards, currencies, investments)
    • Categorias: 150+ ícones (food, shopping, housing, transport, health, education, leisure, travel, work, utilities, etc.)
    • Centros de Custo: 40+ ícones (buildings, projects, departments)
    • Organização por subcategorias para facilitar busca
  • Correções de Tema Dark

    • Correção de fundos brancos em autocomplete de formulários
    • Correção de fundos em checkboxes e radio buttons
    • Correção de color picker com tema dark
    • Correção de modals, dropdowns, alerts, badges

Arquivos Criados

frontend/src/config/icons.js         # Biblioteca de 200+ ícones
frontend/src/components/IconSelector.jsx  # Componente visual de seleção

Arquivos Modificados

frontend/src/pages/Accounts.jsx      # Integração IconSelector + i18n
frontend/src/pages/Categories.jsx    # Integração IconSelector + i18n  
frontend/src/pages/CostCenters.jsx   # Integração IconSelector + i18n
frontend/src/index.css               # Correções tema dark

[1.3.1] - 2025-12-08

Added - Suporte Multi-idioma e Multi-divisa

Frontend (React)

  • Internacionalização (i18n) com react-i18next

    • 3 idiomas: Español (es), English (en), Português (pt-BR)
    • Arquivos de tradução completos em src/i18n/locales/
    • Detecção automática do idioma do navegador
    • Persistência da preferência no localStorage
  • Sistema Multi-divisa

    • 15 moedas suportadas: BRL, USD, EUR, GBP, JPY, CNY, ARS, CLP, COP, MXN, PEN, UYU, CHF, CAD, AUD
    • Formatação automática por locale
    • Componente CurrencySelector para seleção
    • Componente CurrencyDisplay para exibição formatada
  • Novos Componentes

    • LanguageSelector.jsx - Seletor de idioma com bandeiras
    • CurrencySelector.jsx - Seletor de moeda
    • useFormatters.js - Hook para formatação de valores e datas

Arquivos Criados

frontend/src/i18n/
├── index.js                 # Configuração i18next
└── locales/
    ├── es.json              # Tradução Español (padrão)
    ├── en.json              # Tradução English
    └── pt-BR.json           # Tradução Português

frontend/src/config/
└── currencies.js            # Lista de moedas e formatadores

frontend/src/hooks/
├── index.js                 # Exportações
└── useFormatters.js         # Hook de formatação

frontend/src/components/
├── LanguageSelector.jsx     # Seletor de idioma
└── CurrencySelector.jsx     # Seletor de moeda

Changed

  • main.jsx - Adicionado Suspense e import do i18n
  • Layout.jsx - Adicionado seletor de idioma no header, traduções nos menus
  • Dashboard.jsx - Atualizado com traduções e formatação de moeda

Dependencies Added

  • i18next: ^24.x
  • react-i18next: ^15.x
  • i18next-browser-languagedetector: ^8.x

Deployed


[1.3.0] - 2025-12-08

Added - Fase 1: Gerenciadores Base

Backend (Laravel)

  • Gerenciador de Contas - API completa CRUD

    • Tipos: Dinheiro, Conta Corrente, Poupança, Cartão de Crédito, Ativos, Passivos
    • Campos: nome, tipo, banco, número da conta, saldo inicial/atual, cor, ícone
    • Modelo Account com relacionamento ao usuário
    • Migration create_accounts_table
  • Gerenciador de Centros de Custo - API completa CRUD

    • Campos: nome, código, descrição, cor, orçamento
    • Sistema de palavras-chave para matching automático em lote
    • Modelos CostCenter e CostCenterKeyword
    • Migration create_cost_centers_table (com tabela de keywords)
    • Endpoints: /api/cost-centers/{id}/keywords para gerenciar keywords
  • Gerenciador de Categorias - API completa CRUD

    • Tipos: Receita, Despesa, Ambos
    • Suporte a hierarquia (categoria pai e subcategorias)
    • Sistema de palavras-chave para matching automático em lote
    • Modelos Category e CategoryKeyword
    • Migration create_categories_table (com tabela de keywords)
    • Endpoints: /api/categories/{id}/keywords para gerenciar keywords

Frontend (React)

  • Layout com Sidebar - Navegação lateral moderna

    • Componente Layout.jsx reutilizável
    • Menu colapsável responsivo
    • Ícones Bootstrap Icons
    • Tema escuro integrado
  • Componentes Reutilizáveis

    • Modal.jsx - Modal Bootstrap para formulários (sem uso de alert())
    • Toast.jsx - Sistema de notificações com ToastProvider
  • Página de Contas (Accounts.jsx)

    • Listagem com cards coloridos
    • Formulário completo com todos os campos
    • CRUD completo via modal
    • Formatação de valores em BRL
  • Página de Centros de Custo (CostCenters.jsx)

    • Listagem com badges de keywords
    • Formulário com gerenciamento de keywords
    • CRUD completo via modal
  • Página de Categorias (Categories.jsx)

    • Listagem hierárquica (pai > subcategoria)
    • Formulário com seleção de categoria pai
    • Gerenciamento de keywords por categoria
    • CRUD completo via modal
  • Dashboard Atualizado (Dashboard.jsx)

    • Cards de resumo (Contas, Categorias, Centros de Custo)
    • Links de acesso rápido
    • Design moderno com tema escuro

Novos Arquivos Criados

backend/
├── database/migrations/
│   ├── 2025_12_08_000001_create_accounts_table.php
│   ├── 2025_12_08_000002_create_cost_centers_table.php
│   └── 2025_12_08_000003_create_categories_table.php
├── app/Models/
│   ├── Account.php
│   ├── CostCenter.php
│   ├── CostCenterKeyword.php
│   ├── Category.php
│   └── CategoryKeyword.php
└── app/Http/Controllers/Api/
    ├── AccountController.php
    ├── CostCenterController.php
    └── CategoryController.php

frontend/src/
├── components/
│   ├── Layout.jsx
│   ├── Modal.jsx
│   └── Toast.jsx
└── pages/
    ├── Accounts.jsx
    ├── CostCenters.jsx
    └── Categories.jsx

Changed

  • routes/api.php - Adicionadas rotas para accounts, cost-centers, categories
  • services/api.js - Adicionados accountService, costCenterService, categoryService
  • App.jsx - Novas rotas e ToastProvider
  • Dashboard.jsx - Reescrito com cards de resumo
  • index.css - Estilos para sidebar, cards, formulários

Database

  • 6 novas tabelas criadas:
    • accounts - Contas financeiras
    • cost_centers - Centros de custo
    • cost_center_keywords - Palavras-chave de centros de custo
    • categories - Categorias (com self-reference para hierarquia)
    • category_keywords - Palavras-chave de categorias

Deployed


[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

[1.2.1] - 2025-12-07

Fixed

  • Removido fundo branco (bg-light) do Dashboard - agora usa tema escuro
  • Adicionada classe .dashboard-dark com gradiente escuro azul
  • Corrigido navbar e footer para usar cores escuras (#1e293b)
  • Tabelas agora têm texto claro (#e2e8f0) em fundo escuro
  • Override de .bg-light do Bootstrap para garantir tema escuro
  • Atualizada versão no footer para v1.2.0

Changed

  • Dashboard.jsx: Substituído bg-light por dashboard-dark
  • index.css: Adicionados novos estilos para tema escuro completo

Deployed

[1.2.0] - 2025-12-07

Added

  • Deploy completo do backend Laravel e frontend React para produção
  • Documento CREDENCIAIS_SERVIDOR.md com todas as credenciais organizadas
  • Suporte IPv6 em todos os vhosts Nginx (listen [::]:443 ssl)
  • Redis 7.0.15 instalado e configurado
  • PM2 6.0.14 para gerenciamento de processos Node.js

Changed

  • Atualizado ROTEIRO_INSTALACAO_SERVIDOR.md com versões reais instaladas
  • Nginx atualizado para 1.29.3 mainline (era 1.27.x no roteiro)
  • PHP atualizado para 8.4.15
  • Composer atualizado para 2.9.2
  • Node.js 22.21.0 LTS

Fixed

  • webmail.cnxifly.com agora serve Roundcube corretamente (antes mostrava phpMyAdmin)
  • Corrigido problema de IPv6 nos vhosts que causava resposta incorreta
  • mail.cnxifly.com agora serve exclusivamente PostfixAdmin

Validated

  • 7/7 serviços ativos (nginx, mariadb, php8.4-fpm, redis, postfix, dovecot, opendkim)
  • 6/6 sites HTTPS funcionando
  • SSL válido para 6 domínios (expira 2026-03-07)
  • DKIM key OK
  • SPF configurado com hard fail (-all)
  • 4 databases criados (webmoney, postfixadmin, roundcube, phpmyadmin)
  • 2 contas de email (admin@cnxifly.com, test@cnxifly.com)

[1.1.5] - 2025-12-07

Added

  • phpMyAdmin instalado em https://phpmyadmin.cnxifly.com com SSL (Let's Encrypt)
  • Usuários administrativos criados (sistema e MariaDB) usando senha única fornecida
  • Documento CREDENCIAIS.md com todas as credenciais criadas

Changed

  • Tela de login agora aplica tema escuro/azul conforme especificação (background, cards, botões)

Fixed

  • Erro de dependências ausentes (MariaDB) para phpMyAdmin

[1.1.4] - 2025-12-07

Added

  • ✓ Documentação completa do tema escuro/azul profissional em ESPECIFICACIONES
  • ✓ Paleta de cores detalhada com códigos hex e variáveis SCSS
  • ✓ Certificado SSL expandido para incluir webmail.cnxifly.com
  • ✓ Configuração Nginx para webmail.cnxifly.com com HTTPS
  • ✓ Documentação de uso dos subdomínios mail/webmail

Changed

  • Removida rota /register do frontend - usuários NÃO podem se auto-registrar
  • Login sem link para registro (apenas admins criam usuários)
  • Subdominios documentados: mail.cnxifly.com = admin email, webmail.cnxifly.com = usuários finais

Fixed

  • ERR_CERT_COMMON_NAME_INVALID em webmail.cnxifly.com Certificado SSL válido
  • Let's Encrypt agora inclui 6 domínios: cnxifly.com, www, webmoney, mail, webmail, ftp

Security

  • Certificado wildcard Let's Encrypt válido até 2026-03-07
  • TLS 1.2/1.3 configurado em webmail.cnxifly.com
  • Redirecionamento automático HTTP → HTTPS

[1.1.3] - 2025-12-07

Added

  • ✓ Frontend React completo com Vite + React Router + Bootstrap 5
  • ✓ Tela de Login (/login) com validação e feedback de erros
  • ✓ Tela de Registro (/register) com confirmação de senha
  • ✓ Dashboard (/dashboard) protegido com informações do usuário
  • ✓ Sistema de autenticação com Context API e localStorage
  • ✓ Interceptor Axios para token automático em todas as requisições
  • ✓ ProtectedRoute para rotas que requerem autenticação
  • ✓ Deploy script para frontend (frontend/deploy.sh)
  • ✓ Configuração Nginx ajustada para React SPA + Laravel API

Changed

  • Nginx agora serve React SPA em / e Laravel API em /api
  • Index do Nginx mudado de index.php para index.html (React)

Validation

  • Frontend acessível em https://webmoney.cnxifly.com
  • Login/Register funcionando com backend Laravel
  • Dashboard mostra informações do usuário autenticado
  • Logout revoga token e redireciona para login
  • API /api/* respondendo corretamente via Nginx

Tech Stack

  • React 18 + Vite (rolldown-vite experimental)
  • React Router DOM para navegação
  • Axios para requisições HTTP
  • Bootstrap 5 + Bootstrap Icons
  • Laravel Sanctum (backend)

[1.1.2] - 2025-12-07

Added

  • ✓ Registro DMARC publicado em _dmarc.cnxifly.com com política p=quarantine, alinhamento estrito (adkim/aspf=s) e coleta de relatórios (rua/ruf para postmaster@cnxifly.com)
  • ✓ Cabeçalhos anti-spam adicionados aos emails de boas-vindas: List-Unsubscribe (mailto) e List-Unsubscribe-Post: List-Unsubscribe=One-Click

Changed

  • Fluxo de envio de email configurado para validar SPF/DKIM/DMARC end-to-end após publicação do DMARC

Validation

  • SPF=pass, DKIM=pass, DMARC=pass em entrega real para Gmail (forward iCloud) com chegada em INBOX
  • Endpoint POST /api/email/send-test respondendo 200 e entregando com autenticações válidas

Notes

  • Política DMARC pode ser elevada para p=reject após estabilização
  • Manter aquecimento do domínio com baixo volume antes de campanhas

[1.0.5] - 2025-12-07

Added

  • ✓ Certificado SSL Let's Encrypt expandido para incluir mail.cnxifly.com e ftp.cnxifly.com
  • ✓ Virtual host Nginx para mail.cnxifly.com com HTTPS e HTTP/2
  • ✓ Virtual host Nginx para ftp.cnxifly.com com HTTPS e HTTP/2
  • ✓ Registro DNS DKIM (default._domainkey.cnxifly.com) adicionado e validado

Fixed

  • ✓ Certificado SSL agora cobre TODOS os domínios: cnxifly.com, www, webmoney, mail, ftp
  • ✓ Postfix e vsftpd recarregados com certificados atualizados
  • ✓ Todos os 5 domínios agora respondem HTTPS 200 com HTTP/2

Configuration

  • Certificado SSL: válido até 2026-03-07 (5 domínios)
  • Nginx: 4 sites habilitados (cnxifly.com, webmoney, mail, ftp)
  • DKIM DNS: TXT record publicado e propagado
  • Security headers: HSTS, nosniff, XFO, XSS-Protection em todos os vhosts

Validation

  • 5/5 domínios com HTTPS funcional
  • 6/6 serviços ativos (nginx, postfix, opendkim, vsftpd, php-fpm, postgresql)
  • 18/18 regras de firewall UFW configuradas
  • DKIM DNS propagado e validado via dig
  • Certificado SSL multi-domínio ativo

Notes

  • INFRAESTRUTURA 100% COMPLETA - Todas as correções aplicadas
  • Todos os certificados SSL configurados e válidos
  • Email anti-spam funcional com DKIM publicado em DNS
  • Pronto para desenvolvimento de aplicação Laravel + React

[1.0.4] - 2025-12-07

Added

  • ✓ Servidor de Email Postfix 3.8.6 instalado e configurado com TLS
  • ✓ OpenDKIM 2.11.0 instalado com chaves DKIM geradas para cnxifly.com
  • ✓ Integração Postfix + OpenDKIM via milter (porta 8891)
  • ✓ Contas de email criadas: admin@cnxifly.com, no-reply@cnxifly.com, support@cnxifly.com
  • ✓ Aliases de email configurados em /etc/aliases
  • ✓ vsftpd 3.0.5 instalado com suporte SSL/TLS usando certificados Let's Encrypt
  • ✓ FTP passivo configurado (portas 40000-50000)
  • ✓ Virtual host Nginx dedicado para webmoney.cnxifly.com com PHP-FPM
  • ✓ Diretório /var/www/webmoney/public criado para aplicação Laravel
  • ✓ PHP-FPM 8.3 ativo e integrado com Nginx
  • ✓ Portas adicionais abertas no UFW: 25, 587, 465 (SMTP), 21, 20 (FTP), 40000-50000 (FTP passivo)

Configuration

  • Postfix: myhostname=mail.cnxifly.com, TLS ativo, DKIM signing habilitado
  • OpenDKIM: selector=default, domain=cnxifly.com, chave RSA 2048-bit
  • vsftpd: SSL ativo, write_enable=YES, pasv_mode ativo
  • Nginx webmoney: root=/var/www/webmoney/public, PHP-FPM via socket, HTTPS only

Security

  • Anti-spam: DKIM assinatura digital em emails enviados
  • Registro DNS TXT necessário: default._domainkey.cnxifly.com (ver chave pública gerada)
  • FTP com SSL/TLS obrigatório
  • 18 regras ativas no UFW (IPv4 + IPv6)

Notes

  • Servidor 100% pronto conforme ESPECIFICACIONES_WEBMONEY.md
  • Email SMTP disponível para envio de notificações da aplicação
  • FTP disponível para deploy manual de arquivos (usar FTPS)
  • Laravel pode ser instalado em /var/www/webmoney
  • React build pode ser servido via Nginx (SPA mode)

[1.0.3] - 2025-12-07

Added

  • ✓ Firewall UFW ativado permitindo apenas 22/80/443 (IPv4 e IPv6)
  • ✓ Instalação e configuração do Nginx com gzip, charset UTF-8 e cabeçalhos de segurança (HSTS, nosniff, XFO, XSS-Protection, Referrer-Policy, Permissions-Policy)
  • ✓ Certificados SSL Lets Encrypt emitidos para cnxifly.com, www.cnxifly.com e webmoney.cnxifly.com com redirecionamento HTTPS
  • ✓ Banco PostgreSQL webmoney criado com ENCODING UTF8 e LOCALE es_ES.UTF-8
  • ✓ Usuário PostgreSQL webmoney_user criado com senha forte e privilégios na base webmoney
  • ✓ Apache desabilitado para liberar portas web e Nginx habilitado em 80/443

Notes

  • Certbot agendado para renovação automática
  • Root web atual: /var/www/html (placeholder; pronto para app)
  • Manter porta 22 aberta garante acesso via workspace/local conforme solicitado

[1.0.2] - 2025-12-07

Added

  • ✓ Configuración obligatoria: Timezone Europe/Madrid
  • ✓ Configuración obligatoria: Encoding UTF-8 en todo el sistema
  • ✓ Instrucciones de configuración del sistema (timedatectl, locale)
  • ✓ Configuración de Timezone y Encoding en Base de Datos:
    • PostgreSQL: client_encoding = 'UTF8'
    • MySQL/MariaDB: utf8mb4 + utf8mb4_unicode_ci
  • ✓ Configuración de Encoding en Laravel:
    • config/app.php: timezone y locale
    • config/database.php: opciones de conexión UTF-8
  • ✓ Configuración de Encoding en Frontend (React/Vite):
    • .env variables para timezone
    • date-fns con locale es_ES
    • i18n con español como idioma por defecto
  • ✓ Configuración de Encoding en Servidores Web:
    • Nginx: charset utf-8 headers
    • Apache: AddDefaultCharset utf-8
  • ✓ Verificación de configuración (comandos de testing)
  • ✓ Sección de seguridad ampliada con timezone/encoding

Configuration

  • Timezone: Europe/Madrid (WET/WEST, UTC±0/±1)
  • Encoding: UTF-8 (obligatorio en todos los servicios)
  • Locale: es_ES.UTF-8
  • Aplicaciones: PostgreSQL, MySQL, Laravel, React, Nginx, Apache

Notes

  • DEBE configurarse ANTES de instalar servicios
  • Afecta: BD, Web Server, PHP, Node, Emails, Archivos
  • Verificaciones incluidas para confirmar configuración
  • Tablas de configuração por serviço

[1.0.1] - 2025-12-07

[1.1.2] - 2025-12-07

Added

  • ✓ Fluxo padrão documentado: desenvolver localmente, executar backend/deploy.sh e validar diretamente em https://webmoney.cnxifly.com
  • ✓ Sample de email anti-spam (EMAIL_SAMPLE.md) com HTML e texto, usando From/Reply-To e headers de opt-out
  • ✓ PAINEL_CONTROLE atualizado com status real de SPF/DKIM/DMARC e versão corrente

Changed

  • README detalha entregabilidade, DMARC e passo a passo de validação no domínio

Validation

  • 🛈 Mudança apenas documental; nenhum binário ou configuração de produção alterado

Added

  • ✓ Documento de Especificaciones del Proyecto (ESPECIFICACIONES_WEBMONEY.md)
  • ✓ Definición completa del proyecto WEBMoney
  • ✓ Configuración de dominios y subdomínios
  • ✓ Stack tecnológico detallado (React + Laravel)
  • ✓ Base de datos: PostgreSQL/MySQL recomendado
  • ✓ Servidor web: Nginx/Apache configuración
  • ✓ Servidor de email: Postfix + Dovecot
  • ✓ FTP/SFTP: vsftpd
  • ✓ SSL/TLS: Let's Encrypt
  • ✓ Listado completo de funcionalidades previstas (18 grupos)
  • ✓ Requisitos UI/UX:
    • 3 idiomas (Español, Inglés, Portugués Brasil)
    • Tema oscuro profissional
    • Modales Bootstrap (sin alert() del navegador)
    • Responsivo para móvil, tablet, desktop
  • ✓ Matriz de tareas por fases
  • ✓ Cronograma de implementação
  • ✓ Estructura de directorios recomendada
  • ✓ Convenciones de código (JS/React e Laravel/PHP)
  • ✓ Variables de entorno templates
  • ✓ Checklist de segurança (10 items)
  • ✓ Targets de performance (Web Vitals)

Specifications

  • Proyecto: WEBMoney - Gerenciador Financeiro Pessoal WEB
  • Proveedor: ConneXiFly
  • Servidor: 213.165.93.60 (Ubuntu 24.04.3 LTS)
  • Dominio: cnxifly.com
  • Subdominio: webmoney.cnxifly.com
  • Email: @cnxifly.com
  • Estado: En Desarrollo

Development Notes

  • Instalación comando a comando (sin scripts automáticos)
  • Documentación completa requerida
  • Desarrollo incremental (solo lo solicitado cuando se solicite)
  • Validación en domínio requerida para cada cambio
  • Prohibido: alertas del navegador (alert, confirm, prompt)
  • Usar: Bootstrap Modals y Toast en su lugar

[1.0.0] - 2025-12-07

Added

  • ✓ Auditoria Inicial Completa do servidor 213.165.93.60
  • ✓ Auditoria de domínio cnxifly.com e subdomínios
  • ✓ Documentação: AUDITORIA_INICIAL_CNXIFLY.md
  • ✓ Sistema de Controle de Versão (SemVer 1.0.0)
  • ✓ Arquivo de Diretrizes de Desenvolvimento (IMUTÁVEL)
  • ✓ Arquivo de Changelog (este arquivo)
  • ✓ Arquivo de Versão (VERSION)
  • ✓ Conexão SSH automática via sshpass
  • ✓ Coleta de informações de DNS, nameservers, zona DNS
  • ✓ Descoberta de subdomínios (www, mail, ftp)
  • ✓ Análise de registros SPF, MX, AAAA, SOA
  • ✓ Verificação de processos e portas abertas
  • ✓ Recomendações de segurança e próximas ações

Infrastructure

  • Servidor: 213.165.93.60 (Ubuntu 24.04.3 LTS, Kernel 6.8.0-88-generic)
  • IPv4: 213.165.93.60
  • IPv6: 2001:ba0:268:ab00::1
  • Domínio: cnxifly.com
  • Nameservers: UI-DNS (ns1028.ui-dns.biz, ns1114.ui-dns.com, ns1016.ui-dns.org, ns1119.ui-dns.de)

Status do Servidor v1.0.0

  • 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)