API propojení a integrace
- Načtení objednávky z externího API souboru
- Propojení na informačním systémem (web integrace)
- Webhook Integrace API
- REST API
- Propojení Foodora **
- Propojení WhatsApp
- Propojení Wolt + Wolt Retail
- Propojení Better Hotel
- Propojení Aktion.eu - stravovací systém
- Propojení Shoptet
- Propojení Qerko**
- MultiSport - partnerská zóna
- Slevomat - aktivace voucherů
- Ticketstream - validace vstupů na kiosku a pokladně
- Propojení Helios
- Propojení QR Ticket - validace vstupů na kiosku a pokladně
- KASA FIK MCP Server
Načtení objednávky z externího API souboru
Aplikace KASA FIK nabízí možnost importu již přednastavených objednávek/faktur ze stávajícího informačního systému pomocí stáhnutí JSON dokumentu. Prodejce tak může načíst předpřipravenou objednávku s položkami, číslem účtenky i poznámkami. Používá se v mobilním a sanitárním prodeji, prodeji z eshopu a jiných situacích, kdy dochází jen k dokončení tržby na zařízení a objednávka byla připravena předem.
Funkce bude ukončena na nahrazena Online API pro zasíláni a dotazy na objednávky pomocí API
Nastavení
- V Nastavení – Expert nastavení – Importní URL pro objednávky zadejte URL adresu k Vašemu rozhraní na serveru
- Daná URL adresa musí vrátit platný dokument JSON ve formátu popsaném níže
- Adresa je například: https://www.mujserver.cz/hledat.php
- Aplikace připojí parametr „search“ s volbou, kterou zadá uživatel. to znamená že bude voláno např. https://www.mujserver.cz/hledat.php?search=220001
Používání
- V aplikaci, v rozhraní KLASIK
- Vlevo nahoře klepněte na šipku menu
- Zvolte „Vyhledat položky z objednávky“
- Zadejte číslo objednávky, které se použije k vyhledání dané objednáky na serveru
- Pokud se objednávka nelezne, dojde k vyplnění položek
Popis formátu
- Pokud je invoice_number null, aplikace čísluje dle svého číselného plánu. Jinak se použije invoice_number
- Ceny, množství, DPH jsou desetinná čísla double
- PLU slouží k párování položek, to znamená, že pokud položka neexistuje v pokladně, pod daným PLU, bude automaticky vytvořena
Formát JSON platné odpovědi
{
"invoice_number": 20130001, // optional, will be generated if not provided
"note": "strestt", // optional
"items": [
{
"plu": "203", // optional
"note": "Item optional note" // optional
"name": "Item number 203",
"price_without_vat": 112.0,
"quantity": 1.0,
"vat_rate": 1.21
}
]
}
Formát JSON prázdné odpovědi pokud server nic nenalezl
Pokud uživatel zadá neplatný kód faktury, měl by server vrátit chybu 404 - Not found v hlavičce a odpověd v těle by měla obsahovat null
null
Propojení na informačním systémem (web integrace)
Aplikace KASA FIK umožňuje dynamicky integrovat webové aplikace zákazníka pomocí integrovaného tlačítka nebo funkční klávesy. Propojení je ideální pro přenos objednávek z eshopu nebo účetních systémů přímo do aplikace.
Funkce je dostupná pouze s licencí PREMIUM
Princip funkce - workflow
- Uživateli se zobrazí nové nastavitelné tlačítko na hlavní obrazovce
- Po klepnutí na tlačítko se načte webová aplikace, která je plně pod kontrolou zákazníka
- Ve webové aplikace může být umístěno tlačítko, které po kliknutí přenese uživatele zpět do aplikace a vyplní automaticky účtenku
- KASA FIK provede zaúčtování EET případně platbu kartou
- Integraci lze nastavit i na funkční klávesu při prodeji
- Informace o vystavení účtenek lze získat přes Webhook API
Ukázková stránka
Vytvořili jsme ukázkovou stránku, ve které můžete vidět funkce, které lze využít při práci v aplikaci a návrtatu hodnot.
Příklad poskytnutých parametrů v URL:
partner_code=XXXXX&utm_source=app-com.eetterminal.pos&utm_medium=app&utm_campaign=fik-integration&app_flavor=fik&app_version=1.181-beta12-debug&app_version_code=181&app_lang=cs&shop_id=848428671200000&cash_register_id=2044577243700000&shift_id=5132358187320000
Query String poskytnutý při volání URL
- partner_code - Partnerský kód, pokud je nastaven
- utm_source - Google UTM měřící kód. Hodnota "app-com.eetterminal.pos"
- utm_medium - Google UTM měřící kód. Hodnota "app"
- utm_campaign- Google UTM měřící kód. Hodnota "fik-integration"
- app_flavor - Typ aplikace- Hodnota "fik"
- app_version - Textový popis verze aplikace. Např. 1.180-beta1
- app_version_code - Kód verze aplikace např. 180
- app_lang - Jazyk, ve kterém je nastavena aplikace (cs pro češtinu)
- global_customer_id - Globální ID zákazníka
- shop_id - ID pobočky
- cash_register_id - ID pokladny
- shift_id - ID současné směny - Hodnota 0 pro uzavřenou směnu
- employee_id - ID aktuálně přihlášeného zaměstnance. Hodnota 0 pokud není nikdo přihlášen
- user_email - Email pod kterým je evidována pokladna
Specifikace integrace
Aplikace načte uživatetem přednastavené URL, které obohatí o Query String s dalšími parametry. Rozšíří Javascript funkce o interface window.FikApiInterface který obsahuje metody použitelné k propojení nativní Android aplikace s webovou.
if (window.FikApiInterface){
window.FikApiInterface.logError('heyho'); // log error message to android console
window.FikApiInterface.logInfo('heyho'); // log info message to android console
window.FikApiInterface.setTitle(document.title); // sets title of the window
window.FikApiInterface.showToast('heyho'); // shows small toast notification
// window.FikApiInterface.finish(); // Will close the window without any result
// window.FikApiInterface.finishWithReceipt(JSON.stringify(obj)); // return back to the app with receipt data
} else {
// Not loaded within Fik Webapp container
}
Návrat účtenky do aplikace
Zavolejte metodu window.FikApiInterface.finishWithReceipt(JSON.stringify(obj)) s následujícim JSON objektem:
{
"invoice_number": 20130001, // optional, will be generated if not provided
"note": "strestt", // optional
"items": [
{
"plu": "203", // optional
"note": "Item optional note" // optional
"name": "Item number 203",
"price_without_vat": 112.0,
"quantity": 1.0,
"vat_rate": 1.21
}
]
}
Poznámky k poskytovanému objektu:
- Hodnota musí být
JSON.stringify(), protože Web integrace neumožňuje přenášet objekty. - Pokud je vše v pořádku, aplikace uzavře integraci a přenese uživatele do režimu vystavení účtenky
- Pokud nebude vyplněná hodnota
invoice_numberaplikace vygeneruje standarně podle číselné řady (doporučené) - DPH je v desetinném formátu, tedy 1.21, 1.10, 1.00 - nevyplňujte, pokud se jedná o neplátce
Nastavení expirace a vliv na cache (expire)
Webová integrace respektuje správné nastavení cache hlavičky pro ukládání do paměti prohlížeče. Nastavíte-li správné Expire v HTTP hlavičce, bude se respektovat.
Aplikace má také podporu pro ukládání databází a Webstorage.
Webhook Integrace API
Webhooky umožňují zasílání dat z pokladny/backoffice pomocí HTTP volání informovat o každé události (např. vystavení účtenky, založení zákazníka). Zpracováním webhooků si můžete měnit chování stránky nebo aplikace a rozšiřovat je o nové funkce.
Webhooky lze nastavit v Backoffice v Nastavení - Systém - Webhooky. Zadejte https:// adresu kam systém má zasílat data. Nastavení uložte tlačítkem Uložit. Pak následně může trvat nějaký čas, než systém začne automaticky data zasílat. Nové nastavení může trvat až 1-2 hodiny, než se projeví nastavení skrz systémy.
Formát zasílaných dat
- Data jsou zasílána ve formátu JSON objektu a metodou POST.
- Server musí odpovědět na požadavek návratovým HTTP kódem 200
- Přijímací server musí odpovědět návratovým kódem 200
- Jednotlivé záznamy (objekty) jsou zasílány zvlášť a není garantované pořadi doručení
- Každý záznam má následující povinné pole
- _t - Jedná se o název tabulky/typu záznamu, jako je "orders, order_details, products, ..."
- _v - Verze v Unix timestamp kdy byl záznam změněn
- id - unikatní ID záznamu
- Pokud záznam obsahuje monetární data (ceny, hodnoty prodeje atd) tak jsou vyjádřeny jako celé číslo (int) vynásobené 1000. Např. cena 3 331,000 Kč je vyjádřena jako 3331000
Příklad zaslaného objektu `orders`
{
"_t": "orders",
"_v": 1541274974010,
"conversion_rate": 1,
"currency": "CZK",
"dine_in": false,
"id": 3317888960569993,
"id_c": 100000,
"id_cash_register": 3173505578999348,
"id_employee": 1,
"id_employee_served": 1,
"id_park_location": 3227505427363220,
"id_shift": 3317259000928416,
"id_shop": 3173505578310000,
"order_serial_number": 103,
"total_credits": 0,
"total_discounts_tax_excl": 0,
"total_discounts_tax_incl": 0,
"total_paid_real": 3331000,
"total_paid_tax_excl": 3331000,
"total_paid_tax_incl": 3331000,
"total_points": 0,
"total_products": 32,
"total_profit_tax_excl": 0,
"total_profit_tax_incl": 0,
"total_shipping_tax_excl": 0,
"total_shipping_tax_incl": 0,
"total_tax_eco": 0,
"total_tax_gst": 0,
"total_tax_luxury": 0,
"total_tax_pst": 0,
"total_tax_service": 0,
"total_tip": 0,
"total_wrapping_tax_excl": 0,
"total_wrapping_tax_incl": 0
}
REST API
Data z pokladen jsou pravidelně synchronizována do cloudu a zpřístupněna přes REST API.
API je v současné době poskytováno v omezeném režimu. Do budoucna plánujeme expiraci autorizačního tokenu. Pokud chcete získávat kontinuáně data a synchronizovat systémy doporučujeme používat Webhooky. Jedná se o efektivnější způsob.
Autorizace požadavku
Autorizace probíhá pomocí API Tokenu, který naleznete v Backoffice - Nastavení - Systém.
Autorizační klíč je v HTTP hlavičce Authorization: A|xxxxx
curl -XGET 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/products' \
-H 'Authorization: A|kLgT.........' \
-H 'Content-Type: application/json'
POST přííklad:
curl -XPOST 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/reports/generic/order_history' \
-H 'Authorization: A|kLgT.........' \
-H 'Content-Type: application/json' \
--data-raw '{"date_start":1639436400000,"date_end":1642028399999,"timezone":"Europe/Prague","id_cash_register":953221254382092,"id_shop":492696696397774}' \
Konvence
- Časy jsou reprezentovány v unix timestamp v millisekundách. Např. 1639436400000
- Monetární hodnoty (tržba, cena, atd) jsou vždy celé číslo, vynásobené 1000. Např. cena 23.50 je v JSON dokumentu jako 23500.
- Autorizační token nemá expiraci, ale do budoucna plánujeme že token bude muset být vyměněn za nový
- Do User Agent prosím vložte svoji identifikaci případně kontakt, abychom měli kontakt na vývojáře
- Pokud navrácený objekt obsahuje položku, která začíná na
__tak se jedná o tzv. hydrataci - objekt je automaticky obohacen o child objekty, aby vývojář nemusel provádět další dotazy na API. - Převod id na čas lze provést pomocí funkce:
new Date((id / 32768) + 1440000000000);
Společné pole
id_c- globální ID zákazníka_v- verze objektu_d- indikuje jestli byl záznam označen jako smazaný_t- název tabulkypgx- složený interní primární klíč - ignorujte, pokud se vyskytuje- pole s prefixem
date_jsou Unix UTC čas v millisekundách - pole s prefixem
id_jsou relace a odkaz na záznam v jiné tabulce. Napřid_shopodkazuje na id obchodu v tabulce shops.
Funkce pro práci s id
Id je číslo složené z času, id tabulky a náhodného suffixu. Příklad výpočtu:
// Javascript
const EPOCH = 1440000000000;
// Vrati objekt s datem a id tabulky
function getDateFromId(id) {
return {
dt: new Date((id / 32768) + EPOCH),
tableId: (id / 512) & 0x3f
}
}
// Generuje id pro konkretni tabulku - pouzijte 0 pro referenci
exports.getRandomRowId = function (tableId) {
let ts = new Date().getTime() - EPOCH;
let randid = Math.floor(Math.random() * 511);
ts = (ts * 64);
ts = ts + tableId;
let t = (ts * 512) + (randid % 512);
while (t % 10 !== 0) {
t = t + 2; // Resi chybu s 53bit number v Javascriptu
}
return t;
}
// C#
const long EPOCH = 1440000000000; // Matches the JavaScript EPOCH value
public static long GetRandomRowId(int tableId) {
long ts = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - EPOCH;
int randid = new Random().Next(512); // Generates a random number between 0 and 511
ts = (ts * 64);
ts = ts + tableId;
long t = (ts * 512) + (randid % 512);
t = t - (t % 10);
return t;
}
Seznam endpointů
Následující endpointy podporují metody GET (získání seznamů dat json array) i POST (vytvoření nebo aktualizace jednoho objektu). Metoda POST podporuje i zaslání více objektů v JSON Array. Lze využít pro dávkové aktualizace více objektů.
Base URL: https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/
- products
- customers
- product_price_matrix
- shops
- cash_registers
- employees
- park_locations
- shifts
- stock_history
- stockup
- transactions
- warehouses
- order_details a orders - podporuje GET i POST - nedoporučujeme vytvářet nové objekty pomocí POST, proč?
Základní princip stránkování
API vrací výsledky v stránkách (pages). Každá odpověď obsahuje maximálně limit záznamů. Pro získání dalších záznamů použijte parametr id_start.
Stránkování je založeno na ID záznamu (BigInt), nikoliv na čase. ID je Unix timestamp v milisekundách jako BigInt, takže vyšší ID = novější záznam.
Parametry stránkování
| Parametr | Typ | Popis | Výchozí hodnota |
|---|---|---|---|
limit |
integer | Maximální počet záznamů na stránku (1-400) | 100 |
id_start |
string | ID posledního zobrazeného záznamu pro další stránku | 0 |
direction |
string | forward (vzestupně) nebo backward (sestupně) |
backward pro tabulky orders, transactions, shifts |
version_start |
integer | Filtruje záznamy s verzí _v >= hodnota |
0 (bez filtru) |
Směry stránkování
Backward (výchozí pro orders, transactions, shifts)
Vrací nejnovější záznamy první (sestupně podle data vytvoření).
GET /data/orders?limit=100
→ vrací 100 nejnovějších objednávek
Forward
Vrací nejstarší záznamy první (vzestupně podle data vvoření).
GET /data/orders?limit=100&direction=forward
→ vrací 100 nejstarších objednávek
Jak na stránkování v praxi
cURL
# První stránka
curl "/data/orders?limit=400&direction=forward" \
-H "Authorization: Bearer $TOKEN"
# Další stránka (použijte ID posledního záznamu z předchozí odpovědi)
curl "/data/orders?limit=400&id_start=11154058202189370&direction=forward" \
-H "Authorization: Bearer $TOKEN"
Filtrování podle verze
Parametr version_start umožňuje získat pouze záznamy aktualizované po určitém čase:
GET /data/orders?version_start=1780600680635
→ vrací pouze objednávky s _v >= 1780600680635 (timestamp v ms)
Příklad kompletního cyklu
Máte 1500 objednávek, limit = 400:
| Stránka | id_start | Vrácených | Kód |
|---|---|---|---|
| 1 | 0 |
400 | last_id = 11154058202189370 |
| 2 | 11154058202189370 |
400 | last_id = 11139738857705400 |
| 3 | 11139738857705400 |
400 | last_id = 11131523820818290 |
| 4 | 11131523820818290 |
300 | ← poslední stránka (300 < 400) |
Důležitá upozornění
-
ID jako string:
idv odpovědi je BigInt, může být velmi velké číslo. Při předávání jakoid_startho převeďte na string, aby nedošlo ke ztrátě přesnosti. -
Nikdy neměňte pořadí: Pokud stránkujete
forward, pokračujte vždyforward. Míchání směrů může vést k přeskočeným nebo duplicitním záznamům. -
Timestamp-based ID: ID objednávek je založeno na timestampu. Novější objednávky mají vyšší ID. To znamená, že:
direction=backward: první objednávka = nejnovějšídirection=forward: první objednávka = nejstarší
-
Limit 2000: Přestože můžete nastavit
limitaž do 400, DynamoDB dotaz má interně limit 2000 záznamů na jedno volání. Pro větší datasety použijte stránkování. -
Nikdy neskipujte stránky: Vždy iterujte sekvenčně. Přeskočení na "další stránku" bez procházení předchozích může vést ke ztrátě dat.
Chybové stavy
| Kód | Popis | Řešení |
|---|---|---|
| 400 | Neplatný id_start |
Ověřte, že id_start je platné ID nebo 0 |
| 429 | Rate limit | Snižte frekvenci požadavků |
| 500 | Interní chyba | Opakujte požadavek |
GET products
Vrací JSON Array se seznamem produktů. Položky které jsou smazané, mají nastaveno _visible = false
CURL příklad
curl 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/products' \
-H 'Authorization: A|......'
Odpověď
[
{
"unit": 0,
"date_updated": 1641499263724,
"attributes_bitmask": 8208,
"__price_matrix_model": {
"date_starts": 1640070857424,
"unit_price_base_tax_incl": 550,
"unit_price_regular_tax_excl": 454546,
"unit_price_c_tax_excl": 0,
"credits_deduct": 0,
"hour_bitmask": 0,
"points_deduct": 0,
"reduction_amount_a_tax_excl": 0,
"id_exec_rule": 0,
"id_product": 6555921856010421,
"unit_price_b_tax_excl": 0,
"dow_bitmask": 0,
"price_bitmask": 0,
"unit_price_base_tax_excl": 454.5455,
"id_shop": 0,
"currency": "CZK",
"unit_price_a_tax_excl": 454546,
"id": 6555922259744395,
"id_warehouse": 953221254427235,
"_t": "product_price_matrix",
"_v": 1641499263728
},
"condition_type": 0,
"name": "Cesta",
"id_category": 5723345161520367,
"node_sort": -6680027574804497000,
"inventory_management": false,
"id": 6555921856010421,
"id_shop": 0,
"color": 0,
"visible": true,
"tax_pst_rate": 1.21,
"item_type": 0,
"icon_code": 0,
"quantity_minimal": 1,
"quantity_multiple": 1,
"id_c": 111111,
"_t": "products",
"_v": 1641499263746
}
]
GET product/{id}
Vrací jednotlivý produkt podle ID objektu. Pro ceny volejte get-price-by-product-id/
https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/products/{id}
Odpověď
{
"unit": 0,
"pgx": "111:products",
"description_short": "Vydařená kombinace rumu a griotky",
"date_updated": 1647012279153,
"attributes_bitmask": 8240,
"sale_group_type": 0,
"condition_type": 1,
"name": "Čert",
"id_tax_rules_group": 0,
"id_category": 6783340285035904,
"node_sort": 3752073357922477000,
"accounting_group": 600000,
"warranty_length": 0,
"inventory_management": true,
"inventory_type": 0,
"id": 6783372795320333,
"id_shop": 0,
"tax_eco": 1,
"color": 0,
"visible": true,
"_d": 0,
"tax_luxury": 1,
"tax_pst_rate": 1.21,
"item_type": 0,
"additional_shipping_cost": 0,
"icon_code": 0,
"warranty_type": 0,
"_t": "products",
"quantity_minimal": 1,
"_v": 1681918519463,
"quantity_multiple": 1,
"id_c": 111111,
"id_exec_rule": 0
}
POST product
Vytvoří nový produkt. Použijte id produktu 0 pro nový objekt, nebo id existujícího produktu pro aktualizaci objektu. Pro informace o formátu objektu se podívejte do definice zod, viz níže.
Poznámky:
- id_shop=0 indikuje ze položka není omezena na žádnou pobočku
- attributes_bitmask= je bitmaska s atributy. Používají se bitové operace, hodnota se ukládá jako int
curl 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/products' \
-H 'Accept: application/json' \
-H 'Authorization: A|....' \
-H 'Content-Type: application/json' \
-d '{
"deleted": 0,
"id": 0, // Zero or omit to create new record
"_t": "products",
"image_dimension": null,
"notes_quick": "Sample quick notes",
"quantity_multiple": 1,
"quantity_minimal": 1,
"additional_shipping_cost": 0,
"date_updated": 1678886400000, // Example timestamp (replace as needed)
"inventory_management": false,
"color": 0,
"item_type": 0,
"id_category": 0,
"tax_luxury": 1.000,
"ean13": "1234567890123",
"id_tax_rules_group": 0,
"name_alternative": "Alt Product Name",
"sku": "PROD-SKU-001",
"tax_eco": 1.000000,
"barcode": "9876543210987",
"height": 10.5,
"visible": true,
"image_url": "https://example.com/image.jpg",
"warranty_length": 12,
"condition_type": 0,
"tax_pst_rate": 1.000,
"upc": "012345678901",
"weight": 1.2,
"icon_code": 0,
"details_url": "https://example.com/details",
"warranty_type": 0,
"tags": "sample,product",
"description_short": "Short product description",
"unit": 0,
"id_exec_rule": 0,
"depth": 5.0,
"sale_group_type": 0,
"id_global_product_code": null,
"accounting_group": 600000,
"name": "Sample Product Name",
"width": 7.8,
"node_sort": 0,
"attributes_bitmask": 0,
"inventory_type": 0,
"internal_extra": "Internal notes",
"id_shop": 0
}'
GET get-price-by-product-id/{id_product}
Vrací ceny pro konkrétní produkt v ceníku podle id produktu.
https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/products/get-price-by-product-id/{id_product}
GET product_price_matrix
Ceny k produktům. Je nutné napárovat pomocí id_product
https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/product_price_matrix
Odpověď
[
{
"currency": "CZK",
"unit_price_base_tax_excl": 30,
"id_warehouse": 4438373662962620,
"_d": 1,
"dow_bitmask": 0,
"credits_deduct": 0,
"hour_bitmask": 0,
"unit_price_base_tax_incl": 30,
"id_product": 4438453021022482,
"unit_price_regular_tax_excl": 30000,
"points_deduct": 0,
"date_starts": 1575450836824,
"price_bitmask": 0,
"_t": "product_price_matrix",
"unit_price_a_tax_excl": 30000,
"_v": 1633950008092,
"id": 4438454091814580,
"reduction_amount_a_tax_excl": 0,
"id_shop": 0,
"id_c": 1141932
}
]
GET categories
Seznam kategorií v hiearchické struktuře
https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/categories
Odpověď
[
{
"visible": true,
"_d": 0,
"name": "Cakes >",
"category_bitmask": 0,
"icon_code": 5,
"node_sort": 5000000,
"id_category_sort_after": 0,
"_t": "categories",
"_v": 1672597351272,
"id_category_parent": 0,
"id": 1,
"id_shop": 0,
"color": 17,
"id_c": 111111,
"children": [
{
"visible": false,
"name": "test",
"category_bitmask": 0,
"margin_minimal_rate": null,
"icon_code": 4,
"node_sort": 5000000,
"id_category_sort_after": 0,
"_t": "categories",
"_v": 1640029337604,
"id_category_parent": 1,
"id": 1067887041152062,
"id_shop": 0,
"margin": null,
"color": 5,
"tags": null,
"id_c": 111111,
"children": []
}
]
}
]
GET shops
Seznam poboček (shops)
https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/shops
Odpověď
[
{
"visible": true,
"currency": "CZK",
"_d": 0,
"name": "Shop 83",
"location_name": "City 44",
"_t": "shops",
"_v": 1677240349376,
"id": 492696696391111,
"bitmask": 0,
"id_c": 111111
}
]
GET cash_registers
Seznam poboček. Více o struktuře a závislosti na obchodech v manuálu zde.
https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/cash_registers
Odpověď
[
{
"visible": true,
"name": "Point of Sale 233",
"location_name": "Brno",
"_t": "cash_registers",
"_v": 1640802641284,
"cash_register_type": 11,
"id": 49269669639111,
"id_shop": 492696696397774,
"bitmask": 0,
"id_c": 11111
}
]
GET customers
Seznam zákazníků
curl 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/customers' \
-H 'Authorization: A|ADq
Odpověď
[
{
"customer_type": 0,
"credit_account": null,
"internal_extra": null,
"price_group": "A",
"zip_code": "40801",
"date_updated": null,
"email": null,
"city": "RUMBURK",
"bank_account": null,
"date_birthday": null,
"company": "Test s.r.o.",
"geohash": null,
"firstname": null,
"company_ico": "3332650",
"id": 3665795354036044,
"color": 0,
"bitmask": 0,
"tags": "csv-import-91",
"barcode": null,
"visible": true,
"id_discount_group": null,
"lastname": null,
"company_dic": "CZ33333",
"internal_json": null,
"_t": "customers",
"_v": 1551875000154,
"date_expires": null,
"phone_number": null,
"note_internal": null,
"country_code": "CZ",
"note_external": null,
"id_c": "11111",
"street": "17.8"
}
]
GET customer/{id}
Jednotlivý záznam pro zákazníka podle ID.
https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/customers/{id}
curl 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/customers/12344566' \
-H 'Authorization: A|ADqsEX...
GET orders
Vrací seznam účtenek (JSON Array), seřazené od nejnovějších po nejstarší.
Poznámky:
- Pokud je doklad zrušený nebo stornovaný, pole
date_canceledobsahuje čas zrušení (not-null) reduction_percentindikuje slevu v procentech poskytnutou zakaznikovi vynasobene 1000, uvedené jako celé číslo (integer). Tzn. hodnota 500 znamená, že byla poskytnuta sleva 0.5%
Parametry
- id_start - id záznamu od kterého se má stránkovat. výchozí hodnota 0 stránkuje od nejnovejší účtenky
- version_start - unix epoch timestamp (ms) filtr. Hodnota 0 znamená že se hodnoty nebudou filtrovat.
- limit - omezit počet záznamů, výchozí 250, maximum 2000. Velková velikost navráceného JSON nemůže přesáhnout 6MB
https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/orders?version_start=0&id_start={id_order}
GET orders/latest/{id_cash_register}
Posledních 40 orders z konkrétní pokladny podle id_cash_register. Metoda nepodporuje stránkování. Doporučujeme na získávání aktuálních objednávek v pravidelných intervalech pro systémy, které chtějí získávat online přehled o uskutečnených pohybech.
Query string parametry:
- id_payment (optional) - ID forma platby. Např 221: hotovost, 222: kreditní parta, 238: sumup
https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/orders/latest/{id_cash_register}?id_payment={id_payment}
Odpověď
[
{
"total_discounts_tax_excl": 0,
"currency": "CZK",
"pgx": "1141932:orders:4438373662917304",
"total_points": 0,
"id_employee": 0,
"date_closed": 1642005467495,
"total_credits": 0,
"id_payment": 222,
"total_paid_tax_excl": 50000,
"total_shipping_tax_excl": 0,
"total_tax_service": 0,
"total_paid_real": 50000,
"conversion_rate": 1,
"_u_dyn": 1642005490213,
"total_discounts_tax_incl": 0,
"geohash": "u2ugrgc",
"date_collected": 1642005467495,
"total_tip": 0,
"id_cash_register": 4438373662917304,
"id": 6619285123010267,
"dine_in": true,
"id_shop": 4438373662924485,
"total_products": 1,
"total_tax_gst": 0,
"total_profit_tax_excl": 0,
"order_serial_number": 130,
"summary": "1x Pure bar",
"id_park_location": 0,
"total_wrapping_tax_incl": 0,
"_d": 0,
"total_tax_eco": 0,
"total_tax_pst": 0,
"total_shipping_tax_incl": 0,
"id_employee_served": 0,
"date_paid": 1642005467185,
"id_shift": 6618245790277082,
"total_profit_tax_incl": 0,
"date_tax_reported": 1642005467495,
"_t": "orders",
"total_paid_tax_incl": 50000,
"_v": 1642005467521,
"total_wrapping_tax_excl": 0,
"total_tax_luxury": 0,
"invoice_number": 202012274,
"id_c": 1141932
}
]
GET order/{id_cash_register}/{id_order}
Umožní získat účtenku/doklad včetně položek v poli __order_details
https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/orders_details/{id_cash_register}/{id_order}
{
"total_discounts_tax_excl": 0,
"currency": "CZK",
"pgx": "1173665:orders:7694791899251239",
"total_points": 0,
"id_employee": 1,
"date_closed": 1684414596504,
"total_credits": 0,
"id_payment": 222,
"total_paid_tax_excl": 56522,
"total_shipping_tax_excl": 0,
"total_tax_service": 0,
"date_fiscalized": 0,
"total_paid_real": 65000,
"conversion_rate": 1,
"total_discounts_tax_incl": 0,
"date_collected": 1684414596504,
"total_tip": 0,
"id_cash_register": 7694791899251000,
"id": 8008974168592088,
"dine_in": true,
"id_shop": 7694791899258554,
"total_products": 2,
"total_tax_gst": 0,
"total_profit_tax_excl": 0,
"order_serial_number": 320,
"id_park_location": 0,
"total_wrapping_tax_incl": 0,
"_d": 0,
"total_tax_eco": 0,
"total_tax_pst": 8478,
"total_shipping_tax_incl": 0,
"id_employee_served": 1,
"date_paid": 1684414596504,
"id_shift": 7962837799869694,
"total_profit_tax_incl": 0,
"date_tax_reported": 1684414596504,
"_t": "orders",
"total_paid_tax_incl": 65000,
"_v": 1684414596517,
"total_wrapping_tax_excl": 0,
"total_tax_luxury": 0,
"invoice_number": 202305288,
"id_c": 11111,
"date_canceled": null,
"__order_details": [
{
"product_item_type": 0,
"currency": "CZK",
"pgx": "1173665:order_details:7694791899251239",
"total_points": 0,
"id_warehouse": 0,
"id_employee": 1,
"date_updated": 1684414596517,
"total_credits": 0,
"id_payment": 222,
"id_product": 7833117185743150,
"_u_dyn": 1684414622686,
"reduction_amount_tax_incl": 0,
"id_category": 7694792007615808,
"id_order": 8008974168592088,
"product_name_alternative": ":;en:Cappuccino",
"product_price_billed_tax_incl": 35000,
"id_order_details_parent": 1,
"id_cash_register": 7694791899251000,
"id": 8008976796814560,
"id_shop": 7694791899258554,
"product_quantity": 1,
"product_bitmask": 0,
"product_name": "Cappuccino",
"_d": 0,
"total_tax_eco": 0,
"total_tax_pst": 4565,
"reduction_amount_tax_excl": 0,
"product_price_billed_tax_excl": 30435,
"product_unit": 0,
"product_price_original_tax_excl": 30435,
"tax_pst_rate": 1.15,
"date_paid": 1684414596517,
"id_shift": 7962837799869694,
"_t": "order_details",
"_v": 1684414596517,
"order_number": 320,
"total_tax_luxury": 0,
"reduction_percent": 0,
"id_c": 11111,
"date_voided": null,
"date_canceled": null
}
]
}
GET order_details
Vrací položky účtenek. Jedná se o child kolekci objektu orders.
https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/order_details?version_start=0&id_start={id_order_details}
POST warehouse_status
Aktuální stav skladu. Je nutné zaslat JSON request s id_warehouse který určuje ID skladu, pro který chcete report.
curl 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/reports/generic/warehouse_status' \
-H 'Accept: application/json' \
-H 'Authorization: A|....' \
-H 'Content-Type: application/json' \
--data-raw '{"id_warehouse":953221250000000}'
Odpověď
{
"data": [
{
"id_c": 111111,
"id_warehouse": 953221254427235,
"wname": "WAREHOUSE MAIN 21",
"id_product": 5128991459121170,
"pname": "Aperol",
"cname": null,
"id_category": 4933809643652539,
"barcode": null,
"ean13": null,
"unit": 0,
"qty_cnt": 1,
"qty_sum": 3,
"qty_avg": 3,
"date_updated": 1641489385000,
"pp_avg": 10000,
"pp_unit": 10000
},
{
"id_c": 111111,
"id_warehouse": 953221254427235,
"wname": "WAREHOUSE MAIN 21",
"id_product": 4305305643161675,
"pname": "01.Vstup 8225",
"cname": "ACesty",
"id_category": 5723345161520367,
"barcode": null,
"ean13": null,
"unit": 0,
"qty_cnt": 1,
"qty_sum": 6,
"qty_avg": 6,
"date_updated": 1642004221000,
"pp_avg": 100000,
"pp_unit": 100000
}
],
"source": "query"
}
POST customers
Slouží k vytvoření nebo aktualizaci objektu zákazníka podle primárního klíče - pokud vytváříte objekt. neposkytujte ID objektu, bude automaticky vytvořeno. Schéma entity je popsána v zod níže.
curl 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/customers' \
-H 'Accept: application/json' \
-H 'Authorization: A|....' \
-H 'Content-Type: application/json' \
--data-raw '{...}'
Zasílání objednávek do pokladny
Připravujeme propojení pro zasílání externích objednávek do pokladního systému přes API. Kontaktujre prosím podpora@kasafik.cz pro více informací.
Vazby - Mermaid
Schema vazeb ve formátu Mermaid
erDiagram
Customer {
bigint id PK
}
Orders {
bigint id PK
bigint id_customer FK
bigint id_address_invoice FK
bigint id_address_delivery FK
bigint id_cash_register FK
bigint id_shift FK
bigint id_employee FK
bigint id_employee_served FK
bigint id_shop FK
bigint id_park_location FK
bigint id_shipping FK
bigint id_superseded FK
}
OrderDetails {
bigint id PK
bigint id_order FK
bigint id_customer FK
bigint id_product FK
bigint id_shift FK
bigint id_employee FK
bigint id_shop FK
bigint id_warehouse FK
bigint id_cash_register FK
bigint id_category FK
}
Employees {
bigint id PK
}
StockHistory {
bigint id PK
bigint id_employee FK
bigint id_shop FK
bigint id_stockup FK
bigint id_warehouse FK
bigint id_cash_register FK
bigint id_order FK
bigint id_record FK
}
Transactions {
bigint id PK
bigint id_customer FK
bigint id_order FK
bigint id_shift FK
bigint id_employee FK
bigint id_shop FK
}
Stockup {
bigint id PK
bigint id_cash_register FK
bigint id_employee FK
bigint id_shop FK
bigint id_warehouse FK
}
Warehouses {
bigint id PK
}
Products {
bigint id PK
bigint id_category FK
bigint id_shop FK
bigint id_exec_rule FK
bigint id_tax_rules_group FK
bigint id_global_product_code FK
}
ProductPriceMatrix {
bigint id PK
bigint id_product FK
bigint id_exec_rule FK
bigint id_shop FK
bigint id_warehouse FK
}
Customer ||--o{ Orders : places
Orders ||--o{ OrderDetails : contains
Customer ||--o{ OrderDetails : "is associated with"
Employees ||--o{ Orders : "manages"
Employees ||--o{ OrderDetails : "fulfills"
Warehouses ||--o{ OrderDetails : "stores"
Products ||--o{ OrderDetails : "includes"
StockHistory ||--o{ Employees : "managed by"
StockHistory ||--o{ Warehouses : "stored in"
StockHistory ||--o{ Products : "deducts"
Transactions ||--o{ Customer : "initiated by"
Transactions ||--o{ Orders : "related to"
Transactions ||--o{ Employees : "processed by"
Stockup ||--o{ Employees : "performed by"
ProductPriceMatrix ||--o{ Products : "defines price for"
Orders ||--o{ Warehouses : "related to"
Products ||--o{ Warehouses : "related to"
Products ||--o{ ProductPriceMatrix : "related to"
Products ||--o{ Transactions : "bought with"
Orders ||--o{ Transactions : "related to"
StockHistory }o--|| Orders : "concerns"
Warehouses ||--o{ Stockup : "associated with"
Stockup ||--o{ StockHistory : "tracks"
Employees ||--o{ StockHistory : "managed by"
Orders ||--o{ StockHistory : "related to"
Warehouses ||--o{ StockHistory : "related to"
Employees ||--o{ Transactions : "related to"
Employees ||--o{ Orders : "related to"
Definice objektu - zod schema
const NOT_DELETED = 0;
const bigintOrNumber = z.union([
z.number().refine(value => !isNaN(value), {
message: 'Expected a valid number',
}),
z.bigint(),
]);
const BaseSchema = z.object({
id: z.number(),
_v: z.number().min(0).default(() => new Date().getTime()),
_d: z.number().min(0).default(NOT_DELETED),
date_created: z.number().default(() => new Date().getTime())
});
const CustomerSchema = BaseSchema.extend({
id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(2))),
_t: z.literal("customers"),
firstname: z.string().nullable().optional(),
customer_type: z.number().int().min(0).default(0), // Assuming customerType should be non-negative integer
date_updated: z.number().default(() => new Date().getTime()), // Defaults to current date
color: z.number().int().min(0).default(0), // Assuming color should be non-negative integer
id_discount_group: bigintOrNumber.optional(),
zip_code: z.string().nullable().optional(),
date_birthday: z.number().nullable().optional(),
geohash: z.string().nullable().optional(),
company: z.string().nullable(), // Can be null
company_ico: z.string().nullable().optional(),
company_dic: z.string().nullable().optional(),
street: z.string().nullable().optional(),
city: z.string().nullable().optional(),
bank_account: z.string().nullable().optional(),
credit_account: z.string().nullable().optional(),
internal_json: z.string().nullable().optional(),
bitmask: z.number().int().min(0).default(0), // Assuming bitmask should be non-negative integer
barcode: z.string().nullable().optional(),
email: z.string().email().nullable().optional(), // Assuming email should be a valid email format
visible: z.boolean().default(true), // Assuming default visibility is true
lastname: z.string().nullable().optional(),
tags: z.string().nullable().optional(),
country_code: z.string().min(2).max(2).default('CZ'), // Assuming country code is always 2 characters
price_group: z.enum(['A', 'B', 'C']).default('A'),
note_external: z.string().nullable().optional(),
note_internal: z.string().nullable().optional(),
phone_number: z.string().nullable().optional(),
date_expires: z.number().nullable().optional(),
internal_extra: z.string().nullable().optional(),
price_discount: z.number().int().default(0) // Assuming price discount is an integer
});
const OrdersSchema = BaseSchema.extend({
id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(7))),
_t: z.literal("orders"),
id_address_invoice: bigintOrNumber.optional(),
id_canceled_order: bigintOrNumber.optional(),
id_customer: bigintOrNumber.optional(),
total_points: z.number().default(0),
total_credits: z.number().default(0),
total_profit_tax_incl: z.number().default(0),
total_tax_gst: z.number().default(0),
dine_in: z.boolean().default(false), // boolean, default to false
id_tax_report: bigintOrNumber.optional(),
short_code: z.string().nullable().optional(), // string or null
date_closed: z.number().nullable().optional(), // number (Date) or null
date_paid: z.number().nullable().optional(), // number (Date) or null
total_shipping_tax_incl: z.number().default(0),
geohash: z.string().nullable().optional(), // string or null
id_shop: bigintOrNumber,
total_profit_tax_excl: z.number().default(0),
total_tax_service: z.number().default(0),
invoice_number: z.number().nullable().optional(),
total_discounts_tax_incl: z.number().default(0),
order_serial_number: z.number().nullable().optional(),
id_address_delivery: bigintOrNumber.optional(),
total_shipping_tax_excl: z.number().default(0),
total_tax_pst: z.number().default(0),
total_tax_luxury: z.number().default(0),
date_canceled: z.number().nullable().optional(), // number (Date) or null
id_cash_register: bigintOrNumber,
total_paid_real: z.number().default(0),
id_shift: bigintOrNumber,
total_paid_tax_incl: z.number().default(0),
total_people_seated: z.number().nullable().optional(), // short
total_tip: z.number().default(0),
total_discounts_tax_excl: z.number().default(0),
date_fiscalized: z.number().nullable().optional(), // number (Date) or null
note: z.string().nullable().optional(), // string or null
total_paid_tax_excl: z.number().default(0),
total_wrapping_tax_incl: z.number().default(0),
id_shipping: bigintOrNumber.optional(),
id_superseded: bigintOrNumber.optional(),
total_wrapping_tax_excl: z.number().default(0),
id_employee: bigintOrNumber,
currency: z.string().nullable(), // string or null
conversion_rate: z.number().default(1.0), // number, default to 1.0
coupon_code: z.string().nullable().optional(), // string or null
coupon_source: z.string().nullable().optional(), // string or null
id_payment: z.number().default(0),
date_tax_reported: z.number().nullable().optional(), // number (Date) or null
total_tax_eco: z.number().default(0),
shipping_number: z.string().nullable().optional(), // string or null
customer_zip: z.string().nullable().optional(), // string or null
date_loc_acq: z.number().nullable().optional(), // number (Date) or null
id_employee_served: bigintOrNumber,
total_products: z.number().default(0),
id_park_location: bigintOrNumber,
date_collected: z.number().nullable().optional(), // number (Date) or null
date_due_pay: z.number().nullable().optional(), // number (Date) or null
date_emailed: z.number().nullable().optional(), // number (Date) or null
summary: z.string().nullable().optional(), // string or null
tags: z.string().nullable().optional(), // string or null
});
// Create a Zod schema for OrderDetails
const OrderDetailsSchema = BaseSchema.extend({
id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(6))),
_t: z.literal("order_details"),
id_payment: z.number().int().default(0), // Default value from TransactionsModel
id_customer: bigintOrNumber.optional(),
total_points: z.number().min(0).default(0), // Always whole number, no fractional
total_credits: z.number().default(0), // We have an issue, in Orders this is int and here double
id_order: bigintOrNumber,
date_paid: z.number().nullable().optional(),
id_shop: bigintOrNumber,
product_barcode: z.string().nullable().optional(),
total_tax_pst: z.number().int().default(0), // TODO pro prodej poukazu -100Kc je negativni dan
total_tax_luxury: z.number().int().min(0).default(0),
date_canceled: z.number().nullable().optional(),
id_cash_register: bigintOrNumber,
product_name: z.string().default("Unknown"),
product_unit: z.number().int().min(0).default(0),
tags: z.string().nullable().optional(),
id_shift: bigintOrNumber,
product_price_original_tax_excl: z.number().int().default(0),
id_product: bigintOrNumber,
product_purchase_price_tax_excl: z.number().nullable().optional(), // Integer or null
product_attribute_id: z.number().nullable().optional(),
date_timing_started: z.number().nullable().optional(),
note: z.string().nullable().optional(),
date_updated: z.number().nullable().optional(),
product_upc: z.string().nullable().optional(),
date_item_printed: z.number().nullable().optional(),
id_category: bigintOrNumber,
order_number: z.number().int().min(0).default(0),
reduction_amount_tax_incl: z.number().int().default(0),
product_quantity: z.number().default(0), // Assuming whole number as per the comment
total_weight: z.number().nullable().optional(), // Double or null
id_employee: bigintOrNumber,
reference_code: z.string().nullable().optional(),
currency: z.string().min(3).max(3), // Assuming currency is a 3-character code
product_price_billed_tax_excl: z.number().int().default(0),
product_name_alternative: z.string().default(""),
tax_pst_rate: z.number().default(1.000),
product_price_billed_tax_incl: z.number().int().default(0),
reduction_percent: z.number().int().min(0).default(0),
product_ean13: z.string().nullable().optional(),
total_tax_eco: z.number().int().default(0),
product_bitmask: z.number().int().min(0).default(0),
id_order_details_parent: bigintOrNumber.optional(),
id_warehouse: bigintOrNumber,
date_collected: z.number().nullable().optional(),
date_voided: z.number().nullable().optional(),
reduction_amount_tax_excl: z.number().int().default(0),
product_item_type: z.number().int().min(0).default(0),
});
const EmployeesSchema = BaseSchema.extend({
id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(4))),
_t: z.literal("employees"),
salt: z.string().nullable().optional(),
visible: z.boolean().default(true),
pin_require: z.boolean().default(false),
perm_inventory_bitmask: z.number().int().default(0),
pin_hash: z.string().nullable().optional(),
pass_hash: z.string().nullable().optional(),
perm_cloud_bitmask: z.number().int().default(0),
tags: z.string().nullable().optional(),
perm_bitmask: z.number().int().default(0),
name: z.string(),
phone_number: z.string().nullable().optional(),
date_expires: z.number().nullable().optional(), // Stored as milliseconds since epoch (UNIX timestamp)
barcode: z.string().nullable().optional(),
visible_cash_register: z.boolean().default(true),
otp_hash: z.string().nullable().optional(),
email: z.string().nullable().optional(),
});
const StockHistorySchema = BaseSchema.extend({
id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(16))),
_t: z.literal("stock_history"),
id_employee: bigintOrNumber,
id_shop: bigintOrNumber,
id_stockup: bigintOrNumber.optional().nullable(),
id_warehouse: bigintOrNumber,
note: z.string().nullable().optional(),
id_record: bigintOrNumber,
date_stocked: z.number().nullable().optional(), // Date as timestamp
quanity: z.number().default(0.0),
id_cash_register: bigintOrNumber,
id_supplier: bigintOrNumber.optional().nullable(),
stock_type: z.number().int(),
id_order: bigintOrNumber.optional().nullable(),
stock_history_type: z.number().int(),
supplier_sku: z.string().nullable().optional(),
product_purchase_unit_price_tax_excl: z.number().int().nullable().optional(),
});
const TransactionsSchema = BaseSchema.extend({
id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(22))),
_t: z.literal("transactions"),
note: z.string().nullable().optional(),
transaction_code: z.string().nullable().optional(),
id_customer: bigintOrNumber.optional(),
transaction_type: z.number().int(),
id_cash_register: bigintOrNumber.default(BigInt(0)),
id_order: bigintOrNumber.optional(),
id_shift: bigintOrNumber.default(BigInt(0)),
payment_type: z.number().int().min(0),
total_amount: z.number().int().default(0),
id_employee: bigintOrNumber,
id_shop: bigintOrNumber,
reference_code: z.string().nullable().optional(),
});
const StockupSchema = BaseSchema.extend({
id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(18))),
_t: z.literal("stockup"),
note: z.string().nullable().optional(),
total_product_purchase_unit_price_tax_excl: z.number().int().nullable().optional(),
date_stocked: z.number().nullable().optional(), // Assuming timestamp as milliseconds
id_cash_register: z.number().int(),
id_supplier: z.number().int().nullable().optional(),
stock_history_type: z.number().int(),
id_employee: z.number().int(),
id_shop: z.number().int(),
id_warehouse: z.number().int(),
invoice_number: z.string().nullable().optional(),
});
const WarehousesSchema = BaseSchema.extend({
id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(25))),
_t: z.literal("warehouses"),
shared: z.boolean().default(false),
visible: z.boolean().default(true),
warehouse_bitmask: z.number().int().default(0),
name: z.string(),
});
const ProductsSchema = BaseSchema.extend({
id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(11))),
_t: z.literal("products"),
image_dimension: z.number().int().nullable().optional(),
notes_quick: z.string().nullable().optional(),
quantity_multiple: z.number().default(1),
quantity_minimal: z.number().default(1),
additional_shipping_cost: z.number().default(0),
date_updated: z.number(), // Date as timestamp (milliseconds)
inventory_management: z.boolean().default(false),
color: z.number().int().default(0),
item_type: z.number().int().default(0),
id_category: bigintOrNumber.default(BigInt(0)),
tax_luxury: z.number().default(1.000),
ean13: z.string().nullable().optional(),
id_tax_rules_group: bigintOrNumber.nullable().default(BigInt(0)),
name_alternative: z.string().nullable().optional(),
sku: z.string().nullable().optional(),
tax_eco: z.number().default(1.000000),
barcode: z.string().nullable().optional(),
height: z.number().nullable().optional(),
visible: z.boolean().default(true),
image_url: z.string().nullable().optional(),
warranty_length: z.number().int().default(0),
condition_type: z.number().int().default(0),
tax_pst_rate: z.number().default(1.000),
upc: z.string().nullable().optional(),
weight: z.number().nullable().optional(), // Stored as alcoholTax in Java
icon_code: z.number().int().default(0),
details_url: z.string().nullable().optional(),
warranty_type: z.number().int().default(0),
tags: z.string().nullable().optional(),
description_short: z.string().nullable().optional(),
unit: z.number().int().default(0),
id_exec_rule: bigintOrNumber.default(BigInt(0)),
depth: z.number().nullable().optional(),
sale_group_type: z.number().int().default(0),
id_global_product_code: bigintOrNumber.nullable().optional(),
accounting_group: z.number().int().default(600000),
name: z.string(),
width: z.number().nullable().optional(),
node_sort: bigintOrNumber.default(BigInt(0)),
attributes_bitmask: z.number().int().default(0),
inventory_type: z.number().int().default(0),
internal_extra: z.string().nullable().optional(),
id_shop: bigintOrNumber.default(BigInt(0))
});
const ProductPriceMatrixSchema = BaseSchema.extend({
id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(12))),
_t: z.literal("product_price_matrix"),
unit_price_base_tax_excl: z.number().nullable().optional(), // decimal value 19.95
unit_price_base_tax_incl: z.number().nullable().optional(), // decimal value 22.99
date_starts: z.number(), // Date as timestamp (milliseconds)
unit_price_regular_tax_excl: z.number().int().default(0),
unit_price_c_tax_excl: z.number().int().nullable().optional(),
points_deduct: z.number().default(0.0),
credits_deduct: z.number().default(0.0),
hour_bitmask: z.number().int().default(0),
reduction_amount_a_tax_excl: z.number().int().default(0),
id_product: bigintOrNumber,
id_exec_rule: bigintOrNumber.default(BigInt(0)),
unit_price_b_tax_excl: z.number().int().nullable().optional(),
price_bitmask: z.number().int().default(0),
dow_bitmask: z.number().int().default(0),
id_shop: bigintOrNumber.default(BigInt(0)),
currency: z.string(),
date_expires: z.number().nullable().optional(), // Date as timestamp (milliseconds)
unit_price_a_tax_excl: z.number().int().nullable().optional(),
id_warehouse: bigintOrNumber.default(BigInt(0)),
});
Propojení Foodora **
Propojení WhatsApp
Vyvolávání připravených objednávek pro vytížené provozy
Naše samoobslužné kiosky a pokladny jsou vybaveny funkcí, která zákazníkům umožňuje zaregistrovat své mobilní číslo pro příjem oznámení o stavu objednávky prostřednictvím aplikace WhatsApp. Tato funkce poskytuje rychlé a efektivní upozornění, jakmile je objednávka připravena k vyzvednutí, a zároveň otevírá další komunikační kanál pro marketingové aktivity.
V dnešním rychlém a neustále se měnícím světě je důležité, aby se podniky v oblasti pohostinství a maloobchodu přizpůsobily očekáváním moderních zákazníků, kteří hledají pohodlí, rychlost a efektivitu. Vyvolávání připravených objednávek prostřednictvím automatizovaných systémů je v tomto ohledu revolučním krokem, který posouvá zákaznický servis na novou úroveň.
Pro vytížené provozy, jako jsou restaurace s rychlým občerstvením, kavárny a maloobchody, je klíčové zvládnout špičky návštěvnosti bez zbytečných prodlev a s maximální efektivitou. Vyvolávání objednávek přes moderní komunikační kanály jako WhatsApp umožňuje zákazníkům přijímat real-time aktualizace o stavu jejich objednávky přímo na jejich telefon, což znamená, že mohou svůj čas plánovat efektivněji a bez zbytečného čekání.
Tato služba nejenže zvyšuje spokojenost zákazníků, ale také snižuje fronty a zatížení personálu během rušných období, což vede k hladšímu chodu provozu a umožňuje zaměstnancům soustředit se na další klíčové úkoly. Automatizace tohoto procesu prostřednictvím pokladního systému je intuitivní, snadno integrovatelná a představuje značnou úsporu času a zdrojů.
Předtím, než začnete, ujistěte se, že máte
Účet WhatsApp Business (WABA) potřebuje platné, věnované telefonní číslo podniku.
Požadavky
- Aby bylo telefonní číslo podniku způsobilé pro registraci, musí být: vlastněno vámi
- Mít zeměpisné a oblastní kódy (zkrácené kódy nejsou podporovány)
- Schopné přijímat hlasové hovory nebo SMS (zasíláme vám zprávu k ověření vlastnictví)
- Portfolio podniku, které vlastní účet WhatsApp Business spojený s podnikovým telefonním číslem, dokončilo ověření podniku.
- Stav jména podnikového telefonního čísla je SCHVÁLEN.
- Pokladní systém KASA FIK PREMIUM s podporou integrace pro odesílání zpráv
Registrovaná čísla je možné stále používat pro běžné účely, jako jsou telefonáty a textové zprávy.
Registrace telefonních čísel
Postup také naleznete v origiálním manuálu WhatsApp na stránkách Facebook/Meta.
Pokud jste při dokončování kroků v dokumentu Začínáme nezaregistrovali číslo, vraťte se na nástěnku aplikace, přejděte na panel WhatsApp > API Setup. Posuňte se dolů k Kroku 5: Přidání telefonního čísla, klikněte na tlačítko Add phone number a dokončete proces.
Jako součást procesu registrace vám Meta pošlem hlasovou nebo SMS zprávu obsahující ověřovací kód na vaše telefonní číslo, abychom ověřili, že jste jeho majitelem.
Všimněte si, že můžete také zaregistrovat číslo pomocí správce WhatsApp. Podívejte se na článek v centru nápovědy Jak připojit vaše telefonní číslo k vašemu účtu WhatsApp Business, kde se dozvíte, jak na to.
Integrace WhatsApp API s pokladním systémem
- Použijte poskytnuté API klíče a koncové body od WhatsAppu a zadejte je do odpovídajících polí ve vašem pokladním systému pro nastavení integrace.
Nastavení pravidel pro odesílání zpráv
- V pokladním systému nastavte pravidla pro automatické odesílání zpráv. To může zahrnovat:
- Vyvolání objednávky, když je připravena k vyzvednutí.
- Upozornění na speciální nabídky nebo slevy.
- Připomenutí rezervací nebo objednávek.
- Nastavte šablony zpráv, které budou odesílány zákazníkům. WhatsApp vyžaduje schválení šablon zpráv pro masové rozesílání.
Testování
- Proveďte testovací transakci a ujistěte se, že zpráva je správně odeslána na testovací číslo WhatsApp.
- Zkontrolujte, zda je zpráva dostatečně informativní a zda obsahuje všechny potřebné informace.
Nastaven tisku QR kódu na účtence
V QR tiskové patiččce vložte : https://wa.me/420530335060?text=Ahoj+Moje+objednavka+je+{order_number}
Odkazy
Propojení Wolt + Wolt Retail
Úprava nabídky po aktivaci synchronizace s Wolt
Synchronizace s Vzdálenou Správou
Po zapnutí funkce synchronizace ve Vzdálené správě dojde k následujícím změnám:
- Omezení úprav nabídky: Možnost úpravy nabídky v administrativním rozhraní Woltu bude zablokována. Jakékoli menu, které bylo vytvořeno v Woltu před aktivací synchronizace, zůstane dostupné pro zákazníky, ale nebude již možné ho upravovat.
- Vytváření nabídky: Pro další úpravy a správu nabídky je nutné používat Vzdálenou správu systému KASA FIK.
Po Aktivaci Synchronizace
Pokyny pro Odblokování iPadu
- Požádání o odblokování: V případě potřeby můžete kontaktovat Wolt s žádostí o odblokování vašeho iPadu, který byl dříve používán pro správu objednávek.
- Další využití tabletů: Po odblokování můžete tablet využívat pro jiné účely, které nejsou svázány s přijímáním objednávek na Woltu.
Toto jsou kroky a důležité informace týkající se změn ve správě vaší nabídky po aktivaci synchronizace s Backoffice KASA FIK. Pro hladký přechod a efektivní správu vaší nabídky doporučujeme důkladně se seznámit s novým postupem a zajistit, že všechny relevantní osoby ve vašem týmu jsou řádně informovány a vyškoleny.
Propojení Better Hotel
Tento dokument poskytuje podrobný přehled o integraci pokladního systému KASA FIK a samoobslužných kiosků s rezervačním systémem Better Hotel. Tato integrace umožňuje hotelům zefektivnit procesy odbavení hostů, správy rezervací a účtování výdajů, čímž se zvyšuje efektivita provozu a zlepšuje zákaznická zkušenost.
Přehled Integrace
Integrace mezi KASA FIK a Better Hotel přináší následující klíčové funkce:
-
Vyhledání rezervace:
- Hosté mohou snadno vyhledat své rezervace pomocí samoobslužných kiosků nebo pokladny zadáním čísla rezervace nebo jiného identifikátoru (např. jméno hosta, email).
-
Správa karty hostů:
- Personál a hosté mohou přistupovat k informacím o hostech, jako je číslo pokoje, jméno hosta, email nebo telefon, což umožňuje rychlé a přesné poskytování služeb.
-
Účtování konzumace:
- Útraty z restaurace nebo baru mohou být přímo připsány na hotelový účet hosta prostřednictvím pokladního systému KASA FIK, což zjednodušuje proces placení a závěrečné vyúčtování.
-
Self-Checkout:
- Hosté mají možnost provést self-checkout prostřednictvím kiosků, kde mohou zkontrolovat svůj účet, provést platbu a dokončit proces odhlášení bez nutnosti čekání na recepci.
Výhody Integrace
- Zvýšená efektivita: Automatizace procesů sníží zátěž na personál a zrychlí odbavení hostů.
- Zlepšená zákaznická zkušenost: Hosté mají více možností, jak spravovat svůj pobyt, což zvyšuje jejich pohodlí a spokojenost.
- Přesnost a přehlednost: Konzumace a další výdaje jsou automaticky zaznamenány a propojeny s rezervačním systémem, což minimalizuje chyby a zajišťuje přesné účtování.
- Flexibilita: Hosté mohou kdykoliv přistupovat k informacím o svém pobytu a provádět potřebné změny bez nutnosti asistence personálu.
Implementace
- Nakonfigurujte API klíče a přístupové body pro komunikaci mezi KASA FIK a Better Hotel v aplikaci KASA FIK Pokladna - Nastavení - Expertní nastavení - Better Hotel
- Ujistěte se, že jsou správně nastaveny všechny parametry pro vyhledávání rezervací, správy účtů a účtování výdajů
Propojení Aktion.eu - stravovací systém
Tento dokument poskytuje podrobné informace o integraci pokladního systému KASA FIK se stravovacím systémem Aktion. Tato integrace přináší efektivní řešení pro řízení stravování ve firmách, šetří náklady na provoz jídelen a zrychluje proces odbavení strávníků.
Přehled stravovacího systému Aktion
Systém Aktion nabízí komplexní řešení pro objednávání a vyúčtování stravy ve firemních jídelnách. Mezi hlavní funkce patří:
- Rychlé objednání jídel z mobilu, kiosku nebo webové aplikace.
- Platby pomocí RFID karty, mobilu nebo biometrie.
- Export jídelníčku přímo dodavatelům.
- Automatické strhávání částek za odebranou stravu ze mzdy.
- Možnost objednat a převzít jídlo v různých jídelnách v rámci podniku.
- Propojení s nápojovými a jídelními automaty.
Výhody Integrace KASA FIK s Aktion
- Efektivita Provozu: Integrace automatizuje procesy objednávání a vyúčtování, což snižuje administrativní zátěž a zvyšuje efektivitu.
- Zrychlení Odbavení: Díky automatizovanému odbavení a platbám se zrychluje proces výdeje jídel.
- Flexibilita: Uživatelé mohou snadno spravovat objednávky z různých zařízení a místa odběru.
- Přesnost a Transparentnost: Přesné sledování odebrané stravy a její účtování zajišťuje transparentní procesy.
Implementační Kroky
-
Analýza Potřeb:
- Vyhodnocení stávajících procesů a určení požadovaných funkcí integrace.
-
Příprava a Testování:
- Instalace a konfigurace potřebného softwaru a hardwaru.
- Provádění testů propojení a ověření správnosti datové výměny.
-
Konfigurace API:
- Nastavení API klíčů a přístupových bodů pro bezpečnou komunikaci mezi KASA FIK a Aktion.
- Zajištění správného nastavení parametrů pro objednávání a vyúčtování.
-
Školení Personálu:
- Poskytnutí školení pro personál o používání integrovaného systému, včetně nových funkcí a postupů.
-
Zahájení Provozu:
- Po úspěšném testování a školení uvedení systému do ostrého provozu.
- Monitorování činnosti a řešení případných problémů.
Objednávání a Platby
- Objednávání Jídel: Strávníci mohou objednávat jídla z mobilní aplikace, kiosku nebo webové aplikace.
- Platby: Platby jsou možné pomocí RFID karty, mobilu nebo biometrie, což zajišťuje rychlé a bezpečné transakce.
Export a Vyúčtování
- Export Dodavatelům: Objednávky se automaticky exportují dodavatelům, což zjednodušuje logistiku.
- Strhávání ze Mzdy: Odebraná jídla jsou automaticky účtována do mzdového systému, což zajišťuje efektivní vyúčtování.
Propojení s Automaty
- Identifikace a Výdej: Strávníci mohou použít svou přístupovou kartu pro identifikaci a výdej z automatů.
- Úhrada: Úhrady za odebrané položky jsou automaticky odečteny ze mzdy.
Nastavení přístupů v aplikaci KASA FIK Pokladna
V Nastavení - Expert nastavení - Aktion zadejte přístupové údaje pro lokální server Aktion.
Doplnění kreditu (Deposit)
Založte si novou položku, která bude mít typ a zvolte "Vyžádat zadáníá ceny" nebo pokud chcete fixní cenu zadejte cenu v ceníku.
Při prodeji přidejte tuto položku na účet, systém Vás vyzve na zadání hodnoty. Při platbě kartou nebo hotově se následně přičte deposit na účet zákazníka.
Propojení Shoptet
KASA FIK pokladna a vyzvedávací kiosky jsou schopny spolupracovat se systémem Shoptet. Při každé operaci Shoptet odešle e-mail na centrální adresu, kde jej zpracujeme v systému KASA FIK.
Nastavení informačních emailů v Shoptet
Návod Shoptet na webu https://podpora.shoptet.cz/informacni-e-maily/
Nastavení informačních e-mailů naleznete v administraci v Nastavení → Emaily → Automatické zasílání. Nastavte nového příjemce pro šablonu: Oznámení o objednávce e-shopu
Do příjemce, kopie uveďte email shoptet@e.kasafik.cz
email je shoptet (zavináč) e.kasafik (tečka) cz - v emailu je písmeno e!
Povolení exportů stavu objednávek
V Nastavení → Administrace - Zabezpečení exportů zadejte nového partnera KASA FIK s.r.o.
Následně v administraci Shoptet - Objednávky → Exporty zvolte typ exportu CSV a přiřaďte partnera KASA FIK s.r.o. Zašlete nám odkaz k exportu a propojení. Více o nastavení exportů pomocí permanentního odkazu naleznete v manuálu Shoptet objednávky.
Povolení exportů stavu skladů
Backoffice lze propojit se sklady v Shoptet systému. Je nutné povolit export data poskytnout odkaz pro export dat. V Produkty → Sklad → Export vygenerujte odkaz pro stahování stavu skladů.
Převod ze skladů v Shoptet na KASA FIK
V Adminsitraci Shoptet v Nastavení → Produkty → Sklady → Přidat si přidejte nový sklad (například Prodejna Brno), To vám umožní v administraci Shoptetu převádět produkty na sklad v pokladně.
Propojení Qerko**
MultiSport - partnerská zóna
MultiSport je benefitní program, který umožňuje držitelům karet (zaměstnancům firem) vstup do široké sítě sportovních a relaxačních zařízení. Pro vás jako partnera MultiSport znamená zapojení do programu možnost oslovit nové zákazníky a zvýšit návštěvnost. Integrace s KASA FIK celý proces odbavení těchto zákazníků výrazně zjednodušuje.
Jak propojení KASA FIK a MultiSport funguje?
Integrace umožňuje vaší pokladně KASA FIK komunikovat se systémem MultiSport za účelem:
- Načtení identifikátoru: Rychlé načtení čísla MultiSport karty nebo ID z pokladní aplikace (obvykle pomocí čtečky čárových/QR kódů).
- Validace vstupu: Ověření platnosti karty pro daný den a zařízení přímo v systému MultiSport.
- Zaznamenání vstupu: Automatické zaúčtování a zaznamenání vstupu v pokladně KASA FIK a odeslání informace o využití vstupu do systému MultiSport.
- Řešení doplatků: V případě, že je k MultiSport vstupu vyžadován doplatek (dle typu karty nebo aktivity), systém vás na něj upozorní a umožní jeho zaúčtování.
Nastavení propojení MultiSport
V Nastavení - Expert nastavení - zvolte Multisport a zadejte své přihlašovácí údaje do Multisport Partnerského portálu ve formátu uživatelksé_jmeno:heslo (odděleno dvojtečkou)
Slevomat - aktivace voucherů
Tento návod vám ukáže, jak nastavit vaši pokladnu KASA FIK, abyste mohli rychle a pohodlně ověřovat a uplatňovat Slevomat vouchery přímo při prodeji, bez nutnosti chodit do Slevomat Partnerského rozhraní na počítači.
Co budete potřebovat:
- Být partnerem Slevomatu: Musíte mít se Slevomatem uzavřenou smlouvu.
- Váš unikátní Slevomat API Token: Toto je speciální kód, který slouží k propojení vaší pokladny se Slevomatem. Tento token získáte přímo od Slevomatu. Kontaktujte svého obchodního zástupce Slevomatu nebo jejich zákaznickou podporu a požádejte o "API token pro Partner API". Bez tohoto tokenu propojení nebude fungovat.
- Internetové připojení: Pokladna potřebuje být připojená k internetu, aby mohla komunikovat se Slevomatem.
Kroky k nastavení v KASA FIK:
Krok 1: Získejte svůj Slevomat API Token
- Nejdůležitější krok mimo KASA FIK: Kontaktujte Slevomat a vyžádejte si váš unikátní API token. Řekněte jim, že ho potřebujete pro propojení s pokladním systémem (KASA FIK).
- Jakmile token dostanete, mějte ho připravený (např. zkopírovaný nebo napsaný na papíře).
Krok 2: Vložte Token do nastavení KASA FIK
- Otevřete aplikaci KASA FIK Pokladna.
- Přejděte do Nastavení aplikace.
- Najděte a klepněte na Expertní nastavení.
- V Expertním nastavení najděte a vyberte položku Slevomat.
- Zde uvidíte pole pro vložení tokenu. Vložte (nebo opište) sem váš Slevomat API token, který jste získali v Kroku 1.
- Uložte provedené změny
Krok 3: Nastavte si tlačítko pro rychlé použití (Doporučeno)
- Abyste mohli vouchery odbavovat co nejrychleji, je dobré si na pokladně nastavit speciální tlačítko.
- V prodejním režimu si nastavte funkční klávesy
- Vyberte si tlačítko (např. na dotykové obrazovce nebo klávesu na klávesnici), které chcete pro Slevomat použít.
- Přiřaďte tomuto tlačítku funkci související se Slevomatem (např. "Slevomat Voucher", "Odbavit Slevomat" apod.). Tato možnost by se měla objevit poté, co jste vložili token v Kroku 2.
- Uložte nastavení tlačítek.
Jak používat Slevomat vouchery při prodeji:
- Zákazník vám předá Slevomat voucher.
- Na pokladně KASA FIK stiskněte tlačítko, které jste si pro Slevomat nastavili (nebo najděte funkci v menu).
- KASA FIK vás vyzve k zadání kódu voucheru. Opište kód přesně z voucheru zákazníka.
- KASA FIK se přes internet spojí se Slevomatem a ověří platnost voucheru.
- Na obrazovce pokladny se zobrazí informace o voucheru (např. název akce) a hlavně, zda je platný k použití.
- Pokud je voucher platný, KASA FIK ho po vašem potvrzení uplatní v systému Slevomatu. Klepněte na tlačítko Použít voucher
- Pokladna potvrdí, že voucher byl úspěšně uplatněn.
- Nyní můžete dokončit prodej v KASA FIK, případně odečíst hodnotu voucheru od celkové částky účtenky (záleží na tom, jak máte nastavené produkty v KASA FIK a jak KASA FIK zpracovává informace ze Slevomatu).
Pozor, uplatnění voucheru je nutné provést ve 2 krocích. Napřed dojde k ověření a následně uplatnění pomocí tlačítka Použít voucher. Pokud obsluha provede pouze ověření, nedojde k deaktivaci voucheru v systému Slevomat.
Formátování kódu voucheru
Systém akceptuje vouchery v jakémkoliv formátu. Nerozlišuje velká a malá písmena a podporuje zadávání s číslicemi i s pomlčkami nebo bez nich.
Zasílání emailů
Pokud je vyplněn email na zasílání přehledů pro účetní, systém automaticky odešle každž požadavek na ověření voucheru na email.
Co když se objeví chyba?
Pokud KASA FIK hlásí, že voucher nelze použít, může to být z různých důvodů, které vám pokladna obvykle ukáže (např. voucher už byl použitý, nebyl zaplacený, propadla mu platnost, neexistuje atd.).
Základní řešení problémů:
- Zkontrolujte, zda jste kód voucheru zadali správně.
- Ujistěte se, že máte na pokladně funkční internetové připojení.
- Zkontrolujte, zda máte správně vložený Slevomat token v nastavení KASA FIK (Krok 2).
- Pokud problém přetrvává a nejste si jisti, proč voucher nejde použít, kontaktujte podporu KASA FIK nebo Slevomatu.
Důležité upozornění:
- Tato funkce obvykle nefunguje pro Slevomat vouchery z kategorie cestování.
- Bez internetového připojení na pokladně nelze vouchery ověřovat ani uplatňovat.
Ticketstream - validace vstupů na kiosku a pokladně
KASA FIK Pokladna vám umožní rychle a spolehlivě ověřovat platnost vstupenek prodaných přes Ticketstream. Tuto funkci využijete především při kontrole vstupu na akce, sportoviště, koncerty nebo v kioskovém režimu.
Co potřebujete k propojení:
- Partnerství s Ticketstreamem: Musíte mít s Ticketstreamem smlouvu a prodávat přes ně vstupenky.
- Váš Ticketstream Autorizační Token: Toto je speciální kód, který propojí vaši KASA FIK pokladnu se systémem Ticketstream. Token získáte přímo od společnosti Ticketstream. Kontaktujte je a vyžádejte si ho. Bez něj propojení nebude fungovat.
- Aplikaci KASA FIK Pokladna: Ujistěte se, že ji máte nainstalovanou a funkční.
- Stabilní internetové připojení: KASA FIK potřebuje internet pro online ověření a stahování dat o vstupenkách.
- Čtečka čárových/QR kódů: Zařízení pro skenování kódů ze vstupenek, připojené k pokladně nebo kiosku.
Nastavení propojení v KASA FIK (jednorázové):
- Získejte Token od Ticketstreamu: Než začnete v KASA FIK, ujistěte se, že máte od Ticketstreamu připravený váš Autorizační Token.
- Otevřete KASA FIK Pokladna.
- Přejděte do Nastavení.
- Vyberte Expertní nastavení.
- Klepněte na položku Ticketstream.
- Do zobrazeného pole zadejte Autorizační Token, který jste získali od Ticketstreamu.
Nastavení způsobu validace (Pokladna / Kiosek):
Po vložení tokenu je propojení aktivní. Nyní si nastavte, jak budete validaci spouštět:
- Na běžné pokladně: Doporučujeme nastavit funkční klávesu (tlačítko na obrazovce nebo klávesnici), která spustí režim skenování vstupenky. Nastavení funkčních kláves najdete v Nastavení KASA FIK (přesné umístění se může lišit, hledejte sekci "Pokladna" nebo "Funkční klávesy"). Přiřaďte jedné z kláves akci související s validací Ticketstream.
- V Kioskovém režimu: Validace může probíhat automaticky po naskenování vstupenky. Nastavení kioskového režimu a automatické validace často vyžaduje pomoc specialisty podpory KASA FIK.
Jak používat validaci vstupenek při vstupu:
- Návštěvník vám předloží vstupenku (vytištěnou nebo v telefonu).
- Pokud používáte běžnou pokladnu: Stiskněte nastavenou funkční klávesu pro validaci Ticketstream.
- Pokud používáte Kiosek: Kiosek je připraven a čeká na skenování.
- Pomocí čtečky naskenujte čárový kód nebo QR kód ze vstupenky.
- KASA FIK se přes internet spojí se systémem Ticketstream a ověří platnost vstupenky.
- Na obrazovce KASA FIK se okamžitě zobrazí výsledek:
- Vstupenka je platná: Zobrazí se potvrzení (případně detaily jako typ vstupenky, zóna). Návštěvníka můžete pustit.
- Vstupenka je neplatná: Zobrazí se důvod (např. již použitá, neexistuje, neplatná pro daný den atd.). Návštěvníka byste neměli pustit.
- KASA FIK zároveň uplatní vstupenku v systému Ticketstream, aby ji nebylo možné použít znovu.
Důležité funkce a poznámky:
- Offline validace: KASA FIK si průběžně stahuje seznamy vstupenek z Ticketstreamu. To umožňuje ověřit některé vstupenky i při krátkodobém výpadku internetu. Pro plnou spolehlivost a hlavně pro uplatnění vstupenky v systému Ticketstream je však online připojení nezbytné.
- Řízení vstupu: Systém vám pomůže kontrolovat vstup na různé typy akcí nebo do různých zón (VIP, standard atd.) na základě informací ze vstupenky.
Co když se objeví chyba?
Pokud KASA FIK hlásí problém s validací, zkontrolujte:
- Zda máte funkční internetové připojení. (Aplikace sice pracuje s offline daty, ale pro online ověření a uplatnění je internet nutný).
- Zda jste správně naskenovali kód.
- Zda máte správně vložený Autorizační Token v nastavení KASA FIK.
- Přečtěte si důvod chyby zobrazený na obrazovce KASA FIK (např. "Vstupenka již použita").
Potřebujete pomoct?
- V případě problémů s nastavením v aplikaci KASA FIK nebo s kioskovým režimem kontaktujte podporu KASA FIK.
- V případě problémů s vaším Autorizačním Tokenem nebo s daty o vstupenkách v systému Ticketstream kontaktujte podporu Ticketstrea
Propojení Helios
Pokladna nabízí možnost propojit s ERP systémem Helios pomocí SQL napojení na databázi. Vzhledem ke specifickým požadavkům je nutné specifikovat:
- adresu SQL server, port
- název databáze
- přístupové údaje
- tabulka s daty pro objednávky nebo/a produkty
KASA FIK využívá pomocný KASA FIK Helios Connector, který se napojít na SQL Server a provádí výměnu pomocí tabulek nebo uložených procedůr.
Propojení QR Ticket - validace vstupů na kiosku a pokladně
KASA FIK Pokladna vám umožní rychle a spolehlivě ověřovat platnost vstupenek prodaných přes QR Ticket. Tuto funkci využijete především při kontrole vstupu na akce, sportoviště, koncerty nebo v kioskovém režimu.
Co potřebujete k propojení
-
Partnerství s QR Ticket: Musíte mít s QR Ticket smlouvu a prodávat přes ně vstupenky.
-
Váš QR Ticket autorizační token: Speciální kód, který propojí vaši KASA FIK pokladnu se systémem QR Ticket. Token získáte přímo od společnosti QR Ticket. Kontaktujte je a vyžádejte si ho. Bez něj propojení nebude fungovat.
-
Aplikaci KASA FIK Pokladna: Ujistěte se, že ji máte nainstalovanou a funkční.
-
Stabilní internetové připojení: KASA FIK potřebuje internet pro online ověření a stahování dat o vstupenkách.
-
Čtečka čárových/QR kódů: Zařízení pro skenování kódů ze vstupenek, připojené k pokladně nebo kiosku.
Nastavení propojení
-
Získejte token od QR Ticket: Než začnete v KASA FIK, ujistěte se, že máte od QR Ticket připravený váš autorizační token.
-
Otevřete KASA FIK Pokladna.
-
Přejděte do Nastavení.
-
Vyberte Expertní nastavení.
-
Klepněte na položku QR Ticket.
-
Do zobrazeného pole zadejte váš autorizační token a kód akce - odděleno dvojtečkou. Napříkad:
qrk7x0IMALhRrw7s3VlVY6xKXtyxxxxxxx:QFIFXXX
Nastavení způsobu validace (pokladna / kiosek)
Po vložení tokenu je propojení aktivní. Nyní si nastavte, jak budete validaci spouštět:
-
Na běžné pokladně: Doporučujeme nastavit funkční klávesu (tlačítko na obrazovce nebo klávesnici), která spustí režim skenování vstupenky. Nastavení funkčních kláves najdete v Nastavení KASA FIK (přesné umístění se může lišit, hledejte sekci "Pokladna" nebo "Funkční klávesy"). Přiřaďte jedné z kláves akci pro validaci QR Ticket.
-
V kioskovém režimu: Validace může probíhat automaticky po naskenování vstupenky. Nastavení kioskového režimu a automatické validace často vyžaduje pomoc specialisty podpory KASA FIK.
Jak používat validaci vstupenek při vstupu
-
Návštěvník vám předloží vstupenku (vytištěnou nebo v telefonu).
-
Pokud používáte běžnou pokladnu: Stiskněte nastavenou funkční klávesu pro validaci QR Ticket.
Pokud používáte kiosek: Kiosek je připraven a čeká na skenování. -
Pomocí čtečky naskenujte čárový kód nebo QR kód ze vstupenky.
-
KASA FIK se přes internet spojí se systémem QR Ticket a ověří platnost vstupenky.
-
Na obrazovce KASA FIK se okamžitě zobrazí výsledek:
-
Vstupenka je platná: Zobrazí se potvrzení (případně detaily jako typ vstupenky, zóna). Návštěvníka můžete pustit.
-
Vstupenka je neplatná: Zobrazí se důvod (např. již použitá, neexistuje, neplatná pro daný den). Návštěvníka byste neměli pustit.
-
-
KASA FIK zároveň uplatní vstupenku v systému QR Ticket, aby ji nebylo možné použít znovu.
Co když se objeví chyba?
Pokud KASA FIK hlásí problém s validací, zkontrolujte:
-
Zda máte funkční internetové připojení (aplikace sice pracuje s offline daty, ale pro online ověření a uplatnění je internet nutný).
-
Zda jste správně naskenovali kód.
-
Zda máte správně vložený autorizační token v nastavení KASA FIK.
-
Přečtěte si důvod chyby zobrazený na obrazovce (např. "Vstupenka již použita").
Potřebujete pomoct?
-
V případě problémů s nastavením v aplikaci KASA FIK nebo s kioskovým režimem kontaktujte podporu KASA FIK.
-
V případě problémů s vaším autorizačním tokenem nebo s daty o vstupenkách v systému QR Ticket kontaktujte podporu QR Ticket.
KASA FIK MCP Server
Co je to MCP server pro Pokladnu?
MCP (Model Context Protocol) je otevřený protokol, který umožňuje AI nástrojům (jako je Claude Desktop, ChatGPT nebo OpenAI Codex) komunikovat přímo s vašimi daty v KASA FIK.
Díky MCP serveru nemusíte otevírat dashboard, exportovat CSV ani ručně kopírovat čísla. Stačí se zeptat přirozeným jazykem a AI odpoví na základě živých dat z vaší provozovny.
K čemu se MCP server hodí?
Tržby a vše kolem prodeje teď vyřídíte přímo v AI chatu. Místo ručního proklikávání prostě napište třeba "Ukaž mi, jaké byly mé tržby za včerejšek a které produkty se prodávaly nejvíce" – a AI vám výsledek přehledně zobrazí.
Díky MCP serveru můžete:
- zjistit denní, týdenní nebo měsíční tržby
- vyhledat nejlépe a nejhůře prodávané produkty
- zkontrolovat aktuální stav zásob
- získat přehled o průměrné hodnotě transakce
- zjistit počet unikátních zákazníků za dané období
V beta verzi je k dispozici pouze čtení dat. Zápisové operace (tvorba slev, úprava zásob, refundace) zatím nejsou podporovány.
Kolik za propojení s AI zaplatíte?
Samotné napojení AI na KASA FIK je v beta verzi zdarma. MCP volání nejsou aktuálně omezena ani počítána do žádných limitů.
Po ukončení beta verze a ostrém release bude toto propojení zpoplatněno jako prémiový add-on. O přesných podmínkách vás budeme včas informovat.
Jak propojím KASA FIK s AI?
Oproti jiným integracím zde nemusíte složitě generovat API klíče ručně. Stačí si vygenerovat token v Backoffice KASA FIK, zadat adresu MCP serveru do vašeho AI nástroje a propojení je hotové.
Níže najdete konkrétní postup pro váš AI nástroj.
Krok 1: Získání přístupového tokenu
- Přihlaste se do Backoffice KASA FIK
- Přejděte do sekce Nastavení → MCP servery (nebo použijte přímý odkaz z vašeho uvítacího emailu)
- Klikněte na Vytvořit nový token
- Token si pojmenujte (např. "Claude pro provozovnu Hlavní")
- Zkopírujte vygenerovaný token – po opuštění stránky už ho nebude možné znovu zobrazit
Podrobný návod krok za krokem najdete v samostatné příručce Správa MCP tokenů v Backoffice.
Krok 2: Propojení s vaším AI nástrojem
Vyberte níže váš AI nástroj.
Jak propojím KASA FIK s ChatGPT (OpenAI)
- Otevřete ChatGPT a vlevo dole klikněte na své jméno, poté na Nastavení
- V levém seznamu klikněte na Aplikace → Rozšířené nastavení
- Aktivujte Režim vývojáře kliknutím na posuvník – nechte ho zapnutý i po dokončení nastavení
- Klikněte na tlačítko Vytvořit aplikaci
- Do pole Název zadejte například "KASA FIK"
- Do pole URL serveru MCP vložte adresu:
https://api.kasafik.cz/mcp/v1/ - Klikněte na Vytvořit
- Zobrazí se formulář pro autorizaci – vložte svůj token z Backoffice a potvrďte
Poznámka: Režim vývojáře musí zůstat zapnutý, jinak propojení přestane fungovat. Pokud vám to nevyhovuje, doporučujeme použít Claude Desktop.
Jak propojím KASA FIK s Claude Desktop (Anthropic)
- Otevřete Claude Desktop
- V levém postranním panelu klikněte na Customize
- Vlevo vyberte Connectors a kliknutím na tlačítko plus přidejte Add custom connector
- Do pole Name zadejte například "KASA FIK"
- Do pole Remote MCP server URL vložte adresu:
https://api.kasafik.cz/mcp/v1/ - Potvrďte kliknutím na Add
- Zobrazí se formulář pro autorizaci – vložte svůj token z Backoffice a potvrďte
- Vrátíte se zpět do Claude, kde můžete případně upravit jednotlivá oprávnění
Jak propojím KASA FIK s OpenAI Codex
- Otevřete Codex
- Vlevo dole klikněte na Nastavení → Nastavení
- V levém postranním panelu klikněte na MCP servery a pak na Přidat server
- Do pole Název napište například "KASA FIK"
- Klikněte na Streamovatelné HTTP
- Do pole URL vložte adresu:
https://api.kasafik.cz/mcp/v1/ - Klikněte na Uložit
- V seznamu připojených serverů klikněte na Ověřit se
- Zobrazí se formulář pro autorizaci – vložte svůj token z Backoffice a potvrďte
Krok 3: První dotaz
Po úspěšném propojení můžete začít pokládat dotazy. Zkuste například:
- "Jaké byly mé celkové tržby za dnešek?"
- "Ukaž mi 5 nejprodávanějších produktů tento týden."
- "Kolik transakcí jsem měl včera?"
- "Mám nějaký produkt pod minimální zásobou?"
- "Který den v minulém týdnu byl nejsilnější?"
AI odpovídá česky (pokud se zeptáte česky) a data zobrazuje přehledně jako tabulku nebo seznam.
Jak zruším propojení s AI v KASA FIK?
Propojení zrušíte ve dvou krocích:
V KASA FIK Backoffice:
- Přejděte do Nastavení → MCP servery
- U příslušného tokenu klikněte na Zrušit přístup nebo token smažte
Ve vašem AI nástroji:
- ChatGPT: Nastavení → Aplikace → KASA FIK → tři tečky → Odstranit
- Claude: Customize → Connectors → KASA FIK → Disconnect
- Codex: Nastavení → MCP servery → ozubené kolečko → Odinstalovat
Jak bezpečně pracovat s AI?
Zkontrolujte výsledek. Jako každý nástroj, i AI se občas splete. Vždy si ověřte důležité údaje.
Sdílejte jen to, co je potřeba. Do chatu zadávejte pouze dotazy, které AI potřebuje k danému úkolu. Citlivá data (hesla, čísla karet, osobní údaje zákazníků) tam nepatří. Počítejte s tím, že data procházejí přes poskytovatele AI.
Používejte oficiální zdroje. Claude Desktop stahujte z webu Anthropic, ChatGPT z webu OpenAI. Připojujte jen služby, kterým důvěřujete.
Ponechte si poslední slovo. U důležitých akcí (byť je v beta verzi nemůžete provádět) si nejdřív nechte od AI navrhnout, co chce udělat – a potvrďte to, až si ověříte, že je vše v pořádku.
Co AI v účtu smí (a co ne):
- V beta verzi: pouze čtení tržeb, produktů, zásob a základních statistik
- Nemá přístup k úpravám, mazání, refundacím ani ke správě uživatelů
- Každý dotaz je omezen na vašeho tenanta – AI nevidí data jiných provozoven
Autorizace přes token. Žádná hesla, AI dostane jen omezený přístupový token, který v Backoffice můžete kdykoliv zneplatnit.
Omezení beta verze
- Není podporován hromadný export (např. "dej mi všechny transakce za rok") – maximálně 1000 řádků na dotaz
- Nelze provádět srovnání s předchozími roky (pouze aktuální a předchozí měsíc)
- Zákaznická data jsou anonymizovaná (místo jmen vidíte jen identifikátory)
- Nefunguje offline – vyžaduje internetové připojení
- Maximálně 60 dotazů za minutu na jeden token
Časté dotazy
Musím mít v ChatGPT trvale zapnutý režim vývojáře? Ano, režim vývojáře musí zůstat zapnutý, jinak propojení s KASA FIK přestane fungovat. Pokud vám to nevyhovuje, vyzkoušejte Codex (také od OpenAI a funguje se stejným předplatným) nebo Claude Desktop – tam toto omezení není.
Mohu použít jiné AI než Claude, OpenCode, ChatGPT nebo Codex? Teoreticky ano, pokud podporují MCP protokol.
Může MCP server používat více zaměstnanců? Ano, ale každý potřebuje vlastní token. Tokeny nesdílejte – v logu vidíme, kdo co dotazoval.
Podpora a zpětná vazba
Jste mezi prvními uživateli MCP v České republice. Vaše zkušenosti jsou pro nás klíčové.
Technické problémy: podpora@kasafik.cz