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

Атестаційні завдання K2 ERP/Обмінка

Матеріал з K2 ERP Wiki Ukraine — База знань з автоматизації та санкцій в Україні
Версія від 18:41, 1 травня 2026, створена R (обговорення | внесок)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)


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

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

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

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

Модуль обліку валютних операцій: Обмінка.

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

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

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

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

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

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

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

У роботі потрібно щоденно контролювати:

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

Якщо такі операції вести вручну, легко помилитися в залишках, курсах, сумі гривні або прибутку. Тому модуль повинен автоматизувати розрахунок і контроль.

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

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

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

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

Об’єкт Призначення
Валюти Довідник валют, з якими працює обмінка
Каси Місця зберігання готівки та валютних залишків
Курси валют Курси купівлі та продажу з історією змін
Операції обміну Купівля або продаж валюти
Касові залишки Поточні залишки кожної валюти в кожній касі
Касові ордери Документи, що підтверджують рух коштів
Касири Користувачі, які виконують операції
Звіти Обороти, залишки, прибуток, журнал операцій
Журнал змін Історія зміни курсів, операцій і залишків

Довідник «Валюти»

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

Поля валюти

Поле Опис
Назва валюти Наприклад: долар США, євро, фунт стерлінгів, польський злотий
Короткий код USD, EUR, GBP, PLN
Символ $, €, £, zł
Кількість знаків після коми Наприклад, 2
Активність Чи використовується валюта в поточних операціях

Приклади валют

Валюта Код Символ
Долар США USD $
Євро EUR
Фунт стерлінгів GBP £
Польський злотий PLN

Довідник «Каси»

Довідник кас містить місця, де зберігаються гривня та іноземна валюта.

Каса може бути фізичною касою обмінного пункту, касою офісу, касою конкретного касира або умовним внутрішнім рахунком.

Поля каси

Поле Опис
Назва каси Наприклад: Каса №1, Центральна каса, Каса офісу
Локація Адреса або місце розташування каси
Відповідальний касир Працівник, який відповідає за касу
Статус Активна, закрита, тимчасово недоступна
Коментар Додаткова інформація

Касові залишки

По кожній касі потрібно вести залишки в кожній валюті.

Наприклад:

Каса Валюта Залишок
Каса №1 UAH 250 000
Каса №1 USD 8 000
Каса №1 EUR 5 000

Важливо. Касовий залишок має формуватися на основі операцій, а не редагуватися вручну після кожного обміну. Ручне коригування може бути лише окремою службовою операцією з логуванням.

Журнал «Курси валют»

Журнал курсів валют зберігає історію зміни курсів купівлі та продажу.

Колонки журналу курсів

Колонка Опис
Дата і час Коли встановлено курс
Валюта Валюта, для якої встановлено курс
Курс купівлі За яким курсом обмінка купує валюту у клієнта
Курс продажу За яким курсом обмінка продає валюту клієнту
Каса Якщо курс відрізняється по касах
Автор Хто встановив або змінив курс

Логіка курсів

Система повинна:

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

Практичний сенс. Якщо курс змінився о 14:00, операції до 14:00 мають залишатися зі старим курсом. Інакше звіти й прибуток будуть некоректними.

Журнал «Операції обміну»

Журнал операцій обміну показує всі операції купівлі та продажу валюти.

Колонки журналу операцій

Колонка Опис
Номер операції Унікальний номер операції
Дата і час Коли виконано операцію
Тип операції Купівля або продаж валюти
Валюта Валюта операції
Сума у валюті Скільки валюти куплено або продано
Курс Курс, за яким виконано операцію
Сума в UAH Розрахована сума у гривні
Каса Каса, через яку пройшла операція
Касир Хто провів операцію
Статус Чернетка, проведено, скасовано

Форма операції обміну

Форма операції повинна бути максимально простою для касира.

Поля форми

Поле Опис
Тип операції Купівля або продаж
Валюта USD, EUR, GBP, PLN або інша
Сума у валюті Сума, яку здає або купує клієнт
Курс Підставляється автоматично, але може редагуватися за наявності прав
Сума в UAH Розраховується автоматично
Каса Каса, через яку проходить операція
Касир Поточний користувач або обраний касир
Коментар Додаткова інформація

Формула розрахунку суми в гривні

Сума UAH = Сума у валюті × Курс

Сума має перераховуватися миттєво при зміні валюти, курсу або кількості валюти.

Купівля валюти

Купівля валюти означає, що клієнт здає іноземну валюту, а каса виплачує йому гривню.

При купівлі валюти система повинна:

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

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

Клієнт здає 1000 USD за курсом 39,50.

Сума UAH = 1000 × 39,50 = 39 500 грн

Результат по касі:

  • USD збільшується на 1000;
  • UAH зменшується на 39 500.

Продаж валюти

Продаж валюти означає, що клієнт купує іноземну валюту, а каса отримує гривню.

При продажу валюти система повинна:

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

Приклад продажу валюти

Клієнт купує 500 EUR за курсом 42,20.

Сума UAH = 500 × 42,20 = 21 100 грн

Результат по касі:

  • EUR зменшується на 500;
  • UAH збільшується на 21 100.

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

Оновлення касових залишків

Кожна проведена операція повинна автоматично змінювати залишки в касі.

Логіка руху залишків

Тип операції Валюта UAH
Купівля валюти Збільшується Зменшується
Продаж валюти Зменшується Збільшується

Контроль залишків

Перед проведенням операції система повинна перевіряти:

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

Прибутковість обмінних операцій

Модуль має розраховувати прибуток від курсової різниці.

Найпростіший підхід — аналізувати різницю між курсом купівлі та курсом продажу.

Формула маржі

Маржа = Курс продажу - Курс купівлі

Прибуток по валюті

Спрощена формула:

Прибуток = Продана сума валюти × (Курс продажу - Середній курс закупівлі)

Для точнішого розрахунку потрібно використовувати партійний або середньозважений облік валюти.

Підходи до розрахунку собівартості валюти

Метод Опис
Середньозважений курс Собівартість валюти рахується як середній курс купленого залишку
FIFO Першою продається валюта, яка була куплена раніше
Спрощена маржа Прибуток оцінюється через різницю поточних курсів купівлі та продажу

Для атестаційного завдання достатньо реалізувати один із методів, але метод має бути описаний і послідовно застосований у звітах.

Касові ордери

Модуль повинен формувати касові ордери для підтвердження руху коштів.

Прибутковий касовий ордер

Прибутковий касовий ордер формується, коли каса отримує кошти.

У контексті обмінки це може бути:

  • отримання іноземної валюти при купівлі валюти у клієнта;
  • отримання гривні при продажу валюти клієнту.

Видатковий касовий ордер

Видатковий касовий ордер формується, коли каса видає кошти.

У контексті обмінки це може бути:

  • видача гривні при купівлі валюти у клієнта;
  • видача іноземної валюти при продажу валюти клієнту.

Поля касового ордера

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

Друковані форми

Потрібно передбачити друк або PDF-формування:

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

Звітність

Звіт «Оборот по валютах»

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

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

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

Звіт «Залишки в касах»

Звіт показує поточні залишки валют по касах.

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

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

Звіт «Прибуток від обмінних операцій»

Звіт показує прибуток від обмінних операцій за період.

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

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

Звіт касира за день

Бажано передбачити звіт касира за зміну або день.

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

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

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

Інтерфейс модуля має бути швидким і зручним для касира.

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

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

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

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

Журнал змін має фіксувати:

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

Скасування операції

Потрібно передбачити скасування помилкової операції.

Скасування має:

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

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

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

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

Можливі ролі:

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

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

Параметр Опис
Бекенд K2 Cloud ERP на Python або PHP
База даних PostgreSQL або MySQL
Фронтенд HTML5, JavaScript
AJAX Axios або Fetch API
UI-компоненти DataTables, Select2
Друк PDF для касових ордерів, квитанцій і звітів
Експорт Excel або PDF для звітів

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

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

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

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

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

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

  1. створити валюти USD, EUR, GBP, PLN;
  2. створити касу;
  3. вказати початкові залишки UAH, USD та EUR;
  4. створити курси купівлі та продажу;
  5. оформити операцію купівлі валюти;
  6. перевірити автоматичний розрахунок суми в UAH;
  7. перевірити зміну залишків валюти та гривні;
  8. сформувати касовий ордер по операції;
  9. оформити операцію продажу валюти;
  10. перевірити контроль достатності залишку валюти;
  11. перевірити зміну залишків після продажу;
  12. сформувати квитанцію або касовий ордер;
  13. сформувати звіт обороту по валютах;
  14. сформувати звіт залишків у касах;
  15. сформувати звіт прибутку від обмінних операцій;
  16. показати журнал змін;
  17. виконати скасування помилкової операції;
  18. перевірити зворотний рух по касі.

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

Критерій Бали Що перевіряється
Реалізація довідників валют і кас 10 Валюти, каси, касири, початкові залишки, активність
Реєстрація операцій обміну 20 Купівля, продаж, підстановка курсу, розрахунок суми в UAH
Автоматичне оновлення залишків каси 20 Зміна залишків по валюті та UAH, контроль нестачі
Формування касових ордерів 20 Прибуткові й видаткові ордери, квитанції, друк PDF
Формування звітів 20 Обороти по валютах, залишки в касах, прибуток від обмінних операцій
Інтерактивність через AJAX 10 Операції, курси, перерахунки, залишки й звіти без перезавантаження
Разом 100 Максимальна оцінка

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

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

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

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

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

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

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

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

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

Примітка

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

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

Коротко

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

Див. також