✅ Webhook готов
🕐 iiko — скоро
🕐 Poster — скоро
🕐 Эвотор — скоро
Как это работает
POS-система отправляет данные о продажах на endpoint PYRA. Система автоматически:
находит рецепт по маппингу, записывает продажу, списывает ингредиенты со склада.
ШАГ 3
Авто-списание склада
Структура Webhook (POST /api/sales/pos-webhook)
{
"pos_system": "iiko",
"pos_transaction_id":"txn_12345",
"outlet_id": "main",
"timestamp": "2025-06-01T13:45:00Z",
"items": [
{
"pos_dish_id": "iiko_dish_001",
"dish_name": "Борщ украинский",
"quantity": 3,
"price": 108.30,
"revenue": 324.90
}
]
}
Маппинг блюд POS → рецепты PYRA
В каждом рецепте есть поле pos_mapping:
"pos_mapping": {
"iiko_dish_id": "iiko_dish_001",
"poster_product_id": null,
"custom_id": null
}
При получении webhook — ищем рецепт по iiko_dish_id → применяем stock_write_off.per_portion × quantity
Backend логика (Node.js / Firebase Functions)
// integrations/iiko.adapter.js
class IikoAdapter {
normalize(webhookData) {
return {
source: 'pos',
pos_system: 'iiko',
pos_transaction_id: webhookData.id,
timestamp: webhookData.dateTime,
items: webhookData.orderItems.map(item => ({
pos_dish_id: item.productId,
recipe_id: this.resolveRecipeId(item.productId),
recipe_name: item.name,
portions_sold: item.quantity,
price_per_unit:item.price,
revenue: item.sum,
}))
};
}
resolveRecipeId(posDishId) {
// Поиск по recipes[].pos_mapping.iiko_dish_id
}
}