Commit Graph

78 Commits

Author SHA1 Message Date
99a68f4520 feat: novas categorias e melhorias UI transações
- Adicionadas categorias para Marco Leite:
  - Gastos Trabajo (com subcategorias: Máquina de Vending, Café/Snacks, etc.)
  - Tabaco/Vaper (com subcategorias: Cigarros, Vaper/Pod, Líquidos, etc.)
  - Beleza (com subcategorias: Cabeleireiro, Barbearia, Skincare, etc.)
  - Subscrições (com subcategorias: Streaming, Software, Cloud, etc.)
  - Bono Transporte (subcategoria de Transporte)
  - Descarga de Passivo (subcategoria de Finanças)

- Lista de transações filtradas agora exibe menu completo de ações
  (igual à listagem por semana): editar, duplicar, dividir, etc.
2025-12-19 21:15:36 +01:00
d1ab280997 feat: melhorias em emails, traduções e página de pricing 2025-12-19 18:23:06 +01:00
b14ff0ab89 feat: Restringir cancelamento em Billing apenas ao período de garantia
🔒 RESTRIÇÃO DE CANCELAMENTO

📍 Página /billing:
- Botão "Cancelar Assinatura" SOMENTE aparece nos primeiros 7 dias
- Após período de garantia: botão removido
- Mensagem informativa: "Para cancelar após o período de garantia, vá em Perfil"

⚖️ LÓGICA:
- withinGuaranteePeriod === true → Botão visível
- withinGuaranteePeriod === false → Botão oculto + alerta info

📄 Página /profile:
- Cancelamento sempre disponível (sem restrição)
- Wizard completo de 5 etapas
- Sistema de retenção com oferta

🌍 i18n (3 idiomas):
- pt-BR: "Para cancelar após o período de garantia, vá em Perfil"
- ES: "Para cancelar después del período de garantía, ve a Perfil"
- EN: "To cancel after the guarantee period, go to Profile"

 RESULTADO:
- Garantia (0-7 dias): Cancelamento fácil em Billing
- Após garantia: Cancelamento via Profile (wizard)
2025-12-19 17:25:30 +01:00
806bfc1a89 feat: Adicionar aviso de IVA em todos os preços
�� IVA NÃO INCLUÍDO - Avisos adicionados

📍 LOCAIS ATUALIZADOS:

1. Pricing Page (/pricing)
   - Aviso "+ IVA" abaixo do preço principal
   - Texto destacado em amarelo

2. Profile Page (/profile)
   - Seção de assinatura com "(IVA não incluído)"

3. Billing Page (/billing)
   - Plano atual com aviso de IVA

🌍 i18n - 3 Idiomas:

pt-BR:
- plusVat: "+ IVA"
- vatNotIncluded: "(IVA não incluído)"
- billedAnnually: "...€{{price}} + IVA"

ES:
- plusVat: "+ IVA"
- vatNotIncluded: "(IVA no incluido)"
- billedAnnually: "...€{{price}} + IVA"

EN:
- plusVat: "+ VAT"
- vatNotIncluded: "(VAT not included)"
- billedAnnually: "...€{{price}} + VAT"

🎨 VISUAL:
- Texto em amarelo (text-warning)
- Destaque com fw-semibold
- Posicionamento consistente

 Cliente agora vê claramente que IVA será adicionado
2025-12-19 17:23:34 +01:00
5d094c2f51 fix: Atualizar service worker para v1.60.0 e rebuild frontend
- Atualizar CACHE_VERSION do sw.js para v1.60.0
- Forçar atualização de cache do navegador
- Resolver 404 nas novas rotas (problema de cache)
- Novo build: index-CbxYTYkw-1766160284564.js
2025-12-19 17:04:53 +01:00
2c883be168 feat: Sistema completo de cancelamento de assinatura v1.60.0
 Novo Sistema de Cancelamento com Retenção Inteligente
- Wizard de 5 etapas com mensagens emocionais personalizadas
- Oferta de 3 meses grátis para cancelamentos por preço (elegível se >= 3 meses pagos)
- Cumprimento legal: período de garantia 7 dias com reembolso total
- Rastreamento de ofertas em DB (impede reuso)
- Analytics de cancelamentos (motivo, feedback, within_guarantee)

🎨 Frontend
- CancellationWizard.jsx (1050+ linhas) com 5 steps
- Profile.jsx com nova seção de assinatura
- i18n completo em 3 idiomas (pt-BR, ES, EN)
- 40+ traduções específicas

🔧 Backend
- SubscriptionController: 4 novos métodos (eligibility, process, offer, execute)
- PayPalService: suspensão temporária de assinatura
- 2 novas tabelas: retention_offers, cancellations
- Email de retenção emotivo em Blade

⚖️ Legal
- 7 dias: cancelamento = reembolso total + acesso imediato termina
- Após 7 dias: cancelamento = acesso até fim do período, sem reembolso
- Grace period apropriado conforme período de garantia
2025-12-19 17:00:54 +01:00
27f3bd8869 feat: implementar Factory Reset completo com wizard e sistema de backup
Backend:
- AccountDeletionController com 4 endpoints principais
- requestDeletionCode: Envia código de 6 dígitos por email (válido 10min)
- exportBackup: Exporta todos os dados do usuário em JSON
- executeHardDelete: Deleta permanentemente conta e dados com validação de código
- importBackup: Importa backup completo com mapeamento de IDs

Frontend:
- FactoryResetWizard: Wizard de 4 etapas (Warning → Backup → Code → Confirmation)
- ImportBackupModal: Drag & drop para importar backup JSON
- Integração na página Profile com seção de Gerenciamento de Dados
- accountDeletionService: Serviços API completos

Email:
- Template HTML para código de confirmação
- Avisos visuais sobre irreversibilidade da ação

i18n:
- Traduções completas em pt-BR, es, en
- 50+ strings de tradução adicionadas
- Avisos e mensagens de erro traduzidos

Funcionalidades:
 Hard delete com confirmação dupla (código + texto DELETAR)
 Backup completo em JSON (transações, contas, categorias, etc)
 Importação de backup com mapeamento inteligente de IDs
 Email com código de segurança
 Wizard responsivo com 4 etapas
 Validação de arquivos e tamanho (max 50MB)
 Drag & drop para upload
 Estatísticas de importação
 Logout automático após delete
2025-12-19 16:45:08 +01:00
4ad7060323 feat: adicionar traduções i18n faltantes e atualizar copilot-instructions
- Adicionar traduções para modal de keywords do centro de custo Geral
- Corrigir toasts sem i18n em Accounts e LiabilityAccounts
- Adicionar regra no copilot-instructions sobre verificação obrigatória de i18n
- Garantir que todos os textos visíveis usem t() com traduções em pt-BR, es e en
2025-12-19 16:33:39 +01:00
366254312c feat: permitir edição de palavras-chave do centro de custo Geral (sistema) 2025-12-19 16:22:11 +01:00
b61ac7c7fa fix: corrigir dependências do useCallback para viewMode em transações 2025-12-19 16:12:29 +01:00
27d7e91896 feat: opções de visualização de transações (semanal, mensal, todas)
- Adicionado seletor de viewMode: 'week', 'month', 'all'
- Backend ajustado para trazer todos os dados quando viewMode é month/all
- Agrupamento por mês no frontend
- Lista flat para visualização 'todas'
- Traduções i18n para pt-BR, en, es
2025-12-19 15:00:36 +01:00
44bc999840 feat: melhorias no filtro de transações
- Filtro 'Sem Categoria' mostra lista flat ao invés de agrupada por semanas
- Transações futuras aparecem quando qualquer filtro está ativo
- Filtro de data parcial (só data inicial ou só data final)
- COALESCE para effective_date com fallback para planned_date
- Traduções i18n para filteredResults, filterActive, uncategorized
2025-12-19 14:28:27 +01:00
f2e032f002 feat: adicionar filtro 'Sem Categoria' nas transações
- Backend: suporte para category_id=uncategorized nos endpoints index e byWeek
- Frontend: opção 'Sem Categoria' no CategorySelector com prop showUncategorized
- Permite filtrar 525 transações importadas que ainda não foram categorizadas
2025-12-19 12:12:07 +01:00
54cccdd095 refactor: migração para desenvolvimento direto no servidor
- Removido README.md padrão do Laravel (backend)
- Removidos scripts de deploy (não mais necessários)
- Atualizado copilot-instructions.md para novo fluxo
- Adicionada documentação de auditoria do servidor
- Sincronizado código de produção com repositório

Novo workflow:
- Trabalhamos diretamente em /root/webmoney (symlink para /var/www/webmoney)
- Mudanças PHP são instantâneas
- Mudanças React requerem 'npm run build'
- Commit após validação funcional
2025-12-19 11:45:32 +01:00
marcoitaloesp-ai
accba4ec41
chore: atualizar scripts de deploy com referência ao Gitea 2025-12-19 08:33:05 +00:00
marcoitaloesp-ai
a90ff9d013
feat: Redesign cost center modal + document modal pattern
- Completely redesigned Cost Center create/edit modal with elegant wizard-style UI
- Added preview card, visual settings section, keyword tags with auto-assign badge
- Added missing i18n translations for costCenters (namePlaceholder, descPlaceholder, etc.)
- Documented modal design pattern in copilot-instructions.md for future reference
- Pattern includes: colors, structure, labels, cards, tags, switch components
2025-12-18 19:20:20 +00:00
marcoitaloesp-ai
3ebb19e9c6
fix: Add common.selectIcon i18n key 2025-12-18 19:15:20 +00:00
marcoitaloesp-ai
e70f5d169c
fix: Add common.selection i18n key 2025-12-18 19:14:01 +00:00
marcoitaloesp-ai
48e6857ef1
fix: Complete i18n translations for category modals
Added missing translations for ES, PT-BR and EN:
- categories.selectParent, noKeywords, namePlaceholder, descPlaceholder
- categories.visualSettings, autoCategorizationLabel
- categories.batchDescription, analyzingTransactions
- categories.noMatchesFoundTitle
- Improved existing translations for better UX
2025-12-18 19:09:28 +00:00
marcoitaloesp-ai
9c9d6443e7
v1.57.0: Redesign category modals + i18n updates + demo transactions fix
- Redesigned category create/edit modal with elegant wizard-style UI
- Redesigned batch categorization modal with visual cards and better preview
- Added missing i18n translations (common.continue, creating, remove)
- Added budgets.general and wizard translations for ES, PT-BR, EN
- Fixed 3 demo user transactions that were missing categories
2025-12-18 19:06:07 +00:00
marcoitaloesp-ai
6292b62315
feat: complete email system redesign with corporate templates
- Redesigned all email templates with professional corporate style
- Created base layout with dark header, status cards, and footer
- Updated: subscription-cancelled, account-activation, welcome, welcome-new-user, due-payments-alert
- Removed emojis and gradients for cleaner look
- Added multi-language support (ES, PT-BR, EN)
- Fixed email delivery (sync instead of queue)
- Fixed PayPal already-cancelled subscription handling
- Cleaned orphan subscriptions from deleted users
2025-12-18 00:44:37 +00:00
marcoitaloesp-ai
984855e36c
feat: Landing page pública + Registro com seleção de plano
- Nova Landing Page institucional em /
- Seções: Hero, Features, Pricing, FAQ, CTA, Footer
- Pricing integrado com API de planos
- Register.jsx agora suporta seleção de plano
- Parâmetro ?plan=slug na URL do registro
- Traduções EN, ES, PT-BR para landing
- PayPal configurado no servidor (sandbox)

Versão: 1.54.0
2025-12-17 19:44:12 +00:00
marcoitaloesp-ai
c99bca9404
v1.53.0: Fix admin middleware, deploy cnxifly pages from server 2025-12-17 17:42:46 +00:00
marcoitaloesp-ai
3a336eb692
feat: Admin user management + SaaS limits tested v1.51.0
- Add UserManagementController@store for creating users
- Add POST /api/admin/users endpoint
- Support user types: Free, Pro, Admin
- Auto-create 100-year subscription for Pro/Admin users
- Add user creation modal to Users.jsx
- Complete SaaS limit testing:
  - Free user limits: 1 account, 10 categories, 3 budgets, 100 tx
  - Middleware blocks correctly at limits
  - Error messages are user-friendly
  - Usage stats API working correctly
- Update SAAS_STATUS.md with test results
- Bump version to 1.51.0
2025-12-17 15:22:01 +00:00
marcoitaloesp-ai
679a1bc4b2
feat(subscriptions): Add PayPal integration for SaaS (Fase 3) v1.50.0
Backend:
- PayPalService with OAuth2, subscriptions, webhooks
- SubscriptionController with status, subscribe, confirm, cancel, invoices
- Webhook handlers for PayPal events (activated, cancelled, expired, payment)
- Config for PayPal credentials

Frontend:
- Pricing.jsx: Plans page with cards, FAQ, trust badges
- Billing.jsx: Subscription management, invoices list, cancel modal
- Added routes /pricing (public) and /billing (auth)
- Navigation links in Settings menu

Translations:
- pricing.* and billing.* keys in ES, PT-BR, EN
- nav.pricing, nav.billing

Ready for PayPal Sandbox testing once credentials are configured.
2025-12-17 10:56:54 +00:00
marcoitaloesp-ai
abaf0097c5
feat(profile): perfil completo para SaaS v1.48.0
- Expandir tabela users com campos para SaaS
- Adicionar: first_name, last_name, phone_country_code, phone
- Adicionar: accept_whatsapp, accept_emails, country, timezone, locale
- User Model: accessors fullName e fullPhone
- Profile.jsx: formulário completo com DDI, checkboxes, seletores
- Traduções i18n em ES, PT-BR, EN
- Fase 1 do roadmap SaaS concluída
2025-12-17 10:40:20 +00:00
marcoitaloesp-ai
38defe1060
v1.47.0 - Página Meu Perfil: editar nome, email e senha 2025-12-17 10:22:04 +00:00
marcoitaloesp-ai
19dcdce262
feat: Add daily due payments notification system with user preferences
## New Features
- Email notifications for overdue and upcoming payments
- User preferences page for notification settings
- Daily scheduler to send alerts at user-configured time
- Smart analysis: payable items, transfer suggestions between accounts

## Backend
- Migration for user_preferences table
- SendDuePaymentsAlert Artisan command
- DuePaymentsAlert Mailable with HTML/text templates
- UserPreferenceController with test-notification endpoint
- Scheduler config for notify:due-payments command

## Frontend
- Preferences.jsx page with notification toggle
- API service for preferences
- Route and menu link for settings
- Translations (PT-BR, EN, ES)

## Server
- Cron configured for Laravel scheduler

Version: 1.44.5
2025-12-17 09:57:40 +00:00
marcoitaloesp-ai
738730b549
v1.43.23 - FIX CRITICAL: Erro inicialização circular Dashboard 2025-12-16 20:21:30 +00:00
marcoitaloesp-ai
650ca0821a
v1.43.22 - FIX: Widget de projeção atualiza automaticamente 2025-12-16 20:17:38 +00:00
marcoitaloesp-ai
e92cc8cf1f
v1.43.19 - Revisão completa do modal de editar template recorrente 2025-12-16 18:15:11 +00:00
marcoitaloesp-ai
777fb32626
v1.43.18 - Hard delete de templates recorrentes 2025-12-16 18:04:59 +00:00
marcoitaloesp-ai
76978fbcfc
v1.43.14 - FIX: Tamanho de fonte dos badges de categoria em Recorrentes e Futuras 2025-12-16 17:08:45 +00:00
marcoitaloesp-ai
e29eacf5c7
v1.43.13 - Padronização visual de badges em relatórios 2025-12-16 17:03:14 +00:00
marcoitaloesp-ai
891df889ec
v1.43.12 - FIX: Badge de Débito em vermelho nas transações recorrentes 2025-12-16 16:57:17 +00:00
marcoitaloesp-ai
efbd5e8aa2
v1.43.11 - Filtro de período personalizável em relatórios 2025-12-16 16:47:03 +00:00
marcoitaloesp-ai
bb06ca8fae
v1.43.9 - Drill-down de 3 níveis em Centros de Custo (Centro → Categoria → Subcategoria) 2025-12-16 15:34:02 +00:00
marcoitaloesp-ai
db87da95c1
FIX: Drill-down de categorias agora recarrega corretamente
- Adicionado selectedCategory nas dependências do useCallback
- Criado useEffect separado para recarregar quando categoria muda
- Removido loadData() dos handlers (agora feito pelo useEffect)

Isso resolve o problema de estado assíncrono onde setSelectedCategory
não atualizava antes de loadData() ser chamado.
2025-12-16 15:17:46 +00:00
marcoitaloesp-ai
7b9345dc80
v1.43.8 - Drill-down de subcategorias em relatórios
ADDED:
- Relatório Por Categoria agora suporta drill-down clicável
- Clicar em categoria pai exibe gráfico com suas subcategorias
- Botão Voltar para retornar às categorias principais
- Hover visual em linhas de tabela e cards clicáveis
- Backend aceita parent_id como parâmetro em /reports/by-category

CHANGED:
- Backend: query padrão mostra apenas categorias pai (parent_id IS NULL)
- Backend: nova query para subcategorias quando parent_id é fornecido
- Frontend: estado selectedCategory para rastrear navegação
- Frontend: onClick handlers em gráfico, tabela e cards

TRANSLATION:
- pt-BR: Distribuição de Subcategorias
- es: Distribución de Subcategorías
- en: Subcategory Distribution
2025-12-16 15:07:44 +00:00
marcoitaloesp-ai
b0724d7b2c
Fix: Garantir herança de cor em subcategorias
- Usar displayColor ao passar cor para filhos (não category.color)
- Fallback para cor padrão se categoria não tiver cor
- Garante que todas as subcategorias usem a mesma cor da categoria pai
2025-12-16 13:20:02 +00:00
marcoitaloesp-ai
1637e5da0c
v1.43.6 - Modal de detalhes Liabilities otimizado para mobile
- Modal fullscreen mobile, xl desktop
- Summary cards: Grid 2x2 mobile, fontes compactas
- Taxas: Grid 3 colunas com labels curtos (Mensal/Anual/Total)
- Progress bar: 12px mobile, fontes reduzidas
- Parcelas: Cards layout mobile substituindo tabela
- Cards incluem: status, valores, juros, taxas, reconciliação, botões
- Footer: Botão full-width mobile
- i18n: Adicionadas traduções 'monthly', 'annual', 'total'
2025-12-16 13:02:58 +00:00
marcoitaloesp-ai
454ef516f4
Fix: Adicionar chave i18n 'common.import' faltante em pt-BR e es 2025-12-16 12:58:31 +00:00
marcoitaloesp-ai
d84da4b6b7
v1.43.5 - Otimização mobile da página Liabilities
- Header responsivo: flex-column mobile, botão full-width
- Summary cards: Grid 2x2 mobile, fontes compactas (0.65-0.9rem)
- Filtros: Layout 50/50 sem label em mobile
- Cards contratos: col-12 mobile, padding reduzido, fontes ajustadas
- Progress bar: 6px mobile vs 8px desktop
- Botões e valores: fontes menores (0.75rem) para melhor legibilidade
2025-12-16 12:56:50 +00:00
marcoitaloesp-ai
5f3bf18b99
v1.43.4 - Padronização de badges e botões em todo o sistema
- Badges: Estilo translúcido uniforme (bg-opacity-25 + text-color) via CSS global
- Afetados: RecurringTransactions, Accounts, Categories, TransactionsByWeek
- Widgets: UpcomingWidget, OverdueWidget, CalendarWidget, OverpaymentsAnalysis
- Botões: Estilo outline padronizado (btn-outline-*) em RecurringTransactions
- Simplificação: Remover classes redundantes dos JSX
2025-12-16 12:48:08 +00:00
marcoitaloesp-ai
9800f987df
v1.43.3 - Mobile: Transações + CategorySelector corrigido 2025-12-16 12:32:15 +00:00
marcoitaloesp-ai
be7bed5c99
v1.43.2 - Mobile: Contas Passivo otimizadas 2025-12-16 11:43:59 +00:00
marcoitaloesp-ai
a244632e0a
v1.43.1 - Fix: Espaços em branco mobile eliminados + Textos compactos 2025-12-16 11:32:44 +00:00
marcoitaloesp-ai
e753c65cf0
v1.43.0 - Mobile UX: Widgets Projeção e Sobrepagamentos otimizados 2025-12-16 10:59:25 +00:00
marcoitaloesp-ai
1186faca3c
v1.42.0 - Mobile UX: Navegação entre semanas no calendário + Widgets colapsáveis consistentes 2025-12-16 10:12:47 +00:00
marcoitaloesp-ai
3ba4bed1c4
🎨 v1.40.0 - Sidebar Mobile Overlay: UX Reimaginada
Substituída sidebar comprimida por overlay slide-in moderna:

MOBILE (<768px):
- Sidebar ESCONDIDA por padrão (left: -100%)
- Conteúdo em tela cheia (app-main margin-left: 0, width: 100%)
- Hamburger menu (☰) 44x44px no header
- Click hamburger: sidebar slide-in de 280px sobre conteúdo
- Backdrop escuro (rgba(0,0,0,0.5)) para fechar ao clicar fora
- Animação: cubic-bezier(0.4, 0, 0.2, 1) 0.3s
- Shadow: 4px 0 12px rgba(0,0,0,0.5) quando aberta
- Classe .mobile-open para estado aberto
- Auto-close ao redimensionar para desktop

DESKTOP (>=769px):
- Mantém comportamento atual (sidebar fixa colapsável)
- Hamburger e backdrop escondidos
- Toggle colapsa/expande (não esconde)

COMPONENTE (Layout.jsx):
- Estado sidebarOpen (mobile) separado de sidebarCollapsed (desktop)
- isMobile() helper para detectar <768px
- toggleSidebar() inteligente (mobile: open/close | desktop: collapse/expand)
- handleBackdropClick() fecha sidebar mobile
- useEffect cleanup ao resize

CSS:
- @media (max-width: 768px) com sidebar overlay
- @media (min-width: 769px) esconde mobile-only elements
- Removidas regras conflitantes de sidebar 56px/50px
- Safe area: padding-left/right 0 em body para permitir overlay
- Touch target hamburger: 44x44px com hover effect

Deploy: frontend/dist
2025-12-16 08:35:10 +00:00