407 lines
14 KiB
Markdown
407 lines
14 KiB
Markdown
|
|
# 🔍 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)
|
||
|
|
|