Andrade Systems
Todos os sistemas
Produção

RST Transparente

Nove domínios diferentes convivendo no mesmo sistema.

Portal institucional · Multi-domínio

Produção
Status
9
Domínios cobertos
Base pública do CNJ
Integração

Visão geral

O que este sistema resolve

O sistema nasceu para resolver um problema de confiança: o morador não enxergava para onde ia o dinheiro da administração. A primeira versão publicava receita, despesa e parecer do conselho fiscal.

O que estava em produção resolvia o problema declarado — e revelou os outros. Hoje o portal cobre obra, demanda com protocolo, proposta, enquete com voto, e um módulo jurídico que acompanha processo judicial, notificação e multa. Hoje o sistema cobre transparência financeira, obras, demandas, propostas, enquetes e gestão jurídica.

O desafio

O que tornava o problema difícil

Estes são os pontos que mais influenciaram a arquitetura.

  • Domínios que não se parecem, no mesmo produto

    Financeiro tem período e publicação. Demanda tem protocolo, prazo e responsável. Processo judicial tem número, movimentação e sigilo. Enquete tem voto único. Cada um desses tem seu próprio ciclo de vida — e o sistema precisa mantê-los coerentes sem virar cinco sistemas grudados.

  • O mesmo dado é público e sensível ao mesmo tempo

    O andamento de um processo judicial do condomínio interessa a todos os moradores. As partes desse processo são o vizinho. Publicar tudo expõe pessoa; publicar nada devolve o problema de confiança que originou o portal.

  • O acompanhamento não pode exigir login

    O morador que abre uma demanda precisa acompanhá-la sem criar conta e sem lembrar senha — mas o acompanhamento não pode virar uma janela para as demandas dos outros.

  • O histórico contábil vive em planilhas heterogêneas

    Anos de balancete montados por pessoas diferentes: mês por extenso ou abreviado, com e sem acento, ano de dois ou quatro dígitos, linhas de saldo misturadas com lançamentos. Migrar isso à mão é inviável; importar automaticamente sem conferência produz um balancete errado que ninguém percebe.

Escopo

Os domínios do sistema

Cada um destes tem entidades, estados e regras próprios. Estão listados porque a variedade é justamente o que o produto tem de mais difícil.

Transparência financeira

Receita e despesa por período, categorizadas, com ciclo de rascunho e publicação, e balancete público exportável.

Pareceres do conselho

Documento do conselho fiscal com publicação controlada e arquivo anexo.

Obras

Acompanhamento de obra com estado e registro de andamento.

Demandas com protocolo

Abertura, protocolo rastreável sem login, atualizações e encerramento.

Propostas

Recebimento e avaliação de proposta de fornecedor.

Enquetes

Consulta com opções e voto registrado por pessoa.

Jurídico — processos

Cadastro de processo com sincronização de andamento na base pública do tribunal e arquivamento.

Jurídico — notificações e multas

Notificação e multa com ciclo próprio, vinculadas a bloco e unidade validados.

Auditoria e configuração

Registro de ação administrativa no módulo jurídico e configuração institucional do portal.

Arquitetura

Como o sistema é montado

Aplicação

Next.js · App Router · TypeScript

Área pública e área administrativa no mesmo projeto, separadas por grupo de rotas.

API

Route handlers

Regra de negócio isolada em módulos próprios; a rota valida, autoriza e delega.

Dados

PostgreSQL · Prisma

Modelos por domínio, com enums que representam os estados de cada ciclo de vida.

Autenticação

Auth.js

Sessão em middleware, com verificação de papel antes de alcançar a rota administrativa.

Validação

Zod

Schema por entrada, aplicado no servidor. A validação de formulário é conveniência.

Arquivos

Cloudinary

Documento e comprovante fora do banco.

Integração

Base pública do CNJ

Sincronização de andamento processual com recorte deliberado do que é trazido.

Decisões de engenharia

Decisões e trade-offs

Cada decisão registra a justificativa e o trade-off aceito.

  1. Autorização no middleware, antes da rota

    Toda rota administrativa passa por um único ponto que verifica sessão e papel. Uma tela nova nasce protegida por padrão, em vez de depender de quem a criou lembrar de adicionar a verificação.

    Custo aceito · A regra fica distante da tela que ela protege, e a lista de exceções precisa ser mantida com cuidado para não crescer sem controle.

  2. Publicação controlada por estado

    Lançamento e parecer têm ciclo de rascunho e publicação. O que o público vê é filtrado por estado, e não por existência do registro — assim o histórico administrativo permanece completo mesmo quando algo é despublicado.

    Custo aceito · Toda consulta pública precisa lembrar do filtro de estado. O custo é mitigado concentrando as consultas públicas em pontos específicos, em vez de espalhá-las pelas páginas.

  3. Importação com revisão antes da gravação

    O leitor classifica cada linha e marca as que parecem resumo ou saldo, mas quem confirma é o operador. Uma heurística boa erra em silêncio; uma heurística que propõe erra na frente de quem sabe a resposta.

    Custo aceito · A importação deixa de ser um clique e passa a exigir revisão. Para um histórico contábil, é o comportamento correto.

Por dentro da engenharia

Os problemas em detalhe

Cada bloco abre com o problema, mostra a solução e explica por que ela foi escolhida. Expanda o que interessar.

Sincronização com o tribunal sem trazer as partes

Problema

O portal precisa mostrar o andamento dos processos da administração. A base pública do tribunal devolve o processo inteiro — incluindo as partes, que são pessoas físicas identificáveis e, neste caso, moradores do próprio condomínio.

Solução

O cliente da integração consome apenas classe processual, assunto, órgão julgador, grau, data de ajuizamento e a movimentação mais recente. O campo de partes é ignorado explicitamente, com o motivo escrito no código para que ninguém o "conserte" depois. Data inválida vinda da fonte é descartada em vez de derrubar a sincronização inteira.

Por que foi feito assim

A integração ignora os dados pessoais das partes e armazena apenas os campos necessários ao acompanhamento. O que não entra no banco não vaza num backup, não precisa de política de retenção, não aparece por acidente numa exportação e não depende de ninguém lembrar de filtrá-lo na próxima tela. E descartar o registro ruim em vez de falhar é a escolha certa quando a fonte é externa e imperfeita: uma data malformada não pode impedir a atualização dos outros vinte processos.

Número de processo mascarado por posição

Problema

O número unificado de processo é público por natureza, mas identifica diretamente uma pessoa: com ele em mãos, qualquer um consulta o processo inteiro no tribunal. Publicá-lo completo no portal expõe o vizinho.

Solução

A máscara opera por posição dentro do número: preserva ano, ramo da justiça e tribunal — que dão contexto e permitem verificar do que se trata — e apaga sequencial, dígito verificador e unidade de origem, que são o que permite localizar o processo.

Por que foi feito assim

Mascarar tudo tornaria a informação inútil e devolveria a desconfiança que o portal existe para resolver. Mascarar por posição é o que mantém a utilidade pública e remove a capacidade de identificação — e só é possível porque o formato do número é padronizado, com cada faixa de dígitos significando uma coisa.

Leitor de planilha contábil heterogênea

Problema

Anos de balancete existem apenas em planilhas montadas por pessoas diferentes ao longo do tempo. O mês aparece por extenso e abreviado, com e sem acento; o ano com dois ou quatro dígitos; e linhas de saldo, total e disponibilidade estão misturadas com os lançamentos, com aparência idêntica.

Solução

O leitor normaliza o texto — remove acento, padroniza caixa e separadores — e tenta reconhecer o período tanto no cabeçalho quanto no nome da aba. Cada linha é classificada em receita ou despesa, e as que casam com o vocabulário de resumo são marcadas como prováveis cabeçalhos de grupo, desmarcadas por padrão na tela de conferência.

Por que foi feito assim

O ponto de decisão fica com quem sabe a resposta. Uma importação que adivinha e grava produz um balancete plausível e errado — o pior resultado possível, porque ninguém vai auditar um número que parece certo. Marcar a suspeita e pedir confirmação transforma a heurística em sugestão, e mantém a responsabilidade contábil onde ela deve estar.

Stack

Stack do projeto

O sistema em números

19
Modelos de dados
41
Rotas de API
51
Páginas
13
Enums de domínio

conferido no repositório em 27/08/2026

Status

Produção

Aplicação

Next.jsReact 19TypeScriptTailwind

Dados

PostgreSQLPrisma

Autenticação

Auth.jsbcrypt

Validação

Zod

Integrações

Base pública do CNJCloudinary

Visualização

Recharts

Infraestrutura

Railway

Próximo sistema

NexoGov

Onde o processo está, quem está com ele, e há quanto tempo.

Beta