# Instalar: 6 Melhorias (Compartimentos, Documentos, Inquilino, Fotos)

## 1. Ficheiros novos

```
app/Enums/CompartmentType.php
app/Enums/PartyDocumentType.php
app/Models/EntityDocument.php
app/Livewire/Admin/ServiceProviderShow.php
resources/views/livewire/admin/service-provider-show.blade.php

database/migrations/2026_09_01_000001_create_entity_documents_table.php
```

## 2. Ficheiros a substituir

```
app/Models/Client.php
app/Models/ServiceProvider.php

app/Livewire/Admin/PropertyShow.php
resources/views/livewire/admin/property-show.blade.php

app/Livewire/Admin/ClientShow.php
resources/views/livewire/admin/client-show.blade.php

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

resources/views/livewire/admin/property-index.blade.php
resources/views/livewire/admin/asset-index.blade.php
resources/views/livewire/admin/client-index.blade.php
resources/views/livewire/admin/service-provider-index.blade.php
resources/views/livewire/admin/maintenance-request-show.blade.php
resources/views/livewire/admin/dashboard.blade.php
resources/views/livewire/admin/invoice-create.blade.php
resources/views/livewire/admin/work-order-show.blade.php
resources/views/layouts/app.blade.php

app/Livewire/Admin/ClientIndex.php
app/Livewire/Admin/MaintenanceRequestShow.php

resources/views/livewire/portal/maintenance-request-create.blade.php
resources/views/livewire/portal/maintenance-request-show.blade.php

routes/web.php
```

## 3. Passos

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

## 4. O que mudou, por pedido

### 1. "Áreas" -> "Compartimentos"
Só o texto visível — o nome técnico por trás (PropertyArea,
property_areas) mantém-se, para não arriscar mexer na base de dados
sem necessidade.

### 2. Compartimentos mostram o tipo
Deixou de ser um campo de texto livre — agora é um dropdown com tipos
comuns (Quarto, Sala, Cozinha, Casa de Banho, Varanda, Garagem, Arrumos,
Escritório, Piso, Corredor, Receção, Armazém, Exterior, Outro). O tipo
aparece como uma etiqueta ao lado do nome, na listagem.

### 3 e 4. Documentos de Inquilinos e Fornecedores
Sistema único (reutilizado nos dois), com tipos: BI, NUIT, Alvará, BR,
Outro. Aceita PDF, Word ou imagem, até 20MB. Data de emissão/validade
opcionais, com indicador visual de "A expirar"/"Expirado" (usa o mesmo
limite de dias configurado em /admin/settings).

- Inquilinos: secção "Documentos" já dentro de /admin/clients/{id}
- Fornecedores: página nova /admin/service-providers/{id} — antes só
  existia a listagem, agora clicar no nome abre o detalhe com
  documentos e lista de técnicos ligados

Nota: não construí alertas automáticos de expiração para estes (só
pediste isso para documentos de Imóveis, na ronda anterior) — se
quiseres o mesmo aqui, é só dizer.

### 5. "Cliente" -> "Inquilino"
Em todo o texto visível da aplicação — menu, títulos, mensagens,
formulários. Por dentro do código, o nome técnico (Client, client_id,
rotas admin.clients.*) manteve-se — mudar isso seria um risco
desnecessário só por causa do texto.

### 6. Fotos/vídeo no pedido — no início OU a meio
O formulário interno de criação (/admin/maintenance-requests/create)
nunca teve campos de foto/vídeo — só o portal do inquilino tinha. Agora
ambos têm, logo na criação. Continua a ser possível adicionar mais
depois (enquanto o pedido não estiver fechado).

## 5. Testar

1. /admin/properties/{id} -> Compartimentos -> "+ Adicionar" -> escolhe
   um tipo do dropdown -> confirma que aparece a etiqueta na lista
2. /admin/clients/{id} -> Documentos -> carrega um BI de teste com data
   de validade no passado -> confirma o selo "Expirado"
3. /admin/service-providers -> clica num fornecedor -> confirma que abre
   a nova página -> adiciona um documento (ex: Alvará)
4. /admin/maintenance-requests/create -> confirma que já aparecem os
   campos de foto/vídeo antes do botão "Criar Pedido"
5. Percorre o menu e a listagem de Inquilinos -> confirma que não
   aparece mais nenhum "Cliente" no texto
