Перейти до вмісту

Атестаційні завдання K2 ERP/Біржа: відмінності між версіями

Матеріал з K2 ERP Wiki Ukraine — База знань з автоматизації та санкцій в Україні
Первинна публікація
 
Немає опису редагування
 
Рядок 1: Рядок 1:
{{DISPLAYTITLE:Атестаційні завдання K2 ERP/Біржа}}


= Модуль біржі: торги товарами, послугами або фінансовими активами =
'''Атестаційне завдання K2 ERP — Біржа''' — це практична задача для перевірки навичок розробника або впроваджувача [[K2 ERP]] у створенні модуля електронних торгів товарами, послугами або цифровими активами.
 
Модуль має забезпечувати створення заявок на купівлю і продаж, ведення біржового стакану, автоматичне зіставлення зустрічних заявок, фіксацію угод, історію торгів, особистий кабінет користувача, баланси, комісії, сповіщення, звіти та журналювання дій.
 
<div style="border:3px solid #1565c0; background:#e3f2fd; padding:14px; margin:16px 0;">
'''Коротко.''' Потрібно реалізувати біржовий модуль: користувачі, біржові об’єкти, категорії, заявки на купівлю і продаж, bid/ask, стакан заявок, автоматичне укладання угод, історія торгів, баланси, комісії, кабінет користувача, AJAX-оновлення цін і звіти.
</div>
 
__TOC__
 
== Назва завдання ==
 
'''Модуль біржі: торги товарами, послугами або фінансовими активами'''.
 
== Мета завдання ==
 
Мета завдання — створити в K2 ERP модуль електронної біржі, де користувачі можуть розміщувати заявки на купівлю або продаж, подавати зустрічні пропозиції, укладати угоди та бачити історію торгів.
 
Система повинна дозволяти:
 
* вести користувачів біржі;
* вести типи біржових об’єктів;
* вести категорії об’єктів;
* створювати заявки на продаж;
* створювати заявки на купівлю;
* вказувати кількість, ціну, валюту та строк дії заявки;
* формувати біржовий стакан;
* зіставляти зустрічні заявки;
* автоматично фіксувати угоду при збігу умов;
* вести історію ставок, заявок і угод;
* підтримувати часткове виконання заявки;
* фіксувати статуси заявок;
* вести баланси користувачів, якщо фінансовий блок реалізовано;
* блокувати кошти або товар під час активної заявки;
* розраховувати комісію біржі;
* формувати звіти по торгах, угодах, користувачах і комісіях;
* оновлювати дані через AJAX без перезавантаження сторінки.
 
<div style="border:3px solid #2e7d32; background:#e8f5e9; padding:14px; margin:16px 0;">
'''Головний принцип.''' Біржа повинна надійно зіставляти зустрічні заявки. Якщо умови продавця і покупця збігаються, система має зафіксувати угоду, оновити залишки, списати комісію і записати операцію в історію.
</div>


== Реальний бізнес-контекст ==
== Реальний бізнес-контекст ==
Створюється біржа, на якій:


* користувачі можуть розміщувати свої пропозиції на продаж або купівлю;
Біржа — це електронний майданчик, де різні учасники можуть розміщувати заявки на купівлю або продаж товарів, послуг чи активів.
* інші користувачі можуть подавати зустрічні заявки;
 
* біржа автоматично фіксує угоди;
Біржа може використовуватися для:
* ведеться облік історії торгів, ставок і угод.
 
* торгівлі товарами;
* торгівлі зерном;
* торгівлі металами;
* торгівлі сировиною;
* торгівлі послугами;
* фріланс-заявок;
* внутрішньої корпоративної біржі заявок;
* обміну валют;
* торгівлі цифровими активами;
* торгівлі внутрішніми токенами;
* B2B-торгів між компаніями.
 
Основна складність біржі — швидке й точне зіставлення заявок. Система має враховувати ціну, кількість, тип заявки, залишок невиконаної кількості, статус користувача, баланс, комісію та історію операцій.
 
== Основний бізнес-процес ==
 
Типовий процес роботи біржі виглядає так:
 
# користувач реєструється на біржі;
# поповнює баланс або додає доступний товар, якщо реалізовано фінансовий чи складський блок;
# створює заявку на продаж або купівлю;
# система додає заявку в біржовий стакан;
# інший користувач створює зустрічну заявку;
# система перевіряє збіг ціни, кількості та умов;
# при збігу формується угода;
# кількість у заявках зменшується або заявки закриваються;
# кошти, товар або інший актив переходять між сторонами;
# біржа утримує комісію, якщо це передбачено;
# операція записується в історію торгів;
# користувачі бачать результат у своїх кабінетах.
 
== Основні об’єкти модуля ==
 
{| class="wikitable" style="width:100%;"
! Об’єкт
! Призначення
|-
| Користувачі біржі
| Учасники, які створюють заявки та укладають угоди
|-
| Типи біржових об’єктів
| Товари, послуги, активи, валюти, токени
|-
| Категорії
| Групування об’єктів торгів
|-
| Біржові об’єкти
| Конкретні товари, послуги або активи
|-
| Заявки
| Накази на купівлю або продаж
|-
| Біржовий стакан
| Черга заявок buy/sell за ціною та часом
|-
| Угоди
| Зафіксовані операції між покупцем і продавцем
|-
| Баланси
| Кошти або активи користувачів, якщо реалізовано фінансовий блок
|-
| Комісії
| Винагорода біржі за угоду
|-
| Історія торгів
| Лог усіх заявок, змін і угод
|-
| Сповіщення
| Повідомлення про виконання заявки, угоду або зміну ціни
|-
| Звіти
| Аналітика по торгах, обсягах, користувачах і комісіях
|}
 
== Довідник «Користувачі біржі» ==
 
Користувачі біржі — це учасники, які можуть створювати заявки та укладати угоди.
 
== Поля користувача ==
 
{| class="wikitable" style="width:100%;"
! Поле
! Опис
|-
| ПІБ або назва компанії
| Ім’я користувача або назва організації
|-
| Тип користувача
| Фізична особа, ФОП, компанія, внутрішній користувач
|-
| Email
| Для входу та сповіщень
|-
| Телефон
| Контактний номер
|-
| Статус
| Активний, на перевірці, заблокований, архівний
|-
| Рівень доступу
| Звичайний учасник, маркетмейкер, адміністратор
|-
| Коментар
| Внутрішні примітки адміністратора
|}
 
== Довідник «Типи біржових об’єктів» ==
 
Тип біржового об’єкта визначає, що саме продається або купується.


Біржа може бути:
== Приклади типів ==


* товарна:
* товари;
** зерно;
* сировина;
** метали;
* зерно;
** пиво;
* метали;
* фріланс-біржа послуг:
* послуги;
** завдання;
* IT-послуги;
** виконавці;
* валюта;
* біржа обміну активів:
* цифрові активи;
** валюта;
* внутрішні токени;
** NFT;
* корпоративні ресурси.
** токени.


== Основні завдання ==
== Поля типу об’єкта ==


=== 1. Структура довідників ===
{| class="wikitable" style="width:100%;"
! Поле
! Опис
|-
| Назва типу
| Наприклад: товар, послуга, актив
|-
| Опис
| Коротке пояснення типу
|-
| Одиниці виміру
| Шт., кг, т, м², година, одиниця
|-
| Активність
| Чи доступний тип для нових торгів
|}


==== Довідник «Типи біржових об'єктів» ====
== Довідник «Категорії об’єктів» ==
Типи біржових об'єктів:


* товари:
Категорії допомагають групувати об’єкти торгів.
** зерно;
** сталь;
* послуги:
** розробка сайту;
** дизайн;
* активи:
** валюта;
** криптовалюта.


==== Довідник «Категорії об'єктів» ====
== Приклади категорій ==
Категорії об'єктів:


* продукти харчування;
* продукти харчування;
* зернові;
* метали;
* будівельні матеріали;
* IT-послуги;
* IT-послуги;
* будівництво;
* дизайн;
* внутрішні токени.
* маркетинг;
* транспортні послуги;
* внутрішні токени;
* валюти.
 
== Біржові об’єкти ==
 
Біржовий об’єкт — це конкретний товар, послуга або актив, яким торгують.
 
== Поля біржового об’єкта ==
 
{| class="wikitable" style="width:100%;"
! Поле
! Опис
|-
| Назва об’єкта
| Наприклад: пшениця 3 класу, розробка сайту, USD
|-
| Тип
| Товар, послуга, актив
|-
| Категорія
| Група об’єкта
|-
| Одиниця виміру
| Шт., кг, т, година, одиниця
|-
| Опис
| Детальна інформація
|-
| Мінімальний крок ціни
| Опціонально
|-
| Мінімальна кількість
| Опціонально
|-
| Статус
| Активний або архівний
|}
 
== Заявки на біржі ==
 
Заявка — це пропозиція користувача купити або продати біржовий об’єкт.
 
== Типи заявок ==
 
* заявка на продаж;
* заявка на купівлю;
* лімітна заявка;
* ринкова заявка, опціонально;
* аукціонна заявка, опціонально.
 
== Поля заявки ==
 
{| class="wikitable" style="width:100%;"
! Поле
! Опис
|-
| Номер заявки
| Унікальний номер
|-
| Користувач
| Хто створив заявку
|-
| Тип заявки
| Купівля або продаж
|-
| Об’єкт торгів
| Що купується або продається
|-
| Категорія
| Категорія об’єкта
|-
| Кількість
| Загальна кількість
|-
| Невиконана кількість
| Залишок заявки після часткових угод
|-
| Ціна
| Ціна за одиницю
|-
| Валюта
| Валюта розрахунку
|-
| Мінімальна / максимальна ціна
| Для аукціонів, якщо реалізовано
|-
| Дата створення
| Коли заявка створена
|-
| Термін дії
| До якої дати заявка активна
|-
| Статус
| Активна, частково виконана, виконана, скасована, прострочена
|}
 
== Статуси заявки ==
 
{| class="wikitable" style="width:100%;"
! Статус
! Значення
|-
| Чернетка
| Заявка створюється, але ще не активна
|-
| Активна
| Заявка бере участь у торгах
|-
| Частково виконана
| Частина кількості вже виконана
|-
| Виконана
| Заявка повністю закрита угодами
|-
| Скасована
| Користувач або адміністратор скасував заявку
|-
| Прострочена
| Термін дії заявки завершився
|-
| Заблокована
| Заявка зупинена через перевірку або обмеження
|}
 
<div style="border:2px solid #f57c00; background:#fff3e0; padding:14px; margin:16px 0;">
'''Важливо.''' Активна заявка повинна мати ціну, кількість, об’єкт торгів, користувача і строк дії. Без цих даних вона не повинна потрапляти в біржовий стакан.
</div>
 
== Біржовий стакан ==
 
Біржовий стакан показує активні заявки на купівлю і продаж.
 
== Що має відображатися у стакані ==
 
* заявки на купівлю;
* заявки на продаж;
* ціна;
* кількість;
* сумарний обсяг по ціні;
* краща ціна купівлі;
* краща ціна продажу;
* спред між найкращими цінами.
 
== Сортування у стакані ==
 
Заявки на купівлю сортуються:
 
<pre>
Вища ціна → вище у стакані
</pre>
 
Заявки на продаж сортуються:
 
<pre>
Нижча ціна → вище у стакані
</pre>
 
Якщо ціна однакова, перевагу має заявка, створена раніше.
 
== Механіка зіставлення заявок ==
 
Система повинна зіставляти зустрічні заявки.
 
== Правило для угоди ==
 
Для заявки на купівлю і заявки на продаж угода можлива, якщо:
 
<pre>
Ціна покупця >= Ціна продавця
</pre>
 
Після цього система визначає кількість угоди:
 
<pre>
Кількість угоди = мінімум(невиконана кількість покупця, невиконана кількість продавця)
</pre>
 
== Часткове виконання ==
 
Якщо кількість у заявках не однакова, заявка може бути частково виконана.
 
Приклад:
 
<pre>
Покупець хоче купити 100 одиниць
Продавець продає 40 одиниць
Угода = 40 одиниць
Заявка покупця залишається активною на 60 одиниць
Заявка продавця стає виконаною
</pre>
 
<div style="border:3px solid #b71c1c; background:#ffebee; padding:14px; margin:16px 0;">
'''Критично.''' Система не повинна створювати угоду, якщо ціна покупця нижча за ціну продавця або якщо в однієї із заявок немає доступного залишку кількості.
</div>
 
== Угоди ==
 
Угода фіксує факт купівлі-продажу між двома сторонами.
 
== Поля угоди ==
 
{| class="wikitable" style="width:100%;"
! Поле
! Опис
|-
| Номер угоди
| Унікальний номер
|-
| Об’єкт торгів
| Що було продано або куплено
|-
| Покупець
| Користувач, який купує
|-
| Продавець
| Користувач, який продає
|-
| Заявка покупця
| З якої заявки сформована угода
|-
| Заявка продавця
| З якої заявки сформована угода
|-
| Кількість
| Кількість угоди
|-
| Ціна
| Ціна за одиницю
|-
| Сума
| Загальна сума угоди
|-
| Комісія біржі
| Якщо реалізовано
|-
| Дата і час
| Коли угода укладена
|-
| Статус
| Виконана, очікує розрахунку, скасована
|}
 
== Формула суми угоди ==
 
<pre>
Сума угоди = Кількість × Ціна
</pre>
 
== Комісія біржі ==
 
Опціонально система може розраховувати комісію біржі.
 
== Варіанти комісії ==
 
* відсоток від суми угоди;
* фіксована сума;
* комбінована комісія;
* різна комісія для покупця і продавця;
* індивідуальна комісія для окремих користувачів.
 
== Формула комісії ==
 
<pre>
Комісія = Сума угоди × Відсоток комісії / 100
</pre>
 
== Баланси користувачів ==
 
Фінансовий блок є опціональним, але бажаним для повноцінної біржі.
 
== Що має підтримувати баланс ==
 
* поповнення;
* списання;
* блокування коштів під заявку;
* розблокування при скасуванні заявки;
* списання коштів після угоди;
* зарахування коштів продавцю;
* утримання комісії;
* історію операцій.
 
== Поля балансу ==
 
{| class="wikitable" style="width:100%;"
! Поле
! Опис
|-
| Користувач
| Власник балансу
|-
| Валюта
| Валюта балансу
|-
| Доступний баланс
| Кошти, які можна використовувати
|-
| Заблокований баланс
| Кошти, зарезервовані під активні заявки
|-
| Загальний баланс
| Доступний + заблокований
|}
 
== Блокування коштів ==
 
При створенні заявки на купівлю система повинна перевірити наявність коштів.
 
<pre>
Потрібна сума = Кількість × Ціна + Комісія
</pre>
 
Якщо коштів достатньо, система блокує суму під заявку. Якщо коштів недостатньо — заявка не повинна бути активована.
 
== Блокування товару або активу ==
 
Для заявки на продаж система повинна перевірити, чи має продавець достатню кількість товару або активу.
 
Якщо кількість доступна, вона блокується під заявку. Якщо ні — заявка не повинна бути активована.
 
== Історія торгів ==
 
Історія торгів зберігає всі події по заявках і угодах.
 
== Що потрібно логувати ==
 
* створення заявки;
* зміну ціни;
* зміну кількості;
* активацію заявки;
* скасування заявки;
* часткове виконання;
* повне виконання;
* укладення угоди;
* блокування коштів;
* розблокування коштів;
* списання комісії;
* зміну статусу користувача;
* адміністративні дії.
 
== Кабінет користувача ==
 
Користувач біржі повинен мати особистий кабінет.
 
== Функції кабінету ==
 
Користувач повинен мати можливість:
 
* створювати заявки;
* переглядати свої активні заявки;
* переглядати виконані заявки;
* скасовувати свої активні заявки;
* бачити свої угоди;
* бачити історію торгів;
* бачити баланс;
* поповнювати баланс, якщо реалізовано;
* подавати заявку на виведення коштів, якщо реалізовано;
* отримувати сповіщення про угоди;
* налаштовувати повідомлення по категоріях.
 
== Пошук і фільтрація ==


=== 2. База «Оголошення на біржі» ===
Пошук має допомагати користувачу швидко знаходити потрібні об’єкти й заявки.


==== Колонки бази ====
== Параметри пошуку ==


* тип угоди:
* тип об’єкта;
** продаж;
** купівля;
* об'єкт торгів;
* категорія;
* категорія;
* назва товару / послуги;
* назва;
* кількість:
* ціна від;
** шт;
* ціна до;
** кг;
** м²;
** інші одиниці;
* базова ціна;
* мінімальна / максимальна ціна — опціонально для аукціонів;
* валюта;
* валюта;
* тип заявки;
* статус;
* дата створення;
* дата створення;
* статус:
* користувач, якщо доступно за правами.
** активне;
 
** виконано;
== Сповіщення ==
** скасовано.
 
Система має надсилати користувачам повідомлення про важливі події.
 
== Події для сповіщень ==
 
* заявка створена;
* заявка активована;
* заявка частково виконана;
* заявка повністю виконана;
* укладена угода;
* заявка скасована;
* ціна досягла потрібного рівня;
* кошти заблоковані;
* кошти розблоковані;
* отримано оплату;
* списано комісію.
 
== Графіки і ринкові дані ==
 
Опціонально модуль може показувати графіки цін.
 
== Що можна показувати ==
 
* останню ціну угоди;
* мінімальну ціну за період;
* максимальну ціну за період;
* середню ціну;
* обсяг торгів;
* графік зміни ціни;
* кількість угод за період.
 
== Звіти ==
 
== Звіт «Активні заявки» ==
 
Звіт показує всі заявки, які зараз беруть участь у торгах.
 
У звіті потрібно відображати:
 
* номер заявки;
* користувача;
* тип заявки;
* об’єкт;
* кількість;
* невиконану кількість;
* ціну;
* валюту;
* статус.
 
== Звіт «Історія угод» ==
 
Звіт показує укладені угоди.
 
У звіті потрібно відображати:
 
* номер угоди;
* дату;
* об’єкт;
* покупця;
* продавця;
* кількість;
* ціну;
* суму;
* комісію.
 
== Звіт «Обсяги торгів» ==


==== Функціонал ====
Звіт показує активність по об’єктах.


* створення нового оголошення на продаж або купівлю;
У звіті потрібно відображати:
* встановлення цінових параметрів;
* встановлення терміну дії оголошення.


=== 3. Механіка торгів ===
* об’єкт;
Функціонал:
* кількість угод;
* загальну кількість;
* загальну суму;
* середню ціну;
* мінімальну ціну;
* максимальну ціну.


* користувачі можуть подавати зустрічні пропозиції — bid / ask;
== Звіт «Комісії біржі» ==
* подання пропозиції ціни і кількості;
* автоматичне фіксування угоди при збігу ціни продавця і покупця;
* виставлення черг замовлень за ціною — стандартна механіка біржового стакану.


=== 4. Історія торгів ===
Якщо реалізовано комісії, звіт показує дохід біржі.
Функціонал:


* лог усіх змін цін, ставок і укладених угод;
У звіті потрібно відображати:
* історія по кожному об'єкту:
** хто подав пропозицію;
** яку ціну запропонував;
** чи відбулася угода.


=== 5. Фінанси, опціонально ===
* період;
Функціонал:
* кількість угод;
* суму угод;
* суму комісій;
* комісію по об’єктах;
* комісію по користувачах.


* ведення балансу користувачів на біржі;
== Звіт «Баланси користувачів» ==
* блокування коштів на момент подання заявки;
* автоматичне зарахування коштів після укладення угоди;
* механіка комісії біржі за кожну угоду:
** відсоток;
** фіксована сума.


=== 6. Додаткові функції ===
Якщо реалізовано фінансовий блок, звіт показує кошти користувачів.


* робота через AJAX для ставок і оновлення цін без перезавантаження;
У звіті потрібно відображати:
* пошук об'єктів за:
 
** категоріями;
* користувача;
** назвами;
* валюту;
** ціною;
* доступний баланс;
* налаштування особистих повідомлень про нові пропозиції в потрібній категорії;
* заблокований баланс;
* кабінет користувача:
* загальний баланс.
** перегляд власних оголошень;
 
** історія торгів;
== AJAX-інтерактив ==
** управління балансом:
 
*** депозит;
Інтерфейс має працювати швидко та без перезавантаження сторінки.
*** зняття.
 
Через AJAX мають працювати:
 
* створення заявки;
* активація заявки;
* скасування заявки;
* оновлення біржового стакану;
* подання зустрічної пропозиції;
* автоматичне оновлення ціни;
* оновлення історії угод;
* оновлення балансу;
* оновлення графіків;
* пошук заявок;
* фільтрація об’єктів;
* сповіщення користувачів.
 
== Логування змін ==
 
Модуль повинен фіксувати всі важливі дії.
 
Журнал змін має зберігати:
 
* хто створив заявку;
* хто змінив заявку;
* хто скасував заявку;
* хто створив зустрічну заявку;
* які заявки були зіставлені;
* яка угода створена;
* яка кількість виконана;
* яка сума заблокована;
* яка комісія списана;
* хто виконав адміністративну дію;
* дату й час дії;
* старе та нове значення, якщо це можливо.
 
== Права доступу ==
 
Модуль має підтримувати розмежування прав.
 
{| class="wikitable" style="width:100%;"
! Роль
! Можливості
|-
| Гість
| Переглядає публічні торги, якщо це дозволено
|-
| Користувач
| Створює заявки, переглядає свої угоди, керує балансом
|-
| Продавець
| Розміщує заявки на продаж і контролює виконання
|-
| Покупець
| Розміщує заявки на купівлю і контролює виконання
|-
| Модератор
| Перевіряє заявки, блокує підозрілі оголошення
|-
| Фінансовий оператор
| Контролює поповнення, виведення, комісії і баланси
|-
| Керівник
| Переглядає звіти по торгах, комісіях, користувачах і обсягах
|-
| Адміністратор
| Налаштовує типи об’єктів, категорії, права, комісії та службові параметри
|}


== Технічні вимоги ==
== Технічні вимоги ==
{| class="wikitable"
 
!Параметр
{| class="wikitable" style="width:100%;"
!Опис
! Параметр
! Опис
|-
| Бекенд
| K2 Cloud ERP на Python або PHP
|-
| База даних
| PostgreSQL або MySQL
|-
| Фронтенд
| HTML5, JavaScript
|-
| AJAX
| Fetch API або Axios
|-
|-
|Бекенд
| UI-компоненти
|K2 Cloud ERP на Python або PHP
| DataTables для таблиці торгів, Select2 для пошуку товарів і послуг, Chart.js для графіків цін
|-
|-
|БД
| Баланси
|PostgreSQL або MySQL
| Облік доступних і заблокованих коштів, опціонально
|-
|-
|Фронтенд
| Сповіщення
|HTML5, JavaScript, AJAX, Fetch API або Axios
| Email, внутрішні повідомлення або месенджери
|-
|-
|UI-компоненти
| Друк
|DataTables для таблиці торгів, Select2 для пошуку товарів / послуг, Chart.js для графіків цін
| Не обов’язково
|-
|-
|Друк
| Експорт
|Не потрібно
| Excel або PDF для звітів
|}
|}


== Критерії оцінки ==
== Рекомендовані сутності бази даних ==
{| class="wikitable"
 
!Критерій
Для реалізації задачі доцільно передбачити такі сутності:
!Бали
 
* користувачі біржі;
* типи біржових об’єктів;
* категорії;
* біржові об’єкти;
* заявки;
* статуси заявок;
* біржовий стакан;
* угоди;
* історія торгів;
* баланси;
* блокування коштів;
* комісії;
* операції балансу;
* сповіщення;
* графіки цін;
* журнал змін;
* звіти;
* права доступу.
 
== Практичне завдання ==
 
У межах атестації потрібно продемонструвати робочий сценарій.
 
Мінімальний сценарій:
 
# створити користувачів біржі;
# створити типи біржових об’єктів;
# створити категорії;
# створити біржовий об’єкт;
# створити заявку на продаж;
# створити заявку на купівлю;
# відобразити заявки у стакані;
# перевірити сортування buy/sell заявок;
# створити зустрічну заявку з ціною, яка не підходить для угоди;
# перевірити, що угода не створюється;
# створити зустрічну заявку з ціною, яка підходить для угоди;
# автоматично сформувати угоду;
# перевірити часткове виконання заявки;
# перевірити повне виконання заявки;
# перевірити історію торгів;
# реалізувати баланс користувача, якщо фінансовий блок увімкнено;
# заблокувати кошти під заявку;
# списати кошти після угоди;
# нарахувати комісію біржі;
# сформувати звіт активних заявок;
# сформувати звіт історії угод;
# сформувати звіт обсягів торгів;
# сформувати звіт комісій;
# перевірити журнал змін.
 
== Критерії оцінювання ==
 
{| class="wikitable" style="width:100%;"
! Критерій
! Бали
! Що перевіряється
|-
| Реалізація бази оголошень і торгів
| 20
| Користувачі, типи об’єктів, категорії, біржові об’єкти, заявки, статуси
|-
| Механізм подачі заявок і формування угод
| 20
| Buy/Sell заявки, стакан, зіставлення, часткове виконання, автоматичне створення угод
|-
| Ведення історії торгів і ставок
| 20
| Історія заявок, змін, ставок, угод, виконання і скасування
|-
| Управління балансами і комісіями
| 20
| Баланси, блокування коштів або активів, списання, зарахування, комісії
|-
| Інтерактивність через AJAX і пошук
| 20
| Оновлення стакану, заявок, угод, балансів, графіків і пошуку без перезавантаження
|-
|-
|Реалізація бази оголошень і торгів
! Разом
|20
! 100
! Максимальна оцінка
|}
 
== Шкала оцінювання ==
 
{| class="wikitable" style="width:100%;"
! Бали
! Рівень
! Опис
|-
|-
|Механізм подачі заявок і формування угод
| 90–100
|20
| Відмінно
| Модуль повністю працює: заявки, стакан, угоди, часткове виконання, історія, баланси, комісії, пошук і AJAX реалізовані коректно
|-
|-
|Ведення історії торгів і ставок
| 75–89
|20
| Добре
| Основна логіка працює, є незначні недоліки, які не руйнують процес торгів
|-
|-
|Управління балансами і комісіями, опціонально
| 60–74
|20
| Зараховано
| Базовий сценарій працює, але частина функцій реалізована неповно або потребує доопрацювання
|-
|-
|Інтерактивність через AJAX і пошук
| 0–59
|20
| Не зараховано
| Відсутня критична логіка: заявки, стакан, зіставлення, угоди або історія торгів
|}
|}
== Критичні помилки ==
Критичними помилками вважаються ситуації, коли:
* неможливо створити користувача біржі;
* неможливо створити біржовий об’єкт;
* неможливо створити заявку;
* заявка без ціни або кількості потрапляє в стакан;
* заявки в стакані сортуються неправильно;
* угода створюється, коли ціна покупця нижча за ціну продавця;
* угода створюється без доступного залишку кількості;
* часткове виконання заявки працює неправильно;
* виконана заявка залишається активною;
* скасована заявка бере участь у торгах;
* баланс не блокується під заявку, якщо фінансовий блок заявлений;
* кошти або активи не списуються після угоди;
* комісія не розраховується, якщо ця функція заявлена;
* історія угод не фіксується;
* звіти не відповідають фактичним заявкам і угодам;
* зміни заявок, угод і балансів не логуються.
<div style="border:3px solid #b71c1c; background:#ffebee; padding:14px; margin:16px 0;">
'''Умова складання.''' Завдання не може бути зараховане, якщо система не дозволяє пройти базовий цикл біржі: користувач → заявка на продаж → заявка на купівлю → стакан → зіставлення → угода → історія → звіт.
</div>
== Очікуваний результат ==
У результаті виконання атестаційного завдання має бути створений модуль біржі в K2 ERP.
Модуль має підтримувати користувачів, типи біржових об’єктів, категорії, біржові об’єкти, заявки на купівлю і продаж, біржовий стакан, автоматичне зіставлення заявок, часткове виконання, угоди, історію торгів, баланси, блокування коштів або активів, комісії, кабінет користувача, сповіщення, графіки цін, звіти, AJAX-інтерактив і логування змін.


== Примітка ==
== Примітка ==
Біржа — це серце електронної торгівлі товарами, послугами або фінансовими активами.


Стабільна і швидка біржа дозволяє працювати великій кількості користувачів одночасно без втрат у швидкості й точності угод.
Біржа є складним модулем, бо в ній важлива точність, швидкість і надійність. Помилка в заявці, балансі або зіставленні може призвести до неправильних угод і фінансових втрат.
 
Навіть базова реалізація біржі добре перевіряє вміння працювати зі статусами, чергами заявок, транзакціями, історією операцій, AJAX-оновленням і фінансовою логікою.
 
== Коротко ==
 
{| class="wikitable" style="width:100%;"
! Питання
! Відповідь
|-
| Що потрібно створити?
| Модуль біржі для торгів товарами, послугами або активами
|-
| Які головні об’єкти?
| Користувачі, біржові об’єкти, заявки, стакан, угоди, баланси
|-
| Які заявки потрібні?
| Заявки на купівлю і продаж
|-
| Коли створюється угода?
| Коли ціна покупця більша або дорівнює ціні продавця
|-
| Що таке часткове виконання?
| Коли угода закриває тільки частину кількості заявки
|-
| Що має робити фінансовий блок?
| Блокувати кошти або активи, списувати після угоди, нараховувати комісію
|-
| Які звіти потрібні?
| Активні заявки, історія угод, обсяги торгів, комісії, баланси
|-
| Що є критичною вимогою?
| Коректне зіставлення заявок і фіксація угоди в історії
|}
 
== Див. також ==
 
* [[K2 Cloud ERP|K2 ERP]]
* [[K2 ERP]]
* [[Атестаційні завдання K2 ERP]]
* [[Маркетплейс]]
* [[Сайт фрілансу]]
* [[Обмінка]]
* [[Зернотрейдер]]
* [[Торги]]
* [[Заявка]]
* [[Угода]]
* [[Баланс]]
* [[Комісія]]
* [[AJAX]]
 
[[Категорія:K2 ERP]]
[[Категорія:Атестаційні завдання K2]]
[[Категорія:Біржа]]
[[Категорія:Торги]]
[[Категорія:Заявки]]
[[Категорія:Фінансовий облік]]
[[Категорія:Корпоративна Wiki]]

Поточна версія на 20:06, 1 травня 2026


Атестаційне завдання K2 ERP — Біржа — це практична задача для перевірки навичок розробника або впроваджувача K2 ERP у створенні модуля електронних торгів товарами, послугами або цифровими активами.

Модуль має забезпечувати створення заявок на купівлю і продаж, ведення біржового стакану, автоматичне зіставлення зустрічних заявок, фіксацію угод, історію торгів, особистий кабінет користувача, баланси, комісії, сповіщення, звіти та журналювання дій.

Коротко. Потрібно реалізувати біржовий модуль: користувачі, біржові об’єкти, категорії, заявки на купівлю і продаж, bid/ask, стакан заявок, автоматичне укладання угод, історія торгів, баланси, комісії, кабінет користувача, AJAX-оновлення цін і звіти.

Назва завдання

Модуль біржі: торги товарами, послугами або фінансовими активами.

Мета завдання

Мета завдання — створити в K2 ERP модуль електронної біржі, де користувачі можуть розміщувати заявки на купівлю або продаж, подавати зустрічні пропозиції, укладати угоди та бачити історію торгів.

Система повинна дозволяти:

  • вести користувачів біржі;
  • вести типи біржових об’єктів;
  • вести категорії об’єктів;
  • створювати заявки на продаж;
  • створювати заявки на купівлю;
  • вказувати кількість, ціну, валюту та строк дії заявки;
  • формувати біржовий стакан;
  • зіставляти зустрічні заявки;
  • автоматично фіксувати угоду при збігу умов;
  • вести історію ставок, заявок і угод;
  • підтримувати часткове виконання заявки;
  • фіксувати статуси заявок;
  • вести баланси користувачів, якщо фінансовий блок реалізовано;
  • блокувати кошти або товар під час активної заявки;
  • розраховувати комісію біржі;
  • формувати звіти по торгах, угодах, користувачах і комісіях;
  • оновлювати дані через AJAX без перезавантаження сторінки.

Головний принцип. Біржа повинна надійно зіставляти зустрічні заявки. Якщо умови продавця і покупця збігаються, система має зафіксувати угоду, оновити залишки, списати комісію і записати операцію в історію.

Реальний бізнес-контекст

Біржа — це електронний майданчик, де різні учасники можуть розміщувати заявки на купівлю або продаж товарів, послуг чи активів.

Біржа може використовуватися для:

  • торгівлі товарами;
  • торгівлі зерном;
  • торгівлі металами;
  • торгівлі сировиною;
  • торгівлі послугами;
  • фріланс-заявок;
  • внутрішньої корпоративної біржі заявок;
  • обміну валют;
  • торгівлі цифровими активами;
  • торгівлі внутрішніми токенами;
  • B2B-торгів між компаніями.

Основна складність біржі — швидке й точне зіставлення заявок. Система має враховувати ціну, кількість, тип заявки, залишок невиконаної кількості, статус користувача, баланс, комісію та історію операцій.

Основний бізнес-процес

Типовий процес роботи біржі виглядає так:

  1. користувач реєструється на біржі;
  2. поповнює баланс або додає доступний товар, якщо реалізовано фінансовий чи складський блок;
  3. створює заявку на продаж або купівлю;
  4. система додає заявку в біржовий стакан;
  5. інший користувач створює зустрічну заявку;
  6. система перевіряє збіг ціни, кількості та умов;
  7. при збігу формується угода;
  8. кількість у заявках зменшується або заявки закриваються;
  9. кошти, товар або інший актив переходять між сторонами;
  10. біржа утримує комісію, якщо це передбачено;
  11. операція записується в історію торгів;
  12. користувачі бачать результат у своїх кабінетах.

Основні об’єкти модуля

Об’єкт Призначення
Користувачі біржі Учасники, які створюють заявки та укладають угоди
Типи біржових об’єктів Товари, послуги, активи, валюти, токени
Категорії Групування об’єктів торгів
Біржові об’єкти Конкретні товари, послуги або активи
Заявки Накази на купівлю або продаж
Біржовий стакан Черга заявок buy/sell за ціною та часом
Угоди Зафіксовані операції між покупцем і продавцем
Баланси Кошти або активи користувачів, якщо реалізовано фінансовий блок
Комісії Винагорода біржі за угоду
Історія торгів Лог усіх заявок, змін і угод
Сповіщення Повідомлення про виконання заявки, угоду або зміну ціни
Звіти Аналітика по торгах, обсягах, користувачах і комісіях

Довідник «Користувачі біржі»

Користувачі біржі — це учасники, які можуть створювати заявки та укладати угоди.

Поля користувача

Поле Опис
ПІБ або назва компанії Ім’я користувача або назва організації
Тип користувача Фізична особа, ФОП, компанія, внутрішній користувач
Email Для входу та сповіщень
Телефон Контактний номер
Статус Активний, на перевірці, заблокований, архівний
Рівень доступу Звичайний учасник, маркетмейкер, адміністратор
Коментар Внутрішні примітки адміністратора

Довідник «Типи біржових об’єктів»

Тип біржового об’єкта визначає, що саме продається або купується.

Приклади типів

  • товари;
  • сировина;
  • зерно;
  • метали;
  • послуги;
  • IT-послуги;
  • валюта;
  • цифрові активи;
  • внутрішні токени;
  • корпоративні ресурси.

Поля типу об’єкта

Поле Опис
Назва типу Наприклад: товар, послуга, актив
Опис Коротке пояснення типу
Одиниці виміру Шт., кг, т, м², година, одиниця
Активність Чи доступний тип для нових торгів

Довідник «Категорії об’єктів»

Категорії допомагають групувати об’єкти торгів.

Приклади категорій

  • продукти харчування;
  • зернові;
  • метали;
  • будівельні матеріали;
  • IT-послуги;
  • дизайн;
  • маркетинг;
  • транспортні послуги;
  • внутрішні токени;
  • валюти.

Біржові об’єкти

Біржовий об’єкт — це конкретний товар, послуга або актив, яким торгують.

Поля біржового об’єкта

Поле Опис
Назва об’єкта Наприклад: пшениця 3 класу, розробка сайту, USD
Тип Товар, послуга, актив
Категорія Група об’єкта
Одиниця виміру Шт., кг, т, година, одиниця
Опис Детальна інформація
Мінімальний крок ціни Опціонально
Мінімальна кількість Опціонально
Статус Активний або архівний

Заявки на біржі

Заявка — це пропозиція користувача купити або продати біржовий об’єкт.

Типи заявок

  • заявка на продаж;
  • заявка на купівлю;
  • лімітна заявка;
  • ринкова заявка, опціонально;
  • аукціонна заявка, опціонально.

Поля заявки

Поле Опис
Номер заявки Унікальний номер
Користувач Хто створив заявку
Тип заявки Купівля або продаж
Об’єкт торгів Що купується або продається
Категорія Категорія об’єкта
Кількість Загальна кількість
Невиконана кількість Залишок заявки після часткових угод
Ціна Ціна за одиницю
Валюта Валюта розрахунку
Мінімальна / максимальна ціна Для аукціонів, якщо реалізовано
Дата створення Коли заявка створена
Термін дії До якої дати заявка активна
Статус Активна, частково виконана, виконана, скасована, прострочена

Статуси заявки

Статус Значення
Чернетка Заявка створюється, але ще не активна
Активна Заявка бере участь у торгах
Частково виконана Частина кількості вже виконана
Виконана Заявка повністю закрита угодами
Скасована Користувач або адміністратор скасував заявку
Прострочена Термін дії заявки завершився
Заблокована Заявка зупинена через перевірку або обмеження

Важливо. Активна заявка повинна мати ціну, кількість, об’єкт торгів, користувача і строк дії. Без цих даних вона не повинна потрапляти в біржовий стакан.

Біржовий стакан

Біржовий стакан показує активні заявки на купівлю і продаж.

Що має відображатися у стакані

  • заявки на купівлю;
  • заявки на продаж;
  • ціна;
  • кількість;
  • сумарний обсяг по ціні;
  • краща ціна купівлі;
  • краща ціна продажу;
  • спред між найкращими цінами.

Сортування у стакані

Заявки на купівлю сортуються:

Вища ціна → вище у стакані

Заявки на продаж сортуються:

Нижча ціна → вище у стакані

Якщо ціна однакова, перевагу має заявка, створена раніше.

Механіка зіставлення заявок

Система повинна зіставляти зустрічні заявки.

Правило для угоди

Для заявки на купівлю і заявки на продаж угода можлива, якщо:

Ціна покупця >= Ціна продавця

Після цього система визначає кількість угоди:

Кількість угоди = мінімум(невиконана кількість покупця, невиконана кількість продавця)

Часткове виконання

Якщо кількість у заявках не однакова, заявка може бути частково виконана.

Приклад:

Покупець хоче купити 100 одиниць
Продавець продає 40 одиниць
Угода = 40 одиниць
Заявка покупця залишається активною на 60 одиниць
Заявка продавця стає виконаною

Критично. Система не повинна створювати угоду, якщо ціна покупця нижча за ціну продавця або якщо в однієї із заявок немає доступного залишку кількості.

Угоди

Угода фіксує факт купівлі-продажу між двома сторонами.

Поля угоди

Поле Опис
Номер угоди Унікальний номер
Об’єкт торгів Що було продано або куплено
Покупець Користувач, який купує
Продавець Користувач, який продає
Заявка покупця З якої заявки сформована угода
Заявка продавця З якої заявки сформована угода
Кількість Кількість угоди
Ціна Ціна за одиницю
Сума Загальна сума угоди
Комісія біржі Якщо реалізовано
Дата і час Коли угода укладена
Статус Виконана, очікує розрахунку, скасована

Формула суми угоди

Сума угоди = Кількість × Ціна

Комісія біржі

Опціонально система може розраховувати комісію біржі.

Варіанти комісії

  • відсоток від суми угоди;
  • фіксована сума;
  • комбінована комісія;
  • різна комісія для покупця і продавця;
  • індивідуальна комісія для окремих користувачів.

Формула комісії

Комісія = Сума угоди × Відсоток комісії / 100

Баланси користувачів

Фінансовий блок є опціональним, але бажаним для повноцінної біржі.

Що має підтримувати баланс

  • поповнення;
  • списання;
  • блокування коштів під заявку;
  • розблокування при скасуванні заявки;
  • списання коштів після угоди;
  • зарахування коштів продавцю;
  • утримання комісії;
  • історію операцій.

Поля балансу

Поле Опис
Користувач Власник балансу
Валюта Валюта балансу
Доступний баланс Кошти, які можна використовувати
Заблокований баланс Кошти, зарезервовані під активні заявки
Загальний баланс Доступний + заблокований

Блокування коштів

При створенні заявки на купівлю система повинна перевірити наявність коштів.

Потрібна сума = Кількість × Ціна + Комісія

Якщо коштів достатньо, система блокує суму під заявку. Якщо коштів недостатньо — заявка не повинна бути активована.

Блокування товару або активу

Для заявки на продаж система повинна перевірити, чи має продавець достатню кількість товару або активу.

Якщо кількість доступна, вона блокується під заявку. Якщо ні — заявка не повинна бути активована.

Історія торгів

Історія торгів зберігає всі події по заявках і угодах.

Що потрібно логувати

  • створення заявки;
  • зміну ціни;
  • зміну кількості;
  • активацію заявки;
  • скасування заявки;
  • часткове виконання;
  • повне виконання;
  • укладення угоди;
  • блокування коштів;
  • розблокування коштів;
  • списання комісії;
  • зміну статусу користувача;
  • адміністративні дії.

Кабінет користувача

Користувач біржі повинен мати особистий кабінет.

Функції кабінету

Користувач повинен мати можливість:

  • створювати заявки;
  • переглядати свої активні заявки;
  • переглядати виконані заявки;
  • скасовувати свої активні заявки;
  • бачити свої угоди;
  • бачити історію торгів;
  • бачити баланс;
  • поповнювати баланс, якщо реалізовано;
  • подавати заявку на виведення коштів, якщо реалізовано;
  • отримувати сповіщення про угоди;
  • налаштовувати повідомлення по категоріях.

Пошук і фільтрація

Пошук має допомагати користувачу швидко знаходити потрібні об’єкти й заявки.

Параметри пошуку

  • тип об’єкта;
  • категорія;
  • назва;
  • ціна від;
  • ціна до;
  • валюта;
  • тип заявки;
  • статус;
  • дата створення;
  • користувач, якщо доступно за правами.

Сповіщення

Система має надсилати користувачам повідомлення про важливі події.

Події для сповіщень

  • заявка створена;
  • заявка активована;
  • заявка частково виконана;
  • заявка повністю виконана;
  • укладена угода;
  • заявка скасована;
  • ціна досягла потрібного рівня;
  • кошти заблоковані;
  • кошти розблоковані;
  • отримано оплату;
  • списано комісію.

Графіки і ринкові дані

Опціонально модуль може показувати графіки цін.

Що можна показувати

  • останню ціну угоди;
  • мінімальну ціну за період;
  • максимальну ціну за період;
  • середню ціну;
  • обсяг торгів;
  • графік зміни ціни;
  • кількість угод за період.

Звіти

Звіт «Активні заявки»

Звіт показує всі заявки, які зараз беруть участь у торгах.

У звіті потрібно відображати:

  • номер заявки;
  • користувача;
  • тип заявки;
  • об’єкт;
  • кількість;
  • невиконану кількість;
  • ціну;
  • валюту;
  • статус.

Звіт «Історія угод»

Звіт показує укладені угоди.

У звіті потрібно відображати:

  • номер угоди;
  • дату;
  • об’єкт;
  • покупця;
  • продавця;
  • кількість;
  • ціну;
  • суму;
  • комісію.

Звіт «Обсяги торгів»

Звіт показує активність по об’єктах.

У звіті потрібно відображати:

  • об’єкт;
  • кількість угод;
  • загальну кількість;
  • загальну суму;
  • середню ціну;
  • мінімальну ціну;
  • максимальну ціну.

Звіт «Комісії біржі»

Якщо реалізовано комісії, звіт показує дохід біржі.

У звіті потрібно відображати:

  • період;
  • кількість угод;
  • суму угод;
  • суму комісій;
  • комісію по об’єктах;
  • комісію по користувачах.

Звіт «Баланси користувачів»

Якщо реалізовано фінансовий блок, звіт показує кошти користувачів.

У звіті потрібно відображати:

  • користувача;
  • валюту;
  • доступний баланс;
  • заблокований баланс;
  • загальний баланс.

AJAX-інтерактив

Інтерфейс має працювати швидко та без перезавантаження сторінки.

Через AJAX мають працювати:

  • створення заявки;
  • активація заявки;
  • скасування заявки;
  • оновлення біржового стакану;
  • подання зустрічної пропозиції;
  • автоматичне оновлення ціни;
  • оновлення історії угод;
  • оновлення балансу;
  • оновлення графіків;
  • пошук заявок;
  • фільтрація об’єктів;
  • сповіщення користувачів.

Логування змін

Модуль повинен фіксувати всі важливі дії.

Журнал змін має зберігати:

  • хто створив заявку;
  • хто змінив заявку;
  • хто скасував заявку;
  • хто створив зустрічну заявку;
  • які заявки були зіставлені;
  • яка угода створена;
  • яка кількість виконана;
  • яка сума заблокована;
  • яка комісія списана;
  • хто виконав адміністративну дію;
  • дату й час дії;
  • старе та нове значення, якщо це можливо.

Права доступу

Модуль має підтримувати розмежування прав.

Роль Можливості
Гість Переглядає публічні торги, якщо це дозволено
Користувач Створює заявки, переглядає свої угоди, керує балансом
Продавець Розміщує заявки на продаж і контролює виконання
Покупець Розміщує заявки на купівлю і контролює виконання
Модератор Перевіряє заявки, блокує підозрілі оголошення
Фінансовий оператор Контролює поповнення, виведення, комісії і баланси
Керівник Переглядає звіти по торгах, комісіях, користувачах і обсягах
Адміністратор Налаштовує типи об’єктів, категорії, права, комісії та службові параметри

Технічні вимоги

Параметр Опис
Бекенд K2 Cloud ERP на Python або PHP
База даних PostgreSQL або MySQL
Фронтенд HTML5, JavaScript
AJAX Fetch API або Axios
UI-компоненти DataTables для таблиці торгів, Select2 для пошуку товарів і послуг, Chart.js для графіків цін
Баланси Облік доступних і заблокованих коштів, опціонально
Сповіщення Email, внутрішні повідомлення або месенджери
Друк Не обов’язково
Експорт Excel або PDF для звітів

Рекомендовані сутності бази даних

Для реалізації задачі доцільно передбачити такі сутності:

  • користувачі біржі;
  • типи біржових об’єктів;
  • категорії;
  • біржові об’єкти;
  • заявки;
  • статуси заявок;
  • біржовий стакан;
  • угоди;
  • історія торгів;
  • баланси;
  • блокування коштів;
  • комісії;
  • операції балансу;
  • сповіщення;
  • графіки цін;
  • журнал змін;
  • звіти;
  • права доступу.

Практичне завдання

У межах атестації потрібно продемонструвати робочий сценарій.

Мінімальний сценарій:

  1. створити користувачів біржі;
  2. створити типи біржових об’єктів;
  3. створити категорії;
  4. створити біржовий об’єкт;
  5. створити заявку на продаж;
  6. створити заявку на купівлю;
  7. відобразити заявки у стакані;
  8. перевірити сортування buy/sell заявок;
  9. створити зустрічну заявку з ціною, яка не підходить для угоди;
  10. перевірити, що угода не створюється;
  11. створити зустрічну заявку з ціною, яка підходить для угоди;
  12. автоматично сформувати угоду;
  13. перевірити часткове виконання заявки;
  14. перевірити повне виконання заявки;
  15. перевірити історію торгів;
  16. реалізувати баланс користувача, якщо фінансовий блок увімкнено;
  17. заблокувати кошти під заявку;
  18. списати кошти після угоди;
  19. нарахувати комісію біржі;
  20. сформувати звіт активних заявок;
  21. сформувати звіт історії угод;
  22. сформувати звіт обсягів торгів;
  23. сформувати звіт комісій;
  24. перевірити журнал змін.

Критерії оцінювання

Критерій Бали Що перевіряється
Реалізація бази оголошень і торгів 20 Користувачі, типи об’єктів, категорії, біржові об’єкти, заявки, статуси
Механізм подачі заявок і формування угод 20 Buy/Sell заявки, стакан, зіставлення, часткове виконання, автоматичне створення угод
Ведення історії торгів і ставок 20 Історія заявок, змін, ставок, угод, виконання і скасування
Управління балансами і комісіями 20 Баланси, блокування коштів або активів, списання, зарахування, комісії
Інтерактивність через AJAX і пошук 20 Оновлення стакану, заявок, угод, балансів, графіків і пошуку без перезавантаження
Разом 100 Максимальна оцінка

Шкала оцінювання

Бали Рівень Опис
90–100 Відмінно Модуль повністю працює: заявки, стакан, угоди, часткове виконання, історія, баланси, комісії, пошук і AJAX реалізовані коректно
75–89 Добре Основна логіка працює, є незначні недоліки, які не руйнують процес торгів
60–74 Зараховано Базовий сценарій працює, але частина функцій реалізована неповно або потребує доопрацювання
0–59 Не зараховано Відсутня критична логіка: заявки, стакан, зіставлення, угоди або історія торгів

Критичні помилки

Критичними помилками вважаються ситуації, коли:

  • неможливо створити користувача біржі;
  • неможливо створити біржовий об’єкт;
  • неможливо створити заявку;
  • заявка без ціни або кількості потрапляє в стакан;
  • заявки в стакані сортуються неправильно;
  • угода створюється, коли ціна покупця нижча за ціну продавця;
  • угода створюється без доступного залишку кількості;
  • часткове виконання заявки працює неправильно;
  • виконана заявка залишається активною;
  • скасована заявка бере участь у торгах;
  • баланс не блокується під заявку, якщо фінансовий блок заявлений;
  • кошти або активи не списуються після угоди;
  • комісія не розраховується, якщо ця функція заявлена;
  • історія угод не фіксується;
  • звіти не відповідають фактичним заявкам і угодам;
  • зміни заявок, угод і балансів не логуються.

Умова складання. Завдання не може бути зараховане, якщо система не дозволяє пройти базовий цикл біржі: користувач → заявка на продаж → заявка на купівлю → стакан → зіставлення → угода → історія → звіт.

Очікуваний результат

У результаті виконання атестаційного завдання має бути створений модуль біржі в K2 ERP.

Модуль має підтримувати користувачів, типи біржових об’єктів, категорії, біржові об’єкти, заявки на купівлю і продаж, біржовий стакан, автоматичне зіставлення заявок, часткове виконання, угоди, історію торгів, баланси, блокування коштів або активів, комісії, кабінет користувача, сповіщення, графіки цін, звіти, AJAX-інтерактив і логування змін.

Примітка

Біржа є складним модулем, бо в ній важлива точність, швидкість і надійність. Помилка в заявці, балансі або зіставленні може призвести до неправильних угод і фінансових втрат.

Навіть базова реалізація біржі добре перевіряє вміння працювати зі статусами, чергами заявок, транзакціями, історією операцій, AJAX-оновленням і фінансовою логікою.

Коротко

Питання Відповідь
Що потрібно створити? Модуль біржі для торгів товарами, послугами або активами
Які головні об’єкти? Користувачі, біржові об’єкти, заявки, стакан, угоди, баланси
Які заявки потрібні? Заявки на купівлю і продаж
Коли створюється угода? Коли ціна покупця більша або дорівнює ціні продавця
Що таке часткове виконання? Коли угода закриває тільки частину кількості заявки
Що має робити фінансовий блок? Блокувати кошти або активи, списувати після угоди, нараховувати комісію
Які звіти потрібні? Активні заявки, історія угод, обсяги торгів, комісії, баланси
Що є критичною вимогою? Коректне зіставлення заявок і фіксація угоди в історії

Див. також