Skip to content

Arquitetura Geral ​

A Fábrica de Cálculos é um monorepo organizado em duas dimensões: apps (interfaces web e APIs) e packages (lógica de domínio pura).

Diagrama geral ​

As setas partem do que é consumido para quem consome: a camada aponta para quem a estende e o package aponta para a app ou o package que o importa — a mesma convenção da hierarquia de camadas. Linhas sem seta indicam integração com sistemas externos.

graph TD
  subgraph ext["Externo"]
    BACEN[API SGS/BACEN]
    IBGE[API SIDRA/IBGE]
    CNJ[SSO institucional / OAuth2]
  end

  subgraph calc["Apps - Calculadoras"]
    TC[prev-tc]
    RVT[prev-rvt]
    ATRASADOS[prev-atrasados]
    RPPS[prev-rpps]
  end

  subgraph apis["Apps - APIs"]
    PREVAPI[prev-api]
    RMIAPI[rmi-api]
    INDAPI[backoffice]
  end

  subgraph nuxt["Camadas Nuxt"]
    BASE[base]
    BASEUI[base-ui]
    BASESERV[base-servicos]
    BASEONLINE[base-online]
    BASECALC[base-calculadora]
    BASEPREV[base-prev]
  end

  subgraph pkgs["Packages de Dominio"]
    CP[calculos-previdenciarios]
    CR[calculos-rpps]
    CJ[calculos-judiciais]
    IND[indices]
    PA[parsers]
    CM[comum]
    UT[utils]
  end

  BASE --> BASEUI
  BASEUI --> BASESERV
  BASESERV --> BASEONLINE
  BASEONLINE --> BASECALC
  BASECALC --> BASEPREV
  BASEPREV --> TC & RVT & ATRASADOS & RPPS
  BASESERV --> INDAPI

  CP --> TC & RVT & ATRASADOS & RPPS
  CR --> RPPS
  CP --> PREVAPI & RMIAPI
  IND --> INDAPI

  UT --> CM --> IND --> CJ --> CP
  CP --> CR
  UT --> PA --> CP & CR & IND

  BACEN --- INDAPI
  IBGE --- INDAPI
  CNJ --- BASESERV

Camadas Nuxt — composição via extends ​

As apps não duplicam configuração. Cada camada herda automaticamente componentes, composables, plugins e configurações da camada pai:

graph TD
  base --> base-ui["base-ui (Quasar · Pinia · VueUse · playground)"]
  base-ui --> base-servicos["base-servicos (JWT/JWK via nuxt-auth-utils · serviços internos)"]
  base-servicos --> backoffice["backoffice<br/>Painel admin + API de índices + persistência (Drizzle + Postgres)"]
  base-servicos --> pdpj["pdpj<br/>Integração PDPJ-br"]
  base-servicos --> base-online["base-online (arquivos online · sessão de cálculo)"]
  base-online --> arquivos-online["arquivos-online — central de arquivos"]
  base-online --> base-calculadora["base-calculadora (casco da calculadora · tabelas de índices)"]
  base-calculadora --> civeis["civeis — Cálculos cíveis"]
  base-calculadora --> base-prev["base-prev (cálculos previdenciários · playground)"]
  base-prev --> prev-rvt["prev-rvt — RVT (Tema 1.102/STF)"]
  base-prev --> prev-tc["prev-tc — TC / RMI (RGPS)"]
  base-prev --> prev-atrasados["prev-atrasados — Atrasados previdenciários"]
  base-prev --> prev-rpps["prev-rpps — RPPS (servidores da União)"]

Leia mais: Camadas Nuxt em detalhe

Packages — grafo de dependências ​

graph LR
  UT[utils]
  CM[comum]
  IND[indices]
  CJ[calculos-judiciais]
  CP[calculos-previdenciarios]
  CR[calculos-rpps]
  PA[parsers]
  CSGS[cliente-sgs]
  CSIDRA[cliente-sidra]

  UT --> CM --> IND --> CJ --> CP
  UT --> PA --> CP
  UT --> CSGS & CSIDRA
  CP --> CR

Leia mais: Pacotes em detalhe

Princípios ​

  • Packages sem compilação: exportam TypeScript puro via "main": "./src/index.ts". Nenhum step de build separado.
  • Português brasileiro no domínio: todos os identificadores, nomes de função e comentários de negócio são em PT-BR.
  • Web Workers para cálculos pesados: a UI delega via criarWorkerScope (@fc/utils) — a thread principal nunca bloqueia.
  • Catálogo de dependências centralizado: versões gerenciadas em pnpm-workspace.yaml com catálogos nomeados.