# 🔍 Problemas Reais no Fluxo de Negócio - SIGEFP

**Data:** 2025-01-XX  
**Baseado em:** Análise real do código existente

---

## ✅ Confirmação: Funcionalidades Existentes

### Dotações
- ✅ **Existe:** Botão Wallet (💼) na página `Linhas Orçamentais`
- ✅ **Funcional:** Abre modal `BudgetLineEntriesModal`
- ✅ **Completo:** Permite criar, visualizar todas as dotações

### Integrações
- ✅ RH → Orçamento: COMMITMENT criado automaticamente
- ✅ RH → Tesouro: PaymentOrder criado automaticamente
- ✅ Tesouro → Orçamento: PAYMENT criado automaticamente

---

## 🎯 Problemas Identificados

### 1. **Falta de Clareza no Fluxo Inicial** 🔴

**Problema:**
- Usuário não sabe que precisa criar dotações antes de abrir exercício
- Botão Wallet pode não ser intuitivo
- Não há validação ao abrir exercício sem dotações

**Evidência:**
- `FiscalYearService.open()` não valida se há dotações
- Não há aviso visual se linha não tem dotações

**Impacto:**
- Usuário pode abrir exercício sem dotações
- Pode tentar criar empenhos sem saldo disponível
- Erros só aparecem durante execução

---

### 2. **Falta de Rastreabilidade Visual** 🟡

**Problema:**
- Difícil rastrear link entre PaymentOrder e BudgetExecution
- Não há indicação visual de que integrações são automáticas
- Falta visão consolidada do fluxo end-to-end

**Evidência:**
- `BudgetExecution` tem `referenceId` mas não é exibido na UI
- `PaymentOrder` tem `budgetLineId` mas não há link visual
- Página de Execução não mostra origem (PaymentOrder.id)

**Impacto:**
- Dificulta auditoria
- Dificulta troubleshooting
- Usuário não entende como tudo se conecta

---

### 3. **Falta de Validação Preventiva** 🟡

**Problema:**
- Validações só ocorrem durante execução
- Não há validação ao criar PaymentOrder se há saldo orçamentário
- Não há validação ao abrir exercício

**Evidência:**
- `PaymentOrderService.create()` não valida saldo orçamentário
- `FiscalYearService.open()` não valida dotações
- Validações só em `BudgetExecutionService.registerExecution()`

**Impacto:**
- Erros aparecem tarde no processo
- Dificulta planejamento
- Pode criar ordens sem saldo disponível

---

### 4. **Falta de Documentação Visual** 🟡

**Problema:**
- Não há diagrama visual do fluxo
- Não há indicação de que integrações são automáticas
- Falta guia passo a passo

**Impacto:**
- Usuário não entende o fluxo completo
- Dificulta onboarding
- Dificulta treinamento

---

## 🔧 Correções Recomendadas

### Prioridade 1: Melhorar UX do Fluxo Inicial

#### 1.1 Adicionar Validação ao Abrir Exercício

**Arquivo:** `sigefp-budget/src/main/java/br/gov/sigefp/budget/service/FiscalYearService.java`

```java
public FiscalYearDTO open(UUID id) {
    FiscalYear fiscalYear = fiscalYearRepository.findById(id)
        .orElseThrow(() -> new ResourceNotFoundException("Exercício fiscal não encontrado: " + id));

    // NOVO: Validar se há dotações
    long budgetLinesWithAllocations = budgetLineRepository.countByFiscalYearIdAndHasAllocations(id);
    if (budgetLinesWithAllocations == 0) {
        throw new BusinessException(
            "Não é possível abrir exercício fiscal sem dotações. Crie dotações nas linhas orçamentárias primeiro.",
            "NO_ALLOCATIONS",
            HttpStatus.PRECONDITION_FAILED
        );
    }

    // ... resto do código
}
```

#### 1.2 Melhorar Indicador Visual de Dotações

**Arquivo:** `sigefp-frontend/src/modules/budget/pages/BudgetLinesPage.tsx`

```typescript
// Adicionar badge com número de dotações
{line.totalAllocated > 0 && (
  <Badge variant="success" className="ml-2">
    {formatCurrency(line.totalAllocated)}
  </Badge>
)}

// Adicionar indicador se não tem dotações
{line.totalAllocated === 0 && (
  <Badge variant="warning" className="ml-2">
    Sem dotação
  </Badge>
)}
```

#### 1.3 Melhorar Tooltip do Botão

**Arquivo:** `sigefp-frontend/src/modules/budget/pages/BudgetLinesPage.tsx`

```typescript
<Button
  variant="ghost"
  size="sm"
  onClick={() => setSelectedLineForEntries(line)}
  className="text-green-600 hover:bg-green-50"
  title={`Gerir Dotações - ${line.totalAllocated > 0 ? formatCurrency(line.totalAllocated) : 'Sem dotação'}`}
>
  <Wallet className="w-4 h-4" />
</Button>
```

---

### Prioridade 2: Melhorar Rastreabilidade

#### 2.1 Adicionar Coluna de Referência em BudgetExecution

**Arquivo:** `sigefp-frontend/src/modules/budget/pages/BudgetExecutionPage.tsx`

```typescript
{
  key: 'referenceId',
  header: 'Referência',
  cell: (execution: BudgetExecutionDTO) => {
    if (!execution.referenceId) return '-';
    return (
      <Link 
        to={`/treasury/orders/${execution.referenceId}`}
        className="text-blue-600 hover:underline"
      >
        {execution.referenceId.substring(0, 8)}...
      </Link>
    );
  },
}
```

#### 2.2 Adicionar Link para BudgetExecution em PaymentOrder

**Arquivo:** `sigefp-frontend/src/modules/treasury/pages/PaymentOrdersPage.tsx`

```typescript
{
  key: 'budgetExecution',
  header: 'Execução Orçamentária',
  cell: (order: PaymentOrderDTO) => {
    if (!order.budgetLineId) return '-';
    return (
      <Link 
        to={`/budget/execution?budgetLineId=${order.budgetLineId}`}
        className="text-blue-600 hover:underline"
      >
        Ver Execução
      </Link>
    );
  },
}
```

---

### Prioridade 3: Adicionar Validações Preventivas

#### 3.1 Validar Saldo ao Criar PaymentOrder

**Arquivo:** `sigefp-treasury/src/main/java/br/gov/sigefp/treasury/service/PaymentOrderService.java`

```java
public PaymentOrderDTO create(CreatePaymentOrderDTO dto) {
    // NOVO: Validar saldo orçamentário se budgetLineId presente
    if (dto.getBudgetLineId() != null) {
        budgetIntegrationService.validateBudgetAvailability(
            dto.getBudgetLineId(),
            dto.getNetAmount()
        );
    }
    
    // ... resto do código
}
```

---

### Prioridade 4: Criar Documentação Visual

#### 4.1 Criar Diagrama de Fluxo

Criar arquivo `FLUXO_VISUAL_COMPLETO.md` com:
- Diagrama de sequência
- Fluxo de estados
- Integrações automáticas destacadas

---

## 📋 Checklist de Implementação

### UX/UI
- [ ] Adicionar validação ao abrir exercício fiscal
- [ ] Adicionar badge com valor de dotação nas linhas
- [ ] Adicionar indicador se linha não tem dotação
- [ ] Melhorar tooltip do botão Wallet

### Rastreabilidade
- [ ] Adicionar coluna "Referência" em BudgetExecution
- [ ] Adicionar link para PaymentOrder em BudgetExecution
- [ ] Adicionar link para BudgetExecution em PaymentOrder
- [ ] Adicionar breadcrumbs nas páginas

### Validações
- [ ] Validar saldo orçamentário ao criar PaymentOrder
- [ ] Validar dotações ao abrir exercício fiscal
- [ ] Adicionar validações preventivas

### Documentação
- [ ] Criar diagrama visual do fluxo
- [ ] Documentar integrações automáticas
- [ ] Criar guia passo a passo visual

---

## 🎯 Resumo dos Problemas

| Problema | Prioridade | Impacto | Solução |
|----------|------------|---------|---------|
| Falta clareza no fluxo inicial | 🔴 Alta | Usuário não sabe como começar | Validação + UX melhorada |
| Falta rastreabilidade visual | 🟡 Média | Dificulta auditoria | Links entre páginas |
| Falta validação preventiva | 🟡 Média | Erros aparecem tarde | Validações antecipadas |
| Falta documentação visual | 🟡 Média | Dificulta onboarding | Diagramas e guias |

---

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

