# Flexoptix Catalog Import

TIP can ingest the normalized Flexoptix shop catalog produced by Magatama/Pulso.
This keeps prices, product URLs, stock, and product attributes live-data driven
instead of baking volatile values into LLM training pairs.

## Producer

Run in the Magatama repo:

```bash
pnpm pulso:shop:sync:dry-run
pnpm pulso:shop:sync -- --fixture ./shop-export.json
FLEXOPTIX_API_BASE_URL=... FLEXOPTIX_API_TOKEN=... pnpm pulso:shop:sync
```

The producer writes:

- `data/pulso/shop-products.normalized.jsonl`
- `data/pulso/shop-catalog.normalized.json`
- `data/pulso/shop-snapshot.manifest.json`

## TIP Import

Safe validation:

```bash
npm run flexoptix:catalog:import -- --dry-run
```

Import into the TIP database:

```bash
TIP_DB_PASS=... npm run flexoptix:catalog:import
```

Override the input path if needed:

```bash
npm run flexoptix:catalog:import -- --input /path/shop-products.normalized.jsonl --dry-run
```

## Safety Rules

- Rows without SKU, title, form factor, speed, or reach are skipped for DB import.
- Prices and stock are written only when present in live/API data.
- No product URL, SKU, price, stock, delivery time, or compatibility is invented.
- The importer uses existing TIP helpers for transceiver upsert, price observations,
  and stock observations.
