# 🔍 Análise Profunda: Módulo RH & Folha de Pagamento ## Sistema de Gestão de Função Pública (SIGEFP) **Data:** 2025-01-27 **Objetivo:** Verificar conformidade, coerência lógica e adequação para sistema governamental de gestão de função pública --- ## 📋 Índice 1. [Resumo Executivo](#1-resumo-executivo) 2. [Análise de Conformidade](#2-análise-de-conformidade) 3. [Análise de Arquitetura e Estrutura](#3-análise-de-arquitetura-e-estrutura) 4. [Análise de Lógica de Negócio](#4-análise-de-lógica-de-negócio) 5. [Análise de Integrações](#5-análise-de-integrações) 6. [Análise de Validações e Regras](#6-análise-de-validações-e-regras) 7. [Problemas Identificados](#7-problemas-identificados) 8. [Recomendações e Melhorias](#8-recomendações-e-melhorias) 9. [Checklist de Conformidade](#9-checklist-de-conformidade) --- ## 1. Resumo Executivo ### 1.1 Visão Geral O módulo RH & Folha de Pagamento do SIGEFP é responsável por: - Gestão de agentes/funcionários públicos - Gestão de carreiras e estruturas salariais - Processamento de folha de pagamento - Integração com Orçamento e Tesouro - Gestão de ausências e avaliações de desempenho ### 1.2 Status Geral | Aspecto | Status | Nota | Observações | |---------|--------|------|-------------| | **Arquitetura** | ✅ Boa | 8/10 | Entidades bem definidas, relacionamentos corretos | | **Lógica de Negócio** | ⚠️ Parcial | 7/10 | Cálculo de folha robusto, mas com algumas imprecisões | | **Conformidade Legal** | ⚠️ Parcial | 6/10 | Validação de promoções existe, mas falta tempo mínimo | | **Integrações** | ⚠️ Parcial | 7/10 | RH→Orçamento OK, RH→Tesouro falta chamada automática | | **Validações** | ⚠️ Parcial | 6/10 | Validações básicas OK, falta validações de conformidade | | **Rastreabilidade** | ✅ Boa | 8/10 | Histórico completo de mudanças e eventos | **Nota Geral:** 7.0/10 ### 1.3 Principais Descobertas #### ✅ Pontos Fortes 1. **Validação de Promoções Implementada:** Método `validatePromotion()` existe e valida avaliações conforme Decreto 12-A/94 2. **Integração com Orçamento Funcionando:** COMMITMENT e LIQUIDATION criados automaticamente 3. **Cálculo de Folha Robusto:** Suporta proventos, descontos, impostos progressivos 4. **Rastreabilidade Completa:** Histórico de mudanças e eventos de carreira #### ⚠️ Pontos de Atenção 1. **Integração RH → Tesouro:** Método `generateOrdersFromPayrollRun()` existe, mas não é chamado automaticamente 2. **Cálculo de Faltas:** Assume 30 dias fixos (impreciso em alguns meses) 3. **Abono de Família:** Valor hardcoded (1000 XOF) não configurável 4. **Validação de Promoções:** Falta validação de tempo mínimo no escalão --- ## 2. Análise de Conformidade ### 2.1 Conformidade com Padrões de Gestão Pública #### ✅ Pontos Positivos 1. **Estrutura de Carreira Hierárquica** - ✅ Regimes de Carreira (CareerRegime) - ✅ Categorias Salariais (SalaryCategory) - ✅ Escalões (SalaryGrade) - ✅ Níveis (SalaryStep) - ✅ Tabela Salarial com Vigência (SalaryGrid) 2. **Tipos de Nomeação** - ✅ PROVISORIA, DEFINITIVA, CONTRATO_PROVIMENTO, CONTRATO_TERMO - ✅ Mapeamento correto entre tipos de contrato e nomeação 3. **Situação Funcional** - ✅ ATIVIDADE_NO_QUADRO, ATIVIDADE_FORA_DO_QUADRO - ✅ Histórico de mudanças de status (AgentStatusHistory) 4. **Rastreabilidade de Atos Administrativos** - ✅ Referência a atos legais (legalActReference) - ✅ Histórico de eventos de carreira (CareerEvent) #### ⚠️ Pontos de Atenção 1. **Falta de Validação de Conformidade Legal** - ❌ Não há validação explícita de conformidade com Decreto 12-A/94 - ❌ Não há validação de requisitos para promoções - ❌ Não há validação de tempo mínimo em escalão para progressão 2. **Falta de Regras de Estatuto** - ❌ Não há validação de tempo de serviço para progressão - ❌ Não há validação de avaliação de desempenho para promoção - ❌ Não há validação de requisitos de habilitação literária 3. **Falta de Controle de Conformidade Orçamentária** - ⚠️ Validação de linha orçamentária existe, mas não valida se está correta - ⚠️ Não valida se o agente pertence à unidade orgânica da linha orçamentária --- ### 2.2 Conformidade com Normas Contábeis #### ✅ Pontos Positivos 1. **Classificação Econômica** - ✅ Códigos econômicos para proventos (311100, 311102, 312101) - ✅ Códigos econômicos para descontos (312100) - ✅ Integração com linhas orçamentárias por código econômico 2. **Rastreabilidade Orçamentária** - ✅ Cada PayrollItem tem referência a BudgetLine - ✅ Integração automática com módulo Orçamento #### ⚠️ Pontos de Atenção 1. **Falta de Validação de Classificação** - ❌ Não valida se código econômico está correto para o tipo de provento/desconto - ❌ Não valida se código econômico existe na estrutura orçamentária --- ## 3. Análise de Arquitetura e Estrutura ### 3.1 Entidades Principais #### ✅ Agent (Agente/Funcionário) **Pontos Positivos:** - ✅ Campos essenciais: matricula, nif, biNumber (únicos) - ✅ Datas importantes: birthDate, hireDate, posseDate, terminationDate - ✅ Relacionamentos: contracts, bankAccounts, deductionRules - ✅ Status e situação funcional bem definidos **Pontos de Atenção:** - ⚠️ `salaryCategory`, `salaryGrade`, `salaryStep` são UUIDs (não objetos) - **Impacto:** Dificulta validações e consultas - **Recomendação:** Considerar relacionamentos ManyToOne para facilitar validações - ⚠️ Falta campo `careerRegime` (regime de carreira) - **Impacto:** Não é possível filtrar agentes por regime - **Recomendação:** Adicionar campo `careerRegimeId` #### ✅ AgentContract (Contrato) **Pontos Positivos:** - ✅ Sincronização automática com Agent - ✅ Desativação automática de contratos anteriores - ✅ Referência a ato legal (legalActReference) - ✅ Histórico de eventos de carreira **Pontos de Atenção:** - ⚠️ Falta validação de sobreposição de contratos - **Impacto:** Pode haver múltiplos contratos ativos simultaneamente - **Recomendação:** Adicionar validação no `saveContract` #### ✅ PayrollRun (Execução de Folha) **Pontos Positivos:** - ✅ Estados bem definidos: PENDING → GENERATED → PROCESSING → COMPLETED → CLOSED - ✅ Integração com PayrollPeriod - ✅ Rastreabilidade (createdBy, createdAt) **Pontos de Atenção:** - ⚠️ Falta estado FAILED (existe no código, mas não é usado consistentemente) - ⚠️ Falta validação de período já processado - **Impacto:** Pode processar o mesmo período múltiplas vezes - **Recomendação:** Validar se já existe folha COMPLETED para o período #### ✅ PayrollItem (Item de Folha) **Pontos Positivos:** - ✅ Separação clara: EARNING vs DEDUCTION - ✅ Referência a BudgetLine - ✅ Quantidade e valor unitário (flexibilidade) **Pontos de Atenção:** - ⚠️ Falta validação de consistência - **Impacto:** Pode haver itens sem agente, sem tipo, etc. - **Recomendação:** Adicionar validações obrigatórias --- ### 3.2 Estrutura Salarial #### ✅ SalaryGrid (Tabela Salarial) **Pontos Positivos:** - ✅ Vigência temporal (validFrom, validTo) - ✅ Separação: baseAmount, subsidyAmount, grossAmount - ✅ Relacionamento com SalaryStep **Pontos de Atenção:** - ⚠️ Falta validação de sobreposição de vigências - **Impacto:** Pode haver múltiplas tabelas válidas para o mesmo step - **Recomendação:** Validar ao criar/atualizar - ⚠️ Falta cálculo automático de grossAmount - **Impacto:** Pode haver inconsistência (grossAmount ≠ baseAmount + subsidyAmount) - **Recomendação:** Calcular automaticamente ou validar --- ### 3.3 Regras Tributárias #### ✅ GlobalDeductionRule (Regras Globais) **Pontos Positivos:** - ✅ Suporte a percentual e valor fixo - ✅ Vigência temporal - ✅ Ativo/Inativo **Pontos de Atenção:** - ⚠️ Comentário no código: "Futuro: Adicionar validações de sobreposição de datas" - **Impacto:** Pode haver múltiplas regras ativas simultaneamente - **Recomendação:** Implementar validação #### ✅ TaxBracket (Escalões de Imposto) **Pontos Positivos:** - ✅ Suporte a imposto progressivo (ratePercentage + excessDeduction) - ✅ Suporte a valor fixo (fixedAmount) - ✅ Vigência temporal **Pontos de Atenção:** - ⚠️ Falta validação de continuidade de escalões - **Impacto:** Pode haver "buracos" na tabela de escalões - **Recomendação:** Validar que lowerLimit do próximo = upperLimit do anterior + 1 --- ## 4. Análise de Lógica de Negócio ### 4.1 Processamento de Folha de Pagamento #### ✅ Pontos Positivos 1. **Geração Automática de Itens** - ✅ Busca agentes ativos - ✅ Valida posse e escalão salarial - ✅ Calcula salário base da tabela vigente - ✅ Calcula subsídio (se houver) - ✅ Calcula abono de família (baseado em dependentes) - ✅ Calcula descontos por faltas injustificadas - ✅ Aplica regras globais (INPS, Selo) - ✅ Calcula impostos progressivos (IRPS, Imposto Democracia) 2. **Cálculo de Impostos** - ✅ Base tributável = Bruto - INPS - ✅ Aplicação de escalões progressivos - ✅ Suporte a valor fixo e percentual 3. **Integração com Orçamento** - ✅ Busca linha orçamentária por código econômico - ✅ Associa cada item à linha orçamentária - ✅ Validação antes de processar #### ⚠️ Pontos de Atenção 1. **Cálculo de Faltas** ```java BigDecimal dailySalary = baseAmount.divide(new BigDecimal("30"), 2, ...); ``` - ⚠️ **Problema:** Assume 30 dias por mês (não considera meses com 28/29/31 dias) - **Impacto:** Cálculo impreciso em alguns meses - **Recomendação:** Usar dias úteis do período ou dias do mês específico 2. **Abono de Família** ```java BigDecimal familyAmount = new BigDecimal("1000").multiply(...); ``` - ⚠️ **Problema:** Valor fixo hardcoded (1000 XOF) - **Impacto:** Não é configurável, não segue legislação - **Recomendação:** Criar tabela de valores por número de dependentes 3. **Busca de Linha Orçamentária** ```java findBudgetLine(agent, econCode, fiscalYearId) ``` - ⚠️ **Problema:** Busca apenas por OrgUnit e código econômico - **Impacto:** Pode não encontrar linha se houver múltiplas linhas com mesmo código - **Recomendação:** Adicionar critério de prioridade ou validação mais específica 4. **Validação de Agentes para Folha** ```java if (agent.getSalaryStep() == null || agent.getPosseDate() == null) { continue; // Silenciosamente ignora } ``` - ⚠️ **Problema:** Ignora agentes sem escalão/posse sem avisar - **Impacto:** Agente pode não receber salário sem saber o motivo - **Recomendação:** Registrar warning/log ou criar item com status "PENDENTE_VALIDACAO" --- ### 4.2 Gestão de Agentes #### ✅ Pontos Positivos 1. **Validações de Unicidade** - ✅ Matrícula única - ✅ NIF único - ✅ BI único 2. **Histórico de Mudanças** - ✅ AgentStatusHistory para mudanças de status - ✅ CareerEvent para eventos de carreira - ✅ Rastreabilidade completa 3. **Sincronização com Contratos** - ✅ Dados de carreira sincronizados automaticamente - ✅ Ativação automática se data de início válida #### ⚠️ Pontos de Atenção 1. **Validação de Promoção** ```java if (careerEventType == CareerEventType.PROMOCAO) { validatePromotion(agent); } ``` - ⚠️ **Problema:** Método `validatePromotion` não encontrado no código analisado - **Impacto:** Promoções podem ser feitas sem validação - **Recomendação:** Implementar validação de: - Tempo mínimo no escalão atual - Avaliação de desempenho (mínimo "BOM") - Requisitos de habilitação literária 2. **Validação de Datas** - ⚠️ Falta validação: `posseDate` >= `hireDate` - ⚠️ Falta validação: `terminationDate` >= `hireDate` - ⚠️ Falta validação: `birthDate` < `hireDate` (idade mínima) 3. **Validação de Status** - ⚠️ Falta validação: Agente com `terminationDate` deve ter status TERMINATED - ⚠️ Falta validação: Agente TERMINATED não pode ter contrato ativo --- ### 4.3 Gestão de Ausências #### ✅ Pontos Positivos 1. **Cálculo de Faltas Injustificadas** - ✅ Busca ausências no período - ✅ Filtra apenas não justificadas - ✅ Calcula dias dentro do período #### ⚠️ Pontos de Atenção 1. **Validação de Ausências** - ⚠️ Falta validação: `endDate` >= `startDate` - ⚠️ Falta validação: Ausência não pode ser futura - ⚠️ Falta validação: Ausência não pode sobrepor outras ausências justificadas 2. **Rastreabilidade** - ⚠️ Campo `deductedInPayrollRunId` existe, mas não é preenchido - **Impacto:** Não é possível rastrear em qual folha a falta foi descontada - **Recomendação:** Preencher ao processar folha --- ## 5. Análise de Integrações ### 5.1 Integração RH → Orçamento #### ✅ Pontos Positivos 1. **Fluxo Completo** ``` PayrollRun (COMPLETED) → processPayrollRun() → BudgetIntegrationService.createCommitmentFromPayrollItem() → BudgetExecution (COMMITMENT) ``` 2. **Validações** - ✅ Valida que todos os itens têm linha orçamentária - ✅ Valida saldo disponível (no módulo Orçamento) 3. **Liquidação** ``` PayrollRun (CLOSED) → closePayrollRun() → BudgetIntegrationService.createLiquidationFromPayrollItem() → BudgetExecution (LIQUIDATION) ``` #### ⚠️ Pontos de Atenção 1. **Falta de Integração com Tesouro** - ❌ **CRÍTICO:** Não há criação automática de PaymentOrder após processar folha - **Impacto:** Folha processada não gera ordem de pagamento automaticamente - **Recomendação:** Adicionar chamada a `PaymentOrderService.generateOrdersFromPayrollRun()` após `processPayrollRun()` 2. **Validação de Período** - ⚠️ Não valida se período está dentro do exercício fiscal aberto - **Recomendação:** Validar antes de processar --- ### 5.2 Integração RH → Tesouro #### ❌ Problema Crítico **Status:** ❌ **NÃO IMPLEMENTADO** **Análise:** - O código de `PaymentOrderService.generateOrdersFromPayrollRun()` existe no módulo Tesouro - Mas não é chamado automaticamente após processar folha - A integração deve ser feita manualmente ou via job agendado **Recomendação:** ```java // Em PayrollService.processPayrollRun(), após criar COMMITMENTs: if (paymentOrderService != null) { paymentOrderService.generateOrdersFromPayrollRun(payrollRunId, null); } ``` --- ## 6. Análise de Validações e Regras ### 6.1 Validações Implementadas #### ✅ Validações Existentes 1. **PayrollPeriod** - ✅ Mês entre 1 e 12 - ✅ Não duplicar (fiscalYear, month) 2. **PayrollRun** - ✅ Apenas PENDING pode gerar itens - ✅ Apenas GENERATED pode ser processado - ✅ Apenas COMPLETED pode ser encerrado - ✅ Todos os itens devem ter linha orçamentária 3. **Agent** - ✅ Matrícula, NIF, BI únicos - ✅ OrgUnit e Position existem #### ❌ Validações Faltantes 1. **Validações de Conformidade Legal** - ✅ Avaliação de desempenho para promoção (implementado em `validatePromotion()`) - ❌ Tempo mínimo em escalão para progressão (parcial - valida avaliações, mas não tempo) - ❌ Requisitos de habilitação literária - ❌ Idade mínima para admissão 2. **Validações de Consistência** - ❌ Sobreposição de contratos - ❌ Sobreposição de vigências de tabela salarial - ❌ Continuidade de escalões de imposto - ❌ Datas coerentes (posse >= admissão, etc.) 3. **Validações de Integridade** - ❌ Agente TERMINATED não pode ter contrato ativo - ❌ Agente sem posse não pode receber salário - ❌ Período já processado não pode ser reprocessado --- ### 6.2 Regras de Negócio #### ✅ Regras Implementadas 1. **Cálculo de Salário** - ✅ Base da tabela vigente - ✅ Subsídio (se houver) - ✅ Abono de família (por dependentes) 2. **Cálculo de Descontos** - ✅ INPS: 7% do bruto - ✅ Selo: 0.3% do bruto - ✅ IRPS: Escalões progressivos - ✅ Faltas injustificadas: Proporcional 3. **Integração Orçamentária** - ✅ COMMITMENT ao processar - ✅ LIQUIDATION ao encerrar #### ⚠️ Regras Parcialmente Implementadas 1. **Progressão de Carreira** - ⚠️ Existe evento de carreira, mas não há validação de requisitos - **Recomendação:** Implementar validação completa 2. **Avaliação de Despenho** - ⚠️ Entidade existe, mas não é validada para promoções - **Recomendação:** Validar avaliação mínima "BOM" para promoção --- ## 7. Problemas Identificados ### 7.1 🔴 Críticos 1. **Falta de Integração Automática RH → Tesouro** - **Severidade:** 🔴 CRÍTICO - **Impacto:** Folha processada não gera ordem de pagamento automaticamente - **Solução:** Adicionar chamada a `PaymentOrderService.generateOrdersFromPayrollRun()` 2. **Falta de Integração Automática RH → Tesouro** - **Severidade:** 🔴 CRÍTICO - **Impacto:** Folha processada não gera ordem de pagamento automaticamente - **Solução:** Adicionar chamada a `PaymentOrderService.generateOrdersFromPayrollRun()` após `processPayrollRun()` - **Nota:** ✅ Método existe no Tesouro, mas não é chamado automaticamente 3. **Cálculo de Faltas Assume 30 Dias** - **Severidade:** 🟡 MÉDIO - **Impacto:** Cálculo impreciso em alguns meses - **Solução:** Usar dias do mês específico ou dias úteis ### 7.2 🟡 Médios 1. **Abono de Família Hardcoded** - **Severidade:** 🟡 MÉDIO - **Impacto:** Não é configurável, não segue legislação - **Solução:** Criar tabela de valores configurável 2. **Falta de Validação de Sobreposição** - **Severidade:** 🟡 MÉDIO - **Impacto:** Múltiplas regras/tabelas ativas simultaneamente - **Solução:** Adicionar validações de sobreposição 3. **Agentes Ignorados Silenciosamente** - **Severidade:** 🟡 MÉDIO - **Impacto:** Agente pode não receber sem saber o motivo - **Solução:** Registrar warning ou criar item pendente ### 7.3 🟢 Baixos 1. **Falta de Validação de Datas** - **Severidade:** 🟢 BAIXO - **Impacto:** Dados inconsistentes - **Solução:** Adicionar validações de coerência de datas 2. **Campo deductedInPayrollRunId Não Preenchido** - **Severidade:** 🟢 BAIXO - **Impacto:** Perda de rastreabilidade - **Solução:** Preencher ao processar folha --- ## 8. Recomendações e Melhorias ### 8.1 Melhorias Críticas (Prioridade Alta) #### 1. Implementar Integração Automática RH → Tesouro **Status:** ✅ Método `generateOrdersFromPayrollRun()` existe no `PaymentOrderService`, mas não é chamado automaticamente **Código Sugerido:** ```java // Em PayrollService.processPayrollRun(), após criar COMMITMENTs e antes de marcar como COMPLETED: // 1. Injetar PaymentOrderService no PayrollService // private final PaymentOrderService paymentOrderService; // Adicionar dependência // 2. Após processar COMMITMENTs, criar ordens de pagamento try { // Nota: paymentBatchId pode ser null - ordens podem ser adicionadas a lote depois paymentOrderService.generateOrdersFromPayrollRun(payrollRunId, null); log.info("Ordens de pagamento criadas automaticamente para folha: runId={}", payrollRunId); } catch (Exception e) { log.error("Erro ao criar ordens de pagamento automaticamente: {}", e.getMessage(), e); // Decisão de design: Falhar processamento ou apenas registrar erro? // Recomendação: Registrar erro mas não falhar (ordens podem ser criadas manualmente depois) } ``` #### 2. Melhorar Validação de Promoções **Status:** ✅ Método `validatePromotion()` já implementado e valida: - ✅ Pelo menos 3 anos de avaliações - ✅ Mínimo de 14 pontos (BOM) nos últimos 3 anos - ✅ Conformidade com Decreto 12-A/94 **Melhorias Sugeridas:** ```java // Adicionar validação de tempo mínimo no escalão atual private void validatePromotion(Agent agent, AgentDTO newData) { // Validação existente (avaliações) - já implementada // Adicionar: Validar tempo mínimo no escalão atual if (agent.getSalaryStep() != null) { LocalDate stepStartDate = getStepStartDate(agent); // Implementar método long monthsInStep = ChronoUnit.MONTHS.between(stepStartDate, LocalDate.now()); if (monthsInStep < 12) { // Mínimo 12 meses (ajustar conforme legislação) throw new BusinessException( "Tempo insuficiente no escalão atual para promoção. Mínimo: 12 meses", "INSUFFICIENT_TIME", HttpStatus.PRECONDITION_FAILED ); } } } ``` #### 3. Corrigir Cálculo de Faltas **Código Sugerido:** ```java // Em vez de: BigDecimal dailySalary = baseAmount.divide(new BigDecimal("30"), 2, ...); // Usar: int daysInPeriod = (int) ChronoUnit.DAYS.between( payrollRun.getPeriod().getStartDate(), payrollRun.getPeriod().getEndDate() ) + 1; BigDecimal dailySalary = baseAmount.divide( new BigDecimal(daysInPeriod), 2, RoundingMode.HALF_UP ); ``` --- ### 8.2 Melhorias de Média Prioridade #### 1. Criar Tabela de Abono de Família **Nova Entidade:** ```java @Entity @Table(name = "family_allowance_table") public class FamilyAllowanceTable extends AuditableEntity { @Column(nullable = false) private Integer dependentsCount; @Column(nullable = false, precision = 19, scale = 2) private BigDecimal amount; @Column(nullable = false) private LocalDate validFrom; @Column private LocalDate validTo; } ``` #### 2. Adicionar Validações de Sobreposição **Código Sugerido:** ```java // Em GlobalDeductionRuleService.saveRule(): List overlapping = repository.findOverlappingRules( rule.getDeductionType().getId(), rule.getValidFrom(), rule.getValidTo() ); if (!overlapping.isEmpty()) { throw new BusinessException( "Já existe regra ativa para este período", "OVERLAPPING_RULE", HttpStatus.CONFLICT ); } ``` #### 3. Melhorar Tratamento de Agentes Sem Dados Completos **Código Sugerido:** ```java // Em generatePayrollItems(): if (agent.getSalaryStep() == null || agent.getPosseDate() == null) { // Criar item com status PENDENTE_VALIDACAO PayrollItem pendingItem = PayrollItem.builder() .payrollRun(payrollRun) .agent(agent.getId()) .lineType("EARNING") .description("PENDENTE: Agente sem escalão ou posse") .totalAmount(BigDecimal.ZERO) .status("PENDING_VALIDATION") .build(); payrollItemRepository.save(pendingItem); log.warn("Agente {} sem escalão ou posse - item criado como pendente", agent.getMatricula()); continue; } ``` --- ### 8.3 Melhorias de Baixa Prioridade #### 1. Adicionar Validações de Datas **Código Sugerido:** ```java // Em AgentService.create(): if (dto.getPosseDate() != null && dto.getHireDate() != null) { if (dto.getPosseDate().isBefore(dto.getHireDate())) { throw new IllegalArgumentException( "Data de posse não pode ser anterior à data de admissão" ); } } if (dto.getBirthDate() != null && dto.getHireDate() != null) { long age = ChronoUnit.YEARS.between(dto.getBirthDate(), dto.getHireDate()); if (age < 18) { throw new IllegalArgumentException( "Idade mínima para admissão: 18 anos" ); } } ``` #### 2. Preencher Campo deductedInPayrollRunId **Código Sugerido:** ```java // Em generatePayrollItems(), ao criar item de falta: PayrollItem absenceItem = PayrollItem.builder() // ... outros campos .build(); payrollItemRepository.save(absenceItem); // Atualizar ausência absence.setDeductedInPayrollRunId(payrollRunId); absenceRepository.save(absence); ``` --- ## 9. Checklist de Conformidade ### 9.1 Conformidade Legal - [ ] Validação de tempo mínimo em escalão para progressão - [ ] Validação de avaliação de desempenho para promoção - [ ] Validação de requisitos de habilitação literária - [ ] Validação de idade mínima para admissão - [ ] Rastreabilidade completa de atos administrativos - [ ] Conformidade com Decreto 12-A/94 (se aplicável) ### 9.2 Conformidade Contábil - [ ] Códigos econômicos corretos - [ ] Integração completa com Orçamento - [ ] Rastreabilidade orçamentária - [ ] Validação de classificação econômica ### 9.3 Integrações - [x] RH → Orçamento (COMMITMENT) - [x] RH → Orçamento (LIQUIDATION) - [ ] RH → Tesouro (PaymentOrder) ⚠️ **FALTA** - [ ] Validação de período dentro do exercício fiscal ### 9.4 Validações - [x] Unicidade de matrícula, NIF, BI - [x] Estados de folha (PENDING → GENERATED → COMPLETED) - [ ] Validação de promoções - [ ] Validação de sobreposição de contratos - [ ] Validação de sobreposição de vigências - [ ] Validação de coerência de datas - [ ] Validação de consistência de dados ### 9.5 Lógica de Negócio - [x] Cálculo de salário base - [x] Cálculo de subsídio - [x] Cálculo de abono de família - [x] Cálculo de descontos (INPS, Selo) - [x] Cálculo de impostos progressivos (IRPS) - [ ] Cálculo de faltas (corrigir para usar dias do mês) - [ ] Tabela configurável de abono de família --- ## 📊 Resumo Final ### Pontos Fortes ✅ 1. **Arquitetura sólida** com entidades bem definidas 2. **Integração com Orçamento** funcionando 3. **Rastreabilidade** completa de mudanças 4. **Cálculo de folha** robusto (com ressalvas) 5. **Estrutura salarial** flexível e temporal ### Pontos Fracos ⚠️ 1. **Falta integração automática com Tesouro** (CRÍTICO) - Método existe, falta chamada 2. **Validação de promoções parcial** (MÉDIO) - Valida avaliações, mas falta tempo mínimo 3. **Cálculo de faltas impreciso** (MÉDIO) - Assume 30 dias fixos 4. **Abono de família hardcoded** (MÉDIO) - Valor fixo não configurável 5. **Falta algumas validações de conformidade legal** (MÉDIO) - Idade mínima, habilitação literária ### Prioridades de Ação 1. **URGENTE:** Implementar chamada automática a `PaymentOrderService.generateOrdersFromPayrollRun()` após processar folha 2. **IMPORTANTE:** Adicionar validação de tempo mínimo em escalão para promoção 3. **IMPORTANTE:** Corrigir cálculo de faltas (usar dias do mês específico) 4. **IMPORTANTE:** Criar tabela configurável de abono de família 5. **DESEJÁVEL:** Adicionar validações de idade mínima e habilitação literária --- **Análise realizada por:** Cursor AI **Data:** 2025-01-27 **Versão:** 1.0