# Portal de Dados — Segunor

Portal web público para **actualização de dados pessoais** de colaboradores
da Segunor (vigilantes activos e novos admissões). Os dados recolhidos
alimentam a BD central e são disponibilizados ao Sabichão via API.

- **URL (beta)**: https://dadosbeta.segunor.pt
- **URL (produção)**: https://dados.segunor.pt

---

## Stack

- **Framework**: Laravel 11 · PHP 8.2+
- **BD**: MySQL/MariaDB (em cPanel / hosting partilhado)
- **Storage**: Cloudflare R2 (S3-compatible) — comprovativos e documentos
- **CAPTCHA**: Cloudflare Turnstile
- **2FA**: TOTP (Google Authenticator) + OTP por email
- **Email**: SMTP do cPanel
- **Deploy**: FTP para hosting `dados.segunor.pt` (ver [DEPLOY.md](DEPLOY.md))

---

## Módulos

1. **Página pública** — seletor (colaborador activo / nova admissão) com Turnstile
2. **Formulário de colaborador activo** — actualização de morada, contactos, IBAN, docs
3. **Formulário de nova admissão** — recolha completa para contratação
4. **Upload de comprovativos** — CC, atestado médico, NIB, etc. → Cloudflare R2
5. **Painel admin** — revisão de submissões, validação, export, 2FA no login
6. **API para Sabichão** — leitura autenticada dos dados validados (tokens)

Ver [PLANO.md](PLANO.md) para detalhe do plano de desenvolvimento.

---

## Integrações

- **Sabichão v1.3** (192.168.69.20) — lê via API REST com token (ver helper
  `funcoes/dados_portal_api.php` no develop)
- **Sabichão v2.0** (192.168.69.18) — lê via conexão `dados_portal` configurada
  em `config/database.php` do v2.0 (read-only, mediada por API)

---

## Configuração

### `.env` (não commitado)

Chaves necessárias:

```env
APP_NAME="Segunor Dados"
APP_ENV=production
APP_URL=https://dados.segunor.pt
APP_KEY=base64:...

# BD do cPanel
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=...
DB_USERNAME=...
DB_PASSWORD=...

# Email (SMTP cPanel)
MAIL_MAILER=smtp
MAIL_HOST=mail.segunor.pt
MAIL_PORT=465
MAIL_ENCRYPTION=ssl
MAIL_USERNAME=noreply@segunor.pt
MAIL_PASSWORD=...

# Cloudflare R2
R2_ACCESS_KEY_ID=...
R2_SECRET_ACCESS_KEY=...
R2_DEFAULT_REGION=auto
R2_BUCKET=dados-segunor
R2_ENDPOINT=https://<account>.r2.cloudflarestorage.com

# Cloudflare Turnstile
TURNSTILE_SITE_KEY=...
TURNSTILE_SECRET_KEY=...

# API tokens para Sabichão (gerados em painel admin)
DADOS_PORTAL_API_TOKEN=...
```

### Setup

```bash
composer install --optimize-autoloader --no-dev
cp .env.example .env
php artisan key:generate
# Editar .env com credenciais

php artisan migrate --force
php artisan storage:link

# Caches de produção
php artisan config:cache
php artisan route:cache
php artisan view:cache
```

Ver [DEPLOY.md](DEPLOY.md) para o processo completo de deploy via FTP
(sem SSH, adaptado ao hosting partilhado).

---

## Segurança

- **`.env`** nunca é commitado — contém passwords do R2, SMTP, DB de produção, keys do Turnstile
- **Dados pessoais**: toda a submissão passa por validação server-side; docs vão para R2 privado
- **2FA obrigatório** para qualquer utilizador admin
- **Turnstile** em todos os formulários públicos
- **Rate limiting** nas rotas de submissão e de login

---

## Licença

Software proprietário da Segunor — Segurança Privada. Todos os direitos reservados.
