Banco de dados
Diagrama de classes (UML) - Mermaid
Utilizando a ferramenta Mermaid para representar as principais classes persistidas no banco de dados e seus relacionamentos. Por se tratar de um diagrama UML conceitual, os atributos foram representados como privados (-) e os comportamentos como públicos (+).
classDiagram
class Setor {
-id: Integer
-nome: String
-sigla: String
}
class GerenciadorUsuario {
<<service>>
+createUser(siape: String, password: String): Usuario
+createSuperuser(siape: String, password: String): Usuario
+validarSiape(): void
+definirPermissoesSuperusuario(): void
}
class Usuario {
-id: Integer
-siape: String
-nome: String
-email: String
-senha: String
-ativo: Boolean
-equipe: Boolean
-lastLogin: DateTime
-isSuperuser: Boolean
+isStaff(): Boolean
+isActive(): Boolean
}
class UsuarioSetor {
-id: Integer
}
class CodigoRecuperacao {
-id: Integer
-email: String
-codigo: String
-criadoEm: DateTime
+gerarCodigo(): String
+validarExpiracao(): Boolean
}
class DesafioPDI {
-id: Integer
-numero: Integer
-descricao: String
}
class ObjetivoPDI {
-id: Integer
-codigo: String
-descricao: String
}
class Macroprocesso {
-id: Integer
-nome: String
}
class Risco {
-id: Integer
-categoria: CategoriaRisco
-evento: String
-causa: String
-consequencia: String
-controlesAtuais: String
-eficaciaControle: EficaciaControle
-probabilidade: Integer
-impacto: Integer
-nivelRisco: Integer
-probResidual: Integer
-impResidual: Integer
-nivelResidual: Integer
+calcularNivelRisco(): Integer
+calcularNivelResidual(): Integer
}
class PlanoAcao {
-id: Integer
-tipoResposta: TipoResposta
-descricaoAcao: String
-responsavel: String
-parceiros: String
-dataInicio: Date
-dataFim: Date
-status: StatusPlanoAcao
-observacoes: String
+atualizarStatus(): void
}
class Monitoramento {
-id: Integer
-dataVerificacao: Date
-resultados: String
-acoesFuturas: String
-analiseCritica: String
+registrarAnalise(): void
}
class CategoriaRisco {
<<enumeration>>
Operacional
Estrategico
Integridade
Imagem
Financeiro
}
class EficaciaControle {
<<enumeration>>
Inexistente
Fraco
Satisfatorio
Forte
}
class TipoResposta {
<<enumeration>>
Mitigar
Evitar
Transferir
Aceitar
}
class StatusPlanoAcao {
<<enumeration>>
NaoIniciada
EmAndamento
Concluida
Atrasada
}
GerenciadorUsuario ..> Usuario : cria e gerencia
Usuario "1" --> "0..*" UsuarioSetor : associa
Setor "1" --> "0..*" UsuarioSetor : associa
Usuario "1" --> "0..*" CodigoRecuperacao : solicita
DesafioPDI "1" --> "0..*" ObjetivoPDI : organiza
Setor "1" --> "0..*" Risco : possui
ObjetivoPDI "1" --> "0..*" Risco : referencia
Macroprocesso "1" --> "0..*" Risco : classifica
Risco "1" --> "0..*" PlanoAcao : gera
Risco "1" --> "0..*" Monitoramento : recebe
Risco --> CategoriaRisco : categoria
Risco --> EficaciaControle : eficaciaControle
PlanoAcao --> TipoResposta : tipoResposta
PlanoAcao --> StatusPlanoAcao : status
note for GerenciadorUsuario "Serviço de suporte à criação de usuários no Django."
note for Usuario "Modelo conceitual de usuário baseado em SIAPE; no Django os campos são acessados pelo ORM, mas no UML aparecem encapsulados."
note for UsuarioSetor "Representa a associação muitos-para-muitos entre usuário e setor."
note for CodigoRecuperacao "Usado no fluxo de envio, validação e redefinição de senha; o e-mail é mantido como dado operacional."
note for Risco "A classe concentra as regras de cálculo do nível de risco e do nível residual."
note for PlanoAcao "Representa o tratamento do risco em formato 5W2H."
note for Monitoramento "Mantém o histórico de acompanhamento e análise do risco."
Diagrama de casos de uso - Mermaid
Utilizando a ferramenta Mermaid para representar os principais casos de uso relacionados às funções do sistema e às tabelas persistidas.
flowchart LR
gestor[Gestor]
admin[Administrador]
uc1((Autenticar no sistema))
uc2((Cadastrar gestor))
uc3((Vincular gestor a setor))
uc4((Recuperar senha))
uc5((Gerenciar perfil))
uc6((Consultar setores))
uc7((Cadastrar risco))
uc8((Editar risco))
uc9((Consultar planos de risco))
uc10((Cadastrar plano de ação))
uc11((Registrar monitoramento))
uc12((Manter estrutura PDI))
gestor --> uc1
gestor --> uc4
gestor --> uc5
gestor --> uc6
gestor --> uc7
gestor --> uc8
gestor --> uc9
gestor --> uc10
gestor --> uc11
admin --> uc2
admin --> uc3
admin --> uc12
admin --> uc6
admin --> uc9
uc1 --> db1[(USUARIOS)]
uc2 --> db1
uc3 --> db2[(USUARIO_SETORES)]
uc3 --> db3[(SETORES)]
uc4 --> db4[(CODIGOS_RECUPERACAO)]
uc4 --> db1
uc5 --> db1
uc5 --> db2
uc6 --> db3
uc7 --> db5[(RISCOS)]
uc7 --> db3
uc7 --> db6[(OBJETIVOS_PDI)]
uc7 --> db7[(MACROPROCESSOS)]
uc8 --> db5
uc9 --> db5
uc9 --> db8[(PLANOS_ACAO)]
uc9 --> db9[(MONITORAMENTOS)]
uc10 --> db8
uc11 --> db9
uc12 --> db10[(DESAFIOS_PDI)]
uc12 --> db6
uc12 --> db7
Diagrama entidade relacionamento (ER) (Padrão ISO/Min-max) - Dbdiagram.io
Utilizando a sintaxe do Dbdiagram.io para representar a estrutura relacional do banco com base nas tabelas atuais do projeto.

Tecnologia utilizada
O sistema utiliza PostgreSQL 16, executado localmente por meio do Docker Compose.
Configuração local
O container do banco é definido em docker-compose.yml com:
- banco:
gestao_risco_ufsm; - usuário:
postgres; - senha:
postgres; - porta externa:
5433; - porta interna do container:
5432.
Conexão usada pelo Django
O backend espera as seguintes variáveis no .env:
DATABASE_NAME=gestao_risco_ufsm
DATABASE_USER=postgres
DATABASE_PASSWORD=postgres
DATABASE_HOST=localhost
DATABASE_PORT=5433
Estrutura principal
As entidades mais relevantes do sistema incluem:
setores- armazena as unidades administrativas vinculadas a usuários e riscos;
usuarios- representa os gestores autenticados no sistema;
usuario_setores- tabela intermediária para o relacionamento muitos-para-muitos entre gestores e setores;
codigos_recuperacao- registra códigos temporários usados no fluxo de recuperação de senha;
desafios_pdi,objetivos_pdiemacroprocessos- representam a estrutura estratégica utilizada como referência para os riscos;
riscos- armazena os registros centrais do sistema e os níveis calculados;
planos_acao- guarda as ações de tratamento associadas a cada risco;
monitoramentos- mantém o histórico de acompanhamento dos riscos.