Pular para o conteúdo

Documentação da Selega

Selega é uma ferramenta de controle para legalizar estados contables (estados contables, EECC). Ela toma as cifras canônicas de um conjunto de estados, roda um conjunto de cruzamentos numéricos contra elas, percorre um checklist por jurisdição e propõe um resultado. Esta página descreve cada parte.

O fluxo: carregar → validação ao vivo → resultado

Seção intitulada “O fluxo: carregar → validação ao vivo → resultado”
  1. Trazer as cifras. A Selega preenche um esquema canônico de cifras distribuídas pelo estado de situação patrimonial (ESP), estado de resultados (ER), estado de evolução do patrimônio líquido (EEPN), estado de fluxo de caixa (EFE), anexos e notas. O esquema pode ser preenchido de três formas:
    • Manualmente, em uma grade — sempre disponível.
    • Pelo motor de extração local — um modelo por formato sobre uma tela de PDF, com OCR por região (Tesseract) e proveniência. Sem rede, privado. Este é o caminho padrão.
    • Pelo motor de IA controlado — generaliza para qualquer formato mas envia dados à nuvem, então está desligado por padrão e é opt-in (veja IA controlada abaixo).
  2. Validação ao vivo. À medida que as cifras chegam, os cruzamentos rodam continuamente. Cada cifra é pintada de verde quando um cruzamento a corrobora, ou de âmbar quando entra em uma verificação que não fecha. O revisor confirma; nenhum número inconsistente passa.
  3. Checklist. Junto com as verificações numéricas, o checklist de controles formais da jurisdição é revisado.
  4. Resultado. O motor de decisão agrega as verificações que falham e propõe o resultado — legalizar, observar, certificar a firma ou denegar / devolver.

A Selega modela um conjunto de estados contables como um esquema plano de cifras e flags (definido em src/core/schema.js), agnóstico do formato de PDF de onde vieram. As cifras abrangem:

  • ESP (situação patrimonial): ativo total, passivo total, patrimônio líquido, caixa e bancos no fechamento e no início.
  • EEPN (evolução do patrimônio líquido): patrimônio líquido no fechamento, resultado do exercício.
  • ER (estado de resultados): resultado final.
  • EFE (fluxo de caixa): método (direto / indireto), caixa no início e no fechamento, variação de caixa, fluxos operacionais / de investimento / de financiamento, RECPAM do caixa.
  • Anexos: depreciação do ativo fixo do exercício, depreciação no anexo de despesas.
  • Notas / capa: dívida previdenciária SIPA, tipo de empresa, nota sobre prescindir do síndico, nota sobre patrimônio líquido negativo.

Os cruzamentos são o coração da Selega. São universais — as normas da FACPCE se aplicam em todo o país — então o mesmo conjunto semeia cada jurisdição; o que muda por Conselho é o catálogo de controles formais e suas consequências. São armazenados como dados (um conjunto de cruzamentos JSON no rule-pack) e avaliados por um motor genérico, de modo que um admin possa editá-los a partir de um builder visual sem tocar no código.

O conjunto padrão vem com os cruzamentos abaixo. As comparações usam uma pequena tolerância (padrão de 1 unidade monetária) para absorver arredondamento. Cada um é ou uma comparação (dois lados devem ser iguais) ou uma verificação de presença (uma cifra ou nota deve estar presente sob uma condição). Por padrão, cada cruzamento neste conjunto carrega uma consequência de denegação direta, mas a consequência é configurável por cruzamento.

#CruzamentoO que valida
1Equação contábil (A = P + PN)O ativo total é igual ao passivo total mais o patrimônio líquido (ESP).
2Patrimônio líquido: ESP = EEPNO patrimônio líquido no ESP é igual ao patrimônio líquido no fechamento no EEPN.
3Resultado: ER = EEPNO resultado final do estado de resultados é igual ao resultado transportado no EEPN.
4Caixa: ESP = EFE (fechamento)Caixa e bancos no fechamento no ESP são iguais ao caixa no fechamento no EFE.
5Variação EFE = fechamento − inícioA variação de caixa é igual ao caixa no fechamento menos o caixa no início.
5bVariação EFE = Op + Inv + FinA variação de caixa é igual aos fluxos operacionais mais de investimento mais de financiamento.
6Resultado: ER = EFE (indireto)O resultado final reconcilia com o resultado do EFE. Somente quando o método do EFE é indireto.
7Depreciação: ER = EFE (indireto)A depreciação no estado de resultados é igual à depreciação no EFE. Somente método indireto.
8Imposto de renda: ER = EFE (indireto)O imposto de renda no estado de resultados é igual ao imposto de renda no EFE. Somente método indireto.
9RECPAM do caixa mostrado no EFEUma linha dedicada de RECPAM do caixa está presente. Somente quando o método do EFE é direto.
10Depreciação: Anexo de ativo fixo = Anexo de despesasA depreciação do exercício coincide entre os dois anexos.
11Seguridade social art. 10, Lei 17.250A declaração de dívida previdenciária SIPA está presente.
12Nota de patrimônio líquido negativoQuando o patrimônio líquido está abaixo de zero, a nota exigida deve estar presente.
13Nota de prescindência do síndicoPara empresas SA / SAS, a nota que prescinde do síndico (art. 284) deve estar presente.

Cada cruzamento avalia para um de quatro estados: OK (fecha), DIFIERE (não fecha — as cifras envolvidas são marcadas de âmbar), NA (não aplicável sob as condições atuais, p. ex. uma verificação somente-indireto quando o EFE é direto) ou FALTA (uma cifra exigida está ausente).

Cruzamentos que retornam como DIFIERE são convertidos em observações, cada uma carregando a consequência definida por seu cruzamento. O motor de decisão (src/core/decision.js) então calcula o resultado agregado por prioridade de consequência:

  • Denegação direta → o trabalho é denegado / devolvido. Se uma tasa borrador foi paga, ele é em vez disso devolvido para correção.
  • Subsanable (correctable) → devolvido para correção se uma tasa borrador foi paga; do contrário, se o profissional optar por não corrigir, é legalizado.
  • Certificar firma → degrada para certificar somente a firma.
  • Sem observação bloqueante → é legalizado.

Uma tasa urgente combinada com qualquer observação perde seu status de urgente e o trabalho retorna à lista geral de reingresso. Os resultados possíveis são: Se legaliza (legalizar), Se devuelve para corregir (devolver para corrigir, tasa borrador), Se certifica solo la firma (certificar somente a firma) e Se deniega / se devuelve (denegar / devolver).

  • A Selega vem com um registro das 24 jurisdições da Argentina; cada uma é ou totalmente definida ou um modelo a ser completado.
  • Cada Conselho define seu próprio rule-pack: o catálogo de controles formais, quais cruzamentos estão habilitados e as consequências. Um rule-pack editado localmente em uma jurisdição sobrepõe o que vem no repo.
  • Os cruzamentos são universais (as normas da FACPCE se aplicam em todo o país); os controles formais e as consequências é que variam por Conselho.
  • Um admin escolhe quais jurisdições uma dada instalação atende, e alterna a jurisdição ativa a partir do cabeçalho.

A Selega tem cinco papéis — agente, supervisor, auditor, admin, superadmin — com um fluxo de revisão configurável, uma caixa de entrada com semáforo e um expediente exportável somente-leitura. O acesso é controlado tanto visualmente (desabilitando o que um papel não pode fazer) quanto de verdade no backend.

A IA está desligada por padrão e é plugável. Pode rodar contra um motor local (Ollama, p. ex. Qwen2.5-VL em CPU) ou a nuvem (OpenRouter), local-first. O caminho de nuvem é controlado por três condições: habilitado no Admin, uma chave de API presente, e autorização por documento — porque é o único caminho que envia dados para fora da caixa. A chave de API vive no servidor (armazenada como write-only quando carregada a partir do Admin).

O estado da Selega vive no PostgreSQL (o serviço db do arquivo compose, conectado via DATABASE_URL). O banco de dados persiste no volume selega-pg — ele é o registro das legalizações, então faça backup. O próprio contêiner da aplicação apenas lê /app e escreve a saída do OCR em /tmp.

Tudo é configurado por variáveis de ambiente (12-factor) — veja Instalar Selega para a tabela completa. Operacionalmente, as coisas que você define são POSTGRES_PASSWORD (obrigatória), o e-mail de admin, se você está atrás de TLS (SELEGA_SECURE_COOKIE), a porta do host, e opcionalmente a chave de IA na nuvem (melhor carregada a partir do Admin). As regras por jurisdição, os cruzamentos, o checklist e os usuários são todos editados a partir dos painéis Administração e Sistema na UI — sem mudanças de código.

Vanilla JS (módulos ES, sem framework) · Node.js (seu próprio servidor HTTP) · PostgreSQL (pg) · Docker · pdf.js / Tesseract.js / pdf-lib vendorizados · Ollama opcional para IA local.