# 🚀 FGTS Automation Service

Automação para emissão de guias do FGTS Digital: **PHP** (API e serviços de guia) + **Python** (auth, sessões e painel) com Docker.

## 🛠️ Stack

| Componente        | Tecnologia   |
|-------------------|-------------|
| API / páginas     | PHP 8.x, Nginx |
| Auth / painel     | Python, FastAPI |
| Banco             | PostgreSQL 14 |
| Orquestração      | Docker Compose |

---

## 📡 Portas (host)

| Porta | Serviço        | Uso |
|-------|----------------|-----|
| **8083** | Nginx        | API PHP e páginas (`/api.php`, demos) |
| **8002** | Auth API     | Painel de sessões e API de cookies |
| **5433** | PostgreSQL   | Banco (conexão direta se precisar) |

*(Escolhidas para não conflitar com 80, 8000, 8080, 5432.)*

---

## ⚡ Quick Start

### 1. Ambiente

```bash
cp php-api/.env.example php-api/.env
cp auth-service/.env.example auth-service/.env
```

Edite os `.env`:

- **php-api/.env:** `FGTS_API_HOST`, `FGTS_API_PORT`, `FGTS_API_ENDPOINT`, `FGTS_API_TOKEN`, e **`API_KEY`** (obrigatório para a API de gerar guias).
- **auth-service/.env:** `POSTGRES_*`, `SESSION_KEY`, `APP_KEY` (e demais variáveis do exemplo).

### 2. Subir os containers

```bash
docker-compose up -d --build
```

*(Se usar Docker Compose v2: `docker compose up -d --build`.)*

Se o Nginx falhar com erro **"ContainerConfig"**, use o script:

```bash
./up-nginx-fix.sh
```

### 3. Cadastrar sessão (obrigatório)

Para as APIs de **gerar guia** funcionarem, é preciso ter sessão cadastrada:

1. Acesse o FGTS Digital no navegador e faça login.
2. Copie os cookies (F12 → Application → Cookies → fgtsdigital.sistema.gov.br).
3. Acesse **http://localhost:8002/panel** e cole a string de cookies no formulário de registro.

Detalhes: `php-api/postman/COMO-COLAR-COOKIES-NO-PANEL.md`.

---

## 🌐 URLs

| O quê        | URL |
|-------------|-----|
| API REST    | http://localhost:8083/api.php |
| Painel      | http://localhost:8002/panel |
| Info/health | http://localhost:8083/api.php?action=info \| ?action=health |

Em produção, troque `localhost` pelo host ou domínio do servidor.

---

## 🔐 API REST

A aplicação expõe uma API em **api.php** para os serviços de guia:

- **GET** `?action=info` — informações e lista de endpoints (público).
- **GET** `?action=health` — health check (público).
- **POST** `?action=gerar&service=mensal` — gera guia mensal (exige **API Key**).
- **POST** `?action=gerar&service=rescisao` — gera guia de rescisão (exige **API Key**).

Envie a chave no header: `X-API-Key: SUA_API_KEY` ou `Authorization: Bearer SUA_API_KEY`. A `API_KEY` é a definida no `php-api/.env`.

**Testes:**

- Instruções e exemplos curl: **php-api/API-TESTE.md**
- Collection Postman: **php-api/postman/FGTS-Automation-API.postman_collection.json**

---

## 💻 Uso direto das classes PHP

Além da API, é possível usar os serviços diretamente em PHP.

**Guia mensal:**

```php
use Services\MonthlyService;

$service = new MonthlyService();
$service->companyCnpj('12345678901234')
        ->customerCnpj('12345678901234')
        ->competency('10/2025');  // MM/YYYY
$result = $service->generate();
```

**Guia de rescisão:**

```php
use Services\TerminationService;

$service = new TerminationService();
$service->companyCnpj('12345678901234')
        ->customerCnpj('12345678901234')
        ->cpf('12345678901')
        ->amount(1000)           
        ->competency('10/2025')
        ->payment('15/10/2025'); 
$result = $service->generate();
```

---

## 📁 Estrutura resumida

```
├── auth-service/       # Python: painel, sessões, worker
│   ├── api/            # FastAPI (panel, session, company, customer)
│   └── worker/         # Renovação de sessões
├── php-api/            # PHP: API REST e serviços de guia
│   ├── api.php         # Endpoint da API
│   ├── src/Services/   # MonthlyService, TerminationService
│   └── postman/        # Collection e docs de cookies
├── docker/             # Dockerfile (nginx, php)
└── docker-compose.yml
```

---

## 🚨 Troubleshooting

| Problema | Solução |
|----------|--------|
| **"Unable to select a buildpack"** no CI | O projeto usa pipeline próprio (`.gitlab-ci.yml`). Desative Auto DevOps no GitLab ou use apenas o pipeline do repositório. |
| **"ContainerConfig"** ao subir o Nginx | Rode `./up-nginx-fix.sh` ou faça `docker-compose down` e depois `docker-compose up -d`. |
| **Sessão não encontrada** ao gerar guia | Cadastre os cookies no painel (http://localhost:8002/panel) para o par company_cnpj/customer_cnpj usado na requisição. |
| **503** ao chamar `action=gerar` | Defina `API_KEY` no `php-api/.env` e envie o mesmo valor no header da requisição. |

---

**Versão:** 1.0.0
