# Plano — ERP Doméstico

## Contexto

Sistema de gestão doméstica completo (mini ERP) em Laravel 12 + Livewire 3 + Alpine.js. Será alojado num CT Proxmox dedicado. Todo o UI em Português (Portugal).

## Decisões Técnicas

| Decisão | Escolha |
|---------|---------|
| **Framework** | Laravel 12 |
| **Frontend** | Livewire 3 + Alpine.js |
| **Auth** | Laravel Breeze (Livewire stack) |
| **Storage** | Cloudflare R2 + local |
| **Moeda** | EUR |
| **Idioma UI** | Português (Portugal) |
| **Hosting** | CT Proxmox dedicado (Debian 12) |

## Proxmox CT — Configuração Recomendada

### Specs do Container
- **Template:** Debian 12 (Bookworm)
- **CPU:** 2 cores
- **RAM:** 2 GB (4 GB recomendado)
- **Swap:** 1 GB
- **Disco:** 20 GB (SSD/NVMe)
- **Rede:** vmbr0 (bridge), IP estático
- **Unprivileged:** Sim
- **Features:** nesting=1 (para systemd)

### Software Necessário
- PHP 8.2 + extensões (mbstring, xml, curl, zip, gd, mysql, redis, bcmath, intl, fileinfo)
- Composer 2
- Node.js 20 LTS + NPM
- MariaDB 10.11+
- Nginx
- Redis
- Supervisor (para queues Laravel)
- Cron (para scheduler Laravel)
- Samba (SMB para acesso à pasta do projeto)

### Comandos de Instalação (executar por ordem, um passo de cada vez)

#### PASSO 1 — Ferramentas base (correr PRIMEIRO)
```bash
apt update && apt upgrade -y
apt install -y curl wget gnupg2 lsb-release apt-transport-https ca-certificates git unzip htop
```

#### PASSO 2 — Repositório Sury + PHP 8.2
```bash
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt update
```
```bash
apt install -y php8.2 php8.2-fpm php8.2-cli php8.2-common \
  php8.2-mbstring php8.2-xml php8.2-curl php8.2-zip php8.2-gd \
  php8.2-mysql php8.2-redis php8.2-bcmath php8.2-intl php8.2-fileinfo \
  php8.2-tokenizer php8.2-dom
```
Verificar: `php -v` (deve mostrar PHP 8.2.x)

#### PASSO 3 — Composer
```bash
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
```
Verificar: `composer --version`

#### PASSO 4 — Node.js 20 LTS
```bash
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
```
Verificar: `node -v && npm -v`

#### PASSO 5 — MariaDB
```bash
apt install -y mariadb-server mariadb-client
mysql_secure_installation
```
Depois criar DB e user:
```bash
mysql -u root -p
```
Dentro do MySQL, correr:
```sql
CREATE DATABASE erp_casa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'erp_casa'@'localhost' IDENTIFIED BY 'PASSWORD_AQUI';
GRANT ALL PRIVILEGES ON erp_casa.* TO 'erp_casa'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```

#### PASSO 6 — Nginx
```bash
apt install -y nginx
systemctl enable nginx
```

#### PASSO 7 — Redis
```bash
apt install -y redis-server
systemctl enable redis-server
```

#### PASSO 8 — Supervisor
```bash
apt install -y supervisor
systemctl enable supervisor
```

#### PASSO 9 — Criar pasta do projeto
```bash
mkdir -p /var/www/erp-casa
chown -R www-data:www-data /var/www/erp-casa
```

#### PASSO 10 — Configurar Nginx Vhost

Criar o ficheiro (NÃO colar no terminal, usar nano):
```bash
nano /etc/nginx/sites-available/erp-casa
```
Colar este conteúdo DENTRO do nano:
```nginx
server {
    listen 80;
    server_name erp-casa.local;
    root /var/www/erp-casa/public;

    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
```
Gravar: `Ctrl+O`, Enter, `Ctrl+X`

Depois ativar e testar:
```bash
ln -s /etc/nginx/sites-available/erp-casa /etc/nginx/sites-enabled/
rm /etc/nginx/sites-enabled/default
nginx -t
systemctl restart nginx
```

#### PASSO 11 — Configurar Supervisor (queues Laravel)

```bash
nano /etc/supervisor/conf.d/erp-casa-worker.conf
```
Colar dentro do nano:
```ini
[program:erp-casa-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/erp-casa/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/erp-casa/storage/logs/worker.log
stopwaitsecs=3600
```
Gravar e sair. Depois:
```bash
supervisorctl reread
supervisorctl update
```

#### PASSO 12 — Configurar Cron (scheduler Laravel)

```bash
crontab -u www-data -e
```
Adicionar esta linha:
```
* * * * * cd /var/www/erp-casa && php artisan schedule:run >> /dev/null 2>&1
```

#### PASSO 13 — Instalar e configurar SMB

```bash
apt install -y samba samba-common-bin
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
```

Editar config:
```bash
nano /etc/samba/smb.conf
```
Adicionar ao FINAL do ficheiro:
```ini
[erp-casa]
   path = /var/www/erp-casa
   browseable = yes
   read only = no
   writable = yes
   guest ok = no
   valid users = @www-data
   create mask = 0664
   directory mask = 0775
   force user = www-data
   force group = www-data
```
Gravar e sair. Depois criar user SMB:
```bash
useradd -M -s /usr/sbin/nologin smbuser
usermod -aG www-data smbuser
smbpasswd -a smbuser
```
(Vai pedir para definir password SMB)

Iniciar Samba:
```bash
systemctl restart smbd nmbd
systemctl enable smbd nmbd
testparm
```

#### Aceder via SMB (macOS)
No Finder: `Cmd+K` → `smb://IP_DO_CT/erp-casa`

---

## Tarefas a Executar

1. [ ] Criar CT Proxmox com specs acima
2. [ ] Instalar software (Passos 1-8)
3. [ ] Configurar Nginx, Supervisor, Cron (Passos 10-12)
4. [ ] Configurar SMB (Passo 13)
5. [ ] Criar projeto Laravel 12 em `/var/www/erp-casa`
6. [ ] Implementar Parte 1 (Infraestrutura)
7. [ ] Implementar Parte 2A (Motor Financeiro)
8. [ ] Implementar Parte 2B (Anexos, Auditoria, Relatórios)
9. [ ] Implementar Parte 3 (Compras, Inventário, Viaturas, Empréstimos)
10. [ ] Implementar Parte 4 (UI Final, Telegram, Notificações)

---

## Implementação — Resumo por Parte

### Parte 1 — Infraestrutura
- `composer create-project laravel/laravel .`
- `php artisan breeze:install livewire`
- Configurar `.env` (DB, R2, Redis)
- Migrations base: accounts, categories, cost_centers, tags
- Layout base com navegação e dark/light mode

### Parte 2A — Motor Financeiro
- Migrations: movements, movement_tag, transfers
- Models com relações
- MovementService (transações atómicas)
- Livewire: MovementList, CreateExpense, CreateIncome, CreateTransfer
- Testes

### Parte 2B — Anexos, Auditoria, Relatórios
- Migrations: attachments (morphable), audit_logs
- Marcar como pago (parcial + comprovativo)
- Filtros avançados Livewire
- Relatórios mensais/anuais/categoria/fornecedores
- Testes

### Parte 3 — Compras + Inventário + Viaturas + Empréstimos
- Shopping: shopping_trips + shopping_items + products
- Modo supermercado mobile
- Inventário com alertas
- Viaturas: vehicles + fuel_logs + maintenances
- Empréstimos: loans + loan_payments + simulação amortização

### Parte 4 — UI Final + Telegram + Notificações
- Dashboard com Chart.js
- Design mobile-first dark/light
- Notificações (database + Telegram)
- Bot Telegram com webhook e comandos
- Segurança: whitelist user_ids
