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”- 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).
- 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.
- Checklist. Junto com as verificações numéricas, o checklist de controles formais da jurisdição é revisado.
- 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.
O esquema canônico
Seção intitulada “O esquema canônico”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 numéricos
Seção intitulada “Os cruzamentos numéricos”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.
| # | Cruzamento | O que valida |
|---|---|---|
| 1 | Equação contábil (A = P + PN) | O ativo total é igual ao passivo total mais o patrimônio líquido (ESP). |
| 2 | Patrimônio líquido: ESP = EEPN | O patrimônio líquido no ESP é igual ao patrimônio líquido no fechamento no EEPN. |
| 3 | Resultado: ER = EEPN | O resultado final do estado de resultados é igual ao resultado transportado no EEPN. |
| 4 | Caixa: ESP = EFE (fechamento) | Caixa e bancos no fechamento no ESP são iguais ao caixa no fechamento no EFE. |
| 5 | Variação EFE = fechamento − início | A variação de caixa é igual ao caixa no fechamento menos o caixa no início. |
| 5b | Variação EFE = Op + Inv + Fin | A variação de caixa é igual aos fluxos operacionais mais de investimento mais de financiamento. |
| 6 | Resultado: ER = EFE (indireto) | O resultado final reconcilia com o resultado do EFE. Somente quando o método do EFE é indireto. |
| 7 | Depreciação: ER = EFE (indireto) | A depreciação no estado de resultados é igual à depreciação no EFE. Somente método indireto. |
| 8 | Imposto de renda: ER = EFE (indireto) | O imposto de renda no estado de resultados é igual ao imposto de renda no EFE. Somente método indireto. |
| 9 | RECPAM do caixa mostrado no EFE | Uma linha dedicada de RECPAM do caixa está presente. Somente quando o método do EFE é direto. |
| 10 | Depreciação: Anexo de ativo fixo = Anexo de despesas | A depreciação do exercício coincide entre os dois anexos. |
| 11 | Seguridade social art. 10, Lei 17.250 | A declaração de dívida previdenciária SIPA está presente. |
| 12 | Nota de patrimônio líquido negativo | Quando o patrimônio líquido está abaixo de zero, a nota exigida deve estar presente. |
| 13 | Nota de prescindência do síndico | Para empresas SA / SAS, a nota que prescinde do síndico (art. 284) deve estar presente. |
Resultados dos cruzamentos
Seção intitulada “Resultados dos cruzamentos”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).
O motor de decisão
Seção intitulada “O motor de decisão”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).
Multijurisdição
Seção intitulada “Multijurisdição”- 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.
Papéis e fluxo de revisão
Seção intitulada “Papéis e fluxo de revisão”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.
IA controlada
Seção intitulada “IA controlada”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).
Persistência
Seção intitulada “Persistência”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.
Configuração
Seção intitulada “Configuração”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.