← Voltar à Plataforma

Manual Técnico

GVFF GRC Platform - Plataforma de Gestão de Conformidade
Versão atualizada | Março 2026

Índice

  1. Arquitectura do Sistema
  2. Stack Tecnológico
  3. Base de Dados
  4. API REST
  5. Autenticação e Autorização
  6. Controlo de Acessos (RBAC)
  7. Sistema de Módulos e Licenciamento
  8. Segurança
  9. Motor de Conformidade
  10. Arquitectura Frontend
  11. Implantação e Operação

1. Arquitectura do Sistema

A plataforma GVFF GRC segue uma arquitectura cliente-servidor monolítica, com separação clara entre frontend (SPA) e backend (API REST).

+-------------------+ +-------------------+ +-------------------+ | | | | | | | Browser (SPA) | <--> | Express.js API | <--> | MySQL Database | | HTML/CSS/JS | HTTP | Node.js Server | SQL | Dominios.pt | | | | | | | +-------------------+ +-------------------+ +-------------------+ | | | +-----+------+ | | Middleware | | +-----+------+ | | Auth (JWT) | | | RBAC | | | Menu Access | | | CountryFilter | +------------+

Componentes Principais

2. Stack Tecnológico

ComponenteTecnologiaVersãoPropósito
RuntimeNode.js20.xAmbiente de execução servidor
FrameworkExpress.js4.xFramework web e API REST
Base de DadosMySQL8.x / compatívelArmazenamento persistente de dados
Driver DBmysql2/promise3.xConexão à base de dados
Autenticaçãojsonwebtoken (JWT)9.xTokens de sessão seguros
Hashingbcryptjs2.xHashing de passwords
Uploadsmulter1.xUpload de PDFs
Configdotenv17.xVariáveis de ambiente
FrontendVanilla JS/HTML/CSS-Interface de utilizador (SPA)

Estrutura de Directórios

gvff-grc-platform/
├── index.js                 # Ponto de entrada principal do servidor
├── config/
│   └── db.js                # Configuração da pool MySQL
├── middleware/
│   ├── auth.js              # Middleware de autenticação JWT
│   ├── rbac.js              # Roles e permissões CRUD
│   ├── menuAccess.js        # Controlo de acesso a módulos/menus
│   ├── countryFilter.js     # Filtragem por país
│   └── passwordValidator.js # Política de passwords
├── models/
│   ├── User.js
│   ├── Entity.js
│   ├── Supplier.js
│   ├── Asset.js
│   ├── Risk.js
│   ├── Document.js
│   ├── AuditLog.js
│   ├── Iso27001Scope.js
│   ├── Nis2Scope.js
│   └── ComplianceScopeFactory.js
├── routes/
│   ├── auth.js
│   ├── users.js
│   ├── entities.js
│   ├── countries.js
│   ├── suppliers.js
│   ├── assets.js
│   ├── risks.js
│   ├── documents.js
│   ├── iso27001.js
│   ├── nis2.js
│   ├── complianceFactory.js
│   ├── framework.js
│   ├── reports.js
│   ├── audit.js
│   ├── platformModules.js
│   └── menuPermissions.js
├── seeds/
│   └── frameworkSeed.js
├── uploads/                 # PDFs carregados pelos utilizadores
└── public/
    ├── index.html
    ├── app.js
    ├── styles.css
    ├── manual-utilizador.html
    ├── manual-tecnico.html
    └── manual-exportacao.html
    

3. Base de Dados

A plataforma utiliza MySQL como sistema de gestão de base de dados relacional. A conexão é feita com mysql2/promise através de variáveis separadas de ambiente.

3.1 Variáveis de ligação

DB_HOST=localhost
DB_PORT=3306
DB_NAME=gvffpt_grc_gvff
DB_USER=gvffpt_grcgvffusr
DB_PASSWORD=********
JWT_SECRET=********
PORT=5000

3.2 Tabelas Principais

users

Armazena os utilizadores do sistema com credenciais e roles.

ColunaTipoDescrição
idINT AUTO_INCREMENT PKIdentificador único
emailVARCHAREmail do utilizador
password_hashVARCHARHash bcrypt da password
nameVARCHARNome do utilizador
roleVARCHARplatform_owner, super_admin, admin, revisor, user
statusVARCHARactive / inactive
phone_numberVARCHARTelefone
mfa_enabledTINYINT(1)MFA ativo

countries

Países com informação de transposição NIS2 e maturidade.

ColunaTipoDescrição
idINT AUTO_INCREMENT PKIdentificador
name, codeVARCHARNome e código do país
regionVARCHARRegião (EU/UE ou outra)
is_euTINYINT(1)Indicador de UE
transposition_statusVARCHAREstado de transposição
implementation_phaseVARCHARFase de implementação
nis2_compatibleVARCHARCompatibilidade fora da UE
maturity_scoreINTPontuação de maturidade

entities

Entidades com classificação, contactos e scope operacional.

ColunaTipoDescrição
idINT AUTO_INCREMENT PKIdentificador
nameVARCHARNome da entidade
typeVARCHARTipo
sector, subsectorVARCHARSector e subsetor
nis2_classificationVARCHARClassificação NIS2
country_idINTPaís associado
scopeVARCHARcp ou local
ip_addresses, fqdnsLONGTEXTDados técnicos em texto

suppliers

Fornecedores com criticidade, risco e requisitos de segurança.

ColunaTipoDescrição
idINT AUTO_INCREMENT PKIdentificador
codVARCHARCódigo auto-gerado (SUP-###)
supplier_nameVARCHARNome do fornecedor
supplier_typeVARCHARTipo
criticalityVARCHARCritical / High / Medium / Low
risk_classificationVARCHARClassificação de risco
security_requirementsLONGTEXTJSON serializado
country_idINTPaís

assets

Ativos com informação técnica e de segurança.

ColunaTipoDescrição
idINT AUTO_INCREMENT PKIdentificador
codVARCHARCódigo auto-gerado (AST-###)
nameVARCHARNome do ativo
asset_typeVARCHARTipo de ativo
scopeVARCHARgovernance ou local
entity_id, country_idINTAssociações
ip_address, mac_address, software_versionVARCHARDetalhes técnicos
mfa_enabled, encryption_*TINYINT(1)Controlos de segurança

risks

Registo de riscos com avaliação inerente e residual.

ColunaTipoDescrição
idINT AUTO_INCREMENT PKIdentificador
entity_idINTEntidade associada
titleVARCHARTítulo do risco
likelihood, impactINTProbabilidade e impacto (1-5)
risk_level, risk_scoreVARCHAR / INTNível e pontuação do risco
residual_likelihood, residual_impactINTRisco residual
residual_risk_level, residual_risk_scoreVARCHAR / INTNível e pontuação residual

documents

Documentos com versionamento, refs e upload de PDF.

ColunaTipoDescrição
idINT AUTO_INCREMENT PKIdentificador
codeVARCHARCódigo auto-gerado (DOC-###)
titleVARCHARTítulo do documento
doc_typeVARCHARTipo
revisionVARCHARRevisão
statusVARCHARdraft / review / approved / obsolete
framework_refs, doc_refsLONGTEXTJSON serializado
file_path, file_nameVARCHARFicheiro PDF anexo

3.3 Tabelas de Conformidade

O sistema utiliza o padrão scope/items para cada framework.

FrameworkTabela de ScopesTabela de Items
ISO 27001iso27001_scopesiso27001_items
NIS2nis2_scopesnis2_items
ISO 27002iso27002_scopesiso27002_items
ENSens_scopesens_items
GDPRgdpr_scopesgdpr_items

3.4 Tabelas de Sistema

TabelaPropósito
platform_modulesMódulos ativáveis da plataforma
role_menu_permissionsPermissões de menu por role
audit_logsRegisto de auditoria
framework_itemsBiblioteca de referência oficial
user_countriesAssociação utilizadores-países

4. API REST

Todos os endpoints, exceto autenticação, requerem o header Authorization: Bearer <token>.

4.1 Autenticação

MétodoEndpointDescrição
POST/api/auth/loginLogin (retorna token JWT)
POST/api/auth/registerRegisto de novo utilizador
GET/api/auth/meUtilizador autenticado atual

4.2 CRUD Endpoints

RecursoBase URLOperaçõesMódulo
Utilizadores/api/usersGET, POST, PUT, DELETEusers
Entidades/api/entitiesGET, POST, PUT, DELETEentities
Países/api/countriesGET, POST, PUT, DELETEcountries
Fornecedores/api/suppliersGET, POST, PUT, DELETEsuppliers
Ativos/api/assetsGET, POST, PUT, DELETEassets
Riscos/api/risksGET, POST, PUT, DELETErisks
Documentos/api/documentsGET, POST, PUT, DELETEdocuments

4.3 Conformidade

FrameworkBase URLMódulo
ISO 27001/api/iso27001compliance_iso27001
NIS2/api/nis2compliance_nis2
ISO 27002/api/iso27002compliance_iso27002
ENS/api/enscompliance_ens
GDPR/api/gdprcompliance_gdpr

4.4 Sistema

EndpointDescrição
/api/dashboardDados do dashboard principal
/api/reports/governanceRelatório Governance
/api/reports/countryRelatório por país
/api/auditLog de auditoria
/api/platform-modulesGestão de módulos
/api/menu-permissionsPermissões de menu
/api/frameworkBiblioteca de referência oficial
/healthHealth check

5. Autenticação e Autorização

5.1 JWT (JSON Web Tokens)

O sistema utiliza tokens JWT com as seguintes características:

5.2 Política de Passwords

5.3 Fluxo de Autenticação

1. Cliente envia POST /api/auth/login { email, password }
2. Servidor valida credenciais com bcrypt.compare()
3. Se válido, gera JWT
4. Cliente armazena token no browser
5. Pedidos seguintes incluem Authorization: Bearer <token>
6. Middleware authenticate() valida e descodifica o token
7. Dados do utilizador ficam disponíveis em req.user

6. Controlo de Acessos (RBAC)

6.1 Hierarquia de Roles

RoleNívelDescrição
platform_ownerMais altoAcesso total + gestão de módulos
super_adminElevadoAdministração total da plataforma
adminOperacionalGestão de dados
revisorLeitura/revisãoSem eliminação
userBásicoAcesso limitado

6.2 Níveis de controlo

  1. JWT: valida identidade
  2. RBAC: valida operações por role
  3. Menu access: valida menus permitidos e módulos ativos
  4. Country filter: restringe dados por país para utilizadores não administrativos

Nota: platform_owner, super_admin e admin não ficam limitados por país. Os restantes podem ser filtrados pela tabela user_countries.

7. Sistema de Módulos e Licenciamento

A plataforma possui módulos que podem ser ativados ou desativados ao nível da plataforma.

MóduloChave
Dashboard Overviewoverview
Countriescountries
Entitiesentities
Supplierssuppliers
Assetsassets
Risksrisks
Compliance ISO 27001compliance_iso27001
Compliance NIS2compliance_nis2
Compliance ISO 27002compliance_iso27002
Compliance ENScompliance_ens
Compliance GDPRcompliance_gdpr
Documentsdocuments
Reportsreports
Auditaudit
Usersusers
Framework Annex Afw_annexa
Framework Clausesfw_clauses
Framework NIS2fw_nis2
Framework ISO 27002fw_iso27002
Framework ENSfw_ens
Framework GDPRfw_gdpr

Atenção: Quando um módulo está desativado, pode desaparecer da interface e o respetivo acesso via API fica bloqueado.

8. Segurança

8.1 Medidas Implementadas

8.2 Variáveis de Ambiente

VariávelDescriçãoObrigatória
DB_HOSTHost MySQLSim
DB_PORTPorta MySQLSim
DB_NAMENome da base de dadosSim
DB_USERUtilizador MySQLSim
DB_PASSWORDPassword MySQLSim
JWT_SECRETSecret JWTSim
PORTPorta da aplicaçãoNão

Importante: Em produção, utilize sempre um JWT_SECRET forte e não mantenha segredos hardcoded no código.

9. Motor de Conformidade

9.1 Padrão Scope / Items

Entidade → Scope → Items

Cada item tem:
- item_type
- item_ref
- item_title
- impl_status

9.2 Estados

9.3 Cálculo de Percentagem

Percentagem = ((implemented + on_going * 0.5) / total) * 100

- implemented = 100%
- on_going = 50%
- not_implemented = 0%

9.4 Factory de compliance

ISO 27002, ENS e GDPR utilizam um factory genérico (ComplianceScopeFactory + complianceFactory.js) para reduzir duplicação de código.

10. Arquitectura Frontend

10.1 SPA (Single Page Application)

O frontend é uma SPA em vanilla JavaScript com as seguintes características:

10.2 Ficheiros principais

11. Implantação e Operação

11.1 Requisitos

11.2 Processo correto de deploy

  1. Atualizar ficheiros do projeto no servidor
  2. Confirmar .env / variáveis da app Node
  3. Executar npm install
  4. Reiniciar a app

11.3 Comandos

# Instalar dependências
npm install

# Iniciar servidor
npm start

# Script start
node index.js

Nota: Esta aplicação não requer npm run build. O backend corre diretamente com node index.js.

11.4 Bootstrap inicial

No arranque, a aplicação pode garantir estrutura base da plataforma, incluindo:

GVFF GRC Platform - Manual Técnico

Documento atualizado para a versão em produção