# V8.1 — Manutenção da base de dados

## Acesso

No backoffice:

```text
Sistema
→ Manutenção da base de dados
```

A página só é apresentada e autorizada para superutilizadores.

## Modos disponíveis

### Eliminação seletiva

Permite escolher grupos funcionais:

- clientes e contactos;
- contas de clientes;
- serviços;
- domínios;
- alojamentos;
- projetos web;
- renovações e pagamentos;
- notificações;
- tickets;
- documentos;
- tarefas;
- infraestrutura;
- fornecedores;
- importações;
- templates e formulários;
- configuração;
- segurança dos clientes;
- outros administradores;
- sessões e registos;
- automação periódica.

Quando uma seleção depende de outros dados, a plataforma inclui as dependências na pré-visualização. Por exemplo, eliminar clientes implica eliminar os serviços e renovações que os protegem.

### Limpeza total do portal

Remove todos os dados funcionais selecionados, mas preserva sempre:

- a conta de superutilizador que executa a operação;
- tabelas de migrações e esquema da base de dados;
- permissões técnicas do Django;
- histórico das operações de manutenção.

Na limpeza total é possível preservar também:

- configuração global;
- templates e formulários;
- agenda Celery Beat;
- outros utilizadores administrativos.

## Fluxo de segurança

```text
Selecionar dados
→ Pré-visualizar contagens e dependências
→ Criar operação auditável
→ Confirmar frase exata
→ Confirmar palavra-passe
→ Criar snapshot JSON comprimido
→ Eliminar dados numa transação
→ Registar resultado
```

Frases exigidas:

```text
ELIMINAR SELECIONADOS
LIMPAR BASE DE DADOS
```

## Cópia de segurança

A limpeza total exige uma cópia automática. O ficheiro é guardado em:

```text
backups/database/
```

Formato:

```text
k4w-before-cleanup-AAAAMMDD-HHMMSS-CODIGO.json.gz
```

A pasta não é publicada em `static` nem em `media`.

Para preparar uma recuperação manual:

```bash
gzip -dk backups/database/NOME_DO_FICHEIRO.json.gz
python manage.py loaddata backups/database/NOME_DO_FICHEIRO.json
```

A recuperação deve ser feita primeiro numa cópia do ambiente e pode exigir uma base vazia.

## Ficheiros físicos

Por defeito, a operação remove apenas registos da base de dados. Existe uma opção separada para eliminar também:

- documentos;
- comprovativos;
- anexos de tickets;
- ficheiros Excel;
- fotografias dos perfis abrangidos.

Esta opção é irreversível e deve ser usada apenas depois de confirmar o backup externo desses ficheiros.

## Configuração

Desenvolvimento:

```env
K4W_DATABASE_MAINTENANCE_ENABLED=True
K4W_DATABASE_MAINTENANCE_ALLOW_FULL_RESET=True
```

Produção:

```env
K4W_DATABASE_MAINTENANCE_ENABLED=False
K4W_DATABASE_MAINTENANCE_ALLOW_FULL_RESET=False
```

Em produção, ative temporariamente apenas durante uma janela de manutenção autorizada e volte a desligar depois.

## Eliminação de registos individuais

Para eliminar apenas um cliente, pagamento, domínio ou outro objeto específico, utilize a respetiva lista normal do Django Admin. O centro de manutenção destina-se a limpezas por módulo ou a reposições gerais.
