124 lines
5.5 KiB
Markdown
124 lines
5.5 KiB
Markdown
# 🏛️ Arquitetura Completa de Orçamento para GFP/SIGFIP
|
|
|
|
**Data:** 2025-12-22
|
|
**Objetivo:** Documentar a arquitetura técnica e funcional do Módulo de Orçamento, implementada e otimizada pelo Antigravity/Deepmind, garantindo conformidade com normas de Gestão Financeira Pública (PFM).
|
|
|
|
---
|
|
|
|
## 📋 Entendimento & Conformidade
|
|
|
|
### Filosofia Arquitetural
|
|
O módulo foi desenhado para seguir o princípio de **"Single Source of Truth"** (Fonte Única de Verdade) para todas as autorizações de gastos do governo. Ele não apenas armazena números, mas rastreia a **Autoridade Legal** para gastar.
|
|
|
|
### Pilares Fundamentais (Implementados)
|
|
1. **Dotação baseada em Direito (Appropriation):** O dinheiro não "aparece" no saldo. Ele entra via `BudgetEntry` (Lei, Decreto).
|
|
2. **Estrutura vs. Financiamento:** A Rubrica (`BudgetLine`) define *onde* se pode gastar, mas não *quanto*. O valor vem das Entradas.
|
|
3. **Execução Rígida:** Nenhum gasto ocorre sem saldo de Dotação (Allocation) e Saldo Financeiro (Treasury).
|
|
4. **Imutabilidade Contábil:** Transações passadas não são editadas, apenas estornadas ou corrigidas com novas transações.
|
|
|
|
---
|
|
|
|
## 🏗️ Estrutura de Componentes
|
|
|
|
### 1. **BudgetEntry** (O Coração da Dotação)
|
|
Entidade responsável por injetar "autoridade de gasto" no sistema.
|
|
|
|
**Propósito:** Registrar movimentos legais de crédito orçamentário.
|
|
**Fluxo:** `Lei do Orçamento` -> `BudgetEntry (INITIAL_ALLOCATION)` -> `BudgetLine.totalAllocated`.
|
|
|
|
**Campos:**
|
|
- `id` (UUID)
|
|
- `type` (Enum: INITIAL_ALLOCATION, SUPPLEMENTARY_CREDIT, CANCELLATION, TRANSFER_IN, TRANSFER_OUT)
|
|
- `amount` (BigDecimal) - Sempre positivo. O tipo define se soma ou subtrai.
|
|
- `transactionDate` (LocalDate) - Data da Lei/Ato.
|
|
- `documentReference` (String) - Ex: "Lei nº 12/2024".
|
|
- `budgetLine` (ManyToOne) - A Rubrica afetada.
|
|
|
|
### 2. **BudgetLine** (A Estrutura de Despesa)
|
|
Representa a "conta" onde a despesa acontece (Ex: "Aquisição de Medicamentos").
|
|
|
|
**Otimização de Performance (Antigravity):**
|
|
Implementado padrão **Read-Model optimization** usando `@Formula` do Hibernate para evitar N+1 e N+2 queries.
|
|
- `totalAllocated`: Soma dinâmica SQL de todas as `BudgetEntry` relacionadas.
|
|
- `totalCommitted`: Soma dinâmica SQL de todas as `BudgetExecution` relacionadas.
|
|
- `availableBalance`: Calculado em memória (`Allocated - Committed`).
|
|
|
|
### 3. **FiscalYear** (Controle Temporal)
|
|
Gerencia o ciclo de vida do ano orçamentário.
|
|
|
|
**Segurança de Memória (Anti-Crash):**
|
|
Utiliza queries de contagem (`COUNT`) otimizadas para validar o fechamento (`close()`).
|
|
- Impede fechamento se houver `COMMITMENT` (Empenho) sem `LIQUIDATION` ou anulação.
|
|
- Garante integridade referencial temporal.
|
|
|
|
### 4. **BudgetExecution** (O Consumo)
|
|
Registra o consumo do orçamento em estágios.
|
|
|
|
**Estágios (MovementType):**
|
|
1. **COMMITMENT (Empenho):** Reserva o saldo. O dinheiro ainda está lá, mas não pode ser usado por outro.
|
|
2. **LIQUIDATION (Liquidação):** Reconhece a dívida (bem entregue/serviço prestado).
|
|
3. **PAYMENT (Pagamento):** Saída financeira (Integração com Tesouro).
|
|
|
|
---
|
|
|
|
## 🔄 Workflow & Integrações
|
|
|
|
### Fluxo 1: Criação do Orçamento (Aprovação)
|
|
```plantuml
|
|
[Legislativo] -> (Aprova Lei)
|
|
(Aprova Lei) -> [Sistema] : Cria BudgetEntry (INITIAL)
|
|
[Sistema] -> [BudgetLine] : Atualiza totalAllocated (automático)
|
|
```
|
|
|
|
### Fluxo 2: Execução de Despesa (RH/Compras)
|
|
```plantuml
|
|
[Módulo RH] -> [IntegrationService] : Solicita Empenho (COMMITMENT)
|
|
[IntegrationService] -> [BudgetLine] : Verifica availableBalance
|
|
[IntegrationService] -> [BudgetExecution] : Cria Registro
|
|
[BudgetLine] -> [BudgetLine] : Reduz availableBalance (automático)
|
|
```
|
|
|
|
### Fluxo 3: Pagamento (Tesouraria) e Reconciliação
|
|
```plantuml
|
|
[Tesouraria] -> [PaymentOrder] : Executa Pagamento
|
|
[PaymentOrder] -> [IntegrationService] : Notifica Pagamento
|
|
[IntegrationService] -> [BudgetExecution] : Cria Registro (PAYMENT)
|
|
[BudgetExecution] -> [BudgetLine] : Atualiza status de execução
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Serviços Principais (Implementados)
|
|
|
|
### **BudgetLineService**
|
|
- Responsável pela "Visão do Gestor".
|
|
- DTOs enriquecidos com cálculos de saldo em tempo real.
|
|
- **Performance:** Otimizado para listar milhares de rubricas sem derrubar o banco.
|
|
|
|
### **BudgetEntryService**
|
|
- Responsável pela "Visão do Contador/Legislador".
|
|
- Garante que créditos suplementares tenham fonte de recursos.
|
|
|
|
### **BudgetIntegrationService**
|
|
- O "Gateway" seguro.
|
|
- Protege o módulo de chamadas inválidas de RH e Tesouraria.
|
|
- Exige `ReferenceId` (ID do Pedido, ID da Folha) para evitar lançamentos órfãos.
|
|
|
|
---
|
|
|
|
## 🔐 Regras de Negócio Rígidas (Strict PFM)
|
|
|
|
1. **Bloqueio de Despesa:** É *impossível* criar um `COMMITMENT` se `amount > availableBalance`. (Exceptions de negócio).
|
|
2. **Imutabilidade de Histórico:** Uma `BudgetExecution` não pode ser deletada se já tiver etapas posteriores (ex: não pode apagar Empenho se já tem Liquidação). Deve-se estornar a Liquidação primeiro.
|
|
3. **Fechamento Seguro:** Ano Fiscal só fecha se *todas* as contas baterem (Zero pendências).
|
|
|
|
---
|
|
|
|
## 🚀 Status Técnico Atual
|
|
- **Arquitetura:** ✅ Completa e Validada.
|
|
- **Testes:** ✅ Testes Unitários Críticos Implementados (`BudgetLineServiceTest`, `FiscalYearServiceTest`).
|
|
- **Performance:** ✅ Otimização N+2 e OOM resolvidas.
|
|
- **Frontend:** ✅ Telas de Gestão de Dotação e Execução operacionais.
|
|
|
|
Esta arquitetura garante que o `sigefp-budget` seja não apenas um "caderninho de anotações", mas um **Motor de Controle Financeiro** robusto e escalável.
|