# 🔄 Análise Real do Fluxo de Negócio - SIGEFP

**Data:** 2025-01-XX  
**Objetivo:** Analisar o fluxo REAL de negócio e identificar problemas na lógica e integrações

---

## ✅ Funcionalidades Existentes (Confirmadas)

### Módulo Orçamento

1. **Exercícios Fiscais** (`/budget/fiscal-years`)
   - ✅ Criar, abrir, fechar exercícios
   - ✅ Status: DRAFT → OPEN → CLOSED

2. **Linhas Orçamentárias** (`/budget/lines`)
   - ✅ Criar, editar linhas
   - ✅ **Dotações:** Botão Wallet (💼) abre modal `BudgetLineEntriesModal`
   - ✅ Modal permite criar, visualizar todas as dotações da linha
   - ✅ Tipos: INITIAL_ALLOCATION, SUPPLEMENTARY_CREDIT, etc.

3. **Execução** (`/budget/execution`)
   - ✅ Visualizar COMMITMENT, LIQUIDATION, PAYMENT
   - ✅ Filtros por tipo, período, linha orçamentária

### Módulo Tesouro

1. **Contas de Caixa** (`/treasury/cash-accounts`)
2. **Autorizações** (`/treasury/authorizations`)
3. **Lotes de Pagamento** (`/treasury/batches`)
4. **Ordens de Pagamento** (`/treasury/orders`)
5. **Conciliação** (`/treasury/reconciliation`)
6. **Confirmações** (`/treasury/confirmations`)

---

## 🔍 Análise do Fluxo Real de Negócio

### Fluxo 1: Elaboração do Orçamento (Como Funciona)

```
1. Orçamento → Exercícios Fiscais
   └─> Criar exercício (DRAFT)
   
2. Orçamento → Linhas Orçamentais
   └─> Criar rubricas
   
3. Orçamento → Linhas Orçamentais → Botão Wallet (💼)
   └─> Modal: BudgetLineEntriesModal
   └─> Criar dotação (INITIAL_ALLOCATION)
   └─> Referência: "Lei nº X/2024"
   └─> ✅ Atualiza BudgetLine.totalAllocated
   
4. Orçamento → Exercícios Fiscais
   └─> Abrir exercício (OPEN)
```

**✅ Status:** Funcional e correto

---

### Fluxo 2: Execução Orçamentária (Como Funciona)

#### 2.1 Empenho (COMMITMENT)

**Origem:** Módulo RH (folha de pagamento)

```
PayrollRun processado
    ↓
PaymentOrder criado (com budgetLineId)
    ↓
BudgetIntegrationService.createCommitmentFromPayroll()
    ↓
BudgetExecution (COMMITMENT) criado
    ↓
BudgetLine.totalCommitted atualizado
    ↓
BudgetLine.availableBalance reduzido
```

**Onde visualizar:** `Orçamento → Execução` (filtro: COMMITMENT)

**✅ Status:** Implementado e funcionando

---

#### 2.2 Liquidação (LIQUIDATION)

**Origem:** Módulo RH (no encerramento da folha)

```
PayrollRun encerrado
    ↓
BudgetIntegrationService.createLiquidationFromPayrollItem()
    ↓
BudgetExecution (LIQUIDATION) criado
    ↓
Validação: Deve ter COMMITMENT correspondente
    ↓
BudgetLine atualizado
```

**Onde visualizar:** `Orçamento → Execução` (filtro: LIQUIDATION)

**✅ Status:** Implementado e funcionando

---

#### 2.3 Pagamento (PAYMENT)

**Origem:** Módulo Tesouro (após confirmação)

```
TreasuryPayment confirmado (status: PAID)
    ↓
TreasuryPaymentService.confirmPayment()
    ↓
BudgetIntegrationService.createPaymentFromTreasury()
    ↓
BudgetExecution (PAYMENT) criado
    ↓
Validação: Deve ter LIQUIDATION correspondente
    ↓
BudgetLine atualizado
```

**Onde visualizar:** `Orçamento → Execução` (filtro: PAYMENT)

**✅ Status:** Implementado e funcionando

---

### Fluxo 3: Processo de Pagamento (Tesouro)

```
1. Tesouro → Ordens de Pagamento
   └─> Criar ordem (origem: PayrollRun ou Manual)
   └─> Validação: Verifica saldo orçamentário (se budgetLineId presente)
   
2. Tesouro → Autorizações
   └─> Criar autorização para ordem
   └─> Workflow: Aprovação hierárquica (níveis 1, 2, 3)
   └─> Validação: Verifica disponibilidade de caixa
   
3. Tesouro → Lotes de Pagamento
   └─> Criar lote
   └─> Adicionar ordens ao lote
   └─> Compromete: CashAccount.availableBalance
   
4. Tesouro → Confirmações
   └─> Confirmar pagamento
   └─> Atualiza: CashAccount.currentBalance
   └─> ✅ Cria BudgetExecution (PAYMENT) automaticamente
   └─> Registra: CashFlow (OUTFLOW)
```

**✅ Status:** Implementado e funcionando

---

## 🔗 Integrações Entre Módulos

### RH → Orçamento

**Fluxo:**
```
PayrollRun (status: COMPLETED)
    ↓
PaymentOrderService.createFromPayrollRun()
    ↓
BudgetIntegrationService.createCommitmentFromPayroll()
    ↓
BudgetExecution (COMMITMENT) criado
```

**Validações:**
- ✅ Verifica se há saldo disponível (availableBalance)
- ✅ Cria COMMITMENT com referenceId = PayrollRun.id

**Status:** ✅ Funcionando

---

### RH → Tesouro

**Fluxo:**
```
PayrollRun (status: COMPLETED)
    ↓
PaymentOrderService.createFromPayrollRun()
    ↓
PaymentOrder criado (com budgetLineId)
    ↓
PaymentOrder.status = CREATED
```

**Validações:**
- ✅ Verifica se há saldo orçamentário (se budgetLineId presente)
- ✅ Cria ordem com referência ao PayrollRun

**Status:** ✅ Funcionando

---

### Tesouro → Orçamento

**Fluxo:**
```
TreasuryPayment (status: PAID)
    ↓
TreasuryPaymentService.confirmPayment()
    ↓
BudgetIntegrationService.createPaymentFromTreasury()
    ↓
BudgetExecution (PAYMENT) criado
```

**Validações:**
- ✅ Verifica se há LIQUIDATION correspondente
- ✅ Valida que PAYMENT <= LIQUIDATION disponível
- ✅ Cria PAYMENT com referenceId = TreasuryPayment.id

**Status:** ✅ Funcionando

---

## ❓ Questões para Investigar

### 1. Como iniciar o processo de elaboração?

**Resposta:**
1. Criar Exercício Fiscal (DRAFT)
2. Criar Linhas Orçamentárias
3. **Clicar no botão Wallet (💼) em cada linha** → Criar dotações
4. Abrir Exercício Fiscal (OPEN)

**Problema Potencial:**
- ⚠️ O botão Wallet pode não ser intuitivo para novos usuários
- ⚠️ Não há indicação clara de que é necessário criar dotações antes de abrir o exercício

---

### 2. Como a execução se conecta com o Tesouro?

**Resposta:**
- RH cria PaymentOrder → Cria COMMITMENT automaticamente
- Tesouro confirma pagamento → Cria PAYMENT automaticamente
- A conexão é automática via `BudgetIntegrationService`

**Problema Potencial:**
- ⚠️ Pode não estar claro que a integração é automática
- ⚠️ Falta visibilidade do link entre PaymentOrder e BudgetExecution

---

### 3. Como visualizar o fluxo completo?

**Resposta:**
- `Orçamento → Execução`: Mostra todos os movimentos (COMMITMENT, LIQUIDATION, PAYMENT)
- `Orçamento → Linhas Orçamentais`: Mostra saldos (Alocado, Comprometido, Disponível)

**Problema Potencial:**
- ⚠️ Falta visão consolidada do fluxo end-to-end
- ⚠️ Não há rastreamento visual do link entre PaymentOrder e BudgetExecution

---

## 🎯 Recomendações

### 1. Melhorar UX do Botão de Dotações

**Problema:** Botão Wallet pode não ser intuitivo

**Solução:**
- Adicionar tooltip mais descritivo: "Gerir Dotações"
- Adicionar badge com número de dotações (se houver)
- Adicionar indicador visual se linha não tem dotações

---

### 2. Adicionar Validação ao Abrir Exercício

**Problema:** Pode abrir exercício sem dotações

**Solução:**
- Validar se há pelo menos uma dotação antes de abrir
- Mostrar aviso se linhas não têm dotações
- Opção: Bloquear abertura se não houver dotações

---

### 3. Melhorar Rastreabilidade

**Problema:** Difícil rastrear link entre PaymentOrder e BudgetExecution

**Solução:**
- Adicionar coluna "Referência" em BudgetExecution mostrando PaymentOrder.id
- Adicionar link para PaymentOrder na página de Execução
- Adicionar link para BudgetExecution na página de Ordens de Pagamento

---

### 4. Criar Dashboard de Fluxo

**Problema:** Falta visão consolidada

**Solução:**
- Dashboard mostrando:
  - Exercício Fiscal atual
  - Total alocado vs comprometido vs pago
  - Gráfico de execução (COMMITMENT → LIQUIDATION → PAYMENT)
  - Status de integrações (RH, Tesouro)

---

## 📋 Checklist de Melhorias

### UX/UI
- [ ] Melhorar tooltip do botão Wallet
- [ ] Adicionar badge com número de dotações
- [ ] Adicionar indicador se linha não tem dotações
- [ ] Adicionar validação ao abrir exercício

### Rastreabilidade
- [ ] Adicionar coluna "Referência" em BudgetExecution
- [ ] Adicionar links entre PaymentOrder e BudgetExecution
- [ ] Adicionar breadcrumbs nas páginas

### Documentação
- [ ] Criar guia visual do fluxo end-to-end
- [ ] Documentar integrações automáticas
- [ ] Criar diagrama de sequência

### Dashboard
- [ ] Criar dashboard consolidado
- [ ] Adicionar gráficos de execução
- [ ] Mostrar status de integrações

---

**Documento gerado em:** 2025-01-XX  
**Versão:** 1.0

