Files
sigrhapf/Documents/sigfip/sigefp/ANALISE_PROFUNDA_FRONTEND_TESOURO_V2.md
2026-05-19 11:45:46 +00:00

14 KiB

🔍 Análise Profunda do Frontend - Módulo Tesouraria (Versão 2.0)

Data: 2025-01-27
Objetivo: Verificação completa do código frontend do módulo Tesouraria, identificando gaps, inconsistências e oportunidades de melhoria.


📋 Sumário Executivo

Pontos Positivos

  1. TreasuryPlanPage existe e está funcional - Usa react-query, tem UI moderna
  2. CashAccountFormModal tem suporte parcial para CUT - Campos parentId e category implementados
  3. Estrutura modular bem organizada - Separação clara entre páginas, componentes e serviços
  4. Uso consistente de componentes reutilizáveis - ServerDataTable, PageHeader, StatusBadge

⚠️ Problemas Críticos Identificados

  1. TreasuryPlanPage NÃO está no menu de navegação - Funcionalidade existe mas não é acessível
  2. Campos IBAN, SWIFT, overdraftLimit ausentes no frontend - Backend tem, frontend não usa
  3. TreasuryPlanController ausente no backend - Endpoints podem estar em outro lugar ou não existir
  4. Inconsistência de padrões - Algumas páginas usam react-query, outras useState/useEffect
  5. Funcionalidades não implementadas - TreasuryEntriesPage tem botão que só mostra toast

🎯 Análise Detalhada por Componente

1. TreasuryPlanPage (src/modules/treasury/pages/TreasuryPlanPage.tsx)

Status: IMPLEMENTADO MAS NÃO ACESSÍVEL

Pontos Fortes:

  • Usa react-query (padrão moderno)
  • UI bem estruturada com cards informativos
  • Integração com treasuryPlanService
  • Componente TreasuryPlanList separado e reutilizável
  • Validação de formulário
  • Feedback visual com badges de status

Problemas Identificados:

  • CRÍTICO: Não está no menu de navegação (navigation.ts)
  • CRÍTICO: Rota existe em App.tsx mas não há link no menu
  • ⚠️ MÉDIO: Não verifica se o backend tem TreasuryPlanController
  • ⚠️ MÉDIO: treasuryPlanService.findActivePlan pode falhar se endpoint não existir

Código Relevante:

// navigation.ts - FALTA ADICIONAR:
{
  name: 'Planos de Tesouraria',
  href: '/treasury/plans',
  icon: Calendar, // ou outro ícone apropriado
}

Recomendações:

  1. URGENTE: Adicionar item no menu de navegação
  2. Verificar se backend tem TreasuryPlanController com endpoints:
    • POST /api/treasury/plans
    • PUT /api/treasury/plans/{id}/approve
    • GET /api/treasury/plans/active?date={date}
    • GET /api/treasury/plans/status/{status}

2. CashAccountFormModal (src/modules/treasury/components/CashAccountFormModal.tsx)

Status: PARCIALMENTE IMPLEMENTADO

Pontos Fortes:

  • Usa react-hook-form com zod para validação
  • Campos CUT implementados (parentId, category)
  • Validação condicional (banco obrigatório se tipo = BANK_ACCOUNT)
  • UI moderna com shadcn/ui

Problemas Identificados:

  • CRÍTICO: Faltam campos iban, swiftCode, overdraftLimit que existem no backend
  • CRÍTICO: Frontend CashAccountDTO não tem esses campos (ver types/treasury.ts)
  • ⚠️ MÉDIO: Campo accountingCode também existe no backend mas não no frontend
  • ⚠️ MÉDIO: Campo accountType (RECEITA/DESPESA/MISTA) não implementado

Comparação Backend vs Frontend:

Campo Backend (CreateCashAccountDTO) Frontend (CreateCashAccountDTO) Status
iban Sim (max 34) Não FALTA
swiftCode Sim (max 11) Não FALTA
overdraftLimit Sim (BigDecimal) Não FALTA
accountingCode Sim (max 50) Não FALTA
accountType Sim (RECEITA/DESPESA/MISTA) Não FALTA
parentId Sim Sim OK
category Sim Sim OK

Recomendações:

  1. URGENTE: Adicionar campos iban, swiftCode, overdraftLimit no formulário
  2. URGENTE: Atualizar CashAccountDTO e CreateCashAccountDTO em types/treasury.ts
  3. Adicionar validação para IBAN (formato ISO)
  4. Adicionar campo accountType se necessário para classificação contábil

3. CashAccountsPage (src/modules/treasury/pages/CashAccountsPage.tsx)

Status: FUNCIONAL MAS INCOMPLETO

Pontos Fortes:

  • Listagem funcional
  • Integração com CashAccountFormModal
  • Exibe categoria CUT na tabela
  • Formatação de valores monetários

Problemas Identificados:

  • ⚠️ MÉDIO: Não exibe campos iban, swiftCode na tabela (mesmo que existam no backend)
  • ⚠️ MÉDIO: Não mostra hierarquia CUT (árvore de contas pai/filho)
  • ⚠️ MÉDIO: Funcionalidade de edição não implementada (só mostra toast.info)
  • ⚠️ BAIXO: Não há visualização de saldo consolidado CUT

Recomendações:

  1. Adicionar colunas opcionais para IBAN e SWIFT (com toggle para mostrar/ocultar)
  2. Implementar visualização hierárquica (árvore) para contas CUT
  3. Implementar funcionalidade de edição
  4. Adicionar indicador visual de saldo consolidado para contas CUT

4. TreasuryEntriesPage (src/modules/treasury/pages/TreasuryEntriesPage.tsx)

⚠️ Status: FUNCIONALIDADE NÃO IMPLEMENTADA

Problemas Identificados:

  • CRÍTICO: Botão "Nova Entrada" só mostra toast.info('Funcionalidade em desenvolvimento')
  • ⚠️ MÉDIO: Não há modal ou formulário para criar entradas
  • ⚠️ MÉDIO: Não há integração com treasuryService.createTreasuryEntry

Código Problemático:

<Button onClick={() => toast.info('Funcionalidade em desenvolvimento')}>
  <Plus className="h-4 w-4 mr-2" />
  Nova Entrada
</Button>

Recomendações:

  1. URGENTE: Criar TreasuryEntryFormModal similar a CreateBudgetEntryModal
  2. Implementar formulário com campos:
    • Tipo de entrada (PAYMENT_AUTHORIZATION, PAYMENT_EXECUTION, etc.)
    • Valor
    • Data da transação
    • Conta de caixa
    • Referência de documento
    • Descrição
  3. Integrar com treasuryService.createTreasuryEntry

5. TreasuryPaymentsPage (src/modules/treasury/pages/TreasuryPaymentsPage.tsx)

⚠️ Status: MODAL INLINE (NÃO REUTILIZÁVEL)

Problemas Identificados:

  • ⚠️ MÉDIO: Modal criado inline (linhas 172-247) ao invés de componente separado
  • ⚠️ MÉDIO: Não segue padrão de outros modais (ex: PaymentBatchFormModal)
  • ⚠️ BAIXO: Código duplicado (estrutura de modal repetida)

Comparação com Padrão:

  • PaymentBatchFormModal - Componente separado e reutilizável
  • TreasuryPaymentsPage - Modal inline

Recomendações:

  1. Extrair modal para componente TreasuryPaymentFormModal.tsx
  2. Seguir padrão de PaymentBatchFormModal
  3. Usar shadcn/ui Dialog ao invés de HTML puro

6. PaymentBatchesPage (src/modules/treasury/pages/PaymentBatchesPage.tsx)

Status: BEM IMPLEMENTADO

Pontos Fortes:

  • Usa componente PaymentBatchFormModal separado
  • Filtros avançados com AdvancedFilters
  • Gerenciamento de estado adequado
  • Tratamento de erros

Sem problemas críticos identificados.


7. PaymentOrdersPage (src/modules/treasury/pages/PaymentOrdersPage.tsx)

⚠️ Status: TODO ENCONTRADO

Problemas Identificados:

  • ⚠️ BAIXO: TODO encontrado na linha 142: // TODO: Implementar visualização de detalhes
  • ⚠️ MÉDIO: Funcionalidade de visualização de detalhes não implementada

Recomendações:

  1. Implementar modal de detalhes da ordem de pagamento
  2. Exibir informações completas: valores brutos/líquidos, impostos, status de aprovação

8. BankReconciliationPage (src/modules/treasury/pages/BankReconciliationPage.tsx)

⚠️ Status: TODO ENCONTRADO

Problemas Identificados:

  • ⚠️ BAIXO: TODO encontrado na linha 74: const userId = 'current-user-id'; // TODO: pegar do contexto
  • ⚠️ MÉDIO: Não usa contexto de autenticação para obter usuário atual

Recomendações:

  1. Integrar com AuthContext ou useAuth() hook
  2. Remover hardcoded userId

🔄 Inconsistências de Padrões

1. Gerenciamento de Estado

Padrão A (Moderno - React Query):

  • TreasuryPlanPage usa useQuery e useMutation

Padrão B (Tradicional - useState/useEffect):

  • CashAccountsPage
  • PaymentBatchesPage
  • TreasuryEntriesPage
  • TreasuryPaymentsPage

Recomendação:

  • Migrar todas as páginas para react-query para:
    • Cache automático
    • Refetch automático
    • Melhor tratamento de loading/error states
    • Sincronização entre componentes

2. Estrutura de Modais

Padrão A (Componente Separado):

  • PaymentBatchFormModal
  • CashAccountFormModal
  • BudgetLineFormModal (Budget module)

Padrão B (Modal Inline):

  • TreasuryPaymentsPage (linhas 172-247)

Recomendação:

  • Extrair todos os modais inline para componentes separados

3. Tratamento de Erros

Padrão Consistente:

  • Todas as páginas usam toast.error() do sonner
  • Try/catch adequado

Sem problemas identificados.


📊 Comparação com Módulo Budget

O que Budget faz melhor:

  1. Modais bem estruturados:

    • CreateBudgetEntryModal - Modal completo com validação
    • BudgetLineEntriesModal - Modal complexo com histórico
    • BudgetLineFormModal - Formulário robusto
  2. Visualizações avançadas:

    • BudgetExecutionChart - Gráficos de execução
    • Exportação PDF/Excel
  3. Integração com hooks:

    • useMinistries
    • useOrgUnits

O que Treasury pode melhorar baseado em Budget:

  1. Criar hooks customizados:

    • useCashAccounts()
    • useTreasuryPlans()
    • usePaymentOrders()
  2. Adicionar visualizações:

    • Gráfico de fluxo de caixa
    • Dashboard de tesouraria
    • Indicadores de execução do plano
  3. Melhorar modais:

    • TreasuryEntryFormModal (similar a CreateBudgetEntryModal)
    • Modal de detalhes para ordens de pagamento

🚨 Problemas Críticos - Ação Imediata Necessária

Prioridade ALTA 🔴

  1. Adicionar TreasuryPlanPage ao menu de navegação

    • Arquivo: src/config/navigation.ts
    • Impacto: Funcionalidade existe mas não é acessível
  2. Adicionar campos IBAN, SWIFT, overdraftLimit no CashAccountFormModal

    • Arquivos: CashAccountFormModal.tsx, types/treasury.ts
    • Impacto: Backend tem campos mas frontend não usa
  3. Verificar existência de TreasuryPlanController no backend

    • Se não existir, criar controller com endpoints necessários
    • Impacto: Frontend pode falhar ao chamar APIs
  4. Implementar funcionalidade "Nova Entrada" em TreasuryEntriesPage

    • Criar TreasuryEntryFormModal
    • Impacto: Funcionalidade prometida mas não implementada

Prioridade MÉDIA 🟡

  1. Migrar páginas para react-query

    • Benefício: Cache, refetch automático, melhor UX
  2. Extrair modal inline de TreasuryPaymentsPage

    • Criar TreasuryPaymentFormModal
    • Benefício: Código mais limpo e reutilizável
  3. Adicionar visualização hierárquica CUT

    • Mostrar árvore de contas pai/filho
    • Benefício: Melhor compreensão da estrutura CUT

Prioridade BAIXA 🟢

  1. Implementar TODOs encontrados

    • PaymentOrdersPage: Visualização de detalhes
    • BankReconciliationPage: Obter userId do contexto
  2. Adicionar exportação PDF/Excel

    • Similar ao Budget module
    • Benefício: Relatórios para auditoria

📝 Checklist de Implementação

Fase 1: Correções Críticas (Urgente)

  • Adicionar "Planos de Tesouraria" no menu de navegação
  • Verificar/criar TreasuryPlanController no backend
  • Adicionar campos iban, swiftCode, overdraftLimit em CashAccountFormModal
  • Atualizar CashAccountDTO e CreateCashAccountDTO em types/treasury.ts
  • Criar TreasuryEntryFormModal e implementar funcionalidade "Nova Entrada"

Fase 2: Melhorias de Padrão (Médio Prazo)

  • Migrar CashAccountsPage para react-query
  • Migrar PaymentBatchesPage para react-query
  • Migrar TreasuryEntriesPage para react-query
  • Extrair modal de TreasuryPaymentsPage para componente separado
  • Criar hooks customizados (useCashAccounts, useTreasuryPlans)

Fase 3: Funcionalidades Avançadas (Longo Prazo)

  • Implementar visualização hierárquica CUT (árvore)
  • Adicionar gráficos de fluxo de caixa
  • Implementar exportação PDF/Excel
  • Criar dashboard de tesouraria
  • Adicionar indicadores de execução do plano

🔗 Referências de Código

Arquivos Analisados:

  • src/modules/treasury/pages/TreasuryPlanPage.tsx
  • src/modules/treasury/pages/CashAccountsPage.tsx
  • src/modules/treasury/components/CashAccountFormModal.tsx
  • src/modules/treasury/pages/TreasuryEntriesPage.tsx
  • src/modules/treasury/pages/TreasuryPaymentsPage.tsx
  • src/modules/treasury/pages/PaymentBatchesPage.tsx
  • src/modules/treasury/pages/PaymentOrdersPage.tsx
  • src/modules/treasury/pages/BankReconciliationPage.tsx
  • src/services/treasuryPlanService.ts
  • src/types/treasury.ts
  • src/config/navigation.ts

Arquivos de Comparação (Budget Module):

  • src/modules/budget/pages/BudgetLinesPage.tsx
  • src/modules/budget/components/CreateBudgetEntryModal.tsx
  • src/modules/budget/components/BudgetLineEntriesModal.tsx

📌 Conclusão

O frontend do módulo Tesouraria está parcialmente implementado com uma base sólida, mas possui gaps críticos que impedem o uso completo das funcionalidades:

  1. TreasuryPlanPage existe mas não é acessível - Problema de navegação
  2. Campos do backend não refletidos no frontend - IBAN, SWIFT, overdraftLimit
  3. Funcionalidades prometidas mas não implementadas - Nova Entrada
  4. Inconsistências de padrão - Algumas páginas modernas, outras tradicionais

Recomendação Geral: Priorizar as correções críticas (Fase 1) antes de adicionar novas funcionalidades. O módulo tem potencial, mas precisa de alinhamento entre backend e frontend, e padronização de código.


Próximos Passos Sugeridos:

  1. Revisar esta análise com a equipe
  2. Priorizar itens da Fase 1
  3. Criar issues/tasks para cada item
  4. Implementar correções críticas
  5. Planejar migração para react-query (Fase 2)