# ClientFlow v3.1 — correções Jasmin/Packlink

Esta versão é incremental sobre a v3 e corrige os pontos encontrados nos testes remotos.

## Alterações principais

### Produtos

Agora existe separação entre:

- `sku`: código interno/Odoo;
- `jasmin_sales_item`: artigo de venda no Jasmin.

Exemplo:

```text
sku = ODOO-1
jasmin_sales_item = CARREGADOR_MONO_7KW
```

As tabelas recebem colunas novas de forma aditiva:

```sql
ALTER TABLE products ADD COLUMN IF NOT EXISTS jasmin_sales_item TEXT;
ALTER TABLE opportunity_items ADD COLUMN IF NOT EXISTS jasmin_sales_item TEXT;
ALTER TABLE order_items ADD COLUMN IF NOT EXISTS jasmin_sales_item TEXT;
```

Quando uma linha é adicionada à oportunidade a partir do catálogo, `opportunity_items.jasmin_sales_item` é copiado do produto.

A criação de orçamento Jasmin usa esta prioridade:

```text
metadata.jasmin_sales_item
opportunity_items.jasmin_sales_item
JASMIN_DEFAULT_SALES_ITEM
sku
```

Assim o SKU Odoo deixa de ser usado como artigo Jasmin, exceto como fallback.

### Documentos Jasmin

Depois de criar orçamento/fatura, o serviço faz um `GET` ao Jasmin para tentar preencher:

- `document_type`
- `serie`
- `series_number`
- `document_number`
- `total_amount`
- `currency`

Isto melhora a tabela `commercial_documents` e a visualização na oportunidade.

### UI da oportunidade

- O formulário **Adicionar produto** saiu da área técnica e passou para o cartão **Produtos**.
- Os botões **Criar orçamento** e **Converter em fatura** mostram mensagem de feedback informando que o pedido foi enviado para a outbox.
- A tabela de produtos mostra SKU/Odoo e artigo Jasmin separadamente.

### Timers systemd

Foram adicionados exemplos em `deploy/systemd/`:

- `clientflow-outbox-jasmin.service`
- `clientflow-outbox-jasmin.timer`
- `clientflow-outbox-packlink.service`
- `clientflow-outbox-packlink.timer`

Instalação Jasmin:

```bash
sudo cp deploy/systemd/clientflow-outbox-jasmin.* /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now clientflow-outbox-jasmin.timer
systemctl list-timers | grep clientflow
```

O timer Jasmin processa outbox a cada 1 minuto.

## Verificações após deploy

```bash
cd /mnt/ssd/home/plx/clientflow_backend
source .venv/bin/activate
python -m py_compile app/*.py scripts/*.py
python -m pytest -q
sudo systemctl restart clientflow-api
sudo systemctl status clientflow-api --no-pager
```

## Migração prática de produtos existentes

Depois do deploy, ir a `/products/{id}` e preencher **Artigo Jasmin** para cada produto usado em documentos.

Para corrigir via SQL/Python um produto específico:

```bash
python - <<'PY'
from sqlalchemy import text
from app.db import engine
with engine.begin() as conn:
    conn.execute(text("""
        UPDATE products
        SET jasmin_sales_item = 'CARREGADOR_MONO_7KW', updated_at = now()
        WHERE sku = 'ODOO-1'
    """))
PY
```
