Files

407 lines
14 KiB
Markdown
Raw Permalink Normal View History

# 🔍 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:**
```typescript
// 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:**
```typescript
<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 🟡
5. **Migrar páginas para react-query**
- Benefício: Cache, refetch automático, melhor UX
6. **Extrair modal inline de TreasuryPaymentsPage**
- Criar `TreasuryPaymentFormModal`
- Benefício: Código mais limpo e reutilizável
7. **Adicionar visualização hierárquica CUT**
- Mostrar árvore de contas pai/filho
- Benefício: Melhor compreensão da estrutura CUT
### Prioridade BAIXA 🟢
8. **Implementar TODOs encontrados**
- PaymentOrdersPage: Visualização de detalhes
- BankReconciliationPage: Obter userId do contexto
9. **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)