> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.elall.webland.sk/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`.