Files
descrybe/docs/feed-sync-deltas.md
T

33 lines
1.7 KiB
Markdown
Raw Normal View History

# Feed sync deltas (seller MVP)
High-value change signals from input feed syncs — without a full history table.
## Included
| Signal | Source mapped fields | Where surfaced |
|--------|----------------------|----------------|
| **New** | GTIN not previously in catalog for this company | Feed `options.last_sync_deltas.new`, sync job enrichment |
| **Price changed** | `price`, `sale_price`, `purchase_price` | counts + product filter `sync_change=price` |
| **Stock changed** | `stock`, `quantity`, `qty` | counts + `sync_change=stock` |
| **Availability changed** | `availability`, `stock_status`, `in_stock` | counts + `sync_change=availability` |
| **Title changed** | `title`, `name`, `product_name` | counts + `sync_change=title` |
| **Other changed** | any other mapped key change | counts + `sync_change=other` |
| **Unchanged / skipped** | identical mapped JSON / bad rows | existing job counters |
## Storage
- **Summary (last sync only):** `input_feeds.options.last_sync_deltas` — replaced each successful sync that processes rows (not when the whole feed file hash is unchanged).
- **Product flags (latest modifying sync):** `raw_products.mapped_data._sync_changes` — string array, e.g. `["price","stock"]`. Replaced on the next content update for that GTIN. Not a durable audit log.
## Filters
`GET /api/products?kind=unprocessed&sync_change=price` (also `stock`, `availability`, `title`, `other`, `new`, or `any`).
Processed list supports the same query param via join to the linked raw row.
## Out of scope (MVP)
- Multi-sync historical timelines / per-field before→after values
- Diffs when the entire feed file hash is unchanged (short-circuit)
- Shopify/Woo outbound push change reports