feat: otimização de performance e ajustes finais
This commit is contained in:
@@ -0,0 +1,644 @@
|
||||
# 🏛️ Arquitetura Completa de Tesouro para GFP/SIGFIP
|
||||
|
||||
**Data:** 2025-01-XX
|
||||
**Objetivo:** Implementar arquitetura completa de Tesouro similar à arquitetura de Elaboração e Aprovação do Orçamento
|
||||
|
||||
---
|
||||
|
||||
## 📋 Entendimento do Problema
|
||||
|
||||
### Situação Atual
|
||||
|
||||
**Módulo Tesouro Atual (Básico):**
|
||||
- ✅ `PaymentBatch` - Lotes de pagamento simples
|
||||
- ✅ `PaymentOrder` - Ordens de pagamento básicas
|
||||
- ✅ `TreasuryPayment` - Confirmações simples
|
||||
- ✅ Integração básica com RH e Orçamento
|
||||
|
||||
**O que está faltando:**
|
||||
- ❌ Workflow de aprovação/autorização hierárquica
|
||||
- ❌ Controles de disponibilidade de caixa
|
||||
- ❌ Gestão de disponibilidades (caixa, bancos)
|
||||
- ❌ Conciliação bancária
|
||||
- ❌ Fluxo de autorização por níveis
|
||||
- ❌ Rastreamento completo do ciclo de vida
|
||||
- ❌ Controles de fluxo de caixa
|
||||
- ❌ Gestão de compromissos de pagamento
|
||||
- ❌ Programação de pagamentos
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Arquitetura Completa Proposta
|
||||
|
||||
### Comparação: Orçamento vs Tesouro
|
||||
|
||||
#### **Orçamento (Implementado pelo Antigravity):**
|
||||
|
||||
```
|
||||
BudgetEntry (Entrada Orçamentária)
|
||||
├── BudgetEntryType (Tipos: INITIAL_ALLOCATION, SUPPLEMENTARY_CREDIT, etc.)
|
||||
├── BudgetEntryService (Gestão completa de entradas)
|
||||
├── BudgetEntryController (API REST)
|
||||
└── Workflow: Elaboração → Aprovação → Execução
|
||||
```
|
||||
|
||||
**Funcionalidades:**
|
||||
- ✅ Rastreamento de todas as entradas orçamentárias
|
||||
- ✅ Tipos de entrada (dotação inicial, créditos, anulações, transferências)
|
||||
- ✅ Histórico completo de alterações
|
||||
- ✅ Integração com BudgetAllocation
|
||||
|
||||
#### **Tesouro (A Implementar - Arquitetura Completa):**
|
||||
|
||||
```
|
||||
TreasuryEntry (Entrada de Tesouraria) - NOVO
|
||||
├── TreasuryEntryType (Tipos: PAYMENT_AUTHORIZATION, CASH_AVAILABILITY, etc.)
|
||||
├── TreasuryEntryService (Gestão completa de entradas)
|
||||
├── TreasuryEntryController (API REST)
|
||||
└── Workflow: Solicitação → Autorização → Programação → Execução → Conciliação
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ Componentes da Arquitetura Completa
|
||||
|
||||
### 1. **TreasuryEntry** (Similar a BudgetEntry)
|
||||
|
||||
**Propósito:** Rastrear todas as entradas e movimentações de tesouraria com histórico completo.
|
||||
|
||||
**Campos:**
|
||||
- `id` (UUID)
|
||||
- `type` (TreasuryEntryType enum)
|
||||
- `amount` (BigDecimal)
|
||||
- `transactionDate` (LocalDate)
|
||||
- `documentReference` (String) - Ex: "Decreto de Autorização", "Portaria de Pagamento"
|
||||
- `description` (String)
|
||||
- `status` (String) - DRAFT, PENDING_APPROVAL, APPROVED, REJECTED, EXECUTED
|
||||
- `approvalLevel` (Integer) - Nível de aprovação necessário
|
||||
- `approvedBy` (UUID) - Usuário que aprovou
|
||||
- `approvedAt` (LocalDateTime)
|
||||
- `cashAccountId` (UUID) - Conta de caixa/banco afetada
|
||||
- `paymentOrderId` (UUID) - Referência à ordem de pagamento (se aplicável)
|
||||
- `budgetLineId` (UUID) - Linha orçamentária relacionada
|
||||
|
||||
### 2. **TreasuryEntryType** (Enum)
|
||||
|
||||
```java
|
||||
public enum TreasuryEntryType {
|
||||
// Autorizações
|
||||
PAYMENT_AUTHORIZATION, // Autorização de Pagamento
|
||||
BATCH_AUTHORIZATION, // Autorização de Lote
|
||||
|
||||
// Disponibilidades
|
||||
CASH_AVAILABILITY, // Disponibilidade de Caixa
|
||||
BANK_AVAILABILITY, // Disponibilidade Bancária
|
||||
CASH_DEPOSIT, // Depósito em Caixa
|
||||
CASH_WITHDRAWAL, // Saque de Caixa
|
||||
|
||||
// Programação
|
||||
PAYMENT_SCHEDULING, // Programação de Pagamento
|
||||
BATCH_SCHEDULING, // Programação de Lote
|
||||
|
||||
// Execução
|
||||
PAYMENT_EXECUTION, // Execução de Pagamento
|
||||
BATCH_EXECUTION, // Execução de Lote
|
||||
|
||||
// Conciliação
|
||||
BANK_RECONCILIATION, // Conciliação Bancária
|
||||
CASH_RECONCILIATION, // Conciliação de Caixa
|
||||
|
||||
// Ajustes
|
||||
PAYMENT_CANCELLATION, // Cancelamento de Pagamento
|
||||
PAYMENT_ADJUSTMENT, // Ajuste de Pagamento
|
||||
CASH_ADJUSTMENT // Ajuste de Caixa
|
||||
}
|
||||
```
|
||||
|
||||
### 3. **CashAccount** (Nova Entidade)
|
||||
|
||||
**Propósito:** Gerenciar contas de caixa e bancárias do Tesouro.
|
||||
|
||||
**Campos:**
|
||||
- `id` (UUID)
|
||||
- `code` (String, único) - Ex: "CAIXA-001", "BANCO-BCEAO-001"
|
||||
- `name` (String) - Ex: "Caixa Principal", "Conta BCEAO - Tesouro"
|
||||
- `type` (String) - CASH, BANK_ACCOUNT
|
||||
- `bankId` (UUID) - Se tipo = BANK_ACCOUNT
|
||||
- `accountNumber` (String)
|
||||
- `branchCode` (String)
|
||||
- `currency` (String) - XOF
|
||||
- `isActive` (Boolean)
|
||||
- `currentBalance` (BigDecimal) - Saldo atual
|
||||
- `availableBalance` (BigDecimal) - Saldo disponível (após compromissos)
|
||||
|
||||
### 4. **PaymentAuthorization** (Nova Entidade)
|
||||
|
||||
**Propósito:** Workflow de aprovação hierárquica de pagamentos.
|
||||
|
||||
**Campos:**
|
||||
- `id` (UUID)
|
||||
- `paymentOrderId` (UUID) ou `paymentBatchId` (UUID)
|
||||
- `requestedBy` (UUID) - Usuário que solicitou
|
||||
- `requestedAt` (LocalDateTime)
|
||||
- `requiredApprovalLevel` (Integer) - Nível necessário (1, 2, 3...)
|
||||
- `currentApprovalLevel` (Integer) - Nível atual
|
||||
- `status` (String) - PENDING, PARTIALLY_APPROVED, APPROVED, REJECTED
|
||||
- `approvals` (List<Approval>) - Histórico de aprovações
|
||||
- `rejectionReason` (String)
|
||||
|
||||
### 5. **Approval** (Embeddable/Value Object)
|
||||
|
||||
**Campos:**
|
||||
- `level` (Integer)
|
||||
- `approvedBy` (UUID)
|
||||
- `approvedAt` (LocalDateTime)
|
||||
- `comments` (String)
|
||||
- `signature` (String) - Hash da assinatura digital (futuro)
|
||||
|
||||
### 6. **CashFlow** (Nova Entidade)
|
||||
|
||||
**Propósito:** Rastrear fluxo de caixa (entradas e saídas).
|
||||
|
||||
**Campos:**
|
||||
- `id` (UUID)
|
||||
- `cashAccountId` (UUID)
|
||||
- `transactionDate` (LocalDate)
|
||||
- `type` (String) - INFLOW, OUTFLOW
|
||||
- `amount` (BigDecimal)
|
||||
- `description` (String)
|
||||
- `referenceId` (UUID) - ID da entidade relacionada
|
||||
- `referenceType` (String) - PAYMENT_ORDER, TREASURY_ENTRY, etc.
|
||||
- `balanceAfter` (BigDecimal) - Saldo após a transação
|
||||
|
||||
### 7. **BankReconciliation** (Nova Entidade)
|
||||
|
||||
**Propósito:** Conciliação bancária.
|
||||
|
||||
**Campos:**
|
||||
- `id` (UUID)
|
||||
- `cashAccountId` (UUID)
|
||||
- `reconciliationDate` (LocalDate)
|
||||
- `statementBalance` (BigDecimal) - Saldo do extrato bancário
|
||||
- `systemBalance` (BigDecimal) - Saldo do sistema
|
||||
- `difference` (BigDecimal) - Diferença
|
||||
- `status` (String) - PENDING, RECONCILED, DISCREPANCY
|
||||
- `reconciledBy` (UUID)
|
||||
- `reconciledAt` (LocalDateTime)
|
||||
- `reconciliationItems` (List<ReconciliationItem>)
|
||||
|
||||
### 8. **ReconciliationItem** (Embeddable/Value Object)
|
||||
|
||||
**Campos:**
|
||||
- `transactionDate` (LocalDate)
|
||||
- `description` (String)
|
||||
- `statementAmount` (BigDecimal)
|
||||
- `systemAmount` (BigDecimal)
|
||||
- `matchStatus` (String) - MATCHED, UNMATCHED, PENDING
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Workflow Completo de Tesouraria
|
||||
|
||||
### Fluxo 1: Autorização de Pagamento
|
||||
|
||||
```
|
||||
1. Solicitação de Pagamento
|
||||
└─> TreasuryEntry (PAYMENT_AUTHORIZATION, status: DRAFT)
|
||||
|
||||
2. Submissão para Aprovação
|
||||
└─> PaymentAuthorization criado
|
||||
└─> status: PENDING
|
||||
└─> currentApprovalLevel: 1
|
||||
|
||||
3. Aprovação Nível 1
|
||||
└─> Approval registrado
|
||||
└─> currentApprovalLevel: 2 (se necessário)
|
||||
|
||||
4. Aprovação Nível 2 (se necessário)
|
||||
└─> Approval registrado
|
||||
└─> status: APPROVED
|
||||
|
||||
5. Autorização Aprovada
|
||||
└─> TreasuryEntry atualizado (status: APPROVED)
|
||||
└─> PaymentOrder pode ser criado
|
||||
```
|
||||
|
||||
### Fluxo 2: Programação de Pagamento
|
||||
|
||||
```
|
||||
1. Ordem de Pagamento Criada
|
||||
└─> PaymentOrder (status: CREATED)
|
||||
|
||||
2. Verificação de Disponibilidade
|
||||
└─> CashAccount.availableBalance verificado
|
||||
└─> Se insuficiente: erro
|
||||
|
||||
3. Programação
|
||||
└─> TreasuryEntry (PAYMENT_SCHEDULING)
|
||||
└─> CashAccount.availableBalance reduzido (comprometido)
|
||||
└─> PaymentOrder (status: SCHEDULED)
|
||||
|
||||
4. Agendamento
|
||||
└─> PaymentOrder.scheduledDate definido
|
||||
```
|
||||
|
||||
### Fluxo 3: Execução de Pagamento
|
||||
|
||||
```
|
||||
1. Execução do Lote
|
||||
└─> PaymentBatch (status: SENT_TO_BANK)
|
||||
└─> TreasuryEntry (BATCH_EXECUTION)
|
||||
|
||||
2. Confirmação Individual
|
||||
└─> TreasuryPayment (status: PAID)
|
||||
└─> TreasuryEntry (PAYMENT_EXECUTION)
|
||||
└─> CashAccount.currentBalance reduzido
|
||||
└─> CashFlow registrado (OUTFLOW)
|
||||
|
||||
3. Atualização Orçamentária
|
||||
└─> BudgetExecution (PAYMENT) criado
|
||||
```
|
||||
|
||||
### Fluxo 4: Conciliação Bancária
|
||||
|
||||
```
|
||||
1. Importação de Extrato
|
||||
└─> BankReconciliation criado
|
||||
└─> ReconciliationItems importados
|
||||
|
||||
2. Conciliação Automática
|
||||
└─> Matching de transações
|
||||
└─> Identificação de diferenças
|
||||
|
||||
3. Conciliação Manual
|
||||
└─> Ajustes manuais
|
||||
└─> TreasuryEntry (BANK_RECONCILIATION)
|
||||
|
||||
4. Finalização
|
||||
└─> BankReconciliation (status: RECONCILED)
|
||||
└─> CashAccount.currentBalance atualizado
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Serviços a Implementar
|
||||
|
||||
### 1. **TreasuryEntryService**
|
||||
|
||||
**Responsabilidades:**
|
||||
- Criar entradas de tesouraria
|
||||
- Validar disponibilidade de caixa
|
||||
- Atualizar saldos de contas
|
||||
- Rastrear histórico completo
|
||||
- Integrar com orçamento
|
||||
|
||||
**Métodos:**
|
||||
```java
|
||||
TreasuryEntryDTO create(CreateTreasuryEntryDTO dto)
|
||||
Page<TreasuryEntryDTO> findByCashAccount(UUID cashAccountId, Pageable pageable)
|
||||
Page<TreasuryEntryDTO> findByType(TreasuryEntryType type, Pageable pageable)
|
||||
BigDecimal calculateAvailableBalance(UUID cashAccountId)
|
||||
void updateCashAccountBalance(UUID cashAccountId, BigDecimal amount, TreasuryEntryType type)
|
||||
```
|
||||
|
||||
### 2. **PaymentAuthorizationService**
|
||||
|
||||
**Responsabilidades:**
|
||||
- Gerenciar workflow de aprovação
|
||||
- Validar níveis de aprovação
|
||||
- Registrar aprovações
|
||||
- Notificar próximos aprovadores
|
||||
|
||||
**Métodos:**
|
||||
```java
|
||||
PaymentAuthorizationDTO requestAuthorization(UUID paymentOrderId, Integer requiredLevel)
|
||||
PaymentAuthorizationDTO approve(UUID authorizationId, UUID approverId, String comments)
|
||||
PaymentAuthorizationDTO reject(UUID authorizationId, UUID approverId, String reason)
|
||||
List<PaymentAuthorizationDTO> findPendingApprovals(UUID approverId)
|
||||
```
|
||||
|
||||
### 3. **CashAccountService**
|
||||
|
||||
**Responsabilidades:**
|
||||
- Gerenciar contas de caixa/bancárias
|
||||
- Calcular saldos disponíveis
|
||||
- Validar operações
|
||||
- Histórico de movimentações
|
||||
|
||||
**Métodos:**
|
||||
```java
|
||||
CashAccountDTO create(CreateCashAccountDTO dto)
|
||||
CashAccountDTO update(UUID id, UpdateCashAccountDTO dto)
|
||||
CashAccountDTO findById(UUID id)
|
||||
BigDecimal getAvailableBalance(UUID cashAccountId)
|
||||
BigDecimal getCurrentBalance(UUID cashAccountId)
|
||||
void updateBalance(UUID cashAccountId, BigDecimal amount, String operation)
|
||||
List<CashAccountDTO> findAll()
|
||||
```
|
||||
|
||||
### 4. **CashFlowService**
|
||||
|
||||
**Responsabilidades:**
|
||||
- Registrar fluxo de caixa
|
||||
- Calcular projeções
|
||||
- Relatórios de fluxo
|
||||
- Análise de tendências
|
||||
|
||||
**Métodos:**
|
||||
```java
|
||||
CashFlowDTO registerFlow(CreateCashFlowDTO dto)
|
||||
Page<CashFlowDTO> findByCashAccount(UUID cashAccountId, LocalDate startDate, LocalDate endDate, Pageable pageable)
|
||||
BigDecimal calculateProjectedBalance(UUID cashAccountId, LocalDate targetDate)
|
||||
Map<String, BigDecimal> getFlowSummary(UUID cashAccountId, LocalDate startDate, LocalDate endDate)
|
||||
```
|
||||
|
||||
### 5. **BankReconciliationService**
|
||||
|
||||
**Responsabilidades:**
|
||||
- Importar extratos bancários
|
||||
- Conciliação automática
|
||||
- Identificar diferenças
|
||||
- Ajustes e correções
|
||||
|
||||
**Métodos:**
|
||||
```java
|
||||
BankReconciliationDTO importStatement(UUID cashAccountId, List<StatementItem> items)
|
||||
BankReconciliationDTO reconcile(UUID reconciliationId)
|
||||
List<ReconciliationItemDTO> findUnmatchedItems(UUID reconciliationId)
|
||||
void matchItem(UUID reconciliationId, UUID itemId, UUID systemTransactionId)
|
||||
BankReconciliationDTO finalize(UUID reconciliationId)
|
||||
```
|
||||
|
||||
### 6. **TreasuryIntegrationService** (Similar a BudgetIntegrationService)
|
||||
|
||||
**Responsabilidades:**
|
||||
- Integração com módulo RH
|
||||
- Integração com módulo Orçamento
|
||||
- Validações cruzadas
|
||||
- Sincronização de dados
|
||||
|
||||
**Métodos:**
|
||||
```java
|
||||
void validatePaymentOrder(UUID paymentOrderId)
|
||||
void registerPaymentExecution(UUID paymentOrderId, BigDecimal amount)
|
||||
void updateBudgetExecution(UUID paymentOrderId)
|
||||
void validateCashAvailability(UUID cashAccountId, BigDecimal amount)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🗄️ Estrutura de Banco de Dados
|
||||
|
||||
### Tabelas Novas
|
||||
|
||||
```sql
|
||||
-- Contas de Caixa/Bancárias
|
||||
CREATE TABLE cash_account (
|
||||
id UUID PRIMARY KEY,
|
||||
code VARCHAR(50) UNIQUE NOT NULL,
|
||||
name VARCHAR(200) NOT NULL,
|
||||
type VARCHAR(20) NOT NULL, -- CASH, BANK_ACCOUNT
|
||||
bank_id UUID,
|
||||
account_number VARCHAR(50),
|
||||
branch_code VARCHAR(20),
|
||||
currency VARCHAR(3) DEFAULT 'XOF',
|
||||
is_active BOOLEAN DEFAULT true,
|
||||
current_balance NUMERIC(19,2) DEFAULT 0,
|
||||
available_balance NUMERIC(19,2) DEFAULT 0,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
-- Entradas de Tesouraria (Similar a BudgetEntry)
|
||||
CREATE TABLE treasury_entry (
|
||||
id UUID PRIMARY KEY,
|
||||
type VARCHAR(50) NOT NULL,
|
||||
amount NUMERIC(19,2) NOT NULL,
|
||||
transaction_date DATE NOT NULL,
|
||||
document_reference VARCHAR(100),
|
||||
description TEXT,
|
||||
status VARCHAR(20) NOT NULL, -- DRAFT, PENDING_APPROVAL, APPROVED, REJECTED, EXECUTED
|
||||
approval_level INTEGER,
|
||||
approved_by UUID,
|
||||
approved_at TIMESTAMP,
|
||||
cash_account_id UUID REFERENCES cash_account(id),
|
||||
payment_order_id UUID,
|
||||
payment_batch_id UUID,
|
||||
budget_line_id UUID,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
-- Autorizações de Pagamento
|
||||
CREATE TABLE payment_authorization (
|
||||
id UUID PRIMARY KEY,
|
||||
payment_order_id UUID,
|
||||
payment_batch_id UUID,
|
||||
requested_by UUID NOT NULL,
|
||||
requested_at TIMESTAMP NOT NULL,
|
||||
required_approval_level INTEGER NOT NULL,
|
||||
current_approval_level INTEGER DEFAULT 1,
|
||||
status VARCHAR(20) NOT NULL, -- PENDING, PARTIALLY_APPROVED, APPROVED, REJECTED
|
||||
rejection_reason TEXT,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
-- Aprovações (Histórico)
|
||||
CREATE TABLE approval (
|
||||
id UUID PRIMARY KEY,
|
||||
authorization_id UUID REFERENCES payment_authorization(id) NOT NULL,
|
||||
level INTEGER NOT NULL,
|
||||
approved_by UUID NOT NULL,
|
||||
approved_at TIMESTAMP NOT NULL,
|
||||
comments TEXT,
|
||||
signature_hash VARCHAR(255)
|
||||
);
|
||||
|
||||
-- Fluxo de Caixa
|
||||
CREATE TABLE cash_flow (
|
||||
id UUID PRIMARY KEY,
|
||||
cash_account_id UUID REFERENCES cash_account(id) NOT NULL,
|
||||
transaction_date DATE NOT NULL,
|
||||
type VARCHAR(20) NOT NULL, -- INFLOW, OUTFLOW
|
||||
amount NUMERIC(19,2) NOT NULL,
|
||||
description TEXT,
|
||||
reference_id UUID,
|
||||
reference_type VARCHAR(50),
|
||||
balance_after NUMERIC(19,2) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
-- Conciliação Bancária
|
||||
CREATE TABLE bank_reconciliation (
|
||||
id UUID PRIMARY KEY,
|
||||
cash_account_id UUID REFERENCES cash_account(id) NOT NULL,
|
||||
reconciliation_date DATE NOT NULL,
|
||||
statement_balance NUMERIC(19,2) NOT NULL,
|
||||
system_balance NUMERIC(19,2) NOT NULL,
|
||||
difference NUMERIC(19,2),
|
||||
status VARCHAR(20) NOT NULL, -- PENDING, RECONCILED, DISCREPANCY
|
||||
reconciled_by UUID,
|
||||
reconciled_at TIMESTAMP,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
-- Itens de Conciliação
|
||||
CREATE TABLE reconciliation_item (
|
||||
id UUID PRIMARY KEY,
|
||||
reconciliation_id UUID REFERENCES bank_reconciliation(id) NOT NULL,
|
||||
transaction_date DATE NOT NULL,
|
||||
description TEXT,
|
||||
statement_amount NUMERIC(19,2),
|
||||
system_amount NUMERIC(19,2),
|
||||
match_status VARCHAR(20) NOT NULL, -- MATCHED, UNMATCHED, PENDING
|
||||
matched_transaction_id UUID,
|
||||
created_at TIMESTAMP NOT NULL
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Regras de Negócio
|
||||
|
||||
### 1. **Validação de Disponibilidade de Caixa**
|
||||
|
||||
```java
|
||||
// Antes de criar ordem de pagamento
|
||||
BigDecimal available = cashAccountService.getAvailableBalance(cashAccountId);
|
||||
if (paymentAmount.compareTo(available) > 0) {
|
||||
throw new InsufficientCashException("Saldo disponível insuficiente");
|
||||
}
|
||||
```
|
||||
|
||||
### 2. **Workflow de Aprovação Hierárquica**
|
||||
|
||||
```java
|
||||
// Valores até 100.000 XOF: 1 nível
|
||||
// Valores 100.001 - 500.000 XOF: 2 níveis
|
||||
// Valores acima de 500.000 XOF: 3 níveis
|
||||
Integer requiredLevel = calculateRequiredLevel(paymentAmount);
|
||||
```
|
||||
|
||||
### 3. **Comprometimento de Caixa**
|
||||
|
||||
```java
|
||||
// Ao programar pagamento
|
||||
cashAccount.availableBalance -= paymentAmount;
|
||||
// Ao executar pagamento
|
||||
cashAccount.currentBalance -= paymentAmount;
|
||||
```
|
||||
|
||||
### 4. **Conciliação Obrigatória**
|
||||
|
||||
```java
|
||||
// Mensalmente, todas as contas bancárias devem ser conciliadas
|
||||
// Sistema deve alertar se não houver conciliação nos últimos 30 dias
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📱 Frontend - Páginas a Criar
|
||||
|
||||
### 1. **CashAccountsPage** (`/treasury/cash-accounts`)
|
||||
- Listar contas de caixa/bancárias
|
||||
- Criar/editar contas
|
||||
- Visualizar saldos
|
||||
- Histórico de movimentações
|
||||
|
||||
### 2. **TreasuryEntriesPage** (`/treasury/entries`)
|
||||
- Listar entradas de tesouraria
|
||||
- Filtrar por tipo, status, conta
|
||||
- Visualizar histórico completo
|
||||
- Criar novas entradas
|
||||
|
||||
### 3. **PaymentAuthorizationsPage** (`/treasury/authorizations`)
|
||||
- Listar autorizações pendentes
|
||||
- Aprovar/rejeitar pagamentos
|
||||
- Histórico de aprovações
|
||||
- Filtros por nível, status
|
||||
|
||||
### 4. **CashFlowPage** (`/treasury/cash-flow`)
|
||||
- Visualizar fluxo de caixa
|
||||
- Projeções futuras
|
||||
- Gráficos de entradas/saídas
|
||||
- Análise de tendências
|
||||
|
||||
### 5. **BankReconciliationPage** (`/treasury/reconciliation`)
|
||||
- Importar extratos
|
||||
- Conciliação automática
|
||||
- Ajustes manuais
|
||||
- Relatórios de conciliação
|
||||
|
||||
### 6. **TreasuryDashboardPage** (`/treasury/dashboard`)
|
||||
- Saldos de todas as contas
|
||||
- Pagamentos pendentes de aprovação
|
||||
- Conciliações pendentes
|
||||
- Alertas e notificações
|
||||
|
||||
---
|
||||
|
||||
## ✅ Checklist de Implementação
|
||||
|
||||
### Fase 1: Entidades e Repositories
|
||||
- [ ] Criar `CashAccount` entity
|
||||
- [ ] Criar `TreasuryEntry` entity
|
||||
- [ ] Criar `PaymentAuthorization` entity
|
||||
- [ ] Criar `Approval` embeddable
|
||||
- [ ] Criar `CashFlow` entity
|
||||
- [ ] Criar `BankReconciliation` entity
|
||||
- [ ] Criar `ReconciliationItem` entity
|
||||
- [ ] Criar todos os repositories
|
||||
|
||||
### Fase 2: Services
|
||||
- [ ] Implementar `TreasuryEntryService`
|
||||
- [ ] Implementar `PaymentAuthorizationService`
|
||||
- [ ] Implementar `CashAccountService`
|
||||
- [ ] Implementar `CashFlowService`
|
||||
- [ ] Implementar `BankReconciliationService`
|
||||
- [ ] Implementar `TreasuryIntegrationService`
|
||||
|
||||
### Fase 3: Controllers e DTOs
|
||||
- [ ] Criar DTOs para todas as entidades
|
||||
- [ ] Implementar `TreasuryEntryController`
|
||||
- [ ] Implementar `PaymentAuthorizationController`
|
||||
- [ ] Implementar `CashAccountController`
|
||||
- [ ] Implementar `CashFlowController`
|
||||
- [ ] Implementar `BankReconciliationController`
|
||||
|
||||
### Fase 4: Frontend
|
||||
- [ ] Criar `CashAccountsPage`
|
||||
- [ ] Criar `TreasuryEntriesPage`
|
||||
- [ ] Criar `PaymentAuthorizationsPage`
|
||||
- [ ] Criar `CashFlowPage`
|
||||
- [ ] Criar `BankReconciliationPage`
|
||||
- [ ] Criar `TreasuryDashboardPage`
|
||||
- [ ] Atualizar navegação
|
||||
|
||||
### Fase 5: Integração
|
||||
- [ ] Integrar com módulo RH
|
||||
- [ ] Integrar com módulo Orçamento
|
||||
- [ ] Atualizar `PaymentOrderService` para usar nova arquitetura
|
||||
- [ ] Atualizar `PaymentBatchService` para usar nova arquitetura
|
||||
- [ ] Testes de integração
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Resultado Esperado
|
||||
|
||||
Após a implementação, o módulo Tesouro terá:
|
||||
|
||||
✅ **Arquitetura completa** similar ao módulo Orçamento
|
||||
✅ **Workflow de aprovação** hierárquica
|
||||
✅ **Controles de caixa** rigorosos
|
||||
✅ **Conciliação bancária** automatizada
|
||||
✅ **Rastreamento completo** do ciclo de vida
|
||||
✅ **Integração robusta** com outros módulos
|
||||
✅ **Conformidade** com padrões GFP/SIGFIP
|
||||
|
||||
---
|
||||
|
||||
**Documento gerado em:** 2025-01-XX
|
||||
**Versão:** 1.0
|
||||
|
||||
Reference in New Issue
Block a user