Files
sigrhapf/Documents/sigfip/sigefp/ANALISE_PROFUNDA_MODULO_RH_FOLHA.md
2026-05-19 11:41:28 +00:00

27 KiB

🔍 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
  2. Análise de Conformidade
  3. Análise de Arquitetura e Estrutura
  4. Análise de Lógica de Negócio
  5. Análise de Integrações
  6. Análise de Validações e Regras
  7. Problemas Identificados
  8. Recomendações e Melhorias
  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

    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

    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

    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

    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

    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:

// 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:

// 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:

// 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:

// 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:

@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:

// Em GlobalDeductionRuleService.saveRule():
List<GlobalDeductionRule> 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:

// 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:

// 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:

// 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

  • 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

  • RH → Orçamento (COMMITMENT)
  • RH → Orçamento (LIQUIDATION)
  • RH → Tesouro (PaymentOrder) ⚠️ FALTA
  • Validação de período dentro do exercício fiscal

9.4 Validações

  • Unicidade de matrícula, NIF, BI
  • 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

  • Cálculo de salário base
  • Cálculo de subsídio
  • Cálculo de abono de família
  • Cálculo de descontos (INPS, Selo)
  • 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