645 lines
19 KiB
Markdown
645 lines
19 KiB
Markdown
|
|
# 🏛️ 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
|
||
|
|
|