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

Первинна публікація
 
Немає опису редагування
 
Рядок 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]]