Skip to content

Repository files navigation

CEJ-EDITOR

Editor de Atos Normativos desenvolvido para elaboração, importação, edição, validação e exportação de textos legislativos no padrão do Centro de Estudo Jurídicos da Secretaria Especial para Assuntos Jurídicos da Casa Civil da Presidência da República (CEJ/SAJ/PR).

Descrição do Projeto

O CEJ-EDITOR é uma aplicação Web e Desktop (Electron) destinada ao suporte à redação técnica legislativa. O sistema realiza a importação de arquivos RTF e DOCX, a estrutura de artigos, parágrafos, incisos e alíneas, a validação de regras formais de sequenciamento e a exportação em HTML conforme as diretrizes oficiais. Arquivos .doc que contenham RTF são aceitos; documentos Word binários legados devem ser convertidos para DOCX ou RTF antes da importação.

Funcionalidades

  • Gerenciamento de Codificação de Caracteres: Padrão de gravação definido como ISO-8859-1 (Windows-1252), com opção de alteração para UTF-8 e UTF-16LE, garantindo a preservação de acentuação em sistemas legados.
  • Estruturação Sagitário: Botões que aplicam ao texto selecionado o tipo de agrupador ou dispositivo da estrutura legislativa (Parte, Livro, Título, Subtítulo, Capítulo, Seção, Subseção, Artigo, Parágrafo, Inciso, Alínea, Item, Alteração/Aspas e Omissis), com numeração deduzida da posição do dispositivo no ato — ou respeitando o número que o redator tenha escrito junto com o texto. A seleção pode atravessar vários dispositivos, e todos os que ela alcança são convertidos na ordem em que estão no ato. A criação de conteúdo novo cabe ao botão "Novo conteúdo".
  • Formatar não escreve: Nenhum botão de formatação insere texto no ato. A conversão muda o tipo e a numeração do dispositivo, e o texto na folha continua sendo palavra por palavra o que o redator escreveu; o dispositivo criado por um clique nasce vazio, com a frase de espera desenhada pela interface — que não faz parte do documento e some ao primeiro caractere.
  • Renumeração: Botão que refaz a numeração dos dispositivos pela ordem em que eles estão no ato — de todo o texto, ou apenas do trecho selecionado. Rótulos escritos à mão, como o Art. 5º-A de uma inclusão ou o Parágrafo único., são preservados e não deslocam a série.
  • Alinhamento e Formatação de Texto: Botões para alinhamento (à esquerda, centralizado, à direita e justificado), negrito, itálico, sublinhado, sobrescrito, subscrito e limpeza de formatação, além da inserção de links externos e âncoras internas. Todos agem sobre o trecho selecionado, ainda que ele atravesse mais de um dispositivo.
  • Remissões Visíveis: O destino de cada remissão da folha aparece em etiqueta ao passar o ponteiro sobre ela — a URL, no caso de link externo; o nome da âncora e o dispositivo a que ela leva, no caso de remissão interna ao ato.
  • Edição Avançada de Tabelas: Importação RTF de tabelas com mesclagem horizontal/vertical (colspan/rowspan), adição de células completando a coluna (à esquerda e à direita), mesclagem e separação (split) aplicadas à célula selecionada e redimensionamento individual.
  • Importação de Word: Conversão local de documentos DOCX para HTML antes da classificação legislativa, preservando parágrafos e tabelas compatíveis.
  • Controle de Histórico: Pilha de histórico para desfazer e refazer alterações (até 50 estados) via interface e atalhos de teclado (Ctrl+Z e Ctrl+Y).
  • Validação Normativa: Verificação de consistência e sequenciamento numérico dos dispositivos em tempo real.
  • Versão à vista: A barra de estado, no rodapé, fecha com a versão do programa — v0.3.5 —, que é a mesma do instalador baixado e a mesma da publicação no GitHub. É o número a informar ao relatar um defeito.

Interface do Usuário

CEJ-EDITOR - Interface Principal

Tecnologias e Versões

As versões abaixo são as declaradas no package.json. A integração contínua compila e testa o projeto com Node.js 22.12 ou superior.

Tecnologia Versão Função
Node.js >= 22.12.0 Ambiente de execução JavaScript/TypeScript
React ^18.2.0 Biblioteca para construção de interfaces gráficas
TypeScript ^5.3.3 Linguagem para tipagem estática de código
Vite ^8.2.1 Ferramenta de build e servidor de desenvolvimento
Electron ^41.10.5 Framework para execução em ambiente desktop
Electron Builder ^26.15.3 Empacotamento dos instaladores desktop
TailwindCSS ^4.0.0 Framework utilitário para estilização CSS
Lucide React ^0.344.0 Conjunto de ícones para interface
Mammoth ^1.12.1 Conversão de DOCX para HTML na importação
Vitest ^4.1.10 Framework para testes unitários
Esbuild ^0.28.2 Bundler para scripts da camada Electron

Instalação e Execução

Requisitos

Possuir o Node.js (versão 22.12 ou superior) e o npm instalados.

node -v
npm -v

Instalação

# Clonar o repositório
git clone https://github.com/waldeyr/cej-editor.git

# Acessar o diretório
cd cej-editor

# Instalar dependências
npm install

Execução em Desenvolvimento (Web)

npm run dev

A aplicação estará acessível em http://localhost:3000 (porta definida em vite.config.ts).

Execução dos Testes Unitários

npm test

Compilação para Produção

npm run build

Empacotamento Desktop (Electron)

O comando abaixo compila a aplicação e gera os instaladores do sistema operacional em que ele roda:

npm run build:desktop

Os artefatos gerados serão salvos no diretório dist-desktop/, com a versão no nome de cada arquivo — CEJ-EDITOR-0.3.5.dmg, CEJ-EDITOR Setup 0.3.5.exe, CEJ-EDITOR-0.3.5.AppImage e assim por diante.

Gerar cada distribuição individualmente

Para escolher o sistema ou o formato, compile uma vez e chame o electron-builder com o alvo desejado:

# Compila o web (dist/) e a camada Electron (dist-electron/) — pré-requisito de todos
npm run build

# Windows: instalador NSIS (.exe) e executável portátil
npx electron-builder --win

# Linux: .AppImage e pacote .deb
npx electron-builder --linux

# macOS: imagem de disco .dmg e arquivo .zip
npx electron-builder --mac

Um formato específico pode ser pedido depois do sistema:

npx electron-builder --win nsis          # somente o instalador
npx electron-builder --win portable      # somente o portátil
npx electron-builder --linux AppImage    # somente o AppImage
npx electron-builder --linux deb         # somente o .deb

Duas restrições de plataforma valem aqui: o .dmg do macOS só é gerado em uma máquina macOS (limitação da Apple), e gerar o instalador do Windows a partir do Linux exige o Wine instalado. Na prática, a compilação dos três sistemas é feita pelo fluxo de publicação descrito em Versão e Publicação, que roda em executores nativos de cada plataforma.

Versão e Publicação

A versão corrente é a v0.3.5, declarada como 0.3.5 no package.json. A numeração foi reiniciada abaixo de 1.0 para refletir a maturidade real do editor: a marca 1.0 fica reservada para quando o ciclo completo — importar, redigir, validar e exportar — estiver homologado pela área técnica.

Uma versão é publicada empurrando uma tag vX.Y.Z igual à versão do package.json:

# 1. Ajustar a versão no package.json e no package-lock.json de uma vez
npm version 0.3.5 --no-git-tag-version

# 2. Registrar o commit da versão
git commit -am "v0.3.5"

# 3. Criar e empurrar a tag
git tag -a v0.3.5 -m "CEJ-EDITOR v0.3.5"
git push origin main
git push origin v0.3.5

O npm version é o que mantém o package-lock.json junto: a integração roda npm ci, que recusa seguir quando os dois arquivos divergem na versão.

A tag dispara o fluxo .github/workflows/release.yml, que compila em Windows, Linux e macOS e produz:

Sistema Artefatos
Windows Instalador NSIS (.exe) e executável portátil
Linux .AppImage e pacote .deb
macOS Imagem de disco .dmg e arquivo .zip

Os instaláveis são anexados ao release do GitHub correspondente à tag e também ficam disponíveis como artefatos da execução do fluxo, nomeados cej-editor-<tag>-<sistema-operacional>.

Quem decide para qual release os instaladores vão é a tag que disparou o fluxo — o publish embutido do electron-builder foi desligado (--publish never) justamente porque escolhia pela versão do package.json e, quando as duas divergiam, publicava (ou criava) a release errada sem avisar.

Ainda assim a tag e a versão do package.json precisam coincidir: é do package.json que sai o número no nome de cada instalador e o número que a barra de estado mostra ao redator. Divergir não erra mais a release, mas entrega ao usuário um arquivo com o número trocado.

O disparo manual do fluxo (workflow_dispatch) compila os três sistemas sem publicar nada — serve para conferir que o empacotamento continua de pé fora de uma versão.

Licença

Este projeto está licenciado sob a licença Apache 2.0.

About

Editor Web e Desktop de atos normativos no padrão Planalto — importação RTF/DOCX, estruturação legislativa, validação e exportação HTML com preservação de encoding

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages