# 🚀 PLANO MESTRE INTEGRADO DE IMPLEMENTAÇÃO: SIGEFP

**Versão:** 2.0 (Integrado - Auto + Antigravity)  
**Data:** Dezembro 2024  
**Objetivo:** Transitar de um protótipo funcional (~90%) para um Sistema de Estado de alta disponibilidade, corrigindo riscos críticos e completando todas as funcionalidades pendentes.

---

## 📊 STATUS ATUAL (Baseado em Ambas as Análises)

### Backend: ~90-95% Completo
- ✅ Estrutura completa (100%)
- ✅ Integrações funcionais (100%)
- ⚠️ Testes (0% - CRÍTICO)
- ⚠️ Riscos técnicos identificados

### Frontend: ~70-75% Completo
- ✅ Módulos ADMIN, ORG, RH, COMMON (100%)
- ❌ Módulos BUDGET, TREASURY (0%)
- ⚠️ Dashboard com dados mockados

---

## 🏗️ FASE 1: HARDENING E SEGURANÇA (PRIORIDADE CRÍTICA)

**Duração Estimada:** 2-3 semanas  
**Objetivo:** Eliminar riscos de integridade de dados e preparar o sistema para escala nacional.

### 1.1 Refatoração de Identificadores (UUID Bridge) 🔴 CRÍTICO

**Problema Identificado por Antigravity:**
- `PaymentOrderService` usa `.hashCode()` para referências Long entre módulos
- Risco de colisão em volumes massivos de dados

**Ações:**
- [ ] **Análise do código atual**
  - Localizar todas as ocorrências de `.hashCode()` para conversão UUID → Long
  - Identificar impactos em outros módulos
- [ ] **Implementar estratégia de ID sequencial real**
  - Criar tabela de mapeamento UUID ↔ Long (se necessário)
  - OU migrar referências cruzadas para UUID nativo no banco de dados
- [ ] **Arquivos Alvo:**
  - `sigefp-treasury/src/main/java/br/gov/sigefp/treasury/service/PaymentOrderService.java`
  - `sigefp-budget/src/main/java/br/gov/sigefp/budget/integration/BudgetIntegrationService.java`
  - Verificar outros serviços que usam conversão de IDs

**Critérios de Sucesso:**
- ✅ Zero uso de `.hashCode()` para conversão de IDs
- ✅ Testes de integridade de dados passando
- ✅ Documentação da estratégia de IDs

---

### 1.2 Iniciação da Suíte de Testes (0% → 40%) 🔴 CRÍTICO

**Foco:** Motores de Cálculo e Integração Orçamentária

#### Testes Unitários (Prioridade ALTA)

**1. PayrollServiceTest**
- [ ] Validar cálculos de INPS
- [ ] Validar cálculos de IRPS (escalonados 10-25%)
- [ ] Validar cálculos de Selo
- [ ] Validar geração de itens de folha
- [ ] Validar processamento em lote

**2. BudgetExecutionServiceTest**
- [ ] Testar bloqueio de saldo insuficiente
- [ ] Validar criação de COMMITMENT
- [ ] Validar criação de LIQUIDATION
- [ ] Validar criação de PAYMENT
- [ ] Validar cálculos de saldo disponível

**3. AgentServiceTest**
- [ ] Validar validações do Decreto 12-A/94
- [ ] Validar regra de 3 anos de avaliações "Bom" para promoção
- [ ] Validar criação de eventos de carreira
- [ ] Validar estatísticas de agentes

**4. TaxServiceTest**
- [ ] Validar escalões de IRPS
- [ ] Validar regras globais de desconto
- [ ] Validar escalões ativos por data

#### Testes de Integração (Prioridade ALTA)

**5. Fluxo RH → Budget → Treasury**
- [ ] Testar: Criação de folha → Compromisso orçamentário
- [ ] Testar: Pagamento → Execução orçamentária
- [ ] Testar: Integridade de dados entre módulos
- [ ] Testar: Validações cruzadas

**6. BudgetIntegrationServiceTest**
- [ ] `createCommitmentFromPayrollItem()` - Integração RH → Budget
- [ ] `createPaymentFromTreasury()` - Integração Treasury → Budget
- [ ] Conversão de períodos (fiscalYear + month → periodId)

**Estrutura de Testes:**
```
sigefp-rh/src/test/java/br/gov/sigefp/rh/service/
├── PayrollServiceTest.java
├── AgentServiceTest.java
└── TaxServiceTest.java

sigefp-budget/src/test/java/br/gov/sigefp/budget/service/
├── BudgetExecutionServiceTest.java
└── integration/
    └── BudgetIntegrationServiceTest.java

sigefp-treasury/src/test/java/br/gov/sigefp/treasury/service/
└── PaymentOrderServiceTest.java
```

**Critérios de Sucesso:**
- ✅ Cobertura de testes: 40% mínimo
- ✅ Todos os testes de integração passando
- ✅ CI/CD configurado para executar testes

---

### 1.3 Padronização de Exceções e Respostas de Erro

**Ação:** Expandir o `GlobalExceptionHandler` com códigos de erro específicos

**Exceções Customizadas a Criar:**
- [ ] `InsufficientBudgetException` - Saldo orçamentário insuficiente
- [ ] `AgentInactiveException` - Agente inativo
- [ ] `PeriodClosedException` - Período fechado
- [ ] `InvalidPromotionException` - Promoção inválida (Decreto 12-A/94)
- [ ] `DuplicateEntityException` - Entidade duplicada
- [ ] `BusinessRuleException` - Regra de negócio violada

**Estrutura de ErrorCode:**
```java
public enum ErrorCode {
    INSUFFICIENT_BUDGET("BUDGET_001", "Saldo orçamentário insuficiente"),
    AGENT_INACTIVE("RH_001", "Agente inativo"),
    PERIOD_CLOSED("RH_002", "Período de folha fechado"),
    INVALID_PROMOTION("RH_003", "Promoção inválida: requer 3 anos de avaliações 'Bom'"),
    // ...
}
```

**Critérios de Sucesso:**
- ✅ Todas as exceções customizadas implementadas
- ✅ Códigos de erro padronizados
- ✅ Logging estruturado de exceções
- ✅ Documentação de códigos de erro

---

## 💻 FASE 2: COMPLETUDE DO FRONTEND (MÓDULOS PLACEHOLDER)

**Duração Estimada:** 3-4 semanas  
**Objetivo:** Transformar rotas vazias em interfaces funcionais baseadas na lógica já existente no backend.

### 2.1 Módulo de Orçamento (Budget UI) ❌ 0% → 100%

#### Páginas a Implementar

**1. FiscalYearsPage** (`/budget/fiscal-years`)
- [ ] Listagem de anos fiscais (com status: DRAFT, OPEN, CLOSED)
- [ ] Criar novo exercício fiscal
- [ ] Abrir exercício (com validações)
- [ ] Fechar exercício (com validações)
- [ ] Visualizar exercício corrente
- [ ] Filtros por status e ano

**Componentes:**
- [ ] `FiscalYearFormModal` - Formulário de criação
- [ ] `FiscalYearStatusBadge` - Badge de status
- [ ] `FiscalYearActions` - Botões de ação (abrir/fechar)

**Hooks:**
- [ ] `useFiscalYears` - Hook para gestão de anos fiscais

**Serviços:**
- [ ] `budgetService.ts` - Serviço de orçamento

**Endpoints Backend (já existem):**
- `GET /api/budget/fiscal-years`
- `GET /api/budget/fiscal-years/current`
- `POST /api/budget/fiscal-years`
- `POST /api/budget/fiscal-years/{id}/open`
- `POST /api/budget/fiscal-years/{id}/close`

---

**2. BudgetLinesPage** (`/budget/lines`)
- [ ] Listagem de linhas orçamentárias (com paginação)
- [ ] Visualização de saldos (alocado, comprometido, liquidado, disponível)
- [ ] Criar nova linha orçamentária
- [ ] Editar linha orçamentária
- [ ] Filtros por exercício fiscal, ministério, unidade orgânica
- [ ] Visualização de execuções por linha

**Componentes:**
- [ ] `BudgetLineFormModal` - Formulário de criação/edição
- [ ] `BudgetLineCard` - Card com saldos
- [ ] `BudgetExecutionChart` - Gráfico de execução
- [ ] `AdvancedFilters` - Filtros avançados

**Hooks:**
- [ ] `useBudgetLines` - Hook para gestão de linhas
- [ ] `useBudgetExecution` - Hook para execuções

**Endpoints Backend (já existem):**
- `GET /api/budget/lines`
- `GET /api/budget/lines/{id}`
- `POST /api/budget/lines`
- `PUT /api/budget/lines/{id}`

---

**3. BudgetExecutionPage** (`/budget/execution`)
- [ ] Listagem de execuções orçamentárias
- [ ] Filtros por linha, período, tipo de movimento
- [ ] Visualização de movimentos (COMMITMENT, LIQUIDATION, PAYMENT)
- [ ] Gráficos de execução por período
- [ ] Exportação de relatórios

**Componentes:**
- [ ] `ExecutionTable` - Tabela de execuções
- [ ] `ExecutionFilters` - Filtros
- [ ] `ExecutionChart` - Gráficos de execução
- [ ] `ExportButton` - Exportação

**Hooks:**
- [ ] `useBudgetExecution` - Hook para execuções

**Endpoints Backend (já existem):**
- `GET /api/budget/execution`
- `POST /api/budget/execution`

---

### 2.2 Módulo de Tesouraria (Treasury UI) ❌ 0% → 100%

#### Páginas a Implementar

**1. PaymentBatchesPage** (`/treasury/batches`)
- [ ] Listagem de lotes de pagamento
- [ ] Criar novo lote
- [ ] Alterar status do lote
- [ ] Visualizar ordens do lote
- [ ] Filtros por período, ministério, status
- [ ] Integração com Banco Central (preparado)

**Componentes:**
- [ ] `PaymentBatchFormModal` - Formulário de criação
- [ ] `PaymentBatchStatusBadge` - Badge de status
- [ ] `PaymentBatchActions` - Ações do lote

**Hooks:**
- [ ] `usePaymentBatches` - Hook para lotes

**Endpoints Backend (já existem):**
- `GET /api/treasury/payment-batches`
- `GET /api/treasury/payment-batches/{id}`
- `POST /api/treasury/payment-batches`
- `POST /api/treasury/payment-batches/{id}/status`

---

**2. PaymentOrdersPage** (`/treasury/orders`)
- [ ] Listagem de ordens de pagamento
- [ ] Visualizar detalhes da ordem
- [ ] Alterar status da ordem
- [ ] Filtros por lote, status, agente
- [ ] Visualização de pagamentos confirmados

**Componentes:**
- [ ] `PaymentOrderCard` - Card da ordem
- [ ] `PaymentOrderDetails` - Detalhes
- [ ] `PaymentOrderStatusBadge` - Badge de status

**Hooks:**
- [ ] `usePaymentOrders` - Hook para ordens

**Endpoints Backend (já existem):**
- `GET /api/treasury/payment-orders`
- `GET /api/treasury/payment-orders/{id}`
- `POST /api/treasury/payment-orders`
- `POST /api/treasury/payment-orders/{id}/status`

---

**3. TreasuryPaymentsPage** (`/treasury/confirmations`)
- [ ] Listagem de pagamentos confirmados
- [ ] Registrar confirmação de pagamento
- [ ] Visualizar histórico de pagamentos
- [ ] Filtros por ordem, status, data

**Componentes:**
- [ ] `TreasuryPaymentFormModal` - Formulário de confirmação
- [ ] `PaymentHistoryTable` - Histórico

**Hooks:**
- [ ] `useTreasuryPayments` - Hook para pagamentos

**Endpoints Backend (já existem):**
- `GET /api/treasury/payments`
- `POST /api/treasury/payments`

---

### 2.3 Dashboard Real-Time ⚠️ 50% → 100%

**Ação:** Substituir gráficos mockados por chamadas reais aos endpoints

**Implementações:**
- [ ] Integrar `/api/rh/agents/stats` para estatísticas de agentes
- [ ] Criar endpoint `/api/budget/execution/stats` para estatísticas orçamentárias
- [ ] Criar endpoint `/api/treasury/payments/stats` para estatísticas de pagamentos
- [ ] Implementar gráficos reais (Chart.js ou Recharts)
- [ ] Atualização em tempo real (polling ou WebSocket)
- [ ] Filtros por período no dashboard

**Componentes:**
- [ ] `DashboardStats` - Cards de estatísticas
- [ ] `DashboardCharts` - Gráficos
- [ ] `DashboardFilters` - Filtros de período

**Critérios de Sucesso:**
- ✅ Zero dados mockados no dashboard
- ✅ Gráficos funcionais com dados reais
- ✅ Atualização automática de métricas

---

## ⚖️ FASE 3: LÓGICA DE NEGÓCIO E CONFORMIDADE LEGAL

**Duração Estimada:** 2-3 semanas  
**Objetivo:** Assegurar que o sistema execute as regras do Decreto 12-A/94 de forma automática.

### 3.1 Automação de Progressão/Promoção

**Problema:** Lógica de fechamento de ciclo de avaliação ainda é manual

**Ações:**
- [ ] **Criar PerformanceEvaluationService**
  - Registrar avaliações de desempenho
  - Calcular pontuação acumulada
  - Validar requisitos para promoção (3 anos de "Bom")
- [ ] **Integrar com CareerEventService**
  - Ao atingir pontuação necessária, sugerir promoção
  - Criar evento de carreira automaticamente
  - Atualizar salário baseado na nova posição
- [ ] **Interface Frontend**
  - Página de avaliações de desempenho
  - Dashboard de progressão de carreira
  - Alertas de promoções disponíveis

**Arquivos a Criar:**
- `sigefp-rh/src/main/java/br/gov/sigefp/rh/service/PerformanceEvaluationService.java`
- `sigefp-rh/src/main/java/br/gov/sigefp/rh/domain/PerformanceEvaluation.java`
- `sigefp-rh/src/main/java/br/gov/sigefp/rh/api/PerformanceEvaluationController.java`
- `sigefp-frontend/src/modules/rh/pages/PerformanceEvaluationsPage.tsx`

**Critérios de Sucesso:**
- ✅ Sistema sugere promoções automaticamente
- ✅ Validações do Decreto 12-A/94 implementadas
- ✅ Interface para gestão de avaliações

---

### 3.2 Fechamento de Ciclo de Folha

**Ação:** Implementar no Frontend a funcionalidade de "Encerrar Período"

**Implementações:**
- [ ] **Backend: Endpoint de Encerramento**
  - `POST /api/rh/payroll-runs/{id}/close`
  - Validar que todos os itens foram processados
  - Disparar liquidação orçamentária definitiva
  - Atualizar status do período
- [ ] **Frontend: Interface de Encerramento**
  - Botão "Encerrar Período" na PayrollRunsPage
  - Modal de confirmação com resumo
  - Visualização de status do encerramento
  - Histórico de períodos encerrados

**Fluxo:**
1. Processar folha (`/payroll-runs/{id}/process`)
2. Gerar itens (`/payroll-runs/{id}/generate`)
3. Validar itens
4. Encerrar período (`/payroll-runs/{id}/close`)
5. Criar execuções orçamentárias (LIQUIDATION)

**Critérios de Sucesso:**
- ✅ Encerramento de período funcional
- ✅ Liquidação orçamentária automática
- ✅ Validações de integridade

---

## 📊 FASE 4: MELHORIAS E OTIMIZAÇÕES (PRIORIDADE MÉDIA)

**Duração Estimada:** 2-3 semanas

### 4.1 Performance e Otimização

- [ ] Implementar cache (Spring Cache) para dados mestres
- [ ] Otimizar queries N+1
- [ ] Adicionar índices adicionais no banco
- [ ] Implementar paginação em todas as listagens
- [ ] Batch processing para operações em massa

### 4.2 Relatórios e Exportação

- [ ] Endpoints de relatórios consolidados
- [ ] Exportação para Excel/PDF
- [ ] Relatórios de execução orçamentária
- [ ] Relatórios de folha de pagamento
- [ ] Relatórios de pagamentos

### 4.3 Documentação

- [ ] Documentação Swagger completa
- [ ] Guias de uso
- [ ] Documentação de API
- [ ] Vídeos tutoriais

---

## 📊 MÉTRICAS DE SUCESSO DO PLANO

| KPI | Atual | Meta Fase 1 | Meta Fase 2 | Meta Fase 3 | Meta Final |
|:---|:---|:---|:---|:---|:---|
| **Cobertura de Testes** | 0% | 40% | 50% | 60% | 70% |
| **Interfaces Financeiras** | Placeholder | - | 100% | 100% | 100% |
| **Risco de Colisão IDs** | Alto | Zero | Zero | Zero | Zero |
| **Dashboard** | Mockado | - | Real-Time | Real-Time | Real-Time |
| **Conformidade Legal** | Manual | - | - | Automático | Automático |
| **Frontend Completo** | 75% | 75% | 100% | 100% | 100% |
| **Backend Completo** | 90% | 95% | 95% | 98% | 98% |

---

## 🎯 CRONOGRAMA SUGERIDO

### Semana 1-2: Fase 1.1 e 1.2 (Hardening)
- Refatoração de IDs
- Início dos testes

### Semana 3-4: Fase 1.3 e 2.1 (Exceções + Budget UI)
- Padronização de exceções
- Implementação do módulo Budget

### Semana 5-6: Fase 2.2 e 2.3 (Treasury UI + Dashboard)
- Implementação do módulo Treasury
- Dashboard real-time

### Semana 7-8: Fase 3 (Conformidade Legal)
- Automação de promoções
- Fechamento de ciclo de folha

### Semana 9-10: Fase 4 (Melhorias)
- Performance
- Relatórios
- Documentação

**Total Estimado:** 10 semanas (2.5 meses)

---

## ✅ CHECKLIST DE VALIDAÇÃO

Antes de considerar cada fase completa, validar:

### Fase 1 (Hardening)
- [ ] Zero uso de `.hashCode()` para IDs
- [ ] Cobertura de testes ≥ 40%
- [ ] Todas as exceções customizadas implementadas
- [ ] Testes de integração passando

### Fase 2 (Frontend)
- [ ] Todas as páginas Budget implementadas
- [ ] Todas as páginas Treasury implementadas
- [ ] Dashboard com dados reais
- [ ] Testes E2E básicos

### Fase 3 (Conformidade)
- [ ] Sistema sugere promoções automaticamente
- [ ] Encerramento de período funcional
- [ ] Validações do Decreto 12-A/94 implementadas

### Fase 4 (Melhorias)
- [ ] Cache implementado
- [ ] Relatórios funcionais
- [ ] Documentação completa

---

## 📝 NOTAS IMPORTANTES

1. **Validação de Auditoria**: Sempre validar a trilha de auditoria em `STATUS_PROJETO.md` para garantir que nenhuma regra do Decreto 12-A/94 seja violada.

2. **Priorização**: Fase 1 é CRÍTICA e deve ser feita antes de qualquer deploy em produção.

3. **Testes**: Não avançar para Fase 2 sem completar pelo menos 40% de cobertura de testes.

4. **Integrações**: Testar todas as integrações entre módulos após cada fase.

5. **Documentação**: Documentar todas as decisões técnicas e mudanças.

---

**Última atualização:** Dezembro 2024  
**Versão:** 2.0 (Integrado)  
**Baseado em:** PLANO_MESTRE_IMPLEMENTACAO.md (Antigravity) + ANALISE_COMPLETA_PROJETO.md (Auto)

