Skladové doklady

Logika skladových dokladov zostáva v Elall. Po zaúčtovaní dokladu konektor zavolá Segat Sync a odošle absolútny stav skladu Segat (a povinné ceny/status) pre dotknuté položky.

Kedy volať API

MomentAkcia
Doklad v stave draftNevolať sync — pri storne v Elall by bol stav v Segat nesúladný
Doklad zaúčtovanýZostaviť riadky a odoslať sync
Chyba HTTP / timeoutRetry s rovnakým request_id (idempotentný absolútny stav)

Výber endpointu

Po zaúčtovaní dokladu
├─ 1 riadok (typ. malá výdajka / predaj) ──► PUT /api/v1/elall/products/{item_id}
└─ N riadkov (typ. príjemka) ──► POST /api/v1/elall/products/sync
└─ ak N > 5000: rozdeliť na chunky

Zostavenie payloadu na riadok

Pre každý riadok dokladu, ktorý má ovplyvniť sklad Segat:

  1. item_id — mapovanie z Elall na Segat products.item_id.
  2. segat_quantityaktuálne množstvo na sklade segat v Elall po zaúčtovaní (nie prírastok).
  3. status, catalog_price, eshop_price — načítať z Elall pre daný produkt (povinné v API).
  4. Katalógové polia (name, ean, …) — neuvádzať, ak sa pri doklade nemenia.

Príklad jedného riadku v dávke:

1{
2 "item_id": "12345",
3 "status": "active",
4 "segat_quantity": 48,
5 "catalog_price": 129.9,
6 "eshop_price": 119.0
7}

Dávkový request

1{
2 "request_id": "PR-2025-00123",
3 "sync_context": {
4 "source_type": "stock_receipt",
5 "source_ref": "PR-2025-00123",
6 "note": "Chunk 1/2"
7 },
8 "products": []
9}
  • request_id: číslo dokladu (rovnaké pre všetky chunky jednej príjemky).
  • sync_context: stock_receipt / stock_issue / customer_sale podľa typu dokladu — uloží sa do auditu na strane Segat.
  • Po každom chunku spracovať odpoveď: success, products_updated, unknown_products.
  • V Elall uložiť stav dokladu: synced / partial (unknown_products > 0) / failed.

Jednotlivý request

PUT /api/v1/elall/products/{item_id}item_id je v URL, v tele ho neposielate (na rozdiel od POST batch).

Pseudokód konektora

on_document_posted(document):
lines = affected_stock_lines(document)
rows = []
for line in lines:
p = load_product_from_elall(line.item_id)
rows.append({
item_id: line.item_id,
status: p.status,
segat_quantity: p.segat_quantity_after_document,
catalog_price: p.catalog_price,
eshop_price: p.eshop_price,
})
request_id = document.number
for chunk in chunks(rows, max_size=5000):
if len(chunk) == 1 and is_single_line_issue(document):
PUT /api/v1/elall/products/{chunk[0].item_id}
else:
POST /api/v1/elall/products/sync with { request_id, products: chunk }
if not response.success:
mark_document_sync_failed(document)
return
mark_document_synced(document)

Hodnoty source_type v sync_context: stock_receipt, stock_issue, customer_sale, catalog_sync, stock_adjustment, manual, scheduled, other.