# Instalar: Refinamento de Operações (6 melhorias)

## 1. Ficheiros novos

```
app/Http/Controllers/MediaController.php
app/Livewire/Admin/MaintenanceRequestCreate.php
resources/views/livewire/admin/maintenance-request-create.blade.php
```

## 2. Ficheiros a substituir

```
app/Models/MaintenanceRequest.php                     (helper slaUrgency())

app/Livewire/Admin/MaintenanceRequestIndex.php          (filtros)
app/Livewire/Admin/MaintenanceRequestShow.php            (reject + attachments)
app/Livewire/Admin/WorkOrderIndex.php                     (filtros)
app/Livewire/Admin/WorkOrderShow.php                       (reatribuir técnico)

resources/views/livewire/admin/maintenance-request-index.blade.php
resources/views/livewire/admin/maintenance-request-show.blade.php
resources/views/livewire/admin/work-order-index.blade.php
resources/views/livewire/admin/work-order-show.blade.php
resources/views/livewire/portal/maintenance-request-show.blade.php   (fotos no portal)

routes/web.php    (rota /admin/maintenance-requests/create + /media/{mediaFile})
```

## 3. Limpar caches

```bash
cd ~/public_html/app.amimak.co.mz
php artisan config:clear
php artisan route:clear
php artisan view:clear
```

Sem migrations novas.

## 4. O que mudou, por item

1. **Filtros avançados** — `/admin/maintenance-requests` e `/admin/work-orders`
   ganharam filtros de estado/prioridade/imóvel/período (pedidos) e
   estado/imóvel/técnico (work orders). Um técnico continua só a ver as
   suas próprias, mesmo com filtros.

2. **Fotos anexadas** — nova rota `/media/{id}` autenticada, que verifica
   se podes ver a entidade "dona" do ficheiro antes de o servir (nunca
   URLs públicas directas). Aparecem como miniaturas clicáveis tanto no
   painel interno como no portal do cliente.

3. **Botão Rejeitar** — ao lado de Aprovar, no detalhe do pedido
   (`/admin/maintenance-requests/{id}`), enquanto o estado for
   `NEW`/`UNDER_REVIEW`.

4. **Criar pedido internamente** — novo botão "+ Novo Pedido" na listagem
   interna, formulário igual ao do portal mas sem restrição de cliente
   (a equipa pode escolher qualquer imóvel). Fica registado com
   `origin = INTERNAL`.

5. **Reatribuir técnico** — no detalhe da Work Order
   (`/admin/work-orders/{id}`), visível só a quem tem a permissão
   `work_orders.assign` (Maintenance Manager/Admin — nunca o próprio
   técnico). Fica registado automaticamente como nota interna.

6. **Indicador de SLA** — bolinha colorida (verde/laranja/vermelho) nas
   listagens e no detalhe do pedido, calculada a partir do prazo de
   resolução. Some automaticamente para pedidos já fechados/rejeitados.

## 5. Testar

- `/admin/maintenance-requests` — aplica um filtro, confirma que a lista
  actualiza sem recarregar a página
- Cria um pedido de teste com foto via portal (`joao@empresateste.co.mz`)
  → confirma que aparece a miniatura tanto no portal como no painel interno
- `/admin/maintenance-requests/{id}` de um pedido `NEW` → testa Rejeitar
- `/admin/maintenance-requests/create` → cria um pedido interno
- `/admin/work-orders/{id}` de uma WO já com técnico → reatribui a outro,
  confirma que aparece a nota automática
