
Sistema de Gestão de Segurança da Informação auto-hospedado — ISO 27001, NIS2, GDPR/DSGVO, BSI IT-Grundschutz
<!-- © 2026 Claude Hecker — ISMS Builder V 1.76 — AGPL-3.0 -->

# ISMS Builder
**Sistema de Gestão de Segurança da Informação auto-hospedado — código aberto, sem necessidade de nuvem**
[](https://github.com/coolstartnow/isms-builder/actions/workflows/ci.yml)
[](https://github.com/coolstartnow/isms-builder/actions)
[](LICENSE)
[](https://nodejs.org)
[](CHANGELOG.md)
📖 **[Wiki](https://github.com/coolstartnow/isms-builder/wiki)** — Uso da imagem Docker &
variáveis de ambiente, arquitetura & módulos, FAQ, contribuir (DE/EN)
<!-- NOTA RGPD: Os quatro emblemas acima (CI, Testes, Licença, Node.js) carregam recursos
de servidores externos (github.com, shields.io/Cloudflare, img.shields.io).
Quando este README é renderizado num navegador, estes pedidos transmitem o endereço
IP do visualizador a terceiros (incl. servidores sediados nos EUA — RGPD Art. 44 ff.).
Para documentação auto-hospedada 100% conforme o RGPD, substitua estas quatro linhas
de emblemas pelas suas equivalentes locais em docs/badges/ ou remova-as por completo. -->
---
> ## ⚠️ Aviso de Segurança: Repositórios falsos e cópias que distribuem malware
> O ISMS Builder **não tem "releases" empacotados, instaladores ou ficheiros ZIP para descarregar** — a única
> fonte legítima é este repositório, clonado ou descarregado diretamente do GitHub como código-fonte
> simples. Temos conhecimento de pelo menos um **repositório malicioso que se faz passar por este projeto**
> (README falso, botão "Download" falso que aponta para um ZIP disfarçado de captura de ecrã, contendo um
> carregador de malware para Windows — cadeia de payload `.cmd` → `.exe` → Lua-DLL). **Não descarregue nem execute qualquer
> ZIP/instalador/exe "isms_builder" de qualquer outro local que não seja este repositório.**
> Se encontrar um repositório ou site suspeito que se faça passar por este projeto, por favor abra uma
> [issue](https://github.com/coolstartnow/isms-builder/issues) ou uma
> [discussion](https://github.com/coolstartnow/isms-builder/discussions) para que possamos sinalizá-lo.
---
> **Estado: Desenvolvimento ativo — ainda não é um produto acabado.**
> Os módulos principais são funcionais e estão em uso, mas algumas funcionalidades estão incompletas
> e a plataforma continua a crescer. Contribuições, feedback e testes
> em cenários reais são muito bem-vindos — é exatamente por isso que este projeto foi aberto.
---
> 🛡️ **Projeto relacionado: [NIS2 Quick-Check](https://github.com/coolstartnow/nis2-quickcheck)** —
> uma autoavaliação NIS2 gratuita e autónoma (10 domínios × 5 perguntas, todos os 27 Estados-Membros da UE, todas as 24
> línguas oficiais da UE). Funciona inteiramente no navegador, sem backend, sem instalação. Não faz parte do
> ISMS Builder e não é necessário para o utilizar — apenas uma ferramenta complementar para uma primeira orientação rápida.
---
## O que é o ISMS Builder?
O ISMS Builder é uma **plataforma web auto-hospedada** para gerir um Sistema de Gestão de Segurança da Informação (ISMS).
Cobre todo o ciclo de vida de conformidade — desde a elaboração de políticas até à evidência de auditoria — para ISO 27001:2022, NIS2, RGPD/DSGVO, BSI IT-Grundschutz e outros referenciais.
**Sem nuvem. Sem taxas SaaS. Os seus dados ficam no seu servidor.**
> Concebido para PMEs, equipas de TI e consultores que precisam de uma ferramenta ISMS real sem um contrato com fornecedores de cinco dígitos.
---
## Utilização Prevista e Âmbito
Este projeto começou como uma ferramenta de trabalho para um único profissional de ISMS e cresceu a partir daí. É
código aberto porque o trabalho pode ser útil a outros — não porque seja um produto comercial
disfarçado. Ser explícito quanto a isso ajuda-o a decidir se se adequa à sua situação.
**Para que foi concebido.** Uma pequena equipa de SGSI — muitas vezes uma só pessoa, por vezes um punhado — que
redige e mantém a documentação de um sistema de gestão: políticas, riscos, ativos,
controlos, evidências. Espera-se que o número de pessoas que *precisam de uma conta* se mantenha pequeno.
Alcançar um público alargado funciona sem contas: os reconhecimentos de políticas são enviados como
links baseados em tokens, para que os destinatários leiam e confirmem um documento sem nunca iniciarem sessão, e
sem aparecerem em qualquer lista de utilizadores.
**O que espera de si.** O ISMS Builder é auto-alojado, e tudo o que daí decorre
é da sua responsabilidade: implementação, TLS, endurecimento, cópias de segurança, atualizações, controlo de acessos e as obrigações
de proteção de dados relativas a tudo o que nele armazenar. O projeto disponibiliza uma configuração predefinida razoável,
não um serviço gerido.
**O que não é.** Não existe uma oferta SaaS alojada, nem um contrato de suporte comercial, nem um
acordo de nível de serviço. Não é um produto de alojamento multi-inquilino. Não o certifica
segundo qualquer norma, e não constitui aconselhamento jurídico — ajuda-o a organizar e a evidenciar o trabalho,
mas a avaliação continua a ser sua e do seu auditor.
**Quem o mantém.** Uma pessoa, a par de um emprego a tempo inteiro. As issues e discussões são lidas e
respondidas, geralmente em poucos dias; os relatórios de segurança são prioritários. Os pedidos de funcionalidades são bem-vindos e
moldam genuinamente o roteiro, mas competem por noites limitadas. Se a sua organização depende
de um prazo fixo ou de uma resposta garantida, um fornecedor comercial é a recomendação honesta —
e isso não é razão para evitar o projeto, apenas uma razão para planear de forma realista.
---
## Capturas de ecrã
| Início de sessão | Painel |
|---|---|
|  |  |
| Declaração de Aplicabilidade | Gestão de Riscos |
|---|---|
|  |  |
| GDPR & Proteção de Dados | Gestão de Ativos |
|---|---|
|  |  |
| Orientação & Documentação | Relatórios |
|---|---|
|  |  |
| Registo de medidas | Medidas para um controlo |
|---|---|
|  |  |
> Execute `npm start` e abra `https://localhost:3000` para explorar localmente o conjunto completo de dados de demonstração.
---
## Visão geral das funcionalidades
| Módulo | Descrição | Normas |
|---|---|---|
| **Gestão de Políticas** | CRUD de modelos, versionamento, ciclo de vida (rascunho → revisão → aprovado → arquivado), hierarquia de espaços, anexos | ISO 27001 §5 |
| **Declaração de Aplicabilidade** | 147 controles integrados em 5 frameworks (BSI IT-Grundschutz, EU NIS2, EUCS, EU AI Act, CRA) mais controles ISO 27001 / 9000 / 9001 que você mesmo importa (nunca fornecidos), edição inline, análise de lacunas, mapeamento cruzado | ISO 27001 A / BSI / NIS2 / EUCS / EUAI / ISO 9001 / CRA |
| **Registro de Medidas** | Um único registro para tratamentos de riscos, ações para constatações de auditoria, medidas de governança e TOMs — responsável, prazo, status, evidências; atribuível a controles da SoA, constatações e riscos; exibido na SoA, riscos, constatações, governança e GDPR, atualizado automaticamente a partir de versões anteriores ([docs](https://github.com/coolstartnow/isms-builder/blob/main/docs/module-measures.en.md)) | ISO 27001 §6.1.3 / GDPR Art. 32 |
| **Gestão de Riscos** | Registro de riscos, planos de tratamento (mantidos no registro de medidas), papel de auditor | ISO 27001 §6.1 |
| **Objetivos de Segurança** | Acompanhamento de KPIs com barras de progresso, integração com calendário | ISO 27001 §6.2 |
| **GDPR e Privacidade** | VVT, contratos de processamento (AV), DSFA, TOMs, fila de DSAR, temporizador de 72h, registro de exclusões com alertas por e-mail | DSGVO Art. 13–35 |
| **Gestão de Ativos** | Registro de ativos, tipos de ativos editáveis, objetivos de proteção (CIA + autenticidade) com herança de dependências, níveis de classificação, acompanhamento de EoL | ISO 27001 A.5.9–5.12 |
| **BCM / BCP** | Análise de Impacto nos Negócios, planos de continuidade, exercícios | ISO 27001 A.5.29–5.30 / NIS2 |
| **Registros de Treinamento** | Catálogo de treinamentos, acompanhamento de conclusão, upload de certificados | ISO 27001 A.6.3 |
| **Gestão de Fornecedores** | Registro de fornecedores, agendamento de auditorias, avaliação de riscos | ISO 27001 A.5.19–5.22 |
| **Jurídico e Contratos** | Contratos, NDAs, políticas de privacidade, calendário de expiração | |
| **Caixa de Entrada de Incidentes** | Caixa de entrada do CISO + **formulário público de reporte** (sem necessidade de login) | NIS2 / BSI |
| **Governança** | Revisões pela direção, atas de reuniões, medidas de governança (mantidas no registro de medidas) | ISO 27001 §9.3 |
| **Relatórios** | Matriz de conformidade (Controle × Entidade), relatório de lacunas, ciclos de revisão, exportação CSV | |
| **Constatações de Auditoria** | Registro de constatações (IST→SOLL→Risco→Recomendação), planos de ação, acompanhamento de severidade/status, referência FIND-YYYY-NNNN | ISO 27001 §9.2 |
| **Gestão de Auditorias** | Auditorias com checklists, constatações criadas a partir de não conformidades, programa anual de auditoria (plano trimestral, aprovação), integração com calendário e dashboard, exportação CSV/PDF | ISO 27001 §9.2, ISO 19011 |
| **Confirmações de Políticas** | Distribuição verificável de políticas aos colaboradores e confirmação de entendimento, evidência central de auditoria ([docs](https://github.com/coolstartnow/isms-builder/blob/main/docs/module-policy-acknowledgements.en.md)) | ISO 27001 7.3, A.6.3 |
| **NIS2** | Checklist de governança do Art. 21 (30 itens) e prazos de reporte do Art. 23 com alertas automáticos | NIS2 Art. 21 / 23 |
| **Calendário** | Um calendário para prazos em todos os módulos: medidas, tratamentos de riscos, auditorias, revisões, contratos, treinamentos, prazos | |
| **Orientação** | Manual e base de conhecimento integrados (guias de módulos, guias de papéis, documentos próprios) com busca, em cinco idiomas | |
| **Aplicativo Móvel (Android)** | Aplicativo Android separado que funciona offline com seu próprio conjunto de dados e sincroniza com o servidor via Wi-Fi ou um pacote de arquivos: contas de sincronização com direitos por módulo, configuração por QR code, modelos, SoA, riscos, ativos, constatações e orientação (somente leitura); requer `STORAGE_BACKEND=json` ([docs](https://github.com/coolstartnow/isms-builder/blob/main/docs/module-mobile-sync.en.md)). Ainda não lançado publicamente: se você quiser experimentá-lo antes, entre em contato pelo [site do projeto](https://www.isms-builder.com/#contact) | |
| **Rastreabilidade** | Cada registro vincula-se a controles da SoA + documentos de política — bidirecional | |
| **Busca Semântica** | Busca local por IA via Ollama (nomic-embed-text) com fallback por palavras-chave | |
| **Multi-Entidade** | Árvore de estrutura corporativa, aplicabilidade por entidade para controles e políticas | |
| **UI multilíngue e dados de demonstração** | UI completa, conteúdo de demonstração e documentação do módulo em 🇩🇪 DE / 🇬🇧 EN / 🇫🇷 FR / 🇳🇱 NL / 🇭🇺 HU; o administrador controla os idiomas disponíveis | |
### ⚠ IMPORTANTE: Os controles ISO exigem instalação manual pelo administrador
> **ISO 27001:2022, ISO 9000:2015 e ISO 9001:2015** são normas protegidas por direitos de autor publicadas
> pela International Organization for Standardization (ISO, © ISO). As definições dos controles
> (títulos, descrições, texto dos requisitos) **não estão incluídas** neste software e **não devem**
> ser redistribuídas sem uma licença ISO válida.
**O que isto significa na prática:**
Os módulos SoA para ISO 27001, ISO 9000 e ISO 9001 são fornecidos sem conteúdo de controles.
O administrador **deve importar manualmente** os controles antes que estes frameworks possam ser utilizados:
1. Obtenha uma cópia licenciada da norma em [iso.org](https://www.iso.org/) ou junto de um organismo nacional autorizado
2. Prepare um ficheiro JSON com as suas definições de controles (formato documentado em `scripts/import-iso-controls.sh`)
3. Execute o script de importação:
```bash
bash scripts/import-iso-controls.sh path/to/iso-controls.json
```
4. Reinicie o servidor do ISMS Builder
> **Frameworks incluídos de fábrica (sem necessidade de licença ISO):**
> BSI IT-Grundschutz, EU NIS2, EUCS, EU AI Act e CRA baseiam-se em legislação da UE
> e publicações federais alemãs disponíveis publicamente e estão totalmente pré-instalados.
A operação dos módulos de framework ISO sem uma licença válida para a respetiva norma é da
exclusiva responsabilidade do operador. O projeto ISMS Builder e os seus contribuidores não
assumem qualquer responsabilidade pela utilização não licenciada de conteúdo protegido pela ISO.
---
## Início Rápido
```bash
git clone https://github.com/coolstartnow/isms-builder.git
cd isms-builder
npm install
cp .env.example .env # set JWT_SECRET to a long random string
npm start # http://localhost:3000
```
Faça login com **`[email protected]` / `adminpass`**. No primeiro login, será solicitado que você escolha o **idioma dos dados de demonstração** (🇩🇪 DE / 🇬🇧 EN / 🇫🇷 FR / 🇳🇱 NL / 🇭🇺 HU) ou comece com um sistema vazio. Altere a senha do administrador imediatamente após.
Para uso em produção com HTTPS:
```bash
# .env
JWT_SECRET=<output of: openssl rand -hex 32> # required; production refuses a missing, short or placeholder secret
STORAGE_BACKEND=json
SSL_CERT_FILE=/etc/ssl/certs/your.crt
SSL_KEY_FILE=/etc/ssl/private/your.key
```
**Vai entrar em produção?** Produção é sempre uma **instalação nova** – demonstração e produção nunca são misturadas.
Não transforme uma instância de demonstração (ou os seus dados) num sistema de produção: instale uma nova instância
(`STORAGE_BACKEND=json` é o padrão recomendado, veja `.env.example`), crie o seu próprio administrador
e defina os seus próprios segredos. O *Demo Reset* e o *Demo Import* na aplicação são funções exclusivas da instância
de demonstração: não são uma ferramenta de backup, restauro ou migração, e o *Demo Import* funciona apenas com
`STORAGE_BACKEND=json`.
Os frameworks SoA integrados (BSI IT-Grundschutz, EU NIS2, EUCS, EU AI Act, CRA) são criados
automaticamente em todos os backends de armazenamento. Os textos de controlo da ISO 27001 / 9000 / 9001 têm
direitos de autor da ISO e **nunca** são incluídos – forneça-os você mesmo em `data/iso-controls.json`
(veja `scripts/import-iso-controls.sh`).
---
## Docker
Cada versão é publicada como um GitHub Package no GitHub Container Registry, para
`linux/amd64` e `linux/arm64` — com as tags `:latest` e `:<version>` (por exemplo, `:1.37.5.2`):
```bash
docker compose up -d
# App runs at http://localhost:3000
```
Ou sem Compose (`data/` deve ser um bind mount — os dados nunca são incorporados na imagem):
```bash
docker run -d --name isms-builder -p 3000:3000 \
-e JWT_SECRET="$(openssl rand -hex 32)" \
-v "$PWD/data:/app/data" \
ghcr.io/coolstartnow/isms-builder:latest
```
Este é o padrão, armazenando dados como arquivos JSON simples em `./data` — nenhum contêiner de banco de dados é necessário. É a configuração recomendada para equipes pequenas e é o que os dois comandos acima utilizam.
**Usando PostgreSQL (ou MariaDB) em vez de JSON.** A imagem suporta isso nativamente, mas — diferentemente da configuração JSON acima — requer um segundo contêiner (o banco de dados propriamente dito) além de algumas variáveis de ambiente informando à aplicação como acessá-lo. Se você apenas baixou a imagem (`docker pull ghcr.io/coolstartnow/isms-builder`) sem nunca clonar este repositório, esses nomes de variáveis não estão visíveis em lugar algum por padrão — `docker-compose.yml` e `.env.example`, onde eles estão documentados, são arquivos deste repositório Git, não parte da imagem. Esta seção existe para que essa informação não seja um segredo exclusivo do repositório.
A imagem `isms-builder` em si nunca inclui um servidor de banco de dados — `postgres:17` (ou `mariadb:11`) é um mecanismo de banco de dados completamente genérico e vazio do Docker Hub, sem qualquer conhecimento das tabelas deste projeto. Essas tabelas (riscos, ativos, controles de SoA, e assim por diante) são criadas automaticamente pela própria aplicação no momento em que ela inicia e encontra um banco de dados vazio — sem importação manual de SQL, sem etapa de migração separada que você precise executar. Consulte "Como o esquema do banco de dados é criado?" abaixo se quiser os detalhes completos do funcionamento.
Dois contêineres, uma rede Docker compartilhada, e então a aplicação é informada de onde encontrar o banco de dados:
```bash
# 1) An isolated network so the two containers can reach each other by name
docker network create isms-net
# 2) The database — empty until the app first connects and creates its tables
docker run -d --name isms-postgres --network isms-net \
-e POSTGRES_DB=isms_builder \
-e POSTGRES_USER=isms \
-e POSTGRES_PASSWORD="$(openssl rand -hex 16)" \
-v isms-postgres-data:/var/lib/postgresql/data \
postgres:17-alpine
# 3) The app, pointed at that database by container name (isms-postgres) via
# Docker's built-in DNS on the shared network — no host/port juggling needed
docker run -d --name isms-builder --network isms-net -p 3000:3000 \
-e JWT_SECRET="$(openssl rand -hex 32)" \
-e STORAGE_BACKEND=postgres \
-e DB_HOST=isms-postgres \
-e DB_PORT=5432 \
-e DB_USER=isms \
-e DB_PASS="<same password as POSTGRES_PASSWORD above>" \
-e DB_NAME=isms_builder \
ghcr.io/coolstartnow/isms-builder:latest
```
O que cada variável significa:
| Variável | Finalidade |
|---|---|
| `STORAGE_BACKEND` | `postgres` (ou `pg`) para PostgreSQL, `mariadb` para MariaDB/MySQL. Deixe sem definir (ou `json`) para a configuração JSON padrão. |
| `DB_HOST` | Nome do host do contêiner do banco de dados. Numa rede Docker compartilhada, é apenas o `--name` do contêiner — o Docker resolve-o automaticamente. |
| `DB_PORT` | `5432` para PostgreSQL, `3306` para MariaDB. |
| `DB_USER` / `DB_PASS` / `DB_NAME` | Têm de corresponder ao que definiu no contêiner do banco de dados (`POSTGRES_USER`/`POSTGRES_PASSWORD`/`POSTGRES_DB` acima, ou os equivalentes MariaDB). |
Para MariaDB, substitua `postgres:17-alpine` por `mariadb:11`, use as suas variáveis `MARIADB_DATABASE` /
`MARIADB_USER` / `MARIADB_PASSWORD` no passo 2, e `STORAGE_BACKEND=mariadb` /
`DB_PORT=3306` no passo 3. A lista completa e com referências cruzadas de todas as variáveis de ambiente que este
projeto reconhece — incluindo as que não são abordadas aqui (SSL, confiança em proxy reverso, SMTP,
2FA, …) — encontra-se em [`.env.example`](https://github.com/coolstartnow/isms-builder/blob/main/.env.example) neste repositório.
Os utilizadores do Compose obtêm isto sem esforço: o `docker-compose.yml` já inclui os perfis de serviço
`mariadb` e `postgres` (comentados por predefinição, juntamente com as explicações equivalentes das variáveis de ambiente) —
`docker compose --profile postgres up -d` inicia ambos os contêineres interligados automaticamente,
sem necessidade de configuração manual de rede ou de copiar e colar palavras-passe.
**Como é criado o esquema da base de dados?** Nem a imagem `postgres:17` nem a `mariadb:11`
sabem nada sobre este projeto — são motores de base de dados genéricos e vazios, diretamente do
Docker Hub. Não há ficheiro de dump SQL para importar nem comando de migração separado para executar manualmente.
Em vez disso, no momento em que o contêiner `isms-builder` arranca e se liga a uma base de dados vazia, o seu
próprio código de aplicação (não a imagem da base de dados) cria todas as tabelas de que necessita no momento — ver
[`server/db/knexDatabase.js`](https://github.com/coolstartnow/isms-builder/blob/main/server/db/knexDatabase.js): uma lista de definições de tabelas, cada uma
verificada com `hasTable()` e criada com `createTable()` se estiver em falta, tudo antes de a aplicação começar
a aceitar pedidos HTTP. Isso torna-o idempotente — o primeiro arranque constrói o esquema completo
a partir do nada, e cada reinício posterior contra a mesma base de dados é uma operação silenciosa sem efeito, porque as
tabelas já existem. Este é o mesmo mecanismo, sem modificações, que foi verificado em ambiente real contra
SQLite, MariaDB 11 e PostgreSQL 17 (ver [#70](https://github.com/coolstartnow/isms-builder/issues/70)).
Para compilar a partir do código-fonte, em vez disso, descomente o bloco `build:` no `docker-compose.yml` e execute
`docker compose up -d --build`.
As imagens incluem uma atestação de proveniência de compilação assinada:
```bash
gh attestation verify oci://ghcr.io/coolstartnow/isms-builder:latest --owner coolstartnow
```
## Requisitos
- **Node.js 18+** (testado: 18, 20, 22)
- npm 9+
- (Opcional) Docker + Docker Compose
- (Opcional) [Ollama](https://ollama.ai) para busca semântica com IA local
---
## Configuração (`.env`)
| Variável | Padrão | Descrição |
|---|---|---|
| `JWT_SECRET` | *(obrigatório)* | Segredo para assinatura JWT — pelo menos 32 caracteres aleatórios (`openssl rand -hex 32`). Com `NODE_ENV=production` (sempre o caso na imagem Docker) o servidor não inicia com um segredo ausente, curto ou placeholder |
| `PORT` | `3000` | Porta de escuta HTTP/HTTPS |
| `STORAGE_BACKEND` | `json` | `json` (dev/demo) ou `sqlite` (produção) |
| `SSL_CERT_FILE` | — | Caminho para o certificado TLS → habilita HTTPS |
| `SSL_KEY_FILE` | — | Caminho para a chave privada TLS |
| `DATA_DIR` | `./data` | Substitui o diretório de dados (volumes Docker) |
| `SMTP_HOST` | — | Servidor SMTP para alertas por e-mail |
| `SMTP_PORT` | `587` | Porta SMTP |
| `SMTP_USER` | — | Nome de usuário SMTP |
| `SMTP_PASS` | — | Senha SMTP |
| `SMTP_FROM` | — | Endereço do remetente para notificações |
---
## Arquitetura
```
server/
index.js — Express app setup, router mounts
auth.js — JWT auth, RBAC ranks, session
routes/ — 17 Express route modules (one per domain)
db/ — Data stores (jsonStore / sqliteStore / orgSettingsStore / …)
ai/ — Semantic search (embedder, embeddingStore, lexicalSearch)
reports.js — Report generation logic
ui/
index.html — SPA shell (Atlassian Dark Theme)
app.js — All render functions, ~6000 lines vanilla JS
style.css — CSS variables, dark theme
data/ — JSON files / SQLite DB (gitignored)
docs/
ISMS-build-documentation.md — Full architecture reference
architecture/ — C4 diagrams, data model, OpenAPI 3.0.3 spec
tests/ — Jest + Supertest (176 tests, --runInBand)
```
- **Autenticação:** Cookie JWT (`sm_session`), senhas bcrypt, 2FA TOTP (aplicável em toda a organização)
- **RBAC:** `reader` → `editor` / `dept_head` → `contentowner` / `auditor` → `admin`
- **Persistência:** Arquivos JSON (padrão/demo) ou SQLite via `better-sqlite3`
- **IA:** Ollama local opcional (nomic-embed-text); pesquisa por palavras-chave sempre disponível como alternativa
- **Registo de Auditoria:** Cada ação de criação/atualização/eliminação/início de sessão registada, filtrável, exportável
Consulte [`docs/architecture/`](https://github.com/coolstartnow/isms-builder/blob/main/docs/architecture) para diagramas C4, modelo de dados completo e especificação OpenAPI 3.0.3 (mais de 80 endpoints).
---
## Executar Testes
> **Nota:** A suite de testes em `tests/` são os testes de desenvolvimento pessoais do autor e são
> disponibilizados juntamente com o projeto por questões de transparência. **Não** fazem parte da aplicação em si
> e **não são necessários** para executar a aplicação. Os testes cobrem o comportamento interno da API e utilizam
> credenciais de teste codificadas que só existem no ambiente de teste isolado — não têm qualquer
> relação com dados de produção ou de demonstração.
```bash
npm test # runs all 423 tests
npm run preflight # exactly what CI gates on (tests + pinning + audit)
npm test -- --verbose # with test names
```
Os testes usam um diretório temporário isolado — nenhum dado de produção é afetado.
---
## Contribuindo
Contribuições são muito bem-vindas! Consulte [CONTRIBUTING.md](https://github.com/coolstartnow/isms-builder/blob/main/CONTRIBUTING.md) para:
- Configuração de desenvolvimento (5 minutos até a primeira execução de testes)
- Estilo de código e convenções
- Como abrir uma boa issue ou PR
**Encontrou um problema de segurança?** Por favor, não abra uma issue pública — use
[relatório privado de vulnerabilidades](https://github.com/coolstartnow/isms-builder/security/advisories/new).
[SECURITY.md](https://github.com/coolstartnow/isms-builder/blob/main/SECURITY.md) descreve o escopo, o porto seguro e o que esperar realisticamente.
**Boas primeiras issues** estão marcadas com [`good first issue`](https://github.com/coolstartnow/isms-builder/issues?q=label%3A%22good+first+issue%22) no rastreador de issues.
---
## Roadmap
| Status | Funcionalidade |
|---|---|
| ✅ Concluído | Busca semântica (Ollama / nomic-embed-text) |
| ✅ Concluído | Backend SQLite, Docker, CI/CD |
| ✅ Concluído | Alertas por e-mail do registro de exclusões GDPR |
| ✅ Concluído | Pacotes de demonstração multilíngues (DE / EN / FR / NL / HU) |
| ✅ Concluído | Módulo de Achados de Auditoria com planos de ação (V 1.37.2.0) |
| ✅ Concluído | Traduções de Orientação FR/NL + configuração de idioma do administrador (V 1.37.2.0) |
| ✅ Concluído | Backend MariaDB/MySQL (`STORAGE_BACKEND=mariadb`, V 1.37.2.1) |
| ✅ Concluído | Scanner → Rascunho de Risco (importação Greenbone/OpenVAS XML + PDF, V 1.37.2.0) |
| ✅ Concluído | Reconhecimento de Políticas — colaboradores confirmam políticas digitalmente com trilha de auditoria (V 1.37.2.0) |
| ✅ Concluído | CRUD de Orientação — criar, editar e enviar documentação própria (V 1.37.2.0) |
| ✅ Concluído | Busca de Orientação — busca de texto completo entre categorias com trecho (V 1.37.2.0) |
| ✅ Concluído | Objetivos de proteção de ativos — CIA + autenticidade (1–4), dependências e herança do princípio máximo do BSI (V 1.37.2.0) |
| ✅ Concluído | Checklist de governança NIS2 Art. 21 (30 itens) e prazos de notificação do Art. 23 com alertas automáticos (V 1.37.2.0) |
| ✅ Concluído | Backend PostgreSQL (`STORAGE_BACKEND=pg`) — mesma camada de armazenamento Knex do MariaDB, verificado contra uma instância real do PostgreSQL 17, incl. caminho completo de `docker compose` (V 1.37.5) |
| ✅ Concluído | Integração ownCloud / Nextcloud — políticas aprovadas publicadas automaticamente como PDF via WebDAV, visibilidade opcional de favoritos/links públicos, verificado ao vivo contra uma instância real do NextcloudPi (#66, V 1.37.5.1) |
| ✅ Concluído | Imagem Docker publicada no GitHub Container Registry após cada release (`ghcr.io/coolstartnow/isms-builder`, `linux/amd64` + `linux/arm64`, proveniência de build assinada) — contribuído por @bucherfa (#71, V 1.40.0). Teste de esforço de manutenção: removido novamente se se revelar mais trabalhoso do que o esperado. |
| ✅ Concluído | Assistente de Políticas com IA — Ollama redige conteúdo para qualquer tipo de documento (Política, Procedimento, Política de Risco, SoA, Incidente, Release) a partir de título + tipo + idioma (#87, V 1.60.0) |
| ✅ Concluído | Aplicativo Android com uso offline e sincronização de dados — contas de sincronização, configuração por QR-code, direitos por módulo (V 1.76.0) |
| ✅ Concluído | Gestão de auditorias — auditorias com checklists, achados a partir de não conformidades, programa anual de auditoria |
| ✅ Concluído | Registro de medidas — um único conjunto de dados para tratamentos de risco, ações de achados, medidas de governança e TOMs (V 1.80.0) |
| 🔜 Próximo | Exclusão à prova de auditoria — registros excluídos são mantidos permanentemente, exclusões GDPR anonimizam em vez de remover, revisão de integridade do log de auditoria |
| 🔜 Próximo | Relatórios agendados — relatório de conformidade semanal/mensal entregue por e-mail |
| 🔜 Próximo | Detecção de anomalias no log de auditoria (lote LLM) |
| 🚀 Mais tarde | Pontuação quantitativa de risco (valores em €, inspirado no FAIR) |
| 🚀 Mais tarde | Portal de colaboração para auditores — acesso externo somente leitura para auditores |
| 🚀 Mais tarde | Análise de lacunas de políticas (LLM) |
| 🏁 V 2.x | Categorias de Orientação configuráveis — administradores definem categorias personalizadas (ex.: fluxos de trabalho, documentos organizacionais) |
---
## Sobre o Autor
**Claude Hecker** atua na área de TI há mais de 35 anos. Após cerca de 15 anos como CIO,
passou a exercer as funções de CISO e Encarregado de Proteção de Dados (DSO/DSB). Ao longo da sua carreira,
concebeu e implementou infraestruturas de TI de âmbito empresarial e conectividade de redes de longa distância
(VPN, MPLS) para uma grande empresa europeia — responsável por operações fiáveis e seguras em
múltiplos locais e jurisdições.
O ISMS Builder nasceu diretamente dessa experiência: construir e manter um ISMS em conformidade no
mundo real, em auditorias reais, com pressão regulatória real. A ferramenta reflete aquilo de que os profissionais
realmente necessitam — não aquilo que um gestor de produto pensa que eles necessitam.
**Porquê open source?**
As PME merecem acesso a uma plataforma de ISMS adequada sem taxas de licenciamento de cinco dígitos. O esforço de
integração é real independentemente da ferramenta escolhida — mas esse custo não deve ser agravado pelo aprisionamento
a fornecedores nem pela saída de dados da sua própria infraestrutura. Este projeto defende a liberdade do software e
---
[Read more](https://github.com/coolstartnow/isms-builder)