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
- TreasuryPlanPage existe e está funcional - Usa
react-query, tem UI moderna - CashAccountFormModal tem suporte parcial para CUT - Campos
parentIdecategoryimplementados - Estrutura modular bem organizada - Separação clara entre páginas, componentes e serviços
- Uso consistente de componentes reutilizáveis -
ServerDataTable,PageHeader,StatusBadge
⚠️ Problemas Críticos Identificados
- TreasuryPlanPage NÃO está no menu de navegação - Funcionalidade existe mas não é acessível
- Campos IBAN, SWIFT, overdraftLimit ausentes no frontend - Backend tem, frontend não usa
- TreasuryPlanController ausente no backend - Endpoints podem estar em outro lugar ou não existir
- Inconsistência de padrões - Algumas páginas usam
react-query, outrasuseState/useEffect - 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
TreasuryPlanListseparado 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.tsxmas não há link no menu - ⚠️ MÉDIO: Não verifica se o backend tem
TreasuryPlanController - ⚠️ MÉDIO:
treasuryPlanService.findActivePlanpode 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:
- URGENTE: Adicionar item no menu de navegação
- Verificar se backend tem
TreasuryPlanControllercom endpoints:POST /api/treasury/plansPUT /api/treasury/plans/{id}/approveGET /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-formcomzodpara 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,overdraftLimitque existem no backend - ❌ CRÍTICO: Frontend
CashAccountDTOnão tem esses campos (vertypes/treasury.ts) - ⚠️ MÉDIO: Campo
accountingCodetambé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:
- URGENTE: Adicionar campos
iban,swiftCode,overdraftLimitno formulário - URGENTE: Atualizar
CashAccountDTOeCreateCashAccountDTOemtypes/treasury.ts - Adicionar validação para IBAN (formato ISO)
- Adicionar campo
accountTypese 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,swiftCodena 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:
- Adicionar colunas opcionais para IBAN e SWIFT (com toggle para mostrar/ocultar)
- Implementar visualização hierárquica (árvore) para contas CUT
- Implementar funcionalidade de edição
- 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:
- URGENTE: Criar
TreasuryEntryFormModalsimilar aCreateBudgetEntryModal - 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
- 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:
- Extrair modal para componente
TreasuryPaymentFormModal.tsx - Seguir padrão de
PaymentBatchFormModal - 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
PaymentBatchFormModalseparado - ✅ 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:
- Implementar modal de detalhes da ordem de pagamento
- 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:
- Integrar com
AuthContextouuseAuth()hook - Remover hardcoded
userId
🔄 Inconsistências de Padrões
1. Gerenciamento de Estado
Padrão A (Moderno - React Query):
TreasuryPlanPageusauseQueryeuseMutation
Padrão B (Tradicional - useState/useEffect):
CashAccountsPagePaymentBatchesPageTreasuryEntriesPageTreasuryPaymentsPage
Recomendação:
- Migrar todas as páginas para
react-querypara:- 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):
PaymentBatchFormModalCashAccountFormModalBudgetLineFormModal(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()dosonner - ✅ Try/catch adequado
Sem problemas identificados.
📊 Comparação com Módulo Budget
O que Budget faz melhor:
-
Modais bem estruturados:
CreateBudgetEntryModal- Modal completo com validaçãoBudgetLineEntriesModal- Modal complexo com históricoBudgetLineFormModal- Formulário robusto
-
Visualizações avançadas:
BudgetExecutionChart- Gráficos de execução- Exportação PDF/Excel
-
Integração com hooks:
useMinistriesuseOrgUnits
O que Treasury pode melhorar baseado em Budget:
-
Criar hooks customizados:
useCashAccounts()useTreasuryPlans()usePaymentOrders()
-
Adicionar visualizações:
- Gráfico de fluxo de caixa
- Dashboard de tesouraria
- Indicadores de execução do plano
-
Melhorar modais:
TreasuryEntryFormModal(similar aCreateBudgetEntryModal)- Modal de detalhes para ordens de pagamento
🚨 Problemas Críticos - Ação Imediata Necessária
Prioridade ALTA 🔴
-
Adicionar TreasuryPlanPage ao menu de navegação
- Arquivo:
src/config/navigation.ts - Impacto: Funcionalidade existe mas não é acessível
- Arquivo:
-
Adicionar campos IBAN, SWIFT, overdraftLimit no CashAccountFormModal
- Arquivos:
CashAccountFormModal.tsx,types/treasury.ts - Impacto: Backend tem campos mas frontend não usa
- Arquivos:
-
Verificar existência de TreasuryPlanController no backend
- Se não existir, criar controller com endpoints necessários
- Impacto: Frontend pode falhar ao chamar APIs
-
Implementar funcionalidade "Nova Entrada" em TreasuryEntriesPage
- Criar
TreasuryEntryFormModal - Impacto: Funcionalidade prometida mas não implementada
- Criar
Prioridade MÉDIA 🟡
-
Migrar páginas para react-query
- Benefício: Cache, refetch automático, melhor UX
-
Extrair modal inline de TreasuryPaymentsPage
- Criar
TreasuryPaymentFormModal - Benefício: Código mais limpo e reutilizável
- Criar
-
Adicionar visualização hierárquica CUT
- Mostrar árvore de contas pai/filho
- Benefício: Melhor compreensão da estrutura CUT
Prioridade BAIXA 🟢
-
Implementar TODOs encontrados
- PaymentOrdersPage: Visualização de detalhes
- BankReconciliationPage: Obter userId do contexto
-
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
TreasuryPlanControllerno backend - Adicionar campos
iban,swiftCode,overdraftLimitemCashAccountFormModal - Atualizar
CashAccountDTOeCreateCashAccountDTOemtypes/treasury.ts - Criar
TreasuryEntryFormModale implementar funcionalidade "Nova Entrada"
Fase 2: Melhorias de Padrão (Médio Prazo)
- Migrar
CashAccountsPageparareact-query - Migrar
PaymentBatchesPageparareact-query - Migrar
TreasuryEntriesPageparareact-query - Extrair modal de
TreasuryPaymentsPagepara 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.tsxsrc/modules/treasury/pages/CashAccountsPage.tsxsrc/modules/treasury/components/CashAccountFormModal.tsxsrc/modules/treasury/pages/TreasuryEntriesPage.tsxsrc/modules/treasury/pages/TreasuryPaymentsPage.tsxsrc/modules/treasury/pages/PaymentBatchesPage.tsxsrc/modules/treasury/pages/PaymentOrdersPage.tsxsrc/modules/treasury/pages/BankReconciliationPage.tsxsrc/services/treasuryPlanService.tssrc/types/treasury.tssrc/config/navigation.ts
Arquivos de Comparação (Budget Module):
src/modules/budget/pages/BudgetLinesPage.tsxsrc/modules/budget/components/CreateBudgetEntryModal.tsxsrc/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:
- TreasuryPlanPage existe mas não é acessível - Problema de navegação
- Campos do backend não refletidos no frontend - IBAN, SWIFT, overdraftLimit
- Funcionalidades prometidas mas não implementadas - Nova Entrada
- 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:
- Revisar esta análise com a equipe
- Priorizar itens da Fase 1
- Criar issues/tasks para cada item
- Implementar correções críticas
- Planejar migração para react-query (Fase 2)