# Portal Kreate4Web — V9.4

Plataforma Django para gerir clientes, serviços digitais, domínios, alojamentos, websites, renovações, pagamentos, comunicações, infraestrutura, monitorização e suporte.

A V9.4 mantém todas as funcionalidades anteriores e corrige transversalmente o carregamento de CSS, ficheiros estáticos e ícones. Acrescenta ainda uma área administrativa para pré-visualizar o portal de qualquer cliente sem terminar a sessão do administrador.

## Novidades V9.3

### Correção visual global

- caminhos absolutos para `/static/` e `/media/`;
- CSS próprio carregado depois do CSS do Django Unfold;
- cache-busting com a versão 9.3;
- fonte Material Symbols carregada localmente;
- correções no WordPress, health, manutenção da base de dados e restantes páginas personalizadas.

### Pré-visualização como cliente

No backoffice:

```text
Relação com clientes → Pré-visualizar como cliente
```

O administrador pode entrar na área privada de cada cliente sem logout e sem utilizar a palavra-passe do cliente. O modo normal é só de leitura; superutilizadores podem iniciar um teste interativo mediante confirmação.

Consulte `CHANGELOG_V9_3.md`, `V9_3_VISUAL_PREVIEW_GUIDE.md` e `V9_3_TEST_REPORT.md`.

## Novidades V9.1

### Recuperação de palavra-passe

Na janela única de login existe agora a opção **Esqueci-me da palavra-passe**. O fluxo utiliza tokens temporários do Django, emails em texto/HTML, não revela se uma conta existe e mantém o segundo fator configurado. Em desenvolvimento, a ligação aparece no terminal quando o backend de email de consola está ativo.

### Estado e diagnóstico

A página `/health/` foi redesenhada e inclui o botão **Executar diagnóstico agora**. Verifica base de dados, migrações, sistema Django, cache, escrita em media, ficheiros estáticos, email e Redis/Celery, apresentando duração e resultado de cada teste.

### Infraestrutura WordPress e SSL

No menu **Infraestrutura** passam a existir Sites WordPress, Plugins WordPress, Temas WordPress e Certificados SSL, com estados, versões, licenças, vulnerabilidades, validade e indicadores no dashboard.

### Identidade e manutenção

O backoffice utiliza um logótipo horizontal Kreate4Web. A página de manutenção da base de dados foi reconstruída visualmente, mantendo todas as confirmações, backups e auditoria.

Consulte `CHANGELOG_V9_1.md`, `V9_1_TECHNICAL_GUIDE.md` e `V9_1_PASSWORD_HEALTH_GUIDE.md`.

## Manutenção da base de dados

No backoffice:

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

A função permite pré-visualizar e eliminar dados por módulo ou repor todos os dados funcionais. Exige superutilizador, frase de confirmação, palavra-passe e, na limpeza total, uma cópia de segurança automática. A conta administrativa atual, o esquema e as migrações são sempre preservados.

Consulte `V8_1_DATABASE_MAINTENANCE_GUIDE.md`.

## Correções V7.1

- superutilizadores e colaboradores podem entrar pela página de login unificada e são encaminhados para o backoffice;
- clientes continuam a ser encaminhados para a área privada;
- login por nome de utilizador ou email único;
- página inicial com escolha clara entre Backoffice e Área do cliente;
- `runserver` mostra todas as URLs e neutraliza opções HTTPS de produção durante o desenvolvimento;
- comando `diagnose_local` para verificar base de dados, migrações, superutilizadores e porta;
- opção `--open-browser` para abrir o portal automaticamente.

## Tecnologias

- Python 3.11 ou superior
- Django 5.2 LTS
- Django Unfold
- Celery + Redis + django-celery-beat
- django-simple-history
- openpyxl
- SQLite para desenvolvimento
- PostgreSQL preparado para produção

## Instalação nova no macOS

```bash
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
cp .env.example .env
python manage.py migrate
python manage.py seed_demo_data --reset
python manage.py createsuperuser
python manage.py setup_notification_schedule
python manage.py setup_monitoring_schedule
python manage.py diagnose_local
python manage.py runserver 127.0.0.1:8000 --open-browser
```

Backoffice:

```text
http://127.0.0.1:8000/admin/
```

Área do cliente:

```text
http://127.0.0.1:8000/portal/
```

### Contas fictícias do portal

As 10 contas de demonstração estão listadas em:

```text
DEMO_CLIENT_CREDENTIALS.txt
```

Exemplo:

```text
Utilizador: cliente.acacia
Palavra-passe: K4W-Acacia-2026!
```

O superutilizador criado por `createsuperuser` pode entrar em:

```text
http://127.0.0.1:8000/admin/
```

ou utilizar a página de login unificada. A plataforma identifica o tipo de conta e encaminha automaticamente.

O comando `seed_demo_data --reset` elimina os dados de negócio antes de recriar a demonstração. Não deve ser executado depois de introduzir dados reais.

## Funcionalidades principais

### Área privada do cliente

O cliente pode:

- consultar serviços e estados;
- consultar renovações;
- consultar pagamentos;
- carregar comprovativos;
- consultar e descarregar documentos autorizados;
- criar tickets;
- responder várias vezes ao mesmo ticket;
- carregar anexos nas conversas;
- marcar tickets como resolvidos;
- reabrir tickets;
- atualizar contactos, quando é o responsável principal;
- alterar a palavra-passe.

Todos os objetos são filtrados pelo cliente autenticado. Um utilizador não pode consultar serviços, documentos ou tickets de outra entidade.

### Sistema de tickets

Cada ticket possui:

- referência pública `K4W-000001`;
- cliente e serviço relacionado;
- assunto, categoria e descrição;
- prioridade;
- estado;
- responsável interno;
- data limite;
- histórico de várias mensagens;
- anexos;
- notas internas invisíveis ao cliente;
- registo de leitura;
- nota e autor da resolução.

Fluxo habitual:

```text
Cliente cria ticket
→ A aguardar internamente
→ Admin responde
→ A aguardar cliente
→ Cliente responde novamente
→ A aguardar internamente
→ Admin ou cliente marca como resolvido
→ Cliente pode reabrir
```

As respostas públicas do backoffice preparam uma notificação para o cliente. As mensagens do cliente preparam um alerta interno para a Kreate4Web.

### Estados e cores

A plataforma utiliza a mesma semântica em todos os módulos:

- **Verde:** ativo, saudável, pago, verificado, entregue, concluído ou resolvido.
- **Azul:** em configuração, processamento, migração, tratamento ou revisão.
- **Amarelo/laranja:** pendente, atenção, espera, proximidade de prazo ou situação parcial.
- **Vermelho:** atraso, falha, suspensão, incidente, bloqueio ou urgência.
- **Cinzento/roxo:** cancelado, arquivado, transferido, oferta ou responsabilidade externa.

A página completa está em:

```text
Sistema → Legenda de estados
```

### Identidade Kreate4Web

Foram aplicados:

- logótipo e favicon Kreate4Web;
- login personalizado;
- backoffice preto, branco e amarelo;
- área do cliente responsiva;
- cartões, tabelas, estados e ações coerentes;
- ligação direta ao website institucional.

## Login e arranque local

A página inicial é:

```text
http://127.0.0.1:8000/
```

O servidor de desenvolvimento não abre necessariamente uma janela sozinho. Mantenha o terminal aberto e use o endereço com `http://`, não `https://`.

Diagnóstico:

```bash
python manage.py diagnose_local
```

Iniciar e abrir o navegador:

```bash
python manage.py runserver 127.0.0.1:8000 --open-browser
```

Caso a porta esteja ocupada:

```bash
python manage.py runserver 127.0.0.1:8001 --open-browser
```

Alterar a palavra-passe de um administrador existente:

```bash
python manage.py changepassword NOME_DO_UTILIZADOR
```

Detalhes adicionais: `V7_LOGIN_RUNSERVER_FIX.md`.

## Redis e Celery

Instalar Redis no macOS:

```bash
brew install redis
brew services start redis
redis-cli ping
```

Executar em terminais separados:

```bash
python manage.py runserver
```

```bash
celery -A config worker -l info
```

```bash
celery -A config beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
```

No Windows, o worker pode usar:

```powershell
celery -A config worker -l info --pool=solo
```

## Segurança de email

A configuração inicial mantém:

```text
Modo de teste: ativo
Envio automático: desligado
```

Antes de enviar mensagens reais:

1. configurar SMTP no `.env`;
2. definir um destinatário de testes;
3. configurar a URL pública do portal em **Sistema → Configuração**;
4. enviar testes pelo Centro de comunicações;
5. rever os modelos;
6. manter o modo de teste ativo durante a validação;
7. só depois ativar o envio automático.

## Atualização da V8.1 para a V9.1

Fazer primeiro uma cópia de segurança de:

```text
.env
db.sqlite3
media/
```

Substituir o código, preservar esses elementos e executar:

```bash
source .venv/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py seed_initial_data
python manage.py seed_template_library
python manage.py setup_notification_schedule
python manage.py check
python manage.py diagnose_local
python manage.py runserver 127.0.0.1:8000 --open-browser
```

Não executar `seed_demo_data --reset` quando existirem dados a preservar.

## Testes

```bash
python manage.py makemigrations --check
python manage.py check
python manage.py test
```

Mais documentação:

- `V6_CLIENT_PORTAL_GUIDE.md`
- `V6_TICKET_GUIDE.md`
- `V6_STATUS_SYSTEM.md`
- `V6_DEPLOYMENT_CHECKLIST.md`
- `V6_TEST_REPORT.md`
- `V7_TEMPLATE_LIBRARY_GUIDE.md`
- `V7_DEMO_ACCOUNTS_GUIDE.md`
- `V7_LOGIN_RUNSERVER_FIX.md`
- `V7_1_TEST_REPORT.md`
- `V8_1_DATABASE_MAINTENANCE_GUIDE.md`
- `CHANGELOG_V9_1.md`
- `V9_1_TECHNICAL_GUIDE.md`
- `V9_1_PASSWORD_HEALTH_GUIDE.md`
- `V9_1_TEST_REPORT.md`
- `PROJECT_ARCHITECTURE.md`


## Dados fictícios WordPress V9.4

Para adicionar sites WordPress, plugins, temas, SSL, backups e monitorização sem limpar a base completa:

```bash
python manage.py seed_wordpress_demo_data
```

Também está disponível no backoffice em **Infraestrutura → Dados demo WordPress**. Consulte `V9_4_DEMO_WORDPRESS_GUIDE.md`.
