# 🏛️ 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.