Commit Graph

110 Commits

Author SHA1 Message Date
Felipe Coutinho
c0fb11f89c refactor(inbox): remove process dialog e integra fluxo ao lancamento-dialog
- Remove process-dialog.tsx (componente não mais utilizado)
- Simplifica inbox-page.tsx removendo estados e lógica do process dialog
- Atualiza inbox-details-dialog para usar lancamento-dialog diretamente
- Adiciona suporte a dados iniciais do inbox no lancamento-dialog
- Move campos de metadata da inbox para o form de lançamento
- Remove campo currency não utilizado do schema
- Atualiza actions e data com melhor tratamento de erros
2026-01-26 13:31:37 +00:00
Felipe Coutinho
18471f2225 refactor(inbox): simplifica layout e formatação dos componentes
- Remove header duplicado da página (agora no layout)
- Melhora formatação do código com linhas mais curtas
- Reorganiza imports para consistência
2026-01-23 15:41:52 +00:00
Felipe Coutinho
ea3e6cdafc feat(inbox): adiciona layout com título e descrição da página
- Adiciona componente PageDescription com ícone e subtítulo
- Define metadata com título para SEO
2026-01-23 15:41:44 +00:00
Felipe Coutinho
2d62fd0302 fix(api): use hash-based token validation instead of JWT
Changed all API endpoints to validate os_xxx tokens via SHA-256 hash
lookup in the database instead of expecting JWT format.

This allows tokens generated in the settings page (Ajustes → Dispositivos)
to work correctly with the Android app.

- /api/auth/device/verify: validates os_xxx tokens via hash
- /api/inbox: uses hash-based auth
- /api/inbox/batch: uses hash-based auth
- No token expiration (tokens valid until revoked)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 13:14:54 +00:00
Felipe Coutinho
b2ba3efd63 feat(ajustes): add API tokens management UI for OpenSheets Companion
Add a new "Dispositivos" tab in settings page that allows users to:
- Generate new API tokens for connecting Android devices
- View connected devices with last used time and IP
- Revoke tokens to disconnect devices

This provides the web UI needed for users to obtain tokens
for the OpenSheets Companion Android app.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 13:02:00 +00:00
Felipe Coutinho
97662d5d34 feat(api): update health endpoint for OpenSheets Companion compatibility
- Add app name and version to health response
- Rename 'service' to 'name' for better semantics
- Rename 'error' to 'message' for consistency
- Update documentation to reflect companion app usage
2026-01-23 12:12:40 +00:00
Felipe Coutinho
9ff42ecbe7 feat(inbox): add Caixa de Entrada page for managing companion notifications
- Create inbox page with pending items management:
  - InboxCard: displays notification summary with parsed data
  - InboxDetailsDialog: view full notification details
  - ProcessDialog: convert notification to transaction (lancamento)

- Add server actions for inbox operations:
  - getInboxItems: fetch pending inbox items
  - processInboxItem: create lancamento from inbox item
  - discardInboxItem: discard unwanted notifications

- Add navigation link to sidebar under 'Gestão Financeira'
- Add revalidation config for inbox-related paths
2026-01-23 12:12:22 +00:00
Felipe Coutinho
48d9eea8a9 feat(api): add inbox endpoints for receiving companion notifications
- POST /api/inbox - Create single inbox item from notification
- POST /api/inbox/batch - Create multiple inbox items at once (max 50)

- Validates input with Zod schemas
- Requires API token authentication
- Returns created/updated items with IDs for client sync
2026-01-23 12:11:30 +00:00
Felipe Coutinho
2532f2d6ad feat(auth): add API token authentication for OpenSheets Companion
- Implement JWT-based authentication system for device access
  - Access tokens (7 day expiry) and refresh tokens (90 day expiry)
  - HMAC-SHA256 signing with timing-safe comparison
  - Token hashing with SHA-256 for secure storage

- Add device authentication endpoints:
  - POST /api/auth/device/token - Login with email/password, get tokens
  - POST /api/auth/device/refresh - Refresh access token
  - POST /api/auth/device/verify - Verify token validity
  - GET /api/auth/device/tokens - List user's API tokens
  - DELETE /api/auth/device/tokens/[id] - Revoke specific token

- Track token usage (last used timestamp and IP)
2026-01-23 12:11:19 +00:00
Felipe Coutinho
29a457ad36 feat(database): add api_tokens and inbox_items tables for OpenSheets Companion
- Add api_tokens table to store device authentication tokens
  - Includes token hash, prefix, expiration, and usage tracking
  - Cascades on user deletion

- Add inbox_items table to store notifications from companion app
  - Stores original notification data and parsed transaction info
  - Tracks processing status (pending, processed, discarded)
  - Links to created lancamento when processed

- Add TypeScript types: ApiToken, NewApiToken, InboxItem, NewInboxItem
- Add inbox Zod schemas for input validation
2026-01-23 12:10:05 +00:00
Felipe Coutinho
c2527df191 feat(lancamentos): exibe resumo de parcelas e recorrência no formulário
- Adiciona cálculo e exibição do valor por parcela no select (ex: "3x de R$ 33,33")
- Mostra resumo dentro do trigger do select ao invés de texto externo
- Exibe valores calculados nas opções do dropdown quando há valor preenchido
- Renomeia label "Lançamento fixo" para "Repetirá"
- Aumenta opções de recorrência de 24 para 47 meses
- Reduz espaçamento e altura do textarea de anotação para layout mais compacto

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 18:28:39 +00:00
Felipe Coutinho
1deaa80f48 refactor(lancamentos): melhora layout e UX da tabela
- Adiciona coluna de categoria com ícone
- Move data de compra para dentro da célula de nome
- Simplifica exibição de pagador removendo Badge
- Refatora coluna conta/cartão com tooltips informativos
- Adiciona suporte a liquidação para Transferência bancária e Pré-Pago
- Remove imports não utilizados (RiBankCard2Line, RiBankLine)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 12:38:52 +00:00
Felipe Coutinho
a57c73bd11 feat(lancamentos): adiciona suporte a ícone de categoria
Adiciona campo categoriaIcon ao tipo LancamentoItem e seu mapeamento
no page-helpers para exibir ícones das categorias na tabela.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 12:38:47 +00:00
Felipe Coutinho
ca0242d380 chore: remove implementação do changelog
- Remove página /changelog e seus arquivos
- Remove componentes ChangelogLink e ChangelogList
- Remove referência do header-dashboard
2026-01-20 16:41:05 +00:00
Felipe Coutinho
84ca5e64fd refactor(dashboard): usa DashboardGridEditable na página
- Substitui DashboardGrid por DashboardGridEditable
- Busca preferências de widgets do banco de dados
2026-01-20 16:37:00 +00:00
Felipe Coutinho
741e2864b4 chore(deps): adiciona @dnd-kit para drag-and-drop 2026-01-20 16:36:53 +00:00
Felipe Coutinho
74a9081601 chore(db): adiciona campo dashboardWidgets em userPreferences
- Novo campo jsonb para armazenar ordem e widgets ocultos
- Migração 0009_add_dashboard_widgets criada
2026-01-20 16:36:43 +00:00
Felipe Coutinho
540b250a47 feat(dashboard): adiciona widgets movíveis e ocultáveis
- Cria SortableWidget com @dnd-kit para drag-and-drop
- Cria DashboardGridEditable com modo de edição
- Cria WidgetSettingsDialog para gerenciar visibilidade
- Cria server actions para persistir preferências
2026-01-20 16:36:33 +00:00
Felipe Coutinho
d209b7401c style: corrige formatação de indentação no layout 2026-01-20 15:22:23 +00:00
Felipe Coutinho
54ffd7f914 refactor(top-estabelecimentos): atualiza layout e usa componente Progress
- Cria layout.tsx com PageDescription
- Substitui barras de progresso customizadas por Progress
- Remove label 'Período:' do filtro
- Ajusta espaçamento do filtro na página
2026-01-20 15:21:52 +00:00
Felipe Coutinho
c185c7be42 refactor(cartoes): adiciona layout e limpa página de relatório
- Cria layout.tsx com PageDescription
- Remove header duplicado da página
- Passa dados do cartão para CardUsageChart
2026-01-20 15:21:39 +00:00
Felipe Coutinho
0e8f9dd955 fix(cartoes): ordena faturas do mais recente para mais antigo
- Inverte ordem de exibição das faturas
- Adiciona ícone e title_font no header
2026-01-20 15:21:27 +00:00
Felipe Coutinho
8b8257e095 refactor(cartoes): atualiza widgets para seguir padrão visual
- Refatora CardTopExpenses com rank, badges e barras de progresso
- Refatora CardCategoryBreakdown com cores e ícones de categoria
- Adiciona ícone e title_font no CardsOverview
- Usa WidgetEmptyState e MoneyValues nos componentes
2026-01-20 15:21:15 +00:00
Felipe Coutinho
2caf86871a feat(cartoes): adiciona filtro de período e logo no gráfico de uso
- Adiciona filtros de 3, 6 e 12 meses no CardUsageChart
- Exibe logo e nome do cartão no header do gráfico
- Atualiza fetchCardDetail para buscar 12 meses de dados
2026-01-20 15:21:02 +00:00
Felipe Coutinho
9f0585e3bb feat(header): adiciona link para changelog no dashboard
- Cria componente ChangelogLink com tooltip
- Adiciona link para /changelog ao lado do feedback
- Segue o padrão dos componentes existentes
2026-01-20 15:20:49 +00:00
Felipe Coutinho
3086aa34c4 chore: Update pnpm lockfile. 2026-01-20 13:53:05 +00:00
Felipe Coutinho
b871e68437 refactor(contas): melhorar modal de transferência entre contas
- Usar DatePicker e PeriodPicker consistentes com modal de lançamentos
- Adicionar logos das contas nos selects de origem e destino
- Usar ContaCartaoSelectContent para exibição padronizada

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 13:52:04 +00:00
Felipe Coutinho
5b8f8fc42b feat: adicionar página Top Estabelecimentos
- Criar página /top-estabelecimentos com análise de gastos por local
- Adicionar componentes: establishments-list, highlights-cards, summary-cards
- Adicionar filtro de período personalizado
- Criar função de busca de dados para top estabelecimentos

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 13:43:35 +00:00
Felipe Coutinho
c55b808bb6 feat(relatorios): adicionar página de relatório de cartões
- Criar página /relatorios/cartoes com visão geral dos cartões
- Adicionar componentes: cards-overview, card-usage-chart, card-top-expenses
- Adicionar componentes: card-category-breakdown, card-invoice-status
- Criar função de busca de dados para relatório de cartões

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 13:43:26 +00:00
Felipe Coutinho
7670b26a8c chore(deps): atualizar dependências
- @ai-sdk/anthropic: 3.0.15 → 3.0.16
- @openrouter/ai-sdk-provider: 1.5.4 → 2.0.0
- ai: 6.0.39 → 6.0.42
- better-auth: 1.4.10 → 1.4.16
- motion: 12.26.2 → 12.27.3
- next: 16.1.1 → 16.1.4
- pg: 8.16.3 → 8.17.1
- resend: 6.7.0 → 6.8.0
- @types/node: 25.0.3 → 25.0.9
- @types/react: 19.2.7 → 19.2.8
- eslint-config-next: 16.1.1 → 16.1.4

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 13:43:17 +00:00
Felipe Coutinho
39ef33ef19 feat(sidebar): adicionar link para Relatório de Cartões
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 13:43:08 +00:00
Felipe Coutinho
478bd0c267 feat(lancamentos): separar botões Nova Receita e Nova Despesa
- Substituir botão único "Novo lançamento" por dois botões separados
- Adicionar ícones coloridos (verde para Receita, vermelho para Despesa)
- Adicionar suporte a defaultTransactionType no dialog
- Atualizar título e descrição do dialog conforme tipo selecionado
- Ocultar campo de tipo de transação quando tipo é pré-definido

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 13:43:00 +00:00
Felipe Coutinho
9b08a8e020 style(dashboard): adicionar ícone ao link "Ver mais" no widget Top Estabelecimentos
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 13:40:21 +00:00
Felipe Coutinho
9fcb707be7 feat(dashboard): adicionar ícones coloridos nos widgets de categorias
- Criar utilitário centralizado para cores de categorias (lib/utils/category-colors.ts)
- Aplicar ícones coloridos no widget de despesas por categoria
- Aplicar ícones coloridos no widget de receitas por categoria
- Refatorar top-categories para usar utilitário centralizado

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 13:40:14 +00:00
Felipe Coutinho
524865f55e feat(lancamentos): melhorar modal de adicionar múltiplos lançamentos
- Remover campo "condição" desabilitado e informar que lançamentos são sempre à vista
- Mover botão de adicionar linha para ao lado de cada transação (estilo compacto)
- Unificar select de conta/cartão com grupos separados
- Adicionar suporte a defaultCartaoId para contexto de fatura de cartão

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 13:40:04 +00:00
Felipe Coutinho
af36e5474d chore(deps): atualizar AI SDK, motion e baseline-browser-mapping
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 16:56:17 +00:00
Felipe Coutinho
bc28c30b58 style: ajustes visuais em notificação, timeline e layout
- Alterar ícone de notificação para outline (RiNotification3Line)
- Mudar cor da timeline de parcelas de azul para verde
- Reduzir padding do month picker (p-5 → p-4)
- Remover md:py-6 do layout dashboard

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 16:56:13 +00:00
Felipe Coutinho
75e8b992f0 fix(lancamentos): manter data de compra original em todas as parcelas
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 16:56:09 +00:00
Felipe Coutinho
fc7083d95e perf(dashboard): usar Promise.all para fetching paralelo de dados
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 16:56:05 +00:00
Felipe Coutinho
6b033c79eb feat: sincronizar nome entre usuário e pagador admin
- Ao atualizar nome no perfil, sincronizar com pagador admin
- Ao editar pagador admin, sincronizar com nome do usuário

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 16:56:01 +00:00
Felipe Coutinho
6a45a5110d feat: implementar melhorias em importação, compartilhamento e contas inativas
- Corrigir cálculo de valor na importação de lançamentos parcelados
    - Exibir valor total (parcela × quantidade) ao invés do valor da parcela individual
    - Permite recriar parcelamentos importados com valor correto

  - Permitir que usuários compartilhados se descompartilhem de pagadores
    - Adicionar componente PagadorLeaveShareCard na aba Perfil
    - Usuário filho pode sair do compartilhamento sem precisar do usuário pai
    - Manter autorização bidirecionada na action de remoção de share

  - Implementar submenu "Inativos" para contas bancárias
    - Criar página /contas/inativos seguindo padrão de cartões
    - Filtrar contas ativas e inativas em páginas separadas
    - Adicionar ícone e navegação no sidebar
2026-01-11 22:44:20 +00:00
Felipe Coutinho
147857c5bd feat: implementar melhorias em filtros, orçamentos e exportação
Refatoração de Filtros:
  - Move filtros select para Drawer lateral direito
  - Mantém busca fora do Drawer para acesso rápido
  - Adiciona indicador visual de filtros ativos
  - Implementa aplicação instantânea de filtros
  - Adiciona border-dashed e aumenta input de busca

  Cópia de Orçamentos:
  - Implementa funcionalidade de copiar orçamentos do mês anterior
  - Adiciona server action com validações e tratamento de erros
  - Cria modal de confirmação para a ação
  - Evita duplicações automáticas

  Exportação de Lançamentos:
  - Adiciona exportação em CSV, XLSX e PDF
  - Integra botão de exportação nos filtros
  - Segue padrão de Relatórios de Categorias
  - Inclui formatação específica por formato
2026-01-05 15:49:16 +00:00
Felipe Coutinho
901e423959 docs: expandir documentação do README e adicionar importação em massa de lançamentos
- Expande README.md com estatísticas detalhadas do projeto (200 componentes, 15+ tabelas, 20+ widgets)
  - Adiciona descrição completa da stack técnica e versões
  - Documenta estrutura de diretórios de forma abrangente
  - Inclui diagramas de schema de banco de dados e fluxos de dados
  - Adiciona seção de destaques e funcionalidades recentes
  - Implementa diálogo de importação em massa de lançamentos (bulk-import-dialog.tsx)
  - Adiciona fontes AISans (Regular e Semibold) ao projeto
  - Remove classe bg-muted das páginas de autenticação
  - Adiciona /docs ao .gitignore
  - Limpa código não utilizado em componentes de lançamentos e páginas do dashboard
  - Atualiza dependências no package.json
2026-01-05 13:01:18 +00:00
Felipe Coutinho
4237062bde feat: implementar relatórios de categorias e substituir seleção de período por picker visual
BREAKING CHANGE: Remove feature de seleção de período das preferências do usuário

  Alterações principais:

  - Adiciona sistema completo de relatórios por categoria
    - Cria página /relatorios/categorias com filtros e visualizações
    - Implementa tabela e gráfico de evolução mensal
    - Adiciona funcionalidade de exportação de dados
    - Cria skeleton otimizado para melhor UX de loading

  - Remove feature de seleção de período das preferências
    - Deleta lib/user-preferences/period.ts
    - Remove colunas periodMonthsBefore e periodMonthsAfter do schema
    - Remove todas as referências em 16+ arquivos
    - Atualiza database schema via Drizzle

  - Substitui Select de período por MonthPicker visual
    - Implementa componente PeriodPicker reutilizável
    - Integra shadcn MonthPicker customizado (português, Remix icons)
    - Substitui createMonthOptions em todos os formulários
    - Mantém formato "YYYY-MM" no banco de dados

  - Melhora design da tabela de relatórios
    - Mescla colunas Categoria e Tipo em uma única coluna
    - Substitui badge de tipo por dot colorido discreto
    - Reduz largura da tabela em ~120px
    - Atualiza skeleton para refletir nova estrutura

  - Melhorias gerais de UI
    - Reduz espaçamento entre títulos da sidebar (p-2 → px-2 py-1)
    - Adiciona MonthNavigation para navegação entre períodos
    - Otimiza loading states com skeletons detalhados
2026-01-04 03:03:09 +00:00
Felipe Coutinho
d192f47bc7 chore: remove unused changelog link from sidebar navigation 2026-01-03 14:36:19 +00:00
Felipe Coutinho
fd817683ca feat: implementar sistema de preferências do usuário e refatorar changelog
Adiciona sistema completo de preferências de usuário:
  - Cria tabela userPreferences no schema com campos disableMagnetlines, periodMonthsBefore e periodMonthsAfter
  - Implementa página de Ajustes com abas (Preferências, Alterar nome, Senha, E-mail, Deletar conta)
  - Adiciona componente PreferencesForm para configuração de magnetlines e períodos de exibição
  - Propaga periodPreferences para todos os componentes de lançamentos e calendário

  Refatora sistema de changelog:
  - Remove implementação anterior baseada em JSON estático
  - Adiciona nova página de changelog dinâmica em app/(dashboard)/changelog
  - Adiciona componente changelog-list.tsx
  - Remove arquivos obsoletos (changelog-notification, actions, data, utils, scripts)

  Adiciona controle de saldo inicial em contas:
  - Novo campo excludeInitialBalanceFromIncome em contas
  - Permite excluir saldo inicial do cálculo de receitas
  - Atualiza queries de lançamentos para respeitar esta configuração

  Melhorias adicionais:
  - Adiciona componente ui/accordion.tsx do shadcn/ui
  - Refatora formatPeriodLabel para displayPeriod centralizado
  - Propaga estabelecimentos para componentes de lançamentos
  - Remove variável DB_PROVIDER obsoleta do .env.example e documentação
  - Adiciona 6 migrações de banco de dados (0003-0008)
2026-01-03 14:18:03 +00:00
Felipe Coutinho
3eca48c71a feat: adicionar página de anotações arquivadas e componente de notificação
- Implementa a página de anotações arquivadas, que busca as notas
  arquivadas do usuário e as exibe utilizando o componente NotesPage.

- Cria o componente NotificationBell para gerenciar e exibir
  notificações de pagamentos, incluindo a formatação de datas e
  valores monetários. O componente também apresenta um sistema de
  tooltip e dropdown para interação do usuário.
2025-12-24 19:36:39 +00:00
Felipe Coutinho
e7cb9c9db1 chore: remover seções vazias de mudanças de código
Este commit remove seções vazias de mudanças de código do arquivo de
mudanças. Isso ajuda a manter o histórico de mudanças mais limpo e
organizado, facilitando a leitura e a compreensão das alterações
realizadas no projeto.
2025-12-16 23:20:47 +00:00
Felipe Coutinho
0767636eed feat(dashboard): ajustar layout e estilos
- Adiciona o PrivacyProvider ao layout do dashboard
- Atualiza variáveis de cor no CSS para o tema
- Modifica largura máxima de elementos no componente de tabela
- Remove fonte antropic-sans e substitui por Barlow
- Ajusta classes de estilo em componentes de cartão e sidebar
2025-12-11 17:43:33 +00:00
Felipe Coutinho
0744991edd chore: remove unused code and clean up imports
- Eliminado código não utilizado em vários arquivos
- Organizado e limpo as importações para melhorar a legibilidade
2025-12-10 16:53:19 +00:00