Ru2SQL / configs /example_vocabulary.yaml
Tyycha's picture
feat: vocabulary YAML + demo DB script + auto-load vocab
e8697a4
# Бизнес-словарь для демо-базы (data/demo/sales.sqlite)
# Загружается автоматически при подключении к демо-базе.
#
# Скопируй этот файл и переименуй под свою компанию.
# Затем загрузи через боковую панель → «Применить словарь».
company: "Демо: Интернет-магазин электроники"
# ──────────────────────────────────────────────
# СХЕМА ДЕМО-БАЗЫ (справка)
# ──────────────────────────────────────────────
# customers : id, name, city, phone, email, created_at
# managers : id, name, department
# products : id, name, category, price, is_active
# orders : id, customer_id, manager_id, AMOUNT, status, order_date
# order_items: id, order_id, product_id, quantity, price
#
# orders.amount = итоговая сумма заказа (рублей)
# order_items.price = цена единицы товара
# order_items.quantity = количество штук
# Итог позиции = order_items.quantity * order_items.price
# В order_items НЕТ колонки amount!
terms:
выручка: >
SUM(orders.amount) WHERE orders.status = 'paid'.
Колонка amount есть только в таблице orders, не в order_items.
оборот: "SUM(orders.amount) по всем заказам включая отменённые"
средний чек: "AVG(orders.amount) WHERE orders.status = 'paid'"
топ клиентов: >
GROUP BY customers.id, customers.name ORDER BY SUM(orders.amount) DESC LIMIT N.
JOIN customers ON orders.customer_id = customers.id WHERE orders.status = 'paid'.
топ товаров: >
GROUP BY products.name ORDER BY SUM(order_items.quantity) DESC LIMIT N.
JOIN order_items ON orders.id = order_items.order_id WHERE orders.status = 'paid'.
выручка по товарам: >
SUM(order_items.quantity * order_items.price) GROUP BY products.name.
Итог позиции считается как quantity * price из order_items.
количество заказов: "COUNT(*) FROM orders WHERE status = 'paid'"
активный товар: "products.is_active = 1"
этот год: "strftime('%Y', orders.order_date) = strftime('%Y', 'now')"
прошлый год: "strftime('%Y', orders.order_date) = CAST(strftime('%Y', 'now') - 1 AS TEXT)"
этот месяц: "strftime('%Y-%m', orders.order_date) = strftime('%Y-%m', 'now')"
конверсия: >
CAST(SUM(CASE WHEN status='paid' THEN 1 ELSE 0 END) AS REAL) / COUNT(*) * 100 FROM orders.
filters:
только_оплаченные: "orders.status = 'paid'"
только_активные_товары: "products.is_active = 1"
notes:
- "КРИТИЧНО: колонка 'amount' существует ТОЛЬКО в таблице 'orders'. В 'order_items' её НЕТ."
- "order_items содержит колонки: id, order_id, product_id, quantity, price. Никакой колонки amount."
- "Стоимость позиции заказа = order_items.quantity * order_items.price (отдельной колонки нет)."
- "Даты хранятся как TEXT 'YYYY-MM-DD'. Для фильтрации используй BETWEEN или strftime()."
- "Статусы заказов: 'paid' (оплачен), 'pending' (ожидает), 'cancelled' (отменён)."
- "Связи: orders.customer_id → customers.id, orders.manager_id → managers.id."
- "Связи: order_items.order_id → orders.id, order_items.product_id → products.id."
- "База данных: SQLite. Функции дат: strftime('%Y', date_col), date('now', '-N days')."
- "База содержит данные за 2025-01-01 — 2026-04-30, 8 клиентов, 4 менеджера, 10 товаров."