Skip to content

@fc/calculos-previdenciarios ​

O núcleo previdenciário: o que o RGPS e o RPPS têm em comum. Não é o motor de nenhum dos dois — é o vocabulário e a estrutura que os dois falam.

Os regimes vivem em pacotes próprios, irmãos, e ambos estendem este:

pacoteo que é
@fc/calculos-rgpsRegime Geral: RMI, atrasados, evolução de benefício, fator previdenciário, qualidade de segurado, leitura dos documentos do INSS
@fc/calculos-rppsRegime Próprio dos servidores do Judiciário da União

Depende de @fc/comum, @fc/calculos-judiciais, @fc/utils, @fc/parsers e @fc/arquivos-calc.

O que faz um símbolo pertencer a este pacote ​

O critério é positivo: está aqui o que é comum aos dois regimes, medido por três lentes.

lentepergunta
usoos dois regimes importam o mesmo arquivo?
duplicaçãoo mesmo código existe nos dois em cópia?
semânticaé o mesmo conceito sob nomes diferentes?

A terceira é a que orienta o desenho: onde há conceito comum, há superclasse. O que não passa em nenhuma das três sai daqui para o pacote do regime que o usa — independentemente de como se chame.

Regra de nomenclatura: o conceito neutro fica com o nome genérico do domínio; as duas especializações levam o sufixo do regime. PeriodoContribuicao é o período de qualquer regime; PeriodoRgps e PeriodoRpps são os irmãos.

A hierarquia ​

base (aqui)estendefilho RGPSfilho RPPSponto de variação
CalendarioContagem—Calendario360Calendario365, CalendarioCorridoadicionarDias(), dias()
PeriodoContribuicaoPeriodo (@fc/calculos-judiciais)PeriodoRgpsPeriodoRppsobterParcialTempo(), peso, tempo
PeriodosContribuicaoPeriodosPeriodosRgpsPeriodosRppscontaComoVinculo, ehBeneficio
SeguradoEntidade (@fc/comum)SeguradoRgpsSeguradoRppsidadeEmDias() — o calendário
Historico—HistoricoRgpsHistoricoRppsiniciarTotal(), adicionarTotal()
DadosCalculoEntidadeDadosCalculoRgpsDadosCalculoRppsder, dataApuracao, historico
Requisito—RequisitoRgpsRequisitoRppsformatar(), implementadoEm(), calcular()
RegrasConcessao—RegrasConcessaoRgpsRegrasConcessaoRppsobter(), percorrerRequisitos(), filtrarResultados()
AnaliseBeneficios—AnaliseBeneficiosRgpsAnaliseBeneficiosRppsapurar()

Os dois eixos de variação entre os regimes são a aritmética de dias (o RGPS conta em ano de 360; o RPPS em 365 ou data a data) e os períodos postergados. O primeiro está isolado em CalendarioContagem.

Módulos ​

móduloconteúdo
entidadesas bases da hierarquia acima, mais PeriodoPcd, PeriodosPcd e Salario
parametroso vocabulário que os dois regimes falam: Sexo, FormaContagem, TipoContagem, GrauDeficiencia, MotivoContagem, Origem, NaturezaVinculo, Pesos, MARCOS_TEMPORAIS
requisitoso contrato Requisito, o CalendarioContagem e as peças de contagem que os dois usam
analise-beneficiosRegrasConcessao (o pipeline como template method), AnaliseBeneficios, e as regras que os dois compartilham — a apuração da data de implementação e o coeficiente progressivo do art. 26, § 2º, da EC 103
calculo-tca aritmética de tempo: parcial, preponderante, totais, competências
persistenciamigração do vocabulário legado dos .calc — ordinais e chaves de competência
rmi-desvinculadaos parâmetros de uma RMI informada pelo usuário, que os dois regimes aceitam

A fronteira, por regra ​

Uma cerca de lint (fc/cerca-nucleo-previdenciario, em @fc/eslint-config) impede que este pacote importe qualquer um dos dois regimes — se importasse, deixaria de ser o que eles têm em comum. Duas cercas irmãs impedem que um regime importe o outro.

Há uma exceção, nomeada e estreita: @fc/calculos-rpps/contagem-reciproca/ e documentos/importacao/ podem importar @fc/calculos-rgps. A contagem recíproca (art. 201, § 9º, da CF, e Lei 9.796/1999) é o instituto pelo qual o tempo de RGPS entra na contagem do RPPS, provado por CTC do INSS, CNIS ou dossiê do PrevJud — e ler esses documentos é capacidade do RGPS. Alargar a lista é decisão de arquitetura, não conveniência de import.

Como consumir ​

O pacote não tem barrel: nem src/index.ts de raiz nem index.ts de pasta. O exports publica cada pasta de src/ por wildcard (@fc/calculos-previdenciarios/<pasta>/*), e o consumidor importa o arquivo que declara o símbolo:

ts
import { PeriodoContribuicao } from '@fc/calculos-previdenciarios/entidades/PeriodoContribuicao'
import { Segurado } from '@fc/calculos-previdenciarios/entidades/Segurado'
import { FormaContagem } from '@fc/calculos-previdenciarios/parametros/forma-contagem/FormaContagem'
import { RegrasConcessao } from '@fc/calculos-previdenciarios/analise-beneficios/RegrasConcessao'

O import pela raiz não resolve e é barrado pela cerca fc/cerca-pacotes-sem-barrel-raiz.

Parâmetros de domínio ​

Cada parâmetro é um dicionário as const com tipo homônimo, em pasta própria em kebab-case (parametros/<parametro>/<Parametro>.ts), com chaves em CAPITAL_CASE — FormaContagem.ESPECIAL_25, Sexo.MASCULINO. As auxiliares são funções livres, uma por arquivo: obterOpcoes<Nome>, obterRotulo<Nome>, eh<Nome>Valido. Sem enum, sem namespace, sem barrel — travado por teste de arquitetura (tests/arquitetura/parametros-por-pasta.spec.ts).

Instalação (monorepo) ​

jsonc
// package.json
{ "dependencies": { "@fc/calculos-previdenciarios": "workspace:*" } }