> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.elall.webland.sk/navody/produkty-a-sklad/skladove-doklady/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.elall.webland.sk/_mcp/server. # Skladové doklady > Kedy volať sync, výber endpointu, chunking a sync_context. 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 | Moment | Akcia | | ------------------------ | ------------------------------------------------------------------- | | Doklad v stave **draft** | **Nevolať** sync — pri storne v Elall by bol stav v Segat nesúladný | | Doklad **zaúčtovaný** | Zostaviť riadky a odoslať sync | | Chyba HTTP / timeout | Retry 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 │ └─ 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. **`stock_code`** (povinné) a voliteľný **`ean`** — identifikátor produktu v Elall (lookup v `product_catalog`). 2. **`segat_quantity`** — **aktuá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`, `brand`, …) — **neuvádzať**, ak sa pri doklade nemenia. Príklad jedného riadku v dávke: ```json { "ean": "5452000792440", "stock_code": "ELALL-SKU-001", "status": "active", "segat_quantity": 48, "catalog_price": 129.9, "eshop_price": 119.0 } ``` ## Dávkový request ```json { "request_id": "PR-2025-00123", "sync_context": { "source_type": "stock_receipt", "source_ref": "PR-2025-00123", "note": "Chunk 1/2" }, "products": [] } ``` * **`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` — `stock_code` je v tele povinný; `ean` voliteľný. ## Pseudokód konektora ```text on_document_posted(document): lines = affected_stock_lines(document) rows = [] for line in lines: p = load_product_from_elall(line) rows.append({ ean: p.ean, stock_code: p.stock_code, 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/item with chunk[0] 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`. > Kedy volať sync, výber endpointu, chunking a sync_context.