Будь ласка, використовуйте цей ідентифікатор, щоб цитувати або посилатися на цей матеріал: https://er.chdtu.edu.ua/handle/ChSTU/9078
Назва: Програмне забезпечення автоматизованої системи обліку пацієнтів лікарні
Автори: Первvнінський, Станіслав Михайлович
Жаботинський, Іван Валерійович
Дата публікації: 18-чер-2024
Короткий огляд (реферат): АНОТАЦІЇ Виконавець: Жаботинський Іван Валерійович. Назва кваліфікаційної роботи бакалавру: 11 Програмне забезпечення автоматизованої системи обліку пацієнтів лікарні". Спеціальність: 121 «Інженерія програмного забезпечення». Установа: Черкаський державний технологічний університет. Місто, рік: Черкаси, 2024 рік. Основні ідеї, результати та висновки кваліфікаційної роботи бакалавру: Основні ідеї: - розгляд реальних потреб цільової аудиторії -пацієнти лікарень, люди які бажають оформити декларацію з сімейним лікарем; - аналіз широкого спектру функцій, спрямованих на допомогу пацієнтам лікарень: можливість підписати декларацію, записатися на прийом, задати питання; Результати: - аналіз та обrрунтування вибору Python [3] та бібліотеки Aiogram 2.25.2 [ 1] для реалізації бота. Опис архітектури та використані технології; Висновки: аналіз процедури заключення декларації з сімейним лікарем та залученню більше пацієнтів; - оцінка технічних аспектів реалізацїї, переваг та недоліків використання Python [З] та бібліотеки Aiogram 2 .25 .2 [І].
ANNOTATION Perfonner: Jabotinsky Ivan Valeriyovych Title of the qualified bachelor's work: tlSoftware of the automated hospital patient registration system11 Specialty: 121 "Software Engineering" Institution: Cherkasy State Technological University. City, year: Cherkasy, 2024. Main ideas, results, and conclusions of the qualified bachelor' s work: Main ideas: consideration of the real needs ofthe target audience - patients of clinics, people who wish to issue а declaration with а family doctor; analysis of а wide range of functions aimed at helping clinic patients: the ability to sign а declaration, make an appointment, ask questions. Results: analysis andjustification ofthe choice of Python [З] and Aiogram library v.2.25.2 [1] for bot implementation. Description ofarchitecture and technologies used. Conclusions: analysis of the pюcedure for concluding а declaration with а family doctor and attracting more patients; Evaluation of technical aspects of implementation, advantages, and disadvantages of using Python [3] and Aiogram library v.2.25.2 [1).
URI (Уніфікований ідентифікатор ресурсу): https://er.chdtu.edu.ua/handle/ChSTU/9078
Розташовується у зібраннях:121 Інженерія програмного забезпечення (Інженерія програмного забезпечення)

Файли цього матеріалу:
Файл Опис РозмірФормат 
Кваліфікаційна робота бакалавра Жаботинський Іван Валерійович.pdf
  Restricted Access
16.48 MBAdobe PDFПереглянути/Відкрити    Запит копії


Усі матеріали в архіві електронних ресурсів захищено авторським правом, усі права збережено.

Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ 
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ 
Факультет інформаційних технологій і систем 
Кафедра програмного забезпечення автоматизованих систем 
ПОЯСJ-ПОВАЛЬНАЗАПИСКА 
до кваліфікаційної роботи 
«бакалавра» 
освітній рівень 
-~З те,ІУ : Програмне забезпечення автоматизованої системи обліку пацієнтів 
. . 
шкарн1 
Виконав: студент 4 курсу, групи ПЗС-2244 
Спеціальності 
121 «Інженерія програмного забезпечення» 
(шифр і назва напряму підготовки) 
Студент Жаботинський І. В. 
(прізвище та ініціали) 
Керівник Первунінський С.М. 
(прізвище та ініціали) 
Рецензент 
(rtрізвище та ініціали) 
Черкаси 2024 
Черкаський державний технологічний університет 
1юв11е найме11у1~аt111я 1,и11юrо 11авчального зак.1аду 
Факу,1ьтет інформаційних технологій і систем 
І-.":афе.1ра про1рамного забезпечення автоматизованих систем 
Освітній рівень ~б~а=к=ал=а=В~Р~-----------------------------
Спеuіальність 121 «Інженерія програмного забезпечення» 
J..:вітня програма Інженерія програ.много забезпечення 
ЗАТВЕРДЖ~ 
За.в. кафедр.и.ПJд.С, професор 
' Голуб С.В. 
«.Lь » _ _ _ o-----d-'-- ___ 2024 року 
ЗАВДАННЯ 
НА КВАЛІФІКАЦІЙНУ РОБОТУ СТУДЕНТУ 
Жаботинський Іван Валерійович 
(нрі:~вище, ім'я, 1ю бап,коні) 
~~у проекту (роботи) Про1рамне забезпечення автоматизованої системи об.тіку пащєнпв 
:.карн І 
~ _ - Еник проекту (роботи) Первvнінський Станіс.1ав Михайлович д.т.н., професор 
{11різвище, ім'я, по батькові. науковий ступінь. вчене звання) 
_ ~.1жені наказо~ Черкаського державного техно.1огічного університету від « 26 >> лютого 
: . : ~ року №60/04 
- ::-rрок подання студентом проекту (роботи) ""-2--'чS:::е"'-рв"'"'н'-'-'я:.....:::.20"'"'2"'-4~р'---._ ___________  
· ~ ..: :ш і дані до проекту (роботи) Дослідження предметної області програмного забезпечення 
низовано·і системи обліку пацієнтів лікарні: проектv-вання архітектури розроб:rюваного 
:-1::-:::рачного забезпечення: вимоги до системи; розробка та тестvвання системи. 
ст розрахунково-пояснювальної записки (перелік питань, які потрібно розробити) 
..... _-: l . Існуючі методи та засоби розв'язання поставлених завдань; 
~- Впровадження результатів досліджень v практику проектування програмного 
. 1t::с-шечення інформаційних систем; 
.:_~ 3. Розробка та тестування програмного забезпечення; 
вки : 
використаних джерел: 
~;х-.1ік r·рафічного матеріа.1у (з точним зазначенням обов'язкових робіт проекту; 
_ -::::J l - Титvльний слайд; Слайд 2 - Актуальність теми, мета та завцання розробки; Слайд З -
та предмет розробки, методи проектування та конструювання; Слайд 4 - Опис та 
~нчне значення отриманих результатів; Слайд 5 - Особистий внесок; Слайд б - Вимоги до 
н: С1айд 7 - Діаграма прецедентів; Слайд 8 - Проектування погічної структури: Слайд 9 
1' . текп-рне проектування; Слайд 1О  - Діаграми діяльності та поспідовності; Слайд L1  -
:: з.чJ I комунікації та скінченого автомату: Слайд 12 - Структурна схема; Слайд 1 З -
С ""':П.ІІ: на.,ьна схема; Слайд 14 - Опис логічної схеми, частина 1 ;Слайд 15 - Опис логічної схеми 
частина 2; Слайд 16 - Структура бази даних: Слайд 17 - Інтерфейс користувача; Сла1 
Тестування; Слайд 19 - Завершення презентації. 
6. Консультанти розділів проекту (роботи) 
Прізвище, ініціали та посади Підпис, дата 
Розділ 
консультанта Завдання видав Завдання прийняв 
І 
2 І 
з 
7. Дата видачі завдання .0.2.=. -=-г,...ру,._.д=н=я.а...=-20=2=3=--р'-._ _________________  
КАЛЕНДАРНИЙ ПЛАН 
Строк 
NQ виконання 
Назва етапів випускної роботи етапів Примітки 
п/п випускної 
роботи 
І Постановка задачі 05.12.2023 виконано 
2 Шдготовка завдання 13.12.2023 виконане 
з Погодження завдання 16.12.2023 виконане 
4 Затвердження завдання 19.02.2024 виконане 
Основна стадія 
І Підбір матеріалів 27.02.2024 виконан< 
2 Аналіз шляхів вирішення поставленої задачі 04.02.2024 виконан< 
3 Розрахунок основних параметрів роботи 10.03.2024 виконан< 
4 Вибір кінцевого варіанту проектного рішення 17.03.2024 виконан( 
5 Оформлення первісної редакцїї роботи 25.03.2024 виконан( 
Заклю-чна стадія 
l Узгодження прийнятих проектних р1шень з 31.04.2024 виконан 
керівником 
2 Оформлення пояснювальної записки роботи в 13.05.2024 виконан 
кінцевій редакції 
3 Попередній захист роботи 15.05.2024 виконан 
4 Затвердження роботи 02.06.2024 виконан 
5 Рецензування роботи 06.06.2024 виконав 
б Захист роботи 11.06.2024 
Студент Жаботинський І. Е 
(прізвише та ініuіаnи) 
Керівник проекту (роботи) Первунінський CJ 
(прізвище та ініuіали) 
-
АНОТАЦІЇ 
Виконавець: Жаботинський Іван Валерійович. 
Назва кваліфікаційної роботи бакалавру: 11Програмне забезпечення 
автоматизованої системи обліку пацієнтів лікарні". 
Спеціальність: 121 «Інженерія програмного забезпечення». 
Установа: Черкаський державний технологічний університет. 
Місто, рік: Черкаси, 2024 рік. 
Основні ідеї, результати та висновки кваліфікаційної роботи бакалавру: 
Основні ідеї: 
ю - розгляд реальних потреб цільової аудиторії -пацієнти лікарень, люди які 
бажають оформити декларацію з сімейним лікарем; 
- аналіз широкого спектру функцій, спрямованих на допомогу пацієнтам 
лікарень: можливість підписати декларацію, записатися на прийом, 
задати питання; 
____.. Результати: 
11\1 - аналіз та обrрунтування вибору Python [3] та бібліотеки Aiogram 2.25.2 
Jllt [ 1] для реалізації бота. Опис архітектури та використані технології; 
m11 Висновки: 
І 11(} 
аналіз процедури заключення декларації з сімейним лікарем та 
І 11 залученню більше пацієнтів; 
- оцінка технічних аспектів реалізацїї, переваг та недоліків використання 
JІЛІt~ 
Python [З] та бібліотеки Aiogram 2 .25 .2 [І]. 
Шl!І 
l11i 
ІІtІ 
ANNOTATION 
Perfonner: Jabotinsky Ivan Valeriyovych 
Title of the qualified bachelor's work: tlSoftware of the automated hospital patient 
registration system11 
Specialty: 121 "Software Engineering" 
Institution: Cherkasy State Technological University. 
City, year: Cherkasy, 2024. 
Main ideas, results, and conclusions of the qualified bachelor' s work: 
Main ideas: 
consideration of the real needs ofthe target audience - patients of clinics, 
people who wish to issue а declaration with а family doctor; 
analysis of а wide range of functions aimed at helping clinic patients: the 
ability to sign а declaration, make an appointment, ask questions. 
Results: 
analysis andjustification ofthe choice of Python [З] and Aiogram library 
v.2.25.2 [1] for bot implementation. Description ofarchitecture and 
technologies used. 
Conclusions: 
analysis of the pюcedure for concluding а declaration with а family doctor 
and attracting more patients; 
Evaluation oft echnical aspects of implementation, advantages, and 
disadvantages of using Python [3] and Aiogram library v.2.25.2 [1). 
ЗМІСТ 
Еl IK УМОВНИХ ПОЗНАЧЕНЬ ......................................................................... б 
&_-~-)·П ........................................................................................................................... 7 
J I"l 1. Існуючі методи та засоби розв'язання поставлених завдань .................. 9 
1.1. Основні визначення ..................................................................................... 9 
1.2. Аналіз та моніторинг сучасних аналогів .................................................... 9 
1.3. Методи реалізації телеграм ботів ............................................................. 11 
1.4. Постановка задачі ...................................................................................... 12 
Висновки до першого розділу ......................................................................... 13 
)ЗДІЛ 2. Впровадження результатів досліджень у практику проектування 
Dorpaмнoro забезпечення інформаційних систем .................................................. 14 
2.1. Моделювання предметної області ............................................................ 14 
2.1.1. Предметна область моделювання. Модель предметної області. 
Словник предметної області ...................................................................... 14 
2.1.2. Елементи моделювання предметної області ................................... 16 
2. 1.3. Робоча область моделювання .......................................................... 1б  
2.2. Формування та аналіз вимог ..................................................................... 18 
2.2.1. Формування вимог до програмного забезпечення. Первинні і 
деталью вимоги. Вимоги замовника і розробника. Функціональні та 
нефункціональні вимоги .................................................................. .......... 18 
2.2.2. Формування вимог за допомогою діаграми прецедентів ............... 22 
ЧДТУ 242243.005 ПЗ 
1\1. JІист № покн1ента№ Піт1ис Лата 
. ~nnfi-. +--Жа-б-оп-tн+ськ-и~й І .-Н -=--1f • -----f « Проr-рамне ·.шбсз r1е•1ення автоматизованої 1--т-JІ _іт,...- -+І_ л_ис_:т--+І_л_и_с_rі_R- ---f 
, І • 
· .~()1 1\ІІИК Псрnун1нсt.кий С' М 
,', ') ·. системи обліку паuієшів лікарні» І JІ І І .l І 
І 
Пояснюшшьна заниска ФІТІС, кафедра ПЗАС, 
' . кпнтп. ІІіо~ІІЬ O ь І 
ЬтR. 1·олvбС.U. # ПЗС-2244 
г 
3 
:.3. Проектування логічної структури програмного комплексу ................... 24 
2.3.1. Діаграми класів ................................................................................. 24 
2.3.2. Діаграми пакетів ............................................................................... 27 
: -t. Архітектурне проектування ...................................................................... 28 
2.4.1. Діаграма компонентів ....................................................................... 29 
2.4.2. Розгортання програмної системи на апаратних засобах. Діаграма 
розгортання ................................................................................................. З О 
:.5. Моделювання поведінки системи ............................................................. 32 
2. 5. 1. Діаграма діяльності .......................................................................... 3 2 
2.5.2. Діаграма послідовності .................................................................... 34 
2. 5. 3. Діаграми комунікації ........................................................................ З 5 
2.5.4. Діаграма скінченного автомату ....................................................... 36 
Висновки до другого розділу ........................................................................... 38 
• 
: .Jl.l 3. Розробка та тестування програмного забезпечення .............................. 39 
3. І. Розробка програмного комплексу ............................................................ 39 
3.1. І. Обrрунтування вибору засобів реалізації ........................................ 39 
3.1.2. Опис структурної ( функціональної) схеми ..................................... 41 
3.1.3. Опис логічноУ схеми системи ........................................................... 44 
3.1.4. Розробка бази даних ......................................................................... 46 
3. 1. 5. Розробка інтерфейсу користувача ................................................... 50 
3.1.6. Опис розробки програмних компонентів ........................................ 54 
3 .2. Тесту вання системи ................................................................................... 56 
J 
ЧДТУ 242243.ООSПЗ 
І 
4 
з._. 1. мм1,. •,н.11с ·1сст.v нш1ш1 ....................................................................... •чі 
з .,, І .... ·1...• 
·-·-• пrсrрЗЦІІІІІС ТССТ)'ВП.ННЯ ................................................................... "to 
З.2.3. 1,cr~r.шe тестувtНІШІ ........................................................................ -9 
З.-.4. Пrшймальне теСТ)'І¼ПІШЯ ................................................................... 61 
'"'.J. flpHК!Ш)tll IШJ')OLiЗJlit\l'IIOl'O ІІ fЮгр:!МІН)/ () 1\0\\IIHt!l\t:> ................................. h1 
Dнсш.>вю1 до 1ре1 ь01•t1 розділу ......................................................................... 68 
11 ВКІІ ............................................................................................................... 6'-1 
ІСОК В І rкorIICTAHI (л Д)f(ЕРІ: 1 ................................................................... 71 
ток t\ .............................................................................................................. 73 
П1\ТОК r; ............................................................................................................... 75 
ГОІ{ 8 ............................................................................................................... 9t, 
д ..\ "ГОtІ" Г ............................................................................................................. І О І 
t 
5 
ПЕРЕЛІК УМОВНИХ ПОЗНАЧЕНЬ 
·_ \f l Unified modeling language 
~- • ... L Structured query language 
("УБД Система управління базами даних 
5.J База даних 
-
~ Програмне забезпечення 
\РІ Application programming interface 
~SL Secure sockets layer 
:;::rrp/S HyperText transfer protocol / secure 
Е lntegrated development environment 
U ser interface 
6 
ЧДТУ 242243.005 ПЗ 
ВСТУП 
Актуальність теми: 
Актуальність теми визначається потребою лікарень та медичних установ у 
_ограмному забезпечені для оптимізації роботи, покращення обслуговування 
_uієнтів та підвищення якості комунікації між пацієнтом та лікарем. Одним з 
ючових напрямків розвитку інформаційних систем в медичній галузі є розробка 
- впровадження програмного забезпечення автоматизованої системи обліку 
:.З.UlЄНТІВ. 
Мета розробки: 
Метою даної розробки є забезпечення лікарень та медичних установ зручним 
-1 сучасним інструментом для автоматизації обліку пацієнтів, консультацій, 
згадувань та оптимізації процесів управління інформацією про пацієнтів, послуги 
~.1ичних установ. 
Завдання розробки: 
Завданням розробки є розробка програмного забезпечення для телеграм-бота 
',ledClinicBot11
, яке реал1зує автоматизовану систему обліку пащєнпв, 
;,.,окращуючи взаємодію між пацієнтами та лікарями, а також оптимізуючи процеси 
правління медичною інформацією. Завдання включають розробку функціоналу 
:.1я онлайн-консультацій, нагадування про прийом ліків, управління записом на 
-рийом та обробки медичної інформації. 
Об'єкт розробки: 
Об'єктом розробки є програмне забезпечення автоматизованої системи 
"6.1іку пацієнтів лікарні, зокрема, телеграм-бот "MedC]inicBot". 
Предмет розробки: 
Предметом розробки є процес побудови програмного забезпечення для 
_r ворення телеграм-боту «MedClinicBot,> 
Методи проектування та конструювання: 
Бот "MedClinicBot" створений за допомогою мови програмування Python [3] 
-:-а бібліотеки Aiogram [1], що забезпечує його надійність та ефективність. Завдяки 
7 
ЧДТУ 242243.005 ПЗ 
~ оистанню цих технологій, бот забезпечує не лише швидку обробку запитів 
,i_ єнпв, але і високий рівень безпеки та захисту конфіденційності медичної 
с -\~ації. 
Оnис отр11маних результатів: 
Однією з ключових переваг 11MedClinicBot" є можлив1сть пащєнтtв 
- 1.1увати онлайн-консультації від лікарів, що значно економить час та ресурси 
• .щієнтів, так і лікарів. Бот також може нагадувати про прийом ліків, призначати 
J:. та час прийому до лікарів, надавати інформацію про наявні ліки та медичне 
_Jнання, а також допомагати в управлінні фінансовими операціями. 
Практичне значення отриманих результатів: 
Впровадження телеграм-боту "MedClinicBot" дозволяє лікарням та медичним 
__ -;і.і-Ювам значно покращити взаємодію з пацієнтами, оптимізувати роботу 
•~.:нчних працівників та підвищити якість надання медичних послуг. Це дозволяє 
D' = • rивюше використовувати ресурси та забезпечувати високий ршень 
т-,товування пацієнтів. Завдяки впровадженню такого інноваційного рішення, 
· __ ·єнти можуть отримувати необхідну інформацію щодо медичних послуг та 
.!...--:•tсуватись на прийом в будь-який час і в будь-якому місці, що сприяє створенню 
· ьш досrупної та ефективної медицини. 
Особистий внесок автора: 
В ході кваліфікаційної роботи було спроектовано та розроблено програмне 
_: -~зпечення для телеграм-бота 11MedClinicBot". В ході розробки було забезпечено 
j,_ J надійність та безпеку, впроваджені інноваційні рішення для оптимізації 
_-:чодії між пацієнтами та медичними працівниками. Реалізація даного проекту 
::: 11яє підвищенню ефективності роботи медичних установ і покращенню якості 
:зння медичних послуг. 
Розробка та впровадження програмного забезпечення, такого як телеграм-бот 
ledClinicBot", є важливим кроком у напрямку створення більш доступної та 
:~1-...ивної системи охорони здоров'я. 
8 
ЧДТУ 242243.005 ПЗ 
РОЗДІЛ 1. ІСНУЮЧІ МЕТОДИ ТА ЗАСОБИ РОЗВ'ЯЗАННЯ 
ПОСТАВЛЕНИХ ЗАВДАНЬ 
1.1. Основні визначення 
Одним з інструментів, що дозволяють спростити процес взаємодії мtж 
пацієнтами та лікарями, є телеграм-боти [2]. Телеграм-боти стали популярним 
шструментом для автоматизації різних завдань та процесів у сфері бізнесу, освіти, 
:юзваг та інших галузях. Вони дозволяють швидко та ефективно взаємодіяти з 
. ористувачами, надавати необхідну інформацію, виконувати різні дії та операції, а 
акож збирати та обробляти дані. 
Однією з переваг телеграм-ботів є те, що вони працюють на базі популярного 
-!~сенджера Telegram, який має велику кількість користувачів у всьому світі. Це 
-,вволяє ботам мати широку аудиторію та бути доступними для користувачів з 
:зних країн та регіонів. Крім того, Telegram має високий рівень безпеки та 
: нфіденційності, що важливо для багатьох користувачів. 
Іншою перевагою телеграм-ботів є те, що вони можуть бути створені на базі 
- них мов програмування, таких як Python [З], Java [4], JavaScript [5] та інші. Це 
~ зволяє розробникам вибирати найбільш підходящу мову для конкретного 
_з,1ання та використовувати відповідні бібліотеки та фреймворки для створення 
-_ та. 
Однією з популярних бібліотек для створення телеграм-ботів на мові Python 
Aiogra111. Ця бібліотека має багато корисних функцій та можливостей, які 
зво.1яють створювати потужні та функціональні боти. Однією з переваг Aiogram 
-~. що вона має простий та зрозумілий синтаксис, шо робить процес розробки 
:-:.1 більш швидким та ефективним. Крім того, Aiogram має активну спільноту 
: 1стувачів та розробників, які можуть допомогти вирішити питання та проблеми, 
o:i язані з розробкою бота. 
1.2. Аналіз та моніторинг сучасних аналогів 
Doc.ua [ 6] - портал, що надає послуги онлайн-запису до лікарів, а також надає 
• • • 4 4 
[І\tащю про шкарш та шкувальн1 заклади. 
Переваги: 
9 
ЧДТУ 242243.005 ПЗ 
- велика база лікарів та лікувальних закладів; 
- можливість онлайн-запису на прийом; 
- зручний пошук лікарів та лікувальних закладів. 
Недоліки: 
відсутність можливості записуватися на прийом до сімейного лікаря; 
необхідність самостійно шукати лікарів та лікувальні заклади. 
Meddy [7] - онлайн-платформа, що надає послуги онлайн-консультацій 
лікарів. Переваги: 
- можливість отримати консультацію лікаря онлайн; 
- велика база лікарів різних спеціальностей. 
Недоліки: 
- платна послуга; 
- відсутність можливості записуватися на прийом до лікаря. 
e-Health [8] - державна електронна система охорони здоров'я, що надає 
с.1уги електронної декларації з сімейним лікарем, електронного рецепта та 
~:~ктронної історії хвороби. 
Переваги: 
- безкоштовна послуга; 
- можливість записуватися на прийом до сімейного лікаря; 
- зручний доступ до електронної історії хвороби. 
Недоліки: 
- обмежена функціональність; 
- необхідність особистого візиту до шкаря для отримання електронного 
рецепта. 
Загалом, телеграм-боти мають великий потенціал для автоматизації різних 
ІІВ~ань та процесів в різних галузях. Вони можуть допомогти зберегти час та 
r:урси, підвищити ефективність та якість обслуговування клієнтів, а також надати 
,южливості для взаємодії з клієнтами та партнерами. Однак, для створення 
~•:тивного та функціонального бота необхідно використовувати відповідні 
. - . ,1енти та технології, такі як Aiogram, Telegram Bot АРІ, бази даних, АРІ 
ЧДТУ 242243.005 ПЗ 
зі.Jповідних ресурс1в та інше. Крім того, необхідно враховувати потреби та 
1собливості конкретної галузі, а також вимоги та очікування користувачів. 
І.З. Методи реалізації телеграм ботів 
Телеграм-боти можуть бути реалізовані за допомогою різних технологій та 
uходів. Одним з популярних інструментів для створення телеграм-ботів є 
б.1іотека Telegrarn Bot АРІ [9], яка надає розробникам можливість взаємодіяти з 
- ~legram Bot Platform за допомогою НТТР-запитів [ І О]. Ця бібліотека підтримує 
- зн і мови програмування, такі як Python, Java, JavaScript, С#, Ruby та інші. 
Популярним інструментом для створення телеграм-ботів є фреймворк 
юgram. Цей фреймворк надає розробникам можливість створювати складні та 
нкціональні телеграм-боти, використовуючи асинхронну модель 
:--ограмування. Aiogram шдтримує різні мови програмування, такі як Python, 
- aScript, Go та інші. 
Окрім цих інструментів, для створення телеграм-ботів можуть бути 
Іі:Ористані інші технології, такі як веб хуки [ 11 ], бази даних, сервери, контейнери 
. :.нше. Наприклад, для зберігання даних про користувачів та їх взаємодію з ботом 
-:е бути використана база даних MySQL [12] або MongoDB [І З]. Для обробки 
,кої кількості запитів та повідомлень може бути використаний сервер на основі 
ce.js [14] або Flask [15]. Для розгортання та масштабування бота може бути 
Dристана платформа Docker [16] або Kubernetes [17]. 
Важливо також враховувати питання безпеки та конфіденційності даних при 
оенні телеграм-ботів. Для цього можуть бути використані різні методи захисту, 
як шифрування даних, аутентифікація користувачів, обмеження доступу до 
;.LA:X та шше. 
Вибір технологій та підходів для створення телеграм-ботів залежить вщ 
"°~тних вимог та цілей проекту, а також вщ рrвня навичок та досвщу 
:ооникrв. Важливо враховувати вс1 аспекти проекту, включаючи 
· • uіональність, надійність, безпеку та масштабованість, щоб створити 
.- 1вний та корисний телеграм-бот. 
В .1аній роботі використовується Python та Aiogram для створення телеграм­
Uей вибір обумовлений кількома причинами: 
11 
ЧДТУ 242243.005 ПЗ 
Python є дуже популярною та поширеною мовою програмування, яка \ШЄ 
велику кількість бібліотек та фреймворків для різних цілей. Це дозволяє 
розробникам швидко та легко знаходити необхідні інструменти та 
ресурси для реалізації своїх проектів. 
Aiogram є потужним та функціональним фреймворком для створення 
телеграм-ботів, який підтримує асинхронну модель програмування. Це 
дозволяє створювати складні та ефективні боти, які можуть обробляти 
велику кількість запитів та повідомлень. Крім того, Aiogram має простий 
та зручний синтаксис, що спрощує процес розробки та дозволяє 
зосередитися на функціональності бота. 
Python та Aiogram мають велику та активну спільноту користувачів, яка 
створює багато корисних ресурсів, таких як документація, приклади коду, 
відеоуроки та інше. Це дозволяє розробникам швидко та легко знаходити 
відповіді на свої питання та вирішувати проблеми, пов'язані з створенням 
телеграм-ботів. 
Загалом, використання Python та Aiogram для створення телеграм-бота 
8(>-lЯЄ створити ефективний та функціональний бот, використовуючи просту та 
- ~ ,1 ілу мову програмування та потужний фреймворк, а також мати доступ до 
1t кої кількості корисних ресурсів та інструментів для розвитку та вдосконалення 
-з.. 
1.4. Постановка задачі 
На основі результатів дослідження аналопчних 1снуючих систем, були 
з.чені наступні завдання для розробки: 
розробка програмного забезпечення для телеграм-бота для спрощення 
взаємодії між пацієнтами та лікарями; 
розробка функціоналу для забезпечення можливосп онлайн-запису на 
прийом до сімейного лікаря; 
- розробка модулю для забезпечення функціоналу онлайн-консультації у 
шкаря; 
розробка функціоналу для можливосп заключення електронної 
декларації з сімейним лікарем. 
12 
ЧДТУ 242243.005 ПЗ 
ВИСНОВКИ ДО ПЕРШОГО РОЗДІЛУ 
У першому розділі було досліджено існуючі методи та засоби розв'язання 
оставлених завдань. Зокрема, було розглянуто реформу МОЗ, згідно з якою кожен 
• раїнець може підписати декларацію з сімейним лікарем, який йому сподобався, 
-~залежно від місця реєстрації. Також було розглянуто можливості телеграм-ботів 
• • інструменту для автоматизації різних завдань та процесів у сфері медицини. 
Було проаналізовано переваги телеграм-ботів, такі як широка аудиторія, 
сокий рівень безпеки та конфіденційності, можливість створення на базі різних 
в програмування, а також популярні бібліотеки для створення телеграм-ботів, 
. і як Aiogram. 
Окрім того, було розглянуто можливості телеграм-ботів для автоматизації 
~uесів, пов1язаних з підписанням декларації з сімейним лікарем, записом на 
- 1йом та отриманням консультацій лікаря. Було наведено приклади використання 
-~грам-ботів для цих цілей, а також показано, як вони можуть допомогти 
е~гти час та ресурси, підвищити ефективність та якість обслуговування 
ШІЄНПВ. 
Загалом, телеграм-боти мають великий потеІ-щіал для автоматизації різних 
•2ань та процесів у сфері медицини, зокрема для підписання деклараuії з 
евним лікарем, запису на прийом та отримання консультацій лікаря. Для 
..:.: оення ефективного та функціонального бота необхідно використовувати 
- )відні інструменти та технології, такі як Aiogram, Telegram Bot АРІ, бази даних, 
відповідних ресурсів та інше, а також враховувати потреби та особливості 
оетної галузі, а також вимоги та очікування користувачів. 
13 
ЧДТУ 242243.005 ПЗ 
РОЗ,J,ІЛ 2. ВПРОВАДЖЕННЯ РЕЗУЛЬТАТІВ ДОСЛІДЖЕНЬ У 
ПР ..\~ТИКУ ПРОЕКТУВАННЯ ПРО ГР АМН ОГО ЗАБЕЗПЕЧЕННЯ 
ІНФОРМАЦІЙНИХ СИСТЕМ 
1.1. :\1оделюванuя предметної області 
\fо..1елювання предметної області дозволяє наочно зобразити проблему, яка 
• -~а бути вирішена розробником і формує основу для ефективного 
. ттування системи. 
:.1.1 . Предметна область моделювання. Модель предметної області. Словник 
" етної області 
Предметна область моделювання 
Предметна область для телеграм-бота автоматизованої системи обліку 
• ;пів лікарні охоплює всі аспекти роботи медичного закладу, які можуть бути 
зтизовані для підвищення ефективності та зручності користувачів. В цей 
-- -їк входить: управління даними пацієнтів, розклад прийомів, медичні записи, 
.;щення та нагадування тощо. 
Предметна область цього телеграм-бота орієнтована на створення зручного 
нкціонального інструменту для управління роботою лікарні, забезпечення 
u.к:ого доступу до необхідної інформації та підвищення якості медичного 
• говування пащєнпв. 
:'\1одель предметної області 
\1одель предметної області для телеграм-бота автоматичної системи обліку 
нтів лікарні допомагає створити абстрактну модель бізнес-логіки лікарні, 
:,ристовуючи об'єктно-орієнтований підхід. За допомогою моделі предметної 
~сті відображені ключові аспекти роботи лікарні, представлені сутностями з 
оутами та взаємозв'язками в межах предметної області. Сутності 
~.:тавляють реальні об'єкти та концепції, такі як пацієнти, медичні записи, 
-Di, призначення та інші процеси, пов'язані з обслуговуванням пацієнтів. 
14 
ЧДТУ 242243.005 ПЗ 
Словник предметної області 
У словнику предметної області зазначається інформація про структуру 
о·єкту, атрибути та їх типи. Окрім того, на словнику можуть також зображуватись 
вЬносини. Нижче наведено словник предметної області для телеграм-боту 
.;;а rо\1атизованої системи обліку пацієнтів лікарні: 
І Пацієнт (Patient): 
Властивості: 
ім'я (Name ); 
прізвище (Surname ); 
дата народження (Date of Birth); 
телефон (Phone ); 
телеграм ІД та юзернейм (Telegram ID, usemame); 
Відносини: 
надає дані для декларації; 
записується на прийом до обраного лікаря; 
. . . 
ставить питання та отримує вщповщІ на них. 
' Декларація (Declaration): 
Властивості: 
ім'я (Name); 
номер (Number); 
дата народження (Date) ; 
Відносини: 
- має багато пацієнтів; 
- надає рtзю послуги. 
З Питання (Questions ): 
Властивості: 
р~зю типи питань; 
Відносини: 
. . 
приходить ВСІМ шкарям; 
швидка та зручна відповідь; 
15 
ЧДТУ 242243.005 ПЗ 
2.1.2. Елементи моделювання предметної області 
Для моделювання предметної області існує безліч інструментів, самим 
шуляр ним з яких є моделювання за допомогою UМL діаграм [ 18]. Такі діаграми 
: хоплюють всі основні аспекти системи та допомагають візуально зобразити 
)Ведінку, структуру та архітектуру системи. Об'єкти, що використовуються на 
\IL діаграмах поділяються на декілька типів: структурні, поведінкові та інші. 
1риклад таких об'єктів зображений на рисунку 2.1. 
Актор відіграє роль пацієнта, реєстратури тощо. 
За допомогою актора можна зобразити, як користувачі з 
різними правами можуть взаємодіяти з системою. 
Лctor 
Елемент Use case зображує дії, які доступні дnя актора. 
Назва випадку використання записується всередині овалу. 
Клас зображається у вигляді прямокутника, який 
Ctassname розділений на три частини: назва класу, атрибути 
класу та методи (операції) класу. 
Компонент системи може бути зображенний 
,(AnnotationJJ у виrляді прямокутника з двома малими прямокутниками 
Component у верхньому правому куті . .Він представляє самодостатню 
частину системи. 
Рисунок 2.1 - Елементи моделювання предметної області 
2.1.3. Робоча область моделювання 
Щоб система відповідала всім визначеним вимогам та були враховаю вс1 
;;хіднj аспекти системи потрібно виконати моделювання цієї області . 
.1 ьтати проектування предметної області зображено на рисунку 2.2. 
16 
ЧДТУ 2..f.22-B.005 ПЗ 
, 
~---5-JІ_~ аам_и_•~  f ... 
_ " _&t_~_  _ 
Рисунок 2.2 - Модель предметної області для телеграм-боту «MedClinicBot» 
Опис моделі предметної області: 
Користувач: представляє собою юнцевого користувача системи 
пацієнта, лікаря або адміністратора лікарні. Користувач взаємодіє 1з 
системою через телеграм-бот. 
2 Інтерфейс: представляє користувацький інтерфейс телеграм-бота, за 
допомогою якого користувач може здійснювати взаємодію із системою. 
Інтерфейс отримує запити від користувача і передає їх на обробку. 
3 Обробка повідомлень: відповідає за обробку повідомлень, що надходять 
від інтерфейсу. Він аналізує отримані запити і передає їх далі на 
. . . 
ВІДПОВІДНІ компоненти системи для виконання. 
4 Бізнес-логіка: відповідає за основні функціональні можливості системи. 
Вона обробляє запити від компонента обробки повідомлень і здійснює 
відповідні операції, такі як додавання, оновлення або видалення 
інформації про пацієнтів. 
17 
ЧДТУ 242243 .005 ПЗ 
5 Взаємодія з базою даних: забезпечує взаємодію з базою даних, де 
зберігається інформація про пацієнтів лікарні. Цей компонент отримує 
запити від бізнес-логіки і виконує операції з базою даних, повертаючи 
результати виконання. 
2.2. Формування та аналіз вимог 
Формування та аналіз вимог є критично необхідним кроком у розробці 
- ~а~.шого продукту, так як саме вимоги визначають майбутній функціонал 
1вого програмного забезпечення та критерії за якими можна гарантувати 
вність розроблюваного додатку. 
2.2.1. Формування вимог до програмного забезпечення. Первинні і детальні 
~гн . Вимоги замовника і розробника. Функціональні та нефункціональні 
Формування вимог до програмного забезпечення 
,J.1я формування вимог до програмного забезпечення автоматизованої 
~~ш обліку пацієнтів лікарні необхідно були проаналізовані потреби 
:тувачtв та вимоги лікарень до функціоналу. У результаті аналізу та 
__ ювання цих даних, були сформовані первині та детальні вимоги, вимоги 
3.ника та розробника і визначені функціональні та нефункціональні вимоги. 
. . 
- у' _:~уть представлею результати анашзу та опрацювання. 
Первинні вимоги: 
Зміна особистих даних: 
• • • t • 
пащєнт повинен мати змогу змшювати своє 1м я, пр1звище, контактну 
інформацію, адресу та інші особисті дані через інтерфейс телеграм 
бота. 
... Редагування та відміна заявки: 
можлив1сть редагувати або вщмшити заявку до 11 вщправки на 
перегляд в реєстратуру. 
Отримання повідомлень: 
система надсилає повідомлення пацієнту про стан його заявки. 
18 
ЧДТУ 242243.005 ПЗ 
4 Підтримка багатоактивних користувачів: 
система повинна бути спроектована таким чином, щоб підтримувати 
велику кількість одночасних користувачів без втрати продуктивності. 
5 Безпечне шифрування та захист даних: 
даю, яю передаються через телеграм бот, повинні бути надійно 
зашифровані, щоб запобігти несанкціонованому доступу. 
б Адаптивний дизайн: 
інтерфейс повинен бути адаптований для різних пристроїв та розмірів 
екранів, включаючи смартфони, планшети та комп'ютери. 
7 Ефективний алгоритм обробки інформації: 
розробка алгоритму, який ефективно обробляє та відображає 
інформацію щодо вступного конкурсу, забезпечуючи швидке та 
правильне реагування на дії користувача. 
8 Система автентифікації та авторизації: 
система повинна мати надійну автентифікацію та авторизацію для 
захисту доступу до особистих даних користувачів. 
9 Масштабованість системи: 
система повинна бути легко розширюваною, щоб додавати нов~ 
функціональні можливості, а також масштабувати базу даних та 
серверні ресурси для підтримки збільшення кількості користувачів. 
Детальні вимоги: 
Зміна особистих даних: 
Форма для зміни особистих даних: 
- поля форми: ім'я, прізвище, контактний телефон, електронна пошта, 
адреса; 
- валщащя даних: перев1рка правильносп введення телефону та 
електронної пошти; 
- збереження змін: зміни повинні бути збережені в базі даних шсля 
підтвердження користувачем. 
~ Редагування та відміна заявки: 
Інтерфейс для управління заявками: 
19 
ЧДТУ 242243.005 ПЗ 
список поданих заявок з можливістю вибору для редагування або 
ВІДМІНИ; 
функція редагування: змша деталей заявки до її вщправки на 
перегляд; 
- функція відміни: можливість видалити заявку до її обробки. 
З Отримання повідомлень: 
Система повідомлень: 
типи повідомлень: отримання, обробка, відхилення заявки; 
канали повщомлень: через телеграм бот та, за можливості, через 
електронну пошту; 
налаштування користувача: можлив1сть вибору способу отримання 
повщомлень. 
4 Підтримка багатоактивних користувачів: 
Архітектура системи: 
- використання технологій, яю шдтримують масштабованість 
(наприклад, мікросервіси [19], хмарні рішення); 
балансування навантаження: забезпечення рівномірного розподшу 
запитш м1ж серверами. 
5 Безпечне шифрування та захист даних: 
Шифрування даних: 
- використання НТТРS для захисту переданих даних; 
- застосування додаткових методів шифрування для критичних даних 
(наприклад, особисті дані пацієнтів); 
- регулярні аудити безпеки для виявлення та усунення вразливостей. 
6 Адаптивний дизайн: 
UI/UX дизайн: 
тестування на р1зних пристроях для забезпечення коректного 
відображення та функціональності. 
7 Ефективний алгоритм обробки інформації: 
Алгоритм обробки заявок: 
20 
ЧДТУ 242243.005 ПЗ 
оптимізація процесу обробки заявок для мінімізації часу реакції; 
використання черг та кешування для покращення продуктивносп. 
8 Система автентифікації та авторизації: 
Безпека доступу: 
використання сучасних методів автентифікації; 
- ролі та права доступу: чіткий поділ ролей та прав для різних типів 
користувач ІВ. 
9 Масштабованість системи: 
Архітектура для розширення: 
планування архітектури з урахуванням можливості додавання нових 
модушв. 
ВИМОГИ ЗАМОВНИКА 
- пацієнт повинен мати можливість змінювати свої особисті дані; 
можливість відміни або редагування поданої заявки до відправки на 
перегляд в реєстратуру; 
отримання повідомлень про стан поданої заявки; . 
ефективна система, повинна підтримувати багато активних користувачів 
одночасно; 
безпечне шифрування та захист особистих даних, що передаються через 
телеграм бот. 
ВИМОГИ РОЗРОБНИКА 
розробити адаптивний дизайн для різних пристроїв та розмірів екранів; 
розробити ефективний алгоритм обробки та відображення інформації 
щодо вступного конкурсу; 
- розробка системи автентифікації та авторизації для забезпечення безпеки; 
масштабованість системи повинна бути легко розширюваною для 
впровадження нового функціоналу та забезпечення можливості 
масштабування бази даних та серверних ресурсів. 
Рекомендовані технології: Python [3] та Aiogram [І] для розробки Ьасkеnd­
.:..:тини, SqliteЗ [20] - база даних, та Telegram Bot АРІ для інтеграції з платформою 
. .1еграм. 
21 
ЧДТУ 242243.005 ПЗ 
Функціональні та нефункціональні вимоги 
Функціональні вимоги: 
функціонал для надання користувачем даних для заповнення декларації; 
функціонал для запису користувача та його даних в БД; 
функціонал запису на прийом до лікаря з можливістю обрати лікаря; 
можливість поставлення питання, відправлення цього питання лікарям; 
. . . . . . . 
можлив1сть вщповщати на запитання та вщправка вщповщ1 користувачу. 
Нефункціональні вимоги: 
. . 
система повинна вщповщати швидко на запитання користувача; 
повинна працювати на будь-якому пристрої і бути доступне тільки при 
наявност11нтернету; 
. . . і 
.. 
захист даних пащєнт1в вщ несанкщонованого доступу; 
2.2.2. Формування вимог за допомогою діаграми прецедентів 
За допомогою діаграми прецедентів (рис.2.3) були графічно зображені 
оги до системи, таким чином забезпечуючи більш детальну інформацію про 
-~1ивості взаємодії користувачів з різними правами з системою. 
Те.11щрnм бот 
~ 
---- e-.r.1t.on-~ .. 
Q/ 
л 
Р11су11ок .2.J - J1inгr 3 ,а прспел~нт1n т~пеrрu.м-бОІ)' t~ieuClit1i Ut){)1 
22 
ЧДТУ 242243.005 ПЗ 
Опис діаграми прецедентів: 
Ця діаграма прецедентів ілюструє основні дії користувачів системи через 
- ~legram-бoтa, а також взаємодію пацієнтів і реєстратури з системою. Нижче 
-о.1ано опис кожного прецеденту та учасників. 
Актори: 
- пащєнт: користувач системи, який може здійснювати р1зю дії через 
Те legram-бoтa; 
- реєстратура: працшник медичного закладу, який керує записами та 
. . 
взаємод1є з лащєнтами через систему. 
Прецеденти: 
Заключити декларацію: 
пацієнт може підписати декларацію з лікарем через систему. 
2 Записатись на прийом: 
пацієнт може записатись на прийом до лікаря через Telegt:am-бoтa. 
3 Поставити питання лікарям: 
пацієнт може задати питання лікарям через Telegram-бoтa. 
4 Керування деклараціями: 
- реєстратура може управляти декларац1ями пащєнпв, яю були 
укладені через систему. 
5 Відповідати на питання у чаті: 
.. . . . . 
реєстратура може вщповщати на запитання пащєнпв, як1 надходять 
через Telegram-бoтa. 
6 Керувати записами пацієнтів: 
реєстратура може керувати записами на прийом до лікаря, включаючи 
. . 
створення, зм1ну та скасування запис1в. 
7 Керувати статусом запису: 
- реєстратура може оновлювати статус записш пащєнпв 
(підтвердження, скасування, перенесення). 
23 
ЧДТУ 242243.005 ПЗ 
2.3. Проектування лоrічно'і струк~ури програмного комплексу 
Результати проектування логічної структури програмного забезпечення 
:...:rо\tатизованої системи обліку пацієнтів лікарні дають чітке розуміння структури 
іDоблюваного програмного забезпечення та допомагає визначити взаємодїї між 
ro компонентами. 
2.3.1. Діаграми класів 
Результати проектування структури автоматизованої системи обліку 
.;...lієнтів лікарні подані у вигляді діаграм класів, на яких зображені основні класи 
· -:-теми, їх взаємодії та концептуальні методи. Результат проектування діаграми 
1сів дає чітке розуміння організації та обробки даних у розроблюваному проекті. 
В результаті ретельного аналізу вимог та потреб користувачів були визначені 
~- -овні функціональні можливості. На основі отриманої інформації, була 
:оектована початкова діаграма класів, яка зображена на рисунку 2.4. 
,Om 111n" , 
·---1•-· --
l. 
І 
І OfЩiw У!!! 
І 1 
,_ 
L --· -·- .. -·-- --- ----
І І 
~ , Rr<a ~n 
1 
І 
Рисунок 2.4 - Початкова діаграма класів телеграм-боту «MedClinicBot» 
Після завершення проектування початкової діаграми класів, було визначено 
wікацію класів для більш глибокого розуміння, які атрибути повинен мати 
r. ~ клас та які методи у ньому необхідно реалізувати. 
24 
ЧДТУ 242243.005 ПЗ 
Специфікація класів на початковій діаграмі класів: 
Question - клас об'єктів-питань які надсилають паuієнти; 
User - клас об'єктів-користувачів, який представляє nаuієнтів; 
Doctor - клас об'єктів-користувачів, який представляє лікарів; 
Record - клас об'єктів-записів, представляє записи на прийом у лікаря; 
Declaration - клас об'єктів-декларацій, що представляє заключенні 
деклараuії. 
Проаналізувавши специфікацію клас1в та переконавшись у відповідності 
:юектованої структури вимогам та збережені логічної цілісності, було 
:юектовано повну діаграму класів (рис.2.5) на якій були визначені атрибути до 
кного класу та можлив1 методи. 
І_ Ou11m-oc, 
~ 
Рисунок 2.5 - Повна діаграма класів телеграм-боту «MedClinicBot» 
25 
ЧДТУ 242243.005 ПЗ 
Опис діаграми класів: 
1 Запитання (Question): 
- id: унікальний ідентифікатор запитання; 
- userld: ідентифікатор користувача, який поставив запитання; 
- userName: ім'я користувача, який поставив запитання; 
- questionText: текст запитання; 
- answersText: текст відповідей на запитання; 
- timestamp: дата й час створення запитання; 
- asked: флаг, який вказує, чи було запитання поставлено. 
2 Користувач (User): 
id: унікальний ідентифікатор користувача; 
userName: ім1я користувача; 
userFirstName: ім'я користувача; 
userLastName: прізвище користувача; 
phone: номер телефону користувача. 
З Запис (Record): 
id: унікальний ідентифікатор запису; 
userld: ідентифікатор користувача, який створив запис; 
doctorld: ідентифікатор лікаря, який зафіксував запис; 
phoneNumber: номер телефону користувача; 
patientName: ім'я пацієнта; 
doctorName: ім'я лікаря; 
specialization: спеціалізація лікаря; 
dateOffiirth: дата народження пацієнта. 
4 Лікар (Doctor): 
id: унікальний ідентифікатор лікаря; 
userld: ідентифікатор користувача, який представляє лікаря; 
phoneNumber: номер телефону лікаря. 
26 
ЧДТУ 242243.005 ПЗ 
2.3.2. Діаграми пакетів 
Результати проектування та організації модулів програми у пакети подані у 
-.1я.1 і діаграми пакетів (рис.2.6). Ця діаграма зображує архітектуру системи 
1~rрзм-бота, де пацієнт взаємодіє з ботом через наступні компоненти: основні 
~'!"ОJИ, сервіси бота, база даних та конфігурація. 
111а~"' 
Т•~І~М fiOtOII Пацієнт 
Рисунок 2.6 - Діаграма пакетів телеграм-боту «MedClinicBot» 
Опис діаграми пакетів: 
L Основніметоди: 
виконує основні операції та логіку бізнесу, що пов'язані з взаємодією 
пащєнта з системою; 
- спілкується з компонентом "Взаємодія з телеграм ботом" для передачі 
. . . 
даних та запипв вщ пащєнта. 
27 
ЧДТУ 242243.005 ПЗ 
2 Взаємодія з телеграм ботом: 
забезпечує інтеграцію та комунікацію МDК Telegram ботом та 
внутр1шюми серюсами системи; 
- отримує команди та запити від пацієнта через Telegram бот і передає 
їх до основних методів та сервісів бота. 
3 Конфігурація: 
- зберігає налаштування системи та параметри, необхідні для роботи 
. . 
шших компоненпв; 
шдтримує компонент "Взаємодія з телеграм ботом" з актуальними 
налаштуваннями. 
4 Сервіси бота: 
виконує спеціалізовані операції та служби, які необхідні для роботи 
бота (наприклад, обробка запитів, відповіді на повідомлення); 
отримує дані від основних методів та взаємодіє з базою даних для 
зберігання та отримання інформації. 
5 База даних: 
зберігає всю інформацію про пащєнпв, історію взаємодій, медичю 
даю тощо; 
сшлкується з сервісами бота для отримання та зберігання даних, 
необхідних для роботи всієї системи. 
6 Пацієнт: 
користувач системи, який взаємодіє з Telegram ботом для отримання 
медичних послуг, консультацій та інших функцій; 
через Telegram бот передає свої запити в систему, які обробляються 
шшими компонентами. 
2.4. Архітектурне проектування 
Програмне забезпечення Telegram-бoтa "MedClinicBot" має модульну 
---хітектуру. Це означає, що воно розділене на окремі модулі, кожен з яких виконує 
tвну функцію. Цей підхід робить код бота більш організованим та легким у 
.Jтримці. Основні модулі програмного забезпечення бота: 
28 
ЧДТУ 242243.005 ПЗ 
модуль обробки повідомлень: цей модуль відповідає за обробку 
повідомлень, які користувачі надсилають боту. Він анашзує текст 
повідомлення та визначає, яку дію потрібно виконати. 
модуль взаємодії з базою даних: цей модуль відповідає за взаємодію з 
базою даних MongoDB [13]. Він використовується для зберігання та 
отримання даних про користувачів, записи на прийом та інші дані бота. 
модуль бізнес-логіки: цей модуль містить логіку роботи бота. Він 
визначає, як бот має реагувати на дії користувачів та які дані потрібно 
отримати з бази даних. 
модуль інтерфейсу користувача: цей модуль відповідає за створення 
інтерфейсу користувача бота. Він використовує клавіатури Telegram для 
надання користувачам можливості вибирати дії та вводити дані. 
2.4.1. Діаграма компонентів 
Результати проектування компонентів системи зображені у вигляді діаграми 
rюненпв (рис.2.7), на якій зображено основні компоненти системи та 'іх 
Рисунок 2.7 - Діаграма компонентів телеграм-боту «MedClinicBot)) 
29 
ЧДТУ 242243.005 ПЗ 
Опис діаграми компонентів: 
Пацієнт: 
користувач, який взаємодіє з системою через Telegram Bot [2]. 
2 Старт (Авторизація): 
початковий компонент, де пащєнт проходить авторизащю для 
доступу до системи. Після успішної авторизації він переходить до 
взаємодії з Telegram Bot. 
3 Telegram Bot: 
- основний компонент, який відповідає за обробку повщомлень вщ 
пацієнтів та взаємодію з іншими компонентами системи. Він отримує 
дані від пацієнтів і відправляє їх до відповідних компонентів. 
4 Повідомлення: 
компонент, який відповідає за обробку та передачу повідомлень між 
пацієнтом та Telegram Bot. 
5 Взаємодії: 
цей компонент використовується Telegram Bot для взаємодії з базою 
даних. Він відповідає за обробку запитів до бази даних та повернення 
відповідей. 
6 База Даних: 
компонент, де зберігаються всі необхідні дані системи, включаючи 
. . . . 
даю пащєнпв, результати запитш тощо. 
2.4.2. Розгортання програмної системи на апаратних засобах. Діаграма 
· згортання 
Розгорнути програмний комплекс телеграм-боту з автоматизованою 
.:, _т емою обліку пацієнтів лікарні можна на фізичному сервері або у хмарному 
:хдовищі (А WS, Google Cloud тощо). Перед розгортанням потрібно налаштувати 
. :1вер та шдrотувати для встановлення операційної системи, такої як CentOS, 
-uпtu чи Windows. Після встановлення ОС, потрібно визначити необхідні 
30 
ЧДТУ 242243.005 ПЗ 
:-ограми та інструменти для бота (Java [4 ], Spring Boot, SQLiteЗ [20]) та встановити 
на сервер для коректної роботи програмного забезпечення яке буде розгорнуте 
:-~ ньому. Після налаштування серверу та встановлення всіх необхідних 
-: трументів, потрібно створити та налаштувати базу даних для зберігання 
:юрмації від бота, сервіс повідомлень, електронну пошту. Після чого потрібно 
_.зантажити виконавчі файли телеграм боту на сервер, розпакувати файли та 
з~tістити їх у відповідних каталогах. Приклад розгортання зображений на 
:унку 2.8. 
Telegram Bot Q Server 11J 
t--~J t~ 
НТІР 
~ 
/ ' 
І 'І І "Сl•~~J•: Р {І 
U:'°111!}; 
~ ~ 
'1 
,І' 
Oatab~St @ 
~. ... .,,. ... ~, 
J 
(""''"" :Ю) 
, :)'""=• .-:io 
п flP' , ~'І 
\:ДІtl\3,Р,) ..І  / 
Рисунок 2.8 - Діаграма розгортання телеграм-боту <{MedClinicBot)> 
31 
ЧДТУ 242243.005 ПЗ 
Діаграма розгортання телеграм-боту показує зв'язки м1ж користувачем та 
: взаємодіями з сервером телеграму та базою даних. 
Опис діаграми розгортання: 
І Telegram Bot 
взаємодії: відповідає за отримання та обробку команд від користувача, 
взаємодіючи з сервером для виконання різних функцій; 
- повідомлення: обробка повідомлень від користувачів та надсилання 
відповідей через Telegram; 
авторизація(старт): обробка початкової автентифікації користувача, 
щоб забезпечити доступ до системи. 
2 Server 
- процессор: обробка запитів від Telegrarn-бoтa та взаємодія з базою 
даних для отримання або збереження інформації; 
сервер повідомлень: управління всіма повідомленнями між Telegram­
бoтoм та користувачами, забезпечуючи їх доставку. 
3 Database 
користувачі: таблиця з даними користувачів, включаючи їх особисту 
інформацію та статус авторизації; 
питання: збереження та управшння запитаннями, яю користувач~ 
можуть ставити систем~; 
записи до лікаря та декларації: збереження записів користувачів про 
призначення до лікаря та декларації про здоров'я. 
2.5. Моделювання поведінки системи 
2.5.1. Діаграма діяльності 
Представлена діаграма діяльності (рис.2.9) зображує процес реєстрац11 
аuієнта лікарні та авторизації (початку роботи з телеграм ботом) користувача від 
.алуску телеграм боту та введення своїх особистих даних до надання доступу до 
... нкцій бота. 
32 
ЧДТУ 242243.005 ПЗ 
i:u,,,,, • .ISoO" 00,::, 
tf 
Рисунок 2.9 - Діаграма діяльності телеграм-боту «MedClinicBot» 
Опис діаграми діяльності: 
1 Секція "Авторизація" 
проuес починається з початкової взаємодії користувача з ботом; 
бот перевіряє, чи існує користувач у системі; 
якщо користувача не знайдено, йде перехід до секцн "Реєстрація" 
( стрілка "НГ'); 
якщо користувач ~снує, йде перехщ до секц11 "Запити до тг бота" 
( стрілка "Так"). 
2 Секція "Реєстрація" 
якщо користувача не знайдено шд час авторизації, відбувається 
перевірка, чи дані користувача вже записані в базу даних; 
якщо дані не записані, відбувається записування даних користувача 
(стрілка "НІ"); 
для запису даних вводяться такі дані як ім1я (name), логін (username), 
ID, номер телефону (number) та дата народження (DOB). 
3 Секція "Запити до ТГ бота" 
після успішної реєстрації або якщо користувач вже ~снує, вш може 
здійснювати різні запити через бот. 
33 
ЧДТУ 242243.005 ПЗ 
2.5.2. Діаграма послідовності 
. . 
Діаграма ПОСЛІДОВНОСТІ (рис.2.10) зображує результат проектування 
~юдії між окремими частинами системи автоматизованого обліку пацієнтів 
н I у хронологічному порядку під час користування розробленим телеграм-
Запуск бота 
Cnиcoic: команд 
Обирає команду 
-..;; · - - . - -~-1- -U--rl-l- - --- ---
Особисті данІ 
; 
І~ . - -- - -г-e-t-u-r-n- -- - - - - -
Рисунок 2.1 О - Діаграма послідовності телеграм-боту «MedClinicBot» 
Опис діаграми послідовності: 
1 Учасники 
користувач: це людина, яка використовує систему; 
телеграм бот: програмне забезпечення, яке дозволяє користувачам 
взаємод~яти з системою; 
система: програмне забезпечення, яке виконує основю функції 
системи; 
база даних: сховище даних, яке використовується системою. 
2 Послідовність дій 
користувач запускає Telegram Bot; 
Telegram Bot надсилає користувачеві список доступних команд; 
34 
ЧДТУ 242243.005 ПЗ 
користувач обирає команду з списку; 
користувач надсилає запит Telegram Bot; 
Telegram Bot надсилає дані запиту до системи; 
система записує дан і запиту до бази даних; 
система надсилає Telegram Bot повідомлення про те, що дані запису 
успішно записано до бази даних; 
Telegram Bot надсилає користувачеві повідомлення про те, що дані 
запису успішно записано до бази даних; 
користувач може продовжити роботу з системою або завершити її. 
2.5.3. Діаграма комунікації 
Діаграма комунікації (рис.2.11) демонструє як запити користувача 
· -:обляються ботом, куди він їх передає і як обробляє. 
Рисунок 2.11 - Діаграма комунікації телеграм-боту «MedClinicBot» 
Опис діаграми комунікації: 
1 Пацієнт: 
Взаємодіє з Телеграм Ботом для виконання таких дій: 
подання декларації; 
запис на прийом до лікаря; 
поставлення запитань. 
35 
ЧДТУ 242243.005 ПЗ 
2 Телеграм Бот: 
передає дані в систему, яка обробляє отриману інформацію; 
передає дані в закритий чат лікарів для передачі даних в реєстратуру 
або лікарям. 
3 Система: 
обробляє дані та взаємодіє з базою даних, де зберігаються введені дані 
пащєнпв. 
4 База даних: 
зберігає дані, які були введені через систему. 
2.5.4. Діаграма скінченного автомату 
На діаграмі скінченого автомату телеграм-боту <<MedClinicBot» (рис.2.12) 
J 
· оажено процеси які відбуваються при використані боту користувачем . 
•j  
·-- ) 
І 3авонта ~ ,_. n ttO.ЛI yn nttн1• 
о ·v:-- .... t&. І 
--------l-- ·,,-Х -.---# 
'і'оания 6'СІ&А , • .ан 
•-І ~, t l) 11 Ьй 
►1~ 
___~-_--_---_- ____/  
Рисунок 2.12 -Діаграма скінченного автомату телеграм-боту 
«MedClinicBot» 
36 
ЧДТУ 242243.005 ПЗ 
Опис діаграми скінченного автомату: 
1 Запуск бота: 
- це початковий стан, коли бот запускається. 
2 Обрання команди: 
після запуску бот переходить до вибору команди. 
З Команди: 
Є три можливі команди, які призводять до збору потрібних даних: 
декларац~я; 
прийом; 
питання. 
4 Запис в БД: 
зібрані дані від будь-якої з команд записуються в базу даних. 
5 Повернення до початкового стану: 
ш.с ля передач~.  даних процес повертається до початкового стану, 
готовий до виконання нової команди. 
37 
-
ЧДТУ 242243.005 ПЗ 
ВИСНОВКИ ДО ДРУГОГО РОЗДІЛУ 
У другому розділі було проведено впровадження результатів досліджень у 
рактику проектування. Було здійснено моделювання предметної області, 
изначено ключові аспекти та можливі елементи моделювання. Було створено 
~юдель предметної області та словник предметної області, а також визначено 
їзнес-процеси та можливі логічні зв'язки. 
Далі було проведено формування та аналіз вимог до програмного 
абезпечення. Було визначено функціональні та нефункціональні вимоги, а також 
¾~юги замовника до розробника. Було створено діаграму прецедентів для 
юрмування вимог. 
Проєктування логічної структури програмного комплексу включало 
-ворення діаграм пакетів, діаграми компонентів та діаграми розгортання. Було 
шачено архітектуру програмного комплексу, яка базується на принципах 
~ро-сервісної архітектури. 
Моделювання поведінки системи включало створення діаграми діяльності, 
~грами послідовності, діаграми комунікації та діаграми скінченного автомату. 
Загалом, в цьому розділі було проведено повний цикл розробки 
t:\Jrрамного забезпечення, від моделювання предметної області до моделювання 
,аедінки системи. Було визначено всі необхідні вимоги, розроблено архітектуру 
....1 огічну структуру програмного комплексу, а також проведено моделювання 
~.:~:інки системи. Це дозволить створити ефективну та надійну систему для 
'""!:J\,атизації процесів підписання декларації, запису на прийом до лікаря та 
_ \юдії з Телеграм Ботом. 
38 
ЧДТУ 242243.005 ПЗ 
РОЗДІЛ 3. РОЗРОБКА ТА ТЕСТУВАННЯ ПРОГРАМНОГО 
ЗАБЕЗПЕЧЕННЯ 
3.1. Розробка програмного комплексу 
3.1.1. Обrрунтування вибору засобів реалізації 
Вибір програмних та апаратних засобів для розв'язання поставлених задач 
во..1,иться на підставі постановки задачі, розроблених структури та алгоритму 
_ кціонування розроблюваного об'єкту. 
Для програмного забезпечення автоматизованої системи обліку пац1єнпв 
~нрні (телеграм бот) необхідно навести аргументи на користь вибору середовиша 
зробки, мови (мов) програмування, СУБД та інших необхідних засобів, а також 
фігурації апаратних засобів. Вибір засобів розробки повинен бути спрямоваю,,1 
. . -
оптимізацію процесу розробки (можуть розглядатися часов1, варпсн 1. 
нкціональні та інші параметри). 
Для створення програмного забезпечення автоматизованої системи oб:iiJ..:~ 
-uієнтів лікарні (телеграм бот) було використано наступні методи та засоби: 
- мова програмування Pytlton. Python є популярною ~ювою 
програмування, яка широко використовується в розробці програ,шог 
забезпечення, включаючи створення ботів. Python має простий синтакси ... 
що дозволяє швидко розробляти програми. Також Python має ве.,нІ\'~ 
КІЛЬКLСТЬ бібліотек, ЯКІ ДОЗВОЛЯЮТЬ розширювати МОЖЛИВОСТІ ~юви 
Python є щеальним вибором для розробки телеграм бота, оскЇ-1ьКF 
дозволяє швидко та ефективно обробляти запити користувачів, а тако;,~~ 
легко інтегруватися з іншими сервісами [З]. 
бібліотека aiogram. Для створення телеграм бота ми використовува.11 
бібліотеку aiogram. Ця бібліотека є потужним інструмента,, ..1-1 
створення ботів Telegram, який надає багато корисних функuій 1 
можливостей. Аіограм дозволяє створювати ботів з різноман ітни\t 
можливостями, такими як обробка повідомлень, кнопок, станів, баз .1ан11 
та інше. Також бібліотека aiogram має гнучку систему фільтрів, яка 
ЧДТУ 242243.005 ПЗ 
дозволяє обробляти лише ті повідомлення, які необхідні для роботи [1 ]. 
- SQLite як база даних. Для зберігання даних про пацієнтів, лікарів, 
призначення та іншу інформацію, необхідну для функціонування бота, ми 
використовували SQLite. SQLite є легкою, надійною та простою у 
використанні базою даних, яка не вимагає встановлення та налаштування 
окремого сервера баз даних. SQLite є добре підходить для невеликих та 
середніх проектів, оскільки вона не вимагає великих ресурсів для роботи. 
Також SQLite має гнучку систему типів даних, яка дозволяє зберігати 
різні типи даних, необхідні для роботи бота [20]. 
Visual Studio Code. Середовище розробки, популярний та легкий 
редактор коду, який має багато корисних функцій, таких як підсвітка 
синтаксису, автодоповнення коду, відладжувач та інше. Visual Studio 
Code дозволяє швидко та зручно розробляти програмне забезпечення. 
Також Visual Studio Code має велику кількість розширень, які дозволяють 
розширювати можливості редактора [22]. 
- GitHub. Для контролю версій та спільної розробки програмного 
забезпечення ми використовували GitHub. GitHub є популярним сервісом 
для хостингу gіt-репозиторіїв, який дозволяє спільно працювати над 
проектом, вести історію змін, створювати та клонувати репозиторії, а 
також використовувати інструменти неперервної інтеграції та доставки. 
GitHub дозволяє ефективно співпрацювати над проектом, а також 
контролювати зміни, внесені в код [21 ]. 
- Linux SSH server. Для розгортання та налаштування бота на сервері, ми 
використовували Linux SSH server. Це безпечний та надійний спосіб 
шдключення до сервера, який дозволяє виконувати команди та 
передавати дані через захищену лінію зв'язку. Linux SSH server дозволяє 
налаштувати бота на сервері та забезпечити безперебійну роботу [23]. 
Загалом, вибір Python [З], aiogram [І], SQLite, Visual Studio Code, GitHub, 
1.х SSH server для створення програмного забезпечення автоматизованої 
. !"е\ш обліку пацієнтів лікарні (телеграм бот) дозволив оптим1зувати процес 
40 
ЧДТУ 242243.005 ПЗ 
- зробки, знизити варпсть та підвищити ефективність роботи. Ці засоби 
зволяють створювати ботів з багатьма корисними можливостями, такими як 
-ообка повідомлень, кнопок, станів, баз даних та інше. Також вони дозволяють 
Віі.1КО та зручно розробляти, тестувати та налаштовувати бота, а також спільно 
:аuювати над проектом. 
З. І .2. Опис структурної (функuіональної) схеми 
За допомогою структурної схеми (рис.З. І) були подаю результати 
-( ектування структури системи з зображенням основних компонент1в 
ообленої системи, що дозволяє визначити основні модулі, підсистеми та 
:-соби взаємодії між ними. Функціональна схема (рис.3.2) забезпечує чітке 
з.1ення про те, які функції виконують окремі модулі системи, які вхідні дані для 
1(1,..)ГО потребує тощо. 
Структурна схема 
• 
"jig ооnООtІМ 1,•мул1: ІJ!.іИМІ'ЗДІ 
lllQt.l ~Ht,; ~ 6аю.о .~п 11х 
Рисунок 3.1 - Структурна схема телеграм-боту «MedClinicBot» 
Опис структурної схеми 
Телеграм бот 
Телеграм бот є основним компонентом системи, який об'єднує всі інші 
модулі та забезпечує взаємодію з користувачами через платформу 
Telegram. Основна функція бота - обробка запитів від користувачів та 
передача їх до відповідних модулів системи для подальшої обробки. 
41 
ЧДТУ 242243.005 ПЗ 
2 Модуль обробки повідомлень 
Цей модуль відповідає за прийом та обробку повщомлень вщ 
користувачів.Основні завдання: 
прийом повідомлень від телеграм бота; 
аналіз вмісту повідомлень для визначення їхнього типу (запит 
інформації, запис на прийом, запит на оновлення даних тощо); 
перенаправлення повідомлень до відповідних модулів для подальшої 
обробки. 
З Модуль взаємодії з базою даних 
Модуль взаємодії з базою даних забезпечує збереження та доступ до 
даних пацієнтів. Основні функції: 
збереження нових даних про пацієнтів, отриманих від інших модулів; 
оновлення існуючих записів у базі даних; 
надання запитаної інформації про пацієнтів іншим модулям; 
забезпечення безпеки та цілісності даних. 
4 Модуль бізнес-логіки 
Модуль бізнес-логіки відповідає за реалізацію основних функціональних 
вимог системи. Він виконує наступні завдання: 
обробка запитів від користувачів на основі визначених бізнес­
процесш; 
логіка запису пацієнтів на прийом до лікаря; 
обробка та перевірка даних перед їх збереженням у базі даних. 
5 Модуль інтерфейсу користувача 
Цей модуль відповідає за створення зручного та інтуїтивного інтерфейсу 
для взаємодії користувачів із системою. Основні функції: 
формування повідомлень у відповідь на запити користувачів; 
відображення доступних варіантів взаємодії (меню, кнопки, форми); 
забезпечення користувачів необхідною інформацією у зручному 
форматі. 
42 
ЧДТУ 242243.005 ПЗ 
Функціональна схема 
-Телеграм бот 
------
•.1.~ru. ~-ct11.k."C) 
►;"1(1~C1YIID<Q 
__) 
Рисунок 3.2 - Функціональна схема телеграм-бо:rу <<MedClinicBot» 
Опис функціональної схеми 
Телеграм бот 
центральний компонент, який забезпечує взаємод1ю м1ж 
користувачем та системою. Він приймає повщомлення вщ 
користувач1в, передає їх до відповідних модулів для обробки і 
відправляє користувачам результати обробки. 
2 Модуль обробки повідомлень 
повідомлення: прийом і обробка повідомлень від користувачів; 
результат обробки: видача результатів обробки повідомлень, яю 
можуть бути передаю шшим модулям або безпосередньо 
користувачам. 
З Модуль взаємодії з базою даних 
введення запиту: прийом і обробка запитів на доступ до даних; 
43 
ЧДТУ 242243.005 ПЗ 
статус виконання: інформування про статус виконання запитів; 
елемент бази даних: збереження і отримання конкретних елементів 
бази даних. 
~ ~\~~~~,. 6'-2.Re.c-Rortки 
відправка команди: прийом команд від телеграм бота і передача їх на 
обробку; 
результат обробки команди: повернення результатів обробки команд 
для подальшого використання іншими модулями. 
5 Модуль інтерфейсу користувача 
взаємодія з елементами інтерфейсу: прийом та обробка взаємодій 
користувачів з інтерфейсом; 
оновлення інтерфейсу: видача оновлень інтерфейсу відповідно до дій 
користувачів і результатів обробки команд. 
6 Взаємодія між модулями 
телеграм бот приймає повідомлення від користувача і передає їх до 
модуля обробки повідомлень; 
модуль обробки повідомлень аналізує повідомлення та визначає, який 
запит необхідно виконати, передаючи його до модуля взаємодії з 
базою даних або модуля бізнес-логіки; 
модуль взаємодії з базою даних виконує запит до бази даних, оновлює 
або отримує дані і передає статус виконання та елемент бази даних; 
модуль бізнес-логіки обробляє бізнес-логіку запиту, передає 
результати до модуля обробки повідомлень або оновлює дані через 
модуль взаємодії з базою даних; 
модуль інтерфейсу користувача отримує команди для оновлення 
інтерфейсу та передає оновлення користувачу. 
З. І .3. Опис логічної схеми системи 
Опис логічної схеми автоматизованої системи обліку пащєнпв лікарні 
1начає послідовний алгоритм, за допомогою якого система досягає своєї мети. 
~.1ідовність кроків та процесів які відбуваються у системі визначена нижче. 
44 
ЧДТУ 242243.005 ПЗ 
•пис логічної схеми: 
Запуск бота: 
користувач запускає бота, надсилаючи команду /start; 
Головне меню: 
- бот вітає користувача та відображає головне меню з доступними 
пунктами; 
3 Вибір пункту меню: 
Декларація: 
надання контактних даних: користувач надає свої контактні дані 
(номер телефону, ПІБ, дата народження); 
підтвердження даних: бот підтверджує дані та зберігає їх у базі 
даних; 
надсилання повідомлень: бот надсилає повідомлення про декларацію 
користувачеві та повідомлення в груповий чат; 
Запис: 
надання контактних даних: Користувач надає свої контактні дані 
(номер телефону, ПІБ); 
- вибір лікаря: Бот відображає список доступних лікарів, і користувач 
обирає одного з них; 
запит дати та часу: Бот запитує у користувача бажану дату та час 
запису; 
підтвердження запису: Бот підтверджує запис та зберігає його в базі 
даних; 
надсилання повідомлень: Бот надсилає повідомлення про запис 
користувачеві та повідомлення в груповий чат, 
Поставити питання: 
введення питання: Користувач вводить своє питання; 
збереження питання: Бот зберігає питання та надсилає його лікарям 
для відповіді; 
45 
ЧДТУ 242243.005 ПЗ 
повідомлення про надсилання: Бот надсилає повідомлення 
користувачеві про те, що питання надіслано. 
отримання відповіді: Лікар отримує повідомлення про питання та 
. . 
надсилає вщповщь. 
надсилання відповіді користувачеві: Бот надсилає відповідь 
користувачев1. 
Назад: 
користувач може повернутися до головного меню. 
4 Повторення дій: 
користувач може повторювати дії 2-3, поки не вирішить завершити 
роботу з ботом. 
3.1.4. Розробка бази даних 
На першому етапі розробки бази даних було проведено аналв вимог до 
"tХ)екту, щоб визначити, які дані будуть зберігатися в базі даних, які операції з 
\Ш будуть виконуватися, яю вимоги до продуктивносп, безпеки та 
асштабованості існують. На основ1 результапв цього аналізу була створена 
)Нцептуальна модель бази даних, яка описує основю сутносп та їхні 
JЗЄМОВІДНОШення. 
Концептуальна модель бази даних: 
Користувачі: 
id: унікальний ідентифікатор користувача; 
user_id: ID користувача Telegram; 
user name: ім1я користувача Telegram; 
user_first_name: ім1я користувача Telegram; 
user_last_name: прізвище користувача Telegram; 
phone: номер телефону користувача. 
46 
ЧДТУ 242243.005 ПЗ 
Лікарі: 
id: унікальний ідентифікатор лікаря; 
doctor_name: ім'я лікаря; 
specialization: спеціалізація лікаря. 
Декларації: 
id: унікальний ідентифікатор декларації; 
user_id: ID користувача, який підписав декларацію; 
doctor id: 1D лікаря, з яким підписана декларація; 
declaration_date: дата підписання декларації. 
Записи: 
id: унікальний ідентифікатор запису; 
user_id: ID користувача, який створив запис; 
phone_number: номер телефону, на який записаний пацієнт; 
patient_n ame: ім'я пацієнта; 
doctor_id: 1D лікаря, до якоrо записаний пацієнт; 
date_  of_b irth: дата народження пацієнта. • 
Питання: 
id: унікальний ідентифікатор питання; 
user_id: ID користувача, який поставив питання; 
username: ім'я користувача Т elegram, який поставив питання; 
question text: текст питання; 
answers_text: текст відповіді (може бути порожнім); 
timestamp: час створення питання; 
asked: флаг, який вказує, чи було поставлено питання (О - не поставлено, 
І - поставлено). 
На наступному етапі, на основі концептуальної моделі була розроблена 
-на модель бази даних (рис.З.З), яка детально зображує структуру бази даних з 
· 1 зору конкретної системи керування базами даних (СУБД). Логічна модель 
-:-ажує такі елементи як таблиці, стовпці, зовнішні ключі та обмеження. 
ЧДТУ 242243.005 ПЗ 
0 
0 (V pub1ic 
~ рuЬІіс 
~ useтs 
oeєfaratlons 
---------------- (і) USH)O bi91nt 
11-' useг _:d b•girrt 
В usєr _name ch araciєr varyir; 
,;-. doclor _1 d in,eeger gЩS) 
А u~н_first_na:11~ chaiзcter 
~ pub1ic va,y1n9(255) 
В doc\ors А user_las:_nan..; ct1aracter v 
І -t- ; id se<ial a1,1ng,255) 
cortcr_name А phon1: chзrac.ter ,:зry;n g( 1 
П ch3,;,tE-rvaг 
уіпg(255) S) 
г, sp,:ci al,z:atjon charact@r var 
ying(255) 
public 
EJ questions 
ф publit ·,;s.er_id bigir,; 
~ records F: usemamє- characteт v8ryi1r 
g(1S5) 
111 seriзl 
J} us ~r_ 1d bigin1 
В a11sw~гs_tet., tf:<t 
Н phone_number character v 
arying(! 5) (1 tim<!'stamp tm,es:am;; ·111th 
1imezcn;; 
~ pat,ent_мme char ar.ter •,ar 
yїnq(255) ,Н,  asked ЬооІезп 
і} doctor_,d int,;ger 
tJ date_of_ b1tth 1ate 
Рисунок 3.3 - Логічна модель бази даних для телеграм-боту «MedClinicBot)> 
Для розробки логічної моделі для проекту було обрано технологію SQLiteЗ 
_ ].  яка буде використовуватися в проекті. Вибір СУБД залежить від багатьох 
_._-тор1в, таких як тип даних, обсяг даних, продуктивюсть, безпека, 
-~штабованість, вартість та інші. Після вибору СУБД було створено фізичну 
.Jель бази даних, яка описує, як логічна модель буде реалізована в конкретній 
~ 'БД . Фізична модель включає в себе такі елементи, як типи даних (Рисунок З .4 ), 
.\tip стовпців, розміщення таблиць, індекси, партиціонування, реплікація та інші. 
48 
ЧДТУ 242243.005 ПЗ 
U wrn-юvт ROWJD C.J SТ'RІСТ 
Forcig,1 Not 
N a me U11• 
Кеу Сtнкk •~ \ .11..l Collat" 
l id INIHilR . , , 
2 c,seг_id ТNТГ<,ГR ',{ 
З user_  паr11е Т[ХТ 
4 p l1one I NTEGER 
5 full_пan,e ТЕХТ 
6 d<1te_birtl1 NUMERIC \, ' ' 
Рисунок 3.4 - Типи даних для таблиці користувачів 
Після створення фізичної модеш було створено пайтон скрипти для 
-ворення та наповнення бази даних. Ці скрипти були написані на мові SQL та з 
;.ористанням спеціальних інструментів, таких як SQL Serve1· Management Studio, 
_ -\dmin, MySQL Workbench [ 12] та інші (рисунок 3 .5). 
Ф · п·е;1tе,_ tab1>'0 : 
еоrш "'',І' · >! , . с,rюш:-сt( ·,1.~1 ~•/ri,,ic.:,. ,Jt,- ) 
.:ur-sor а .:or,n . с1.1г~оr() 
<u•·=r .exe.:.ute( · · · 
(RfAH: !дШ Е Н ,101 І XISTS uo;;er'i 
""'"". ,d IN'/TGJ:R, 
п,хт' 
i,·~<>r _f  і ,·s(_,.,...,,, !f Х'І, • 
цs.,:~f"' l .:•~t._r•~-~ ·r [Xf, 
17 рІчщ<> I f< r f.-6ЄА 
,в 
І', 
L·~ с,·(,)Пf!. C<« mi '\:() 
со,,п .cl -r,s e {) 
,J(• f ;·•jd_ uS•!N"(U'",<'l"_id, US(·r·_,мme): 
conn ч-1 І it ••І . r.<:>nnect ( • d-o>td/<J.J1 
cur">o r ~onn. curscx-() 
cш·sor ,,e:,e<,ut,e("s1· r L<: t • <.1s,,r,;. \-ЬІНИ, ·u-.,e•· ~;,J • , ( u s"'r _ict., )) 
«>< і'>tі•>к "s,.,,• ~ ,·щ·яn·.f(•to«;me() 
if e x1s.t it1g u se-r- is ,._,,,,,: 
сш·-.оr- .ex....:u,:,.{ • • · 
!N~I Ri 1Nf0 tJ~'lЧ. . ~ {1.1s-r.:ч· id ► ;1<-.Р•' n,._1~} 
vл, Ш·S ( ?, і') 
•' · • (usE'Г' _id, us.:,r_,i-)} 
СОJШ. С ОІІІРі t ( ) 
<..<.>ш1 . с:. Іоsf!() 
Рисунок 3.5 - Приклад SQL запитів 
Після створення бази даних було проведено тестування (рис.З.б), щоб 
:с-вірити, чи працює вона належним чином, чи виконує всі необхідні операції, чи 
=\ tилки та неточності в даних. Тестування може включати в себе перевірку 
. . . 
тх, перевірку продуктивності, перевірку безпеки, перев1рку сум1сносп з 
И\Ш системами та шш1 види тестування. 
49 
ЧДТУ 242243.005 ПЗ 
Structure Data Constrarnts [ndex~ Tnggers DDL 
Grid vie1•1 Form vie\·, 
8 
id user _jd user_ пат, phone full_name date_birth 
1 1 585621771 nowayrm 380960908006 nіб 22.11.2004 
2 2 412286661 zpЬear 380504062253 Гор Пор ~1ор 12.10.2002 
з З 1637374256 Zesst21 380664719866 Бородай Євген 26.11.1984 
4 4 6847357856 
Рисунок 3.6 - Приклад успішного запису користувачів в БД 
і 
Після успішного тестування бази даних впроваджуємо їїв роботу. При цьому 
~обхідно враховувати вимоги до безпеки, масштабованості, продуктивності та 
ІЗ..Jійності. Також необхідно передбачити механізми резервного кошювання та 
...: шовлення даних у разі виникнення непередбачених ситуацій. 
Під час експлуатації бази даних необхідно проводити моюторинг та 
. : ,нюстрування, щоб забезпечити її надійну роботу, виявлення та усунення 
!есправностей, оптимізацію продуктивності, забезпечення безпеки даних та інші 
~обхідні заходи. 
З .1.5. Розробка інтерфейсу користувача 
Інтерфейс користувача для телеграм-бота "MedClinicBot11 є ключовим 
-.::-\1ентом взаємодії між користувачем та ботом. Для створення ефективного 
ерфейсу необхідно враховувати всі вимоги та очікування цільової аудиторії. 
жче наведено дета.:1ьний аналіз та розгляд основних елементів інтерфейсу. 
Меню головної навігації 
Меню головної навігації (Рис 3. 7) є першим, що бачить користувач при 
аємодії з ботом. Воно повинно бути простим та інтуїтивно зрозумілим, щоб 
-ристувач міг легко знайти потрібну функцію. Меню головної нав1гацt1 
50 
ЧДТУ 242243.005 ПЗ 
.tedClinicBot" містить кнопки для основних функцій бота, такі як "Декларація", 
Запис", "Поставити питання". 
(D ..К,tiitM\\< -'І · -~ 
rут, 
о 
с Сг~Щ!!t<"• 
j 
\(МЩ~ 
~ ~4nrpyn" 
(У ІІЦ.11>! ,ia><t ІМ ~І;Щ!і 
(r~filCJM~P.,irol.t 
і9 fІосІ-1111 !ЦІІІ4J.ІН14'1 11111:ill)IU 
Рисунок З. 7 - Головне меню телеграм-боту «MedClinicBot» 
Панель управління: 
Панель управління (рис.3.8) є одним з основних елеменпв інтерфейсу 
--:истувача, який дозволяє користувачеві взаємодіяти з ботом. Панель управління 
-винна бути зручною та функціональною, щоб користувач міг легко вводити дані 
. виконувати необхідні дії. Панель управління "MedClinicBot" містить кнопки для 
.1ення даних, такі як "Надіслати номер телефону" (рис.3.9), "Введіть ПІБ", 
аедіть дату народження", "Виберіть лікаря", "Введіть дату та час прийому", 
wайте питання" та "Надіслати відповідь". 
51 
ЧДТУ 242243.005 ПЗ 
І Декларація І Запис 
? Поставити пи~ання 
Рисунок 3.8 - Панель управління ботом 
Ту; вv. можІ:Jе nришвидшип,, або д1tсtАнц!ііно офорuи1и 
№J(Jiapaцtю з 1-1аши1.1 11ікс1рем 
Нзцатм дані дпн .иІСІtІ~• 
Надіслати номер телефону 
Назад 
Рисунок 3.9 - Панель надсилання номеру телефона 
Екрани введення даних: екрани введення даних (рис.З. І О) є елементами 
терфейсу, які дозволяють користувачеві вводити необхідні дані. Вони повинні 
ти зручними та інтуїтивно зрозумілими, щоб користувач міг легко ввести 
~бхідні дані без помилок. "MedClinicBot" має екрани введення даних для 
~..1ення номера телефону, ПІБ, дати народження, дати та часу прийому, питання 
- ВЩПОВІД1. 
Екрани підтвердження: екрани підтвердження є елементами інтерфейсу, які 
зволяють користувачеві перевірити введені дані та підтвердити їх. Вони повинні 
ти зручними та інтуїтивно зрозумілими, щоб користувач міг легко перевірити 
1е..1ені дані та підтвердити їх. "MedClinicBot" має екрани підтвердження для 
пвердження номера телефону, ПІБ, дати народження, дати та часу прийому, 
тавня та відповщ1. 
52 
ЧДТУ 242243 .005 ПЗ 
8 &оид.11:рttихо В.1н1диспА8:З Іrорівна 
8 Анд1>і,,.,к0Сер,-ій Вім•оро., ..- . 
Рисунок З .1 О ~ Екран введення даних для вибору лікаря користувачем 
Повідомлення: 
Повідомлення є елементами інтерфейсу, які дозволяють боту надсилати 
.ористувачеві інформацію про успішне або неуспішне виконання операцій, а також 
І 
-ро поточний стан обробки запитів. Повідомлення повинні бути зрозумілими та 
іформативними, щоб користувач міг легко зрозуміти стан обробки свого запиту. 
'"\fedClinicBot" надсилає користувачеві повідомлення про успішне або неуспішне 
творення декларації, запису на прийом, надсилання питання, а також про 
оточний стан обробки запитів. Приклад повідомлень можна побачити у процесі 
13.Лису на прийом, що зображений на рисунку 3.11. 
M~dCl,nicB-O't 
CLI 
но.-~ тt11•фону· 
r),. . П.;ІІLtjІІІЕНТ.іІ: ЖАбоt ... .-.<СЬІІСИ"' 
ПІІ. лtка.р-я: Бo♦~Uf:)..:!NI~ О IВna,All'!l,C,fl,.Jfld l-r"o,:;i1,t;i"iJ 
Д.!11,. n~. .... i.oм)''~ з.~втр., 
.... 
e..w,~ ~~ f"1p~it()"W'I П~.-1.ЙНFНd, ~··~~щ~~ ч"i;.u. .. 3 &a:,..t.~ 
~~' нж~ i.t:.>i ,.-::v-:,:и ут,u~-~w,нм 11ie r dlІей 
81 Де.кл8раціst 
"l floC..-i!IBM'Т..,. ПИТ.аІfоJН-Я 
Рисунок 3.11 - Процес запису на прийом 
53 
ЧДТУ 242243.005 ПЗ 
Ад~• іністраторська панель: 
Адміністраторська панель (рис.3.12) є елементом інтерфейсу, який дозволяє 
.uміністраторам керувати ботом. Адміністраторська панель повинна бути зручною 
'а функuіональною, щоб адмш1стратори могли легко керувати ботом. 
--uмш1страторська панель ttMedClinicBot" м1стить функції для перегляду 
. '!"атистики, вигрузки бази даних, надсилання розсилок та перегляду невідповідних 
-нтань користувачш. 
Ро)(ИІООІІ 
tu_ял 
Рисунок З .12 - Адміністраторська панель телеграм-боту «MedClinicBot» 
Для створення ефективного інтерфейсу користувача для телеграм-бота 
ledClinicBot" було враховано всі вимоги та очікування цільової аудиторїї. Був 
::~оведений детальний аналіз та розглянути всі основні елементи інтерфейсу, щоб 
:)сзпечити максимальну зручюсть та функціональність бота. Інтерфейс 
Dистувача вийшов простим, інтуїтивно зрозумілим та надає користувачеві всю 
. :_)бхідну інформацію для взаємодії з ботом. 
3.1.6. Опис розробки програмних компонентів 
У цьому розділі наведено детальний опис розроблених програмних 
>;1понентів та описані засоби за допомогою яких вони були розроблені. Повний 
ї(tнГ програми наведено у додатку Б. 
Модуль bot_init 
У цьому модуш були імпортовані необхідні бібліотеки, таю як aюgram, 
;;;шg, config. Також у ньому були створені екземпляри Bot, Dispatcher та 
54 
ЧДТУ 242243.005 ПЗ 
t~moryStorage, які використовуються для роботи бота. Для логування подій бота 
Jключається middleware - LoggingMiddleware. Функція start() використовується 
-я запуску бота. 
Модуль handlers 
Модуль handlers містить обробники подій, що надходять від користувачів. 
У цьому модулі були визначені функції-обробники для команд /start, /help, 
~cclaration, /schedule, /question, /admin, а також для callback que1·y та 
~~ssage_handler. Кожен обробник виконує певну логіку в залежності від отриманої 
· .1ії. Наприклад, обробник команди /start викликає функцію greet_u ser, яка вітає 
оистувача та надсилає йому головне меню бота. Для отримання даних про 
-оистувача, таких як user id та user full_name, використовується 
. gram.types.Message. Також використовується aiogram.types.ReplyKeyboard 
І 
!arkup для створення головного меню бота. 
Модуль database 
Модуль database містить функції для взаємодії з базою даних. У ньому були 
1начені функції для додавання, оновлення та видалення даних користувачів, 
!rшсів на прийом, питань та відповідей, а також функції для отримання даних з 
.ш даних. 
Модуль keyboards 
Модуль keyboards м1стить функції для створення клав~атур, яю 
шристовуються в боті. У цьому модулі були розроблені функції для створення 
ювного меню, клав1атури для введення даних користувача, клаюатури для 
1 твердження даних, клавіатури для адмjністратора тощо. Наприклад, функція 
--зіл_k eyboard використовується для створення головного меню. Для створення 
~рактивних елементів меню використовується aiogram. types.ReplyK eyboard 
arkup. 
Модуль states 
Модуль states містить визначення стаюв, які використовуються в боті. У 
>,1у визначаються класи MyState, Му AnotherState, AnswerState, QuestionState, 
)adcastState, які використовуються для зберігання даних користувача в процесі 
~\ЮЛ.Їі з ботом. Наприклад, клас MyState визначає набір станів, яю 
.:-ористовуються при введенні даних користувача для запису на прийом. 
55 
ЧДТУ 242243.005 ПЗ 
3.2. Тестування системи 
У цьому розділі буде проведено тестування системи з використанням різних 
-іJ,ходів. Результати проведеного тестування продемонструють готовюсть 
рограмного забезпечення до впровадження та виконання поставлених завдань а 
з.кож відповідність розробленого програмного забезпечення до визначених на 
. rаш проектування вимог. 
3.2.1. Модульне тестування 
Тестування бота на платформі Telegram було виконане з використанням 
1б.1іотек, таких як aiogram (1 ], pytest, і pytest-asyncio. На рисунках 3.13 та 3.14 
· зведено частину коду для модульного тестування основних функцій бота: 
~,ytest. fixture 
·, stor·,1geO; 
i'etш·ti ~1т•y',tQr,їgf?() 
fi xttlf'(> 
del disl)dtchPr(storage): 
dp.staг,,ge , storage 
re! Ш'І1 1jp 
@pyt!.'S{ , fi xt llГf' 
!lrss age{) : 
гetur•n ~1;,~s~;,,(~s~,1gt' _id~ \, d;ite, · , ct1dt~·c•r1 , , І U 
~ t І ' 
~~1 cdllback_query() : 
1·t,turr1 1 •. 1.І І!~;.є~ш·у(іd"l, f І'()i'll_user~ІIOr\,, , вws'Sag.<1 -N,!l'lt', chat instano&1 ° ,,н,, data~Іюm•) 
Q(,yt{«,! .iм1·k . asynиo 
;•, 1 :tJ' 'te-,t_,tart_ro«ІМa1к!{tHspatt:lюr, ll'IP'>saee): 
owssagc. teкt. "' · fs.stm·t · 
Юildit dJ <;p2Jt1:b('r, fe{>J_ нpdi.Іtl)(ntess.::ч~,.) 
response ~ di~p~tcher. 111essJ.~e_handlers[0J.filtersJ~] 
;i:,дert Г<'$роr1~е "" · stJr· t c,лm1aud' 
~с;ут v~t .т~rk,ао;.утк їо 
1;" .. ,· test_d,ч:.la1·atirn1(dis:мtcht!r, mes~ag~): 
111(•,ss;Jge-. text ,. " І д12кш1ріі!uія~ 
Jw.:н t di t{Jdt с her. f с~ _ updat, фtt-SS<)f(') 
Гt'-!,pon.-.. . • di~p.at(.heГ.ll(!SSag{' harкi1f>І'S{1/ .HHrrsfeJ 
,J~;sr•rr rІ?i:,poflsl! -.,, 'dнlaratil,n' 
Рисунок 3.13 - Програмна реалізація тестів на натискання елементів 
інтерфейсу «Старт» та «Декларацію> 
56 
ЧДТУ 242243.005 ПЗ 
~pyt· ., •• t _- ,-k. a,;.yn ,; і~, 
~J async_ ,1,•і• test ask_quPst:iюr.(disp;}t<:tн•r, ino:>ssage): 
Slc rn,•ss.-g.,,.t:e)(t: ,, ·· ? он,,.,,.,.,-
R • ,i...,., і t . di <sp.rtctн!І'. feed_update-(messёtge) 
,и r'◄'":'>ponse = <Ji spat·chi.'r. ine""'>""g~i __ handl er•s [ - 1..] .·f'il -t:ers [t.)1 
В' f,iJi,y!:<•e. t .m..trk.asyncio 
<)S"I,'' t:est_І,an,He_.i:iue,:;ti<>n(di-r.patct1c-r·. mc-ss.agc-, st:.at.e: f·sмr;:cщ!:e~t. ): 
.~w,1 і І !i'ta-t,:,. set -st..ite(QUPst і onStat.e . ..:аї t і ngForQtд'~t:. іо1>) 
me ss.~g~ ... t"ext. -z rJ.lІІCe ваІJ.~.е .ім_.. я? .. 
,,.,,,., і. t d::I ..;р;н: ,. r,.-r. f e('d opdate(..,.cs""f:•~) 
re~ponsp • dWai~ s tatP.get ~ata() 
.:.,;;;с,гt re,-p<)Jt$t.•[ '.ciu<1s1:·ioп __ tcxt .] .. ,, 'я..:,а• (,І.;JІJН! ім'н?' 
Jirvy t~!:> t . na..н·k. а,;,уос: іо 
<>,:, .,-. vr, ,и-4· t:e-st_s;>v<• _an.-.wer((I :ї spa-tchІ?r, trl;(•ss.-:ig.,., ,;;t· .. tl'f: l'S.~icu-r1t:ex1: ): 
., а~,;1 і t· "ta t. . ,... seti ....s  "tate {l,n">wPrSt.at,e. W,1i "t· it)f:f·oгAns.wpr) 
ф,•,,j t. -.;.t";,.І "'·"P 'latc,r_ _ do'\1:ac<,,\Jf'SI ion it1~ 1, I.J',of"r <ЮС to,r _ j,i ·І) 
,-;,, 1w..• -s •.;•&~· t:ext: -· · Мо<' і,,. .. ., до..-. rop • 
t 1,0 ...., .,і 1·: єІ:і sr,at·.:::he·r. f'e,ed_ _u pdat@(messag-,) 
н~..~. ,-.,sponse- = ,..,,.,. і t st:at~-ge-t_state() 
,iJ; o'><;er·1: r,;,spon,se і~ t.ioPtc 
Рисунок З .14 - Програмна реалізація тестування процесу задавання питання 
і 
Опис модульних тестів 
test_s tart_  command: тестує обробник команди /start; 
test_declaration: тестує обробник натискання кнопки "Декларація"; 
test_provide_declaration_data: тестує обробник callback query для надання 
даних для декларації; 
test_c ontact_received: тестує обробник надсилання контактних даних; 
test_process_  name: тестує обробник введення імені; 
test_process_dob: тестує обробник введення дати народження; 
test_c onfirm_  data_ yes: тестує підтвердження введених даних; 
test_ask_  question: тестує обробник кнопки "Поставити питання"; 
test_h andle_  question: тестує обробник введення питання; 
test_s ave_  answer: тестує обробник збереження відповіді. 
Таблиця 3.1 
Результати модульного тестування 
\Іодуль Результат 
:~st start- command Успішно 
-
~st declaration Успішно 
-
:~st_provide_  declaration_  data Успішно 
57 
ЧДТУ 242243.005 ПЗ 
Продовж. табл. 3.1 
test contact received Успішно 
test_process_  name Успішно 
test_process_dob Успішно 
test_c onfirm_  data_ yes Успішно 
rest ask question Успішно 
test_h andle_  question Успішно 
test save answer Успішно 
3.2.2. Інтеграційне тестування 
Інтеграційне тестування допомагає переконатись, що р1зю компоненти 
нстеми взаємодіють між собою належним чином та відповідають очікуваному 
~зультату. Для інтеграційного тестування телеграм-боту «MedClinicBot» була 
1.нкористана бібліотека pytest разом з pytest-asyncio та aiogram. 
Програмна реалізація розроблених інтеграційних тестів для розроблюваного 
трограмного забезпечення зображена на рисунку З .15. 
'/9 i1,vt,,,t • ·""ync іо 
!Н ,,,- • І l • ІІІt"r І JІІ . ~~,. . ЦІІtІ І 
• 
;: ; ,hrJ., 1 • di~p;tt t ht~r~, • ur,1i,it:t' (1111tt~. -.s..iig.E..*) 
гesp<mU- - di'-'f.'i>\:Cher.""''-'~"fs" hdl\cHer-~{ll-ii1ti,-г-s(OJ 
2 • . І l ~ 
c:.alJ , • , , .d,111':.1 1 'e,·мke:~3rL_,.iP:''-3i!"•~-Jf,-~~1t' 
U'-' ... ,. .н  di1'J'dtclн,r.fe<>d_ <1P,d.at .. (,;alн,. . ,1c_ (ІUІ'·І"У) 
~esj.)Of>S<' ~ disp;.,tcher.caJlback qu~ry h~nd]eгs{ij.filtersf0) 
1·~ ~ :7· , ,·.1,;;t ; J rj .-.~ -~а=' 
,:,_,, con:tac{. " type,.Cor,\ .sc t{phut,.,_,ш.,,Юr·-· 1]3456789' ) 
~-- ~-:.sdgc,, . (:Qf'lt.a<.t • c.o,nt.act 
.,.,,.і t st;at ... ~ ..t  ,t"tA(МyAnOth<>,·St:ate.pfl""'". t>1illli><>•· ..-e,..eivt>d) 
;s,.-a \ • d; ~s•;;tcr.~r. f l!<!t(_ vpdate(111es~) 
'•l' ,-.,ecpcns.e """lt s.tute.ge,t ,da't:$0 
~•, ,ІG s№t геsропsс ( "f'~Є' n<.МІІЬРг • j • ' 1 J.Зд 5!>І~ · 
1a·it 111('11GS oigeo.t-ext: w, +:·'Іn-ш~ 1н.аноn· 
,~~ ,,...iJit di~p~t~hf>l'".f~~-updare(~es~~ge) 
1 ~ r<'~P"'"'"" .,_ 1 t :.t,H<",Rf't_d,>t;J() 
І~ .:.-,.~,.c,,f"'t rl'!~po:n$~[vp~1=ti(:"f}t _N?,)j __} l"')NM~ J • =- '11.l;]..,. }FJ~"'JtIO(t~ 
Рисунок 3.15- Програмна реалізація тестування процесу запису на прийом до 
шкаря 
58 
ЧДТУ 242243.005 ПЗ 
Опис інтеграційних тестів 
І test_f ull_d eclaration_ process: перев1ряє повний процес оформлення 
декларації від початку до кінця, включаючи введення телефону, 1мею, 
дати народження 1 пщтвердження даних. 
2 test_f ull_  appointment__process: перевіряє повний процес запису на прийом 
до лікаря, включаючи введення телефону, імені пацієнта, вибір лікаря, 
введення дати прийому і підтвердження даних. 
З test_f ull_q uestion_ _process: перев1ряє процес залишення питання 
. . 
користувачем, включаючи вщправлення питання 1 отримання вщповщ1 
від лікаря. 
Ці тести перев1ряють взаємодію м1ж р1зними компонентами розробленої 
і 
-нстеми автоматизованого обліку пацієнтів лікарні у вигляді телеграм-бота і 
~реконуються, що весь процес від початку до кінця працює належним чином та 
~;_:~повідає очікуваному результату. Результати тестування представлені у таблиці 
Таблиця 3.2 
Результати інтеграційного тестування 
~омпонент Результат 
:z-st _ full_d eclaration_ process Успішно 
: ::: st_ ful І_а рро intment_ process Успішно 
:est_  full_ question_ process Успішно 
3.2.3. Системне тестування 
Системне тестування перевіряє всю автоматизовану систему обліку пацієнтів 
карні в цілому, включаючи всі компоненти з яких вона складається та їх 
нкціональність, щоб переконатися, що взаємодія між ними та результати їх 
боти відповідають очікуваному результату який базується на вимогах до 
vграмного забезпечення. Тестування у цьому пункті враховує функціональні і 
59 
ЧДТУ 242243.005 ПЗ 
!іефункціональні аспекти системи, такі як продуктивність, безпека і зручюсть 
зикористання. Для реалізації цього тестування було бібліотеку pytest разом з pytest­
J.Syncio і aiogram. Структура системного тестування представлена на рисунку 3.1 б. 
lir'J' re<,t . fixture 
<1:•1 stor-,ge(): 
~tum Мemof'yStorage() 
,i:iyн,,.t. fixt:urt'! 
rJІ?: di spatcher( storagE'): 
.. · •. • •; 1, 
Ір 
~pyte~t.fixture 
oof Joop(): 
r~turn asynєio.get_event_loop{) 
•f ixture 
aies sage{) : 
, ІМ ' ['!l[' ь 
.11~tur1? 
callЬack_query(): 
N'furп \ypr ,.1.зl1bact.;J.Jщiry(id,-1, frot11_usel""-. , 11essage,,tш1,, chat_instaлce- ' , data~ } 
Рисунок 3.16 - Структура системного тестування 
Опис системних тестів 
1 test_system_full_process: перевіряє повний процес взаємодії користувача з 
ботом, включаючи всі основні функuїі: оформлення декларації, запис на 
прийом до лікаря і задавання питання; 
2 test_doctor_appointment: перевіряє проuес запису на прийом до лікаря. 
Цей тест включає вибір спеціальності лікаря, перевірку доступних дат і 
часу прийому, вибір конкретного елоту, шдтвердження запису та 
. . . 
отримання вщповщного повщомлення; 
3 test_d eclaration_  creation: перевіряє процес оформлення декларації з 
лікарем. Цей тест включає вхід до системи, введення особистих даних 
користувача, вибір лікаря, заповнення необхідної інформаuії для 
декларації, підтвердження оформлення та отримання відповідного 
пов щомлення. 
60 
ЧДТУ 242243.005 ПЗ 
Таблиця 3.3 
Результати системноrо тестування 
\1одуль Результат 
test_s ystem_  fu] І _process Успішно 
rest_d octor_  appointment Успішно 
test declaration creation Успішно 
3.2.4. Приймальне тестування 
Приймальне тестування перевіряє, на скільки система відповідає визначеним 
нt\1огам і чи готова вона до реального використання. Тести у цьому пункті 
1 к..1ючають перевірку функціональності, продуктивності, . безпеки, зручності 
І 
·11користання і відповідності вимогам. Приймальне тестування проведено у вигляді 
.з.нуального тестування, тобто було виконано вручну і включає сценарії, що 
,Jображають реальні умови використання системи. Детальний опис проведеного 
=~тування наведений у списках нижче: 
Оформлення декларації 
• 
1 Сценарій: 
успішне оформлення декларації. 
2 Кроки: 
запустіть бота і введіть команду /start; 
натисніть кнопку "Декларація"; 
натисніть кнопку "Надати дані для декларації"; 
надішліть свій номер телефону через кнопку на клавіатурі; 
введіть ваше ПІБ у форматі 1'Іван Іванов"; 
введіть дату вашого народження у форматі "О 1.01.1990"; 
.. . . . 
шдтвердпь введен1 даю; 
переюрте, що отримали повщомлення про усшшне оформлення 
декларацн. 
З Очікуваний результат: 
бот вітає користувача; 
61 
ЧДТУ 242243 .005 ПЗ 
користувач може натиснути кнопку 11Декларація"; 
користувач отримує запит на введення номеру телефону; 
користувач вводить ПІБ у правильному форматі; 
користувач вводить дату народження у правильному форматі; 
. . . 
користувач шдтверджує введею даю; 
користувач отримує повщомлення про усшшне оформлення 
декларації. 
Запис на прийом до лікаря 
1 Сценарій: 
успішний запис на прийом. 
2 Кроки: 
і 
запустіть бота і введіть команду /start; 
натисніть кнопку "Запис 11
; 
натисніть кнопку "Записатися на прийом"; 
надішліть свій номер телефону через кнопку на клавіатурі; 
введіть ГПБ пацієнта у форматі "Іван Іванов" ; , 
виберіть лікаря зі списку; 
введіть бажаний час та дату прийому у форматі "01.01.2022 10:0011
; 
підтвердіть введені дані; 
перевірте, що отримали повідомлення про успішний запис на прийом. 
З Очікуваний результат: 
бот вітає користувача; 
користувач може натиснути кнопку "Запис"; 
користувач отримує запит на введення номеру телефону; 
користувач вводить ШБ у правильному форматі; 
- користувач вибирає лікаря зі списку; 
користувач вводить бажаний час та дату прийому у правильному 
форматі; 
. . . 
- користувач шдтверджує введен1 даНІ; 
користувач отримує повідомлення про успішний запис на прийом. 
62 
ЧДТУ 242243.005 ПЗ 
Задавання питання лікарю 
1 Сценарій: 
усшшне задавання питання. 
2 Кроки: 
запустіть бота і введіть команду /start; 
натисніть кнопку "Поставити питання"; 
натисніть кнопку "Залишити питання"; 
введіть текст питання, наприклад, "Яке ваше ім'я?"; 
. . 
перев1рте, що отримали повщомлення про надсилання питання. 
3 Очікуваний результат: 
бот вітає користувача; 
користувач може натиснути кнопку "Поставити питання"; 
користувач отримує запит на введення тексту питання; 
користувач вводить текст питання; 
користувач отримує повідомлення про надсилання питання. 
Таблиця 3.4 
Результати приймального тестування 
Сценарій Результат 
)формлення декларації Успішно 
Запис на прийом до лікаря Успішно 
Задавання питання лікарю Успішно 
3.3. Приклади впровадженого програмного комплексу 
Початок роботи з ботом 
Для того, щоб почати використовувати бот, необхідно завантажити додаток 
'І'" ~legram з офіційного сайту та авторизуватись в існуючий обліковий запис або 
_: -вор ити новий, якщо такого немає. Після авторизації, необхідно перейти за 
Jсиланням по якому розміщений бот (наприклад: https://t.me/PortMedClinicBot або 
P011MedClinicBot), в результаті чого відкриється головна сторінка боту 
їІс.3.17). Щоб розпочати взаємодіяти з ботом, необхідно натиснути кнопку 
, Т ART» яка знаходиться у нижній частині інтерфейсу додатку. 
63 
ЧДТУ 242243.005 ПЗ 
-
Рисунок 3.17 - Головна сторінка боту «MedClinicBot» 
Запис на прийом 
Після початку роботи з ботом у нижній частині інт~рфейсу з'явиться панель 
оавління (рис.3.18), за допомогою якої користувач може обирати необхідну 
нкцію та перейти до запису на прийом (рис.3.19). 
• f 
ьклара IR 
Попавил~ nитан rя 
P1ic:v~1tr к • І~ - Іlан~ь ) прав.ніння ботт,, 
64 
ЧДТУ 242243.005 ПЗ 
r,n1~po~щoro • С\11 
0935432257 
Надіслати номер телефону\. 
:: Назад 
Рисунок 3.19- Панель запису користувача на прийом 
і 
Далі необхідно ввести ус1 запитувані дані, такі як номер телефону, ПІБ 
шієнта, обрати лікаря та дату й час прийому (рис.3.20) 
.....----------------...1 
----1 
::-,·нок 3.20- Введення необхідних даних користувачем для запису на прийом 
65 
-
ЧДТУ 242243.005 ПЗ 
Якщо вс1 даю введею правильно, користувачу буде запропоновано 
перевjрити введені дані та надати підтвердження для завершення запису на прийом 
1 рис.3.21 ). 
Н ••t;ft !11 
IUliin~u 
П•rї n 
Г,JІfТ 
Рисунок 3.21 - Завершення запису на прийом 
). Оформлення декларації 
Для початку оформлення декларації, користувачу по.трібно натиснути кнопку 
,J.екларація» у головному меню телеграм боту, після чого необхідно ввести всі 
.апитувані дані для оформлення декларацїі та підтвердити правильність введених 
:ших (рис.3.22). 
t{Ot,4 f1 f('_~•-r-
n1 Fi: ~fr1;,iri.11,1. fll•t 8.a~tii • :>IIIW 
Д4 JJa HMf!Qд •~н• D;~.L:J: 
Рисунок З .22 - Процес оформлення декларації 
66 
ЧДТУ 242243 .005 ПЗ 
Поставити запитання 
Щоб поставити запитання, необхідно натиснути «Поставити запитання» у 
~о.1овному меню боту, після чого користувач може залишити своє повідомлення 
рис.3.23). Зміст повідомлення буде відправлений в реєстратуру, користувач 
. . . . . . 
тrимає вщповщь як пльки адм1юстратор перегляне повщомлення та над1шле 
. . 
! LJПОВ!ДЬ на нього. 
Постааи,и питання 
тут єи можете залишити питання, яке вас цікавип,,. і наші лікарі 
нададуть відпов.ідь найближчим часом. 22·зо 
задаите ваwІ:!' питання 
Коли з вrдnус,ки повернеться лікар Сименко В.В.? 
Ваше питання було надіслано адміністраторам. 
Відповідь на &1ше питання від нашого Лікаря: 
Наш лікар повернеться з відпустки на наступній неділі 15.06.2024 
а поки, можете звернутись до йо:-о помічника Півень.о 
Рисунок З .23 - Процес надсилання запитань через бот 
Завершення користування ботом 
Якщо користувачу необхідно завершити користування ботом, достатньо 
росто перейти у будь-який інший чат або вийти з додатку Telegram. 
67 
ЧДТУ 242243.005 ПЗ 
ВИСНОВКИ ДО ТРЕТЬОГО РОЗДІЛУ 
У цьому розділі було пройдено декілька ключових етапів: 
обrрунтування вибору засобів реалізації: Python [З], aiogram [1], SQLite 
[20], Visual Studio Code, GitHub [21 ], Linux SSH server [23] були обрані за 
рахунок 1х зручносп, простоти використання, гнучкост1 та 
масштабованості; 
опис структурної та логічної схем: за допомогою структурної схеми було 
описано основні компоненти системи та їх взаємозв'язки, а логічна схема 
дозволила визначити послідовність дій, що відбувається в системі; 
розробка бази даних: була створена концептуальна, логічна та фізична 
модель бази даних, а також скрипти для її створення та наповнення; 
розробка інтерфейсу користувача: інтерфейс користувача розроблений 
таким чином, щоб бути простим, інтуїтивно зрозумілим та надавати 
користувачеві всю необхідну інформацію для взаємодії з ботом; 
опис розробки програмних компонентів: було описано ключові модуш 
програмного комплексу, такі як bot init, handlers, database, functions, 
keyboards, states, та їх функціональність; 
приклади впровадженого програмного комплексу: були наведею 
приклади впровадженого телеграм-боту. 
В результаті розробки було створено Telegram-бoт 11MedClinicBot11
, який 
юзволяє користувачам: 
створити або оновити декларацію про вибір лікаря та медичної команди; 
записатися на прийом до лікаря; 
поставити питання медичному персоналу бота; 
отримати інформацію про бота, його функції та доступні послуги. 
Бот має зручний та інтуїтивно зрозумілий інтерфейс користувача, а також 
шкористовує гнучкі та масштабовані технології. 
68 
ЧДТУ 242243.005 ПЗ 
висновки 
В цій роботі було проведено дослідження та розробку телеграм-бота для 
.с.Втоматизації процесу підписання декларації з сімейним лікарем, запису на прийом 
:а взаємодії з лікарем. 
У першому розділі було досліджено існуючі методи та засоби розв'язання 
Jоставлених завдань. Було розглянуто реформу МОЗ, згідно з якою кожен 
країнець може підписати декларацію з сімейним лікарем, який йому сподобався, 
іезалежно від місця реєстрації. Також було розглянуто можливості телеграм-ботів 
1к інструменту для автоматизації різних завдань та процесів у сфері медицини. 
У другому розділі було проведено впровадження результатів досліджень у 
"'рактику проектування. Було здійснено моделювання предметної області, 
визначено ключові аспекти та можливі елементи моделювання. Було створено 
111:одель предметної області та словник предметної області, а також визначено 
·:знес-процеси та можливі логічні зв'язки. 
Далі було проведено формування та анашз вимог до програмного 
абезпечення. Було визначено функціональні та нефункціональні вимоги, а також 
ш~юги замовника до розробника. Було створено діаграму прецедентів для 
оормування вимог. 
Проектування логічної структури програмного комплексу включало 
.творення діаграм пакетів, діаграми компонентів та діаграми розгортання. Було 
шзначено архітектуру програмного комплексу, яка базується на принципах мікро­
.ервісної архітектури. 
Загалом, в цій роботі було проведено повний цикл розробки програмного 
абезпечення, від моделювання предметної області до моделювання поведінки 
.истеми. Було визначено всі необхідні вимоги, розроблено архітектуру та логічну 
:труктуру програмного комплексу, а також проведено моделювання поведінки 
:истеми. Це дозволить створити ефективну та надійну систему для автоматизації 
1роцесів підписання декларації, запису на прийом до лікаря та взаємодії з Телеграм 
Ботом. 
Отримані результати дозволять поліпшити якість та ефективність надання 
"іедичних послуг, зменшити час очікування на прийом до лікаря та підвищити 
:івень задоволеності пацієнтів. Також, розроблений телеграм-бот допоможе 
69 
-
ЧДТУ 242243.005 ПЗ 
3~1еншити навантаження на медичний персонал та знизити ризик поширення 
нфекційних захворювань. 
Таким чином, розроблений телеграм-бот є перспективним інструментом для 
з.втоматизації процесів у сфері медицини та може бути використаний для 
1оліпшення якості та ефективності надання медичних послуг. 
70 
ЧДТУ 242243 .005 ПЗ 
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 
Aiogram [Документація]. - Точка доступу: URL: https://docs.aiogram.dev/ uk­
ua/dev-3.x/ - Aiogram 3.7.0 Documentation 
Телеграм-бот [Електронний ресурс]. - Точка доступу: URL: https://tec 
htoday.in.ua/news/shho-take-boti-v-servisi-telegram-ta-yak-nimi-koristuvatisya-
64222.html -Що таке телеграм бот? 
• Python [Документація]. - Точка доступу: URL: https:// www. python. org/ doc/ 
- Python Documentation 
Java [Документація]. - Точка доступу: URL: https://docs.oracle.com/jav ase/ 
tutorial /index.html - Java Documentation 
JavaScript [Документація]. - Точка доступу: URL: https://developer. mozilla 
.org/ua/docs/Web/JavaScript- JavaScript Documentation 
Doc.ua [Електронний ресурс]. - Точка доступу: URL: https://doc.ua/ - Doc.ua 
Meddy Електронний ресурс]. - Точка доступу: URL: https://medikom.ua/ -
Meddy 
e-Health [Електронний ресурс]. - Точка доступу: URL: https:// ehealth .gov. ua/ 
- e-Health 
Telegram Bot АРІ [Документація]. - Точка доступу: URL: https:// 
core.telegram.org/bots/api- Telegram APis Doc 
НТТР запити [Електронний ресурс]. Точка доступу: URL: 
https ://developer.mozilla. org/ru/docs/Web/HТТP/Мethods - Методи НТТР 
запитш 
Вебхуки [Електронний ресурс]. - Точка доступу: URL: https://esputnik .corn/ 
support/ webhooks - Що таке вебхуки (Webhooks) 
MySQL [Документація]. - Точка доступу: URL: https: //dev .mysql. сот/ doc/­
MySQL Documentation 
MongoDB [Документація]. - Точка доступу: URL: https:// www. moпgodb 
.com/docs/ - MongoDB Documentation 
71 
ЧДТУ 242243.005 ПЗ 
: ➔ Node.js [Документація]. - Точка доступу: URL: https:// nodejs. org/ docs/ 
latest/api/ - Node.js v22.2.0 Documentation 
: S Flask [Документація]. - Точка доступу: URL: https:// flask. Palletsprojects .сот/ 
en/3.0.x/api/ - Flask АРІ 
.б Docker [Документація]. - Точка доступу: URL: https://docs.docker.com/ -
Docker Docs 
і Kubemetes [Документація]. - Точка доступу: URL: https:// kubernetes .іо/ ru/ 
docs/home/ - Документація по Kubemetes 
. 8 UМL діаграми [Електронний ресурс]. - Точка доступу: URL: https:// dou.ua/ 
forums/ topic/40575/- Будування UML-дiarpaм 
_9 Мікросервісна архітектура [Електронний ресурс]. - Точка доступу: URL: 
https:// www. globallogic. com/ua/ insights/Ьlogs/microservices-architecture-for­
beginners-part-one/ - Мікросервісна архітектура для початківців 
:о SQLiteЗ [Документація]. - Точка доступу: URL: https:// docs. python. org/ uk/ 
3.9/ library/ sqliteЗ.html - Sqlite3 Docs 
_J GitHub [Документація]. - Точка доступу: URL: https://docs.github.com/ru/get­
started/using-git. - Документація по GitHub 
Visual Studio Code [Документація]. - Точка доступу: URL: https:// 
code.visualstudio.com/docs. - Documentation for Visual Studio Code 
Linux SSH Server [Електронний ресурс]. - Точка доступу: URL: https:// 
ubuntu.com/server/docs/openssh-server - OpenSSH Server 
72 
ДОДАТОК А 
/ ]АТВЕРДЖЕНО: 
Зав. кафедр.шф ПЗАС, професор 
, !И~{І Голуб С.В. 
.. І 1/ 2024 р . 
Програмне забезпечення автоматизованої 
системи обліку пацієнтів лікарні 
Специфікація 
482. ЧДТУ 242243.005 
Листів 2 
Розробник __. _ · =і/--'/-'W')-r--д,а-- - Жаботинський І.В. 
Керівник JJJ!/ //'/,/  Первунінський С.М . 
...... 
2024 
482.ЧДТУ 242243.005 2 
Позначення Найменування Примітка 
Документація 
482.ЧДТУ. 242243 12 01 Текст програми 
482.ЧДТУ. 242243 34 01 Інструкція користувачеві 
482.ЧДТУ. 242243 90 01 Графічні матеріали 
І 
"' 
. 
, 
• 
► 
.. 
.. 
~ 
74 
ДОДАТОК Б 
Програмне забезпечення автоматизованої 
системи обліку пацієнтів лікарні 
Текст програми 
482.ЧДТУ. 242243 12 01 
Листів 21 
Жаботинський І.В. 
2024 
482.ЧДТУ. 242243 12 01 2 
main.py 
-port logging 
_:-.port re 
::-om aiogram import Bot, Dispatcher, types, executor 
::-om aiogram.types import InlineKeyboardMarkup, TnlineKeyboardButton, Parseмode 
::-om c1iogram.contrib.middlewares.logging import LoggingMiddleware 
=Jm aiogram.dispatcher import FSMContext 
::-om aiogram. cont.r іЬ. f sm_storage .memory import MemoryStorage 
-от config import bot_token, group_chat_id, admins, doctors 
·om database.user_db import add_phone_numЬer_to_user, add_name to_user, 
;j b1rth date to user, add_appointmeпt to db, create appointments table, 
с:·.,е question, get q11estion id, get question, save ans11er_to db 
·от fuпctions.user lunctions import greet user, back_to_menu 
=~m keyboards.user_keyboard import main_keyboard, get confirmation_markup, 
~ declaration data markup, get_back_markup 
Jm keyboards.admin keyboard import admin keyboard, get preview markup 
~m database.admin db import get active usGrs count, get users_count, 
~_questions_count, get_all_user_ids, get_unanswered_questions 
:Jm functions.admin functioпs import export_database to excel 
::,m sta tes import MyState, MyAnotherState, AnswerS·ta te, Questi onSta te, 
::adcastState 
;ging.basicconfig(level=logging.INFO) 
~ = Bot(token=bot token) 
=~age = MemoryStorage() 
= Dispatcher(bot, storage=storage) 
.~iddleware.setup(LoggingMiddleware()) 
- .message_handler(commands=['start']) 
~с def process start_command(message: types.Message): 
await greet user(message) 
~.message handler(lamЬda message: message.text "@І. Деклараuія" ) 
-с def declaration{message: types.Messaqe): 
kcyboard = InlineKeyboardMarkup() 
keyboard.add(InlirieKeyboardButton("Haдaти дані для декларації", 
_:ьасk data='provide_declaration data')) 
76 
482.ЧДТУ. 242243 12 01 з 
await message.answer("Tyт ви можете пришвидшити або дистанційно оформити 
.:ек.г.араuію з нашим лікарем.", reply markup=keyboard) 
jp .callback_query_handler(lamЬda query: query.data == 'provide_declaration_data'I 
~sync def provide_ declaration data(query: types.CallbackQuery): 
markup = get declaration data_markup() 
await bot.send_message{query.rnessage.chat.id, "Натисніть кнопку, щоб надіслати 
:зій номер телефону: ", reply_rnarkup=markup) 
await MyState.phone_numЬer_received.set() 
jp .message_handler(content_types=['contact'], 
:ate=!vJyState.phone_numЬer_received) 
s ync def contact received(message: types.Message, state: FSMContext ) : 
phone_numЬer = message.contact.phone numЬer 
awai t sta te. update_ _ data (phone numЬer=phone _numЬer) 
back_markup get_back_markup() 
awзit bot.send_message(message.chat.id, "Будь ласка, введіть ваш ПІБ:", 
;;-ply_  !нarkup=back_markup) 
await MyState.waiting_for_name.set( ) 
~~E_REGEX = rе.соmріlе(r'л[А-Zа-zА-Яа-яЕёГгЄєІіЇї\'\-\s]+$') 
:в REGEX = re.compile(r'л\d{2}\ . \d{2}\.\d{4}$') 
:p .message_handler(state=MyState.waiting for name) 
~ync def process name(message: types.Message, state: FSMContext) : 
if message.text == 1
: Назад': 
await s~ate.finish() 
await back to_menu(message) 
return 
if not NAME_ REGEX.match(message.text): 
await message.answer("X Неправильний формат ПІБ. Будь ласка , введіть ПІБ 
:~равильному форматі.") 
return 
us' er real name message.text 
77 
482.ЧДТУ. 242243 12 01 4 
await state.update_data(real name=user real nume ) 
await bot.send_message(message.chat.id, "Будь ласка, введіть дату вашого 
.-"ародження у форматі ДД.ММ.РРРР:") 
await MyState.waiting for dob.set() 
cdp.message handler(state=MyState.waiting for dob) 
~sync def process_dob(message; types.Message, state: FSMContext): 
if message.text ==•::Назад': 
await state.finish() 
а,,а і t Ьас k _ to_  menu (message) 
return 
if not D0B REGEX.match(message.text): 
await message.answer( "X Неправильний формат дати народження. Будь ласка, 
Еsедіть дату у форматі ДД.ММ.РРРР.~) 
r:eturn 
date_birth = message.text 
await state.update data(date of birth=date birth) 
data = await state.get data() 
phone numЬer = data.get('phone numЬer', 'Номер телефону не надано') 
confirmation message = ( 
f"<Ь>Ви ввели наступні дані:</Ь>\п\n" 
f"<Ь>Номер телефону:</Ь> /phone_ _ numЬer}\n" 
f"<Ь>ПІБ:</Ь> (data['real паmе') }\n" 
f"<Ь>Дата народження:</Ь> {data['date_o f_birth') }\n\n" 
"<і>Все вірно?</і>" 
confirm_mar:kup get_confirmation_markup() 
await bot.send_message(message.chat.id, confirmation_message, 
·eply_markup=confirm_markup, parse_mode=ParseMode.HTML) 
await MyState.confirm_data.set() 
78 
482.ЧДТУ. 242243 12 01 5 
@dp.ca1lback_query handler{lamЬda query: query.data in ['confirm_yes' , 
'confirm_no'], state=MyState.confirm_data) 
a sync def confirm_data(callback_query : types.CallbackQuery, state : FSMContext ) : 
if callback query.data == 'confirm_yes ' : 
data = await state.get data() 
1Jser id = callback_query .from_user.id 
add_phone_numЬer_to_user(user_id, data( ' phone_numЬer')) 
add name to_user(user id , data['real_name']) 
add_birth_date to_user(user id, data[ ' date of_birth']) 
declaration_message = ( 
f"<b> ~ Нова заява на декларацію:</Ь>\n\n\n " 
f"<Ь>Номер телефону:</Ь> {data['phone numЬer'] І\n" 
f " <Ь>ПІБ : </Ь> (data ['real_name ') )\n" і 
f"<Ь>Дата народження:</Ь> {data['date_of birth ' ) }" 
await bot.send_message(group_chat_id, declaration message, 
9arse mode=ParseMode.HTML} 
await state.finish() 
await bot.send_message(user id, "Наші дані для декларації оброблені, 
найблищим часом з вами зв ' яжуться для уточнення деталей", 
~eply_markup=main_keyboard()} 
else: 
await bot.delete_message(chaL_id=callback_query.message.chat.id, 
~essage id=callback query.message . message_id) 
await state.finish() 
await back to_menu(callback query.message) 
jp .message_handler(lamЬda message : message.text 
syn c def schedule(message: types.Message) : 
keyboard = I nlineKeyboardMarkup() 
keyboard.add ( InlineKeyboardButton( "Зaпиcaтиcя на прийом" , 
~llback data='make an appointment ' )) 
await message.answer( "Tyт ви можете записатися на прийом ло вашого лікаря.", 
eply markup~keyboard} 
ip .callback query_handler(lamЬda query: query.data ' ma ke_an_appointmeпt') 
79 
482.ЧДТУ. 242243 12 01 6 
async def provide_declaration_data(query: types.CallbackQuery): 
markup = get declaration data_markup() 
await bot.send_message(query.message.chat.id, "Натисніть кнопку, щоб надісла,rи 
;::вій номер телефону:", reply_markup=markup) 
await MyAnotherS~ate.phone numЬer rece1ved.set() 
~dp.message_handler(content_types=['contact'], 
state=MyAnothcrState.phone numЬer received) 
as ync def contact_received(rnessage: types.Message, state: FSMContext) 
phone_numЬer = message.contact.phone_numЬer 
await state.update data(phone numЬer=phone_numЬer) 
back_markup get_back_markup ( ) 
await bot.send_messiJge(message.chat.id, "Будь ласка , введіть ПІБ пацієнта:", 
: eply rnarkup=back_markup) 
await MyAnotherState.waiting_for__patient_name.set( ) 
~~p.message handler(state=MyAnotherState.waiting_for_patient_narne) 
=s ync def process_patient_name(message: types.Message, state: FSMContext) 
if message.text ~=•=назад': 
await state.finish() 
await back to_menu(message) 
return 
if not NAME REGEX.rnatch(message.text): 
await rnessage.answer("X Неправильний формат ПІБ. Будь ласка, введіть ПІБ 
прав;,~льному форматі.") 
return 
patient real narne = message.text 
а1,1аі t state. 1Jpdate data (patient real name=patient real name) 
doctor keyboard = InlineKeyboardMarkup() 
doctor keyboard. add ( InlineKeyboardEutton (" ® і Бородай Євген Федорович", 
~l lback data='doctor 1')) 
80 
482.ЧДТУ. 242243 12 О 1 7 
doctor keyboard.add(InlineKeyboardButton( • m t Бондаренко Владислава 
Ігорівна", callback_data='doctor_2')) 
doctor keyboard .add ( InlineKeyboardButton ( " S 1' Андрієнко Сергій Вікторович", 
callback data='doctor_З')) 
await bot.send_message{message.chat.id, "Будь ласка, виберіть лікаря :", 
reply markup=doctor_keyboard) 
await MyAnotherState.waiting_for doctor name.set() 
~dp.callback_query_handler(lamЬda query: query.data in ['doctor_l ', 'doctor 2'] , 
state=MyAnotherState.waiting_for_doctor_name) 
~sync def process_doctor_selection(callback_query: types.CallbackQuery, stat~: 
=SMContext}: 
if callback query.data == 'doctor l': 
doctor real name = "Бородай Євген Федорович" 
elif callback query.data == 'doctor 2': 
doctor reaJ name = "Бондаренко Владислава Ігорівна" 
else : 
doctor real name "Андрієнко Сергій Вікторович" 
await state.update_data(doctor real name=doctor_real name) 
await bot.send_message(callback_query.message.chat.id, "Будь ласка, введі'l'Ь 
~ажаний час та дату прийому:") 
awai t MyAnotherState.waiting_for_dob.set() 
,jp.message handler(state=MyAnotherState.waiting for_dob) 
;sync def process dob(message: types.Message, state: FSMContext): 
if message.text ==•~Назад': 
await state.finish() 
await back to_menu(message) 
i::eturn 
date_birth = message.text 
await state.update_data(date of birth=date birth) 
data await state. get_data() 
8] 
482.ЧДТУ. 242243 12 01 8 
phone numЬer = data.get('phone numЬer', 'Номер телефону не надано') 
confirmation_message = ( 
f"<Ь>Ви ввели наступні дані:</Ь>\n\n" 
f"<Ь>Номер телефону:</Ь> (phone numЬer}\n" 
f"<Ь>ПІБ пацієнта:</Ь> {data['patient real name') }\п" 
f"<Ь>ПІБ лікаря:</Ь> {data['doctor_real name']}\n" 
f"<Ь>Дата прийому:</Ь> {data['date of_birth') }\n\n" 
"<і>Все вірно?</і>" 
confirm_markup get_confirmation_markup() 
await bot.send_message(message.chat.id, confirmation_message, 
::-eply_markup=confirm_markup, parse_mode"ParseMode.HTML) 
await MyAnotherSLate.confirm_data.set() 
~ dp.callback_query_handler(lamЬda query: query.data in ['confirm_yes', 
'confirm_no'], state=MyAnotherState.confirm data) 
async def confirm_data(callback query: types.CallbackQuery, state: ёSMContext): 
if callback query.data == 'confirm yes': 
data = await state.get data() 
user id = callback_query.from_user.id 
create appointments table() 
add appointment to_db(user id, data['phone numЬer'), 
:зta['patient_real_name'], data['doctor real_name'), data['date_of_birth')) 
declaration_message = ( 
f"<b>~ Нова заява на прийом: </b>\n\n\n" 
f "<Ь>Номер телефону: </Ь> {d ata [ 'phone_nшnЬer') f \n" 
f"<Ь>ПІБ пацієнта:</Ь> {data('patient_real_name'] }\n" 
f"<Ь>ПІБ лікаря:</Ь> {data['doctor real name'] }\n" 
f"<Ь>Дата прийому:</Ь> (data['date_of birth'] }" 
await bot.send_message(group_chat id, declaration message, 
:rse mode=ParseMode.HTML) 
await state.finish() 
82 
482.ЧДТУ. 242243 12 01 9 
await bot.send_message(user_id, "Ваша заява на прийом прийнята, найблищим 
часом з вами зв'яжуться для уточнення деталей", reply_markup=main keybo a r d ()) 
e lse: 
await bot.delete_message(chat_id=callback query.message.chat.id, 
~essage id=callback query.messa ge.message id) 
await state.finish() 
await back to_menu(callback_query.message ) 
~dp.message_handler ( lamЬda message: message.text " ? Поставити питання" ) 
async de f ask_ques t ion(message: types.Message): 
state = dp.current state{chat=message.chat.id, user=message.from user. i d) 
if not await state.get state(): 
keyboard = InlineKeyboardMarkup() 
keyboard.add{InlineKeyboardButton("Зaлишити питання:", 
~a llback_data='ask_question') ) 
await message.answer("Tyт ви можете залишити питання, я:ке вас цікавить , і 
наші лікарі нададуть відповідь найближчим часом.", reply mark.up=keyboard ) 
~jp.callback_query_handler(lamЬda query: query.data == 'ask_question') 
~s ync def ask_question callback(query: t ypes.CallbackQuery) : 
await bot.send message(query.message.chat.id, "Задайте ваше питання:") 
await Questi onSta te.WaitingForQuestion.set () 
j p.message handler ( lamЬda message: message.text and message.text != "? Поставити 
~тання:", state=QuestionState.WaitingForQuestion) 
~sync def handle question(message: types.Message, state: FSMContext ) : 
question text = message.text 
user id = message.from_user.id 
user namc message.from_user.username 
save question(user id, user name, question_text ) 
question id get question id(user id, question_text) 
for doctor id in doctors: 
keyboard = InlineKeyboardMarkup() 
83 
482.ЧДТУ. 242243 12 01 10 
keyboard.add(InlineKeyboardButton ( "Biдnoвicти", 
c allback_data=f'reply {user idl {question id}')) 
awai-;: bot.seг.d_message(doctor id, f"Користувач @{user_name} (ID: 
{uзer_id}) задав питaння:\n{question_text}", reply_markup=keyboard) 
await bot.send_message(message.chat.id, "Ваше питання було надіслано 
адміністраторам.") 
await state.finish() 
2dp.callback_query_handler(lamЬda query: query.data.startswith('reply_' )) 
as ync dєf rep:y to question(query: types.CallbackQuery): 
user id, question id = map(int, query.data.split(' ' ) [1:]) 
question get_question(user_id, question_id) 
if question and guestion[6] О: 
user name = question[2] 
question text = question[З] 
а•,,,таіт bot.answer_callback_query (query .id, "Введіть в~дповідь на питання:"\ 
await bot.send message(query.message.chat.id, f"Введіть відповідь на 
~итання від користувача {user name):\n{question_text}"I 
current_ state = dp.current st~te(chat=query.message.chat.id, 
~scr~query.from_user.id) 
async with current state.proxy() as data: 
data['question id ') = question id 
data['user id'] = user id 
data['user name'] user name 
data [ 'doctor_  id'] qJery.message.chat.id 
await AnswerState . Wa itingForAnswer.se t() 
else: 
await bot .answer_callback query(query.id, "Це питання вже отримало 
:с::.д:~овідь. "} 
jp .message handler(state=AnswerState.WaitingForAnswer) 
osync def save answer(message: types.Message, state: FSMContext) : 
84 
-------· -
482.ЧДТУ. 242243 12 01 11 
async 1r1ith state . proxy() as data : 
question_id = data['question_id ' ] 
user id = data['user_id ' J 
doctor id = aata[ ' doctor id ' J 
answer_text = message .texL 
save answer_to_db{question_id, answer_text) 
await bot . send_message(user_id, f "Відnовідь на ваше питання від нашого 
,1 J каря : \n { answer_  text І " ) 
await bot.send message(doctor id, "Ваша відповідь була надіслана 
к~ристувачеві. " ) 
await state.f1nish() 
dp .message_handler(lamЬda message : mess age.text ~= '~ Наsад ' ) 
І 
д sync def back_to_menu_handler(message: types . мessage) : 
await back_to_menu(message) 
Іt'ІІ fП1'1! І 
~dp . message_handler(co~mands= [ ' adrnin ') ) 
async def admin_panel{message: types . Message1 : 
if п-,essage.from_user.id in admins : 
keyboard а admin_keyboard() 
await message.answer( "Bи увіишли в панель адміністратора. " , 
reply_markup=keyboard) 
.Jp . message handler(lamЬda message : message . texL == ' Ста~истика ІЇdІ' ) 
1sync def statistics_handler(message : types . Message) : 
if message . from_user . id in admins: 
total_users = get_users_count() 
act ive_users ~ get_active_users_count() 
total sales = get_questions count() 
response message - ( 
f " 11 Загальна кількість користувач1.в : { total_users І n" 
85 
482.ЧДТУ. 242243 12 01 12 
f'' 11! Кількість активних користувачів: {a cti ve_users} \n" 
f" е. Загальна кількість nитань: ( total sales}" 
await messa9e.answer(response_message) 
@dp.message_handler(lamЬda message: message.text == 'Вигрузити базу даних 1@• 1 
async def export_database_handler(message: types.Message): 
if message.from_user.id in admins: 
await message.answer("Bигpyжaємo базу даних ... " ) 
await export_database_to_excel(rnessage) 
~dp.rnessage_handler(text='Poзcилкa і:!)•, state=None) 
as ync def send_broadcast_prompt(message: ~ypes.Message): 
if message.from_user.id in admins: 
await bot.send_message(message.chat.id, •~екст розсилки підтримує розмітку 
•HTML* , тобто:\n' 
'<Ь>*Жирний*</Ь>\n ' 
'<і>_Курсив_</і>\n' 
'<рrе>'Моноширний'</рrе>\n' 
'<а hrеf="ссилка-на-сайт">[Обернути 
:-екст у посилання:] (https://www.telegramЬotsfromroman.com/}</a>' .format( ) , 
parse_mode="markdown"} 
await bot.send_message (message.chat.id, "Введіть текст повідом.лення або 
натисніть /skip, щоб пропустити:n) 
await BroadcastState.text.set() 
•dp.message handler(state~BroadcastState.text) 
~sync def process_broadcast_text(message: types.Message , state: FSMContext) : 
logg ing. in f о ( f "Отримано текст: {m e s sage. text} " ) 
async with state.proxy() as data : 
data['text') = message.text 
аиаіt bot.send_message(message.chat.id, "Надіш.г:іть фото для додаваню:; до 
::овідомлення: або натисніть /skip, щоб пропустити:") 
await BroadcastState.photo.set() 
~dp.message handler(content types=[ 'photo'J , state=BroadcastState.photo} 
~sync def process_broadcast_photo(message: types.Message, state: FSMContext): 
86 
482.ЧДТУ. 242243 12 01 13 
logging.info(f"Oтpимaнo фото: {message.photo[0] .file_id}") 
async with state.proxy(J as data: 
data['photo '] = message.photo[0] .file id 
await send_preview(message.chat.id, data, state) 
await BroadcastState.preview.set () 
async def send_preview(chat id, data, state: FSMContext): 
markup = get_preview_markup() 
text i. *Попередній перегляд розсилки: *\n\n" 
text += data.get('text', '') 
if 'photo' in data and data('photo'] is not None: 
await bot.send_photo(chat_id, data['photo'], caption=text, 
parse_mode="Markdown", reply_markup=markup) 
else: 
await bot.send_message(chat id, te:xt, parse_mode="Markdown ", 
reply_markup=markup) 
async with state.proxy() as stored_data: 
stored_data.update(data) 
~dp .callback_query_handler(text="send_broadcast", state=BroadcastState.preview} 
async def send_broadcast_to_users_callback (call : types.CallbackQuery, state: 
:SMContext) : 
data await state.get_data() 
text data.get('text' , ") 
photo = data.get('photo') 
await send_broadcast_to_users(text, photo, call.message.chat.id) 
await call.answer() 
ёdp .message_handler(commands=['skip'), state=[BroadcastState.text, 
3roadcastState.photo]) 
: sync def skip_step(message: types.Message, state: FSMContext): 
async with state.proxy(} as data: 
if 'text' not in data: 
data['text'] = None 
if 'photo' not in data: 
87 
482.ЧДТУ. 242243 12 01 14 
data['photo'J = None 
await send_preview{message.chat.id, data, state ) 
if ' text' in data and 'photo' in data: 
await BroadcastState.preview.set() 
elif 'text' in data: 
await BroadcastState.photo.set() 
else: 
await BroadcastState.text.set() 
async def send broadcast to users(text, photo, chat id): 
logging .info(f"Biдпpaвкa розсилки: text={text}, photo={photo}") 
try: 
user ids = get all user ids(} 
J 
for user id in user ids: 
if text.strip(): 
try: 
if photo: 
lоggіпg.іnfо(f"Відправлення фото користувачу {user_idl") 
await bot.send photo(user id, photo, caption=text, 
~arse_mode='HTML'} 
else: 
logging.info(f"Biдnpaвлeння повідомrтення користувачу 
user id} : {text)") 
await bot.send_message(user_id, text, parse_mode='HTML') 
except Exception as е: 
logging. ,,arning ( f"Помилка відправлення повідомлення 
:>ристувачу з ID {user id}: {str(e) }") 
awai.t bot.scnd_message(chat id f"Розсилка успішно виконана для 
len(user ids)} користувачів.") 
except Exception as е: 
await bot.send_message{chat id, f"Виникла помилка: ta І 1, " 
dp .callback_query_handler(text="cancel_broadcast", state=BroadcastState.previcw) 
s ync def cancel broadcast callback (call : types.CallbackQuery, state: FSMContext): 
awaitІ state.finish() 
await call.message.edit tехt("Розсилка відмінена.") 
88 
482.ЧДТУ. 242243 12 01 15 
await call.answer() 
@dp.message handler(lamЬda message: message.text ~= 'Питання ? ') 
a sync def questions_handler(message: types.Message): 
if message.from_user.id in admins: 
unanswered_questions = get unanswered questions() 
if поt unanswered_questions: 
await rnessage.answer("Heмaє нових питань.") 
else: 
for question in unanswered_questions: 
user id, user name, question text, question id question 
keyboard = InlineKeyboardMarkup() 
keyboard.add(InlineKeyboardButton("Biдпoвic':.'и", 
c allback_data~f'reply_(user id} {q~estion id)')) 
a·,,ait message.answer(f"Kopиcтyвaч @{user_name) (ID: {user id)) 
задав литання:\n{quеstіоп text}", reply_markup=keyboard) 
if name == ' main '. 
executor.start polling(dp, skip_updates=True) 
states.py 
~lass MyState{StatesGroup}: 
phone numЬer received = State() 
waitiпg_for_name = State{) 
waiting_for_dob = State() 
confirm data = State() 
~lass MyAnotherState(StatesGroup): 
phone numЬer received = State() 
waiting_ for_patient_name = State() 
wai t ing for_ doctor_name = State() 
waiting for_dob = State( ) 
confirm data = State() 
:lass Answer State(StatesGroup) : 
WaitingForAnswer = State() 
89 
482.ЧДТУ. 242243 12 01 16 
class QuestionState(StatesGroup) : 
WaitingForQuestion = Sta t e() 
class BroadcastState(StatesGr oup) : 
text = Statc() 
pholo = State() 
preview = State() 
user db.py 
i mport sqliteЗ 
1mport datet ime 
trom datet ime import datetime 
·u r rent time datetime. now () 
Jef create_table(): 
conn sqliteЗ.connect('data/data.db') 
cursor ~ conn. cursor( ) 
cursor . execute( ''' 
CREATE TABLE IF NOT EXISTS users 
id INTEGER PRIМARY КЕУ , 
user id INTEGER, 
user_лame ТЕХТ, 
user fi rs t name ТЕХТ , 
user_last_name ТЕХТ , 
phone JNTEGER 
' .' ' 
conn . comrni t () 
conn . close() 
:ef add_user(uscr id, user_name): 
conn = sqliteЗ.connect( ' data/data.db') 
curso r = conn.cursor() 
90 
482.ЧДТУ. 242243 12 01 17 
cursor.execute(~SELECT * FROM users WHERE user id (user_ id, )) 
ex1sting user = cursor.fetchone() 
if existing_user is None: 
cursor.execute(''' 
INSERT INTO users (user_id, user_name) 
VAL(JES (?, ? ) 
'' ', (user id, user_name)) 
conn.commit() 
conn. close () 
def add_phone_numЬer_to_user(user_id, phone_numЬer): 
conn = sqliteЗ.connect('data/data.db') 
cursor = conn.cursor() 
cursor.execute(''' 
UE'DATE users 
SET phone =? 
WHERE user id ? 
''' (phone numЬer, user id)} 
conn. commi t () 
conn. close () 
j ef add name to_user(user_id, user_real_name): 
conn = sqliteЗ.connect('data/data.db'I 
cursor = conn.cursor() 
cursor.execute(''' 
UPDATE users 
SET full name ? 
WHERE user id ? 
І t (user_real_name, user id)) 
conn. со!ТІ1ТІі t ( ) 
conn. close () 
~e f add_birth_date_to_user(user id, date_birth): 
conn = sqliteЗ.connect('data/data.db') 
cursor = conn.cursor[) 
cursor.execute(''' 
91 
482.ЧДТУ. 242243 12 01 18 
UPDATE users 
SET date birth =? 
WHERE user id = ~ 
(date birth, user id)) 
соnп. commi t () 
conn.close() 
def create appointmeпts table() : 
сопn = sqliteЗ.connect('data/data.db') 
cursor = conn.cursor() 
cursor.execute(' '' 
CREATE TABLE IF NOT EXISTS appointments ( 
.id INTEGER PRIMARY КЕУ AUTOINCREM~NT, 
user_id INTEGER, 
phone numЬer ТЕХТ , 
patient __ name ТЕХТ, 
doctor name ТЕХТ, 
date of birth ТЕХТ 
••• 
conn . comrri t () 
conn. close ( ) 
def add_appointment_to_db(user_id, phone number, patient_name, doctor_name , 
date of_bir:h): 
try : 
conn = sqliteЗ.connect('data/data.db') 
cursor = conn.cursor() 
cursor.execute( ' '' 
INSERT INTO appointrnents (user id , phone number, patient_name, 
doctor name, date of_birtn) 
VALUES (?, ?, ?, ?, ?) 
't ' , (user id, phone_numЬer , patient name, doctor_name, date_ of_birth)} 
92 
482.ЧДТУ. 242243 12 01 19 
conn. commi t () 
conn. close () 
return True 
except Exception as е: 
рrіnt(f "Помилка при додаванні запису до бази даних: {е)") 
return False 
def creatc_questions table(): 
conn = sqliteЗ.connect('data/data.db') 
cursor ~ conn.cursor() 
cursor.execute(' '' 
CREATE 'l'Al:3LE IF NOT EXISTS questioлs ( 
id INTEGER PRIMARY КЕУ AUTOINCREMENT, 
user id INTEGER, 
11serпame ТЕХТ, 
questioл_text ТЕХТ, 
answers text ТЕХТ, 
timestamp NUMERIC, 
asked INTEGER DEFAUI,T О 
І о І 
conn. commi t () 
conn.close() 
def save qucstion(user id, user_name, question_text): 
conn = sqliteЗ.connect('data/data.db') 
cursor = conn.cursor() 
cursor.execute(' '' 
INSERT INTO questions (user id, userлame, question text, timestamp) 
VALUES (?, ? , ? , ? ) 
' ' - (llser id, uscr name, question tex t , datetime.rюw() .timestamp()) ) 
conn. commi. t ( ) 
conn. close () 
93 
482.ЧДТУ. 242243 12 01 20 
def get_question(user id, question id): 
conn = sqliteЗ.coпnect("data/data.db") 
cursor = conn.cursor() 
cursor.execute(""" 
SELECT * FROM q u estions WHEkE user id ? AND id ? 
(user id , question id,)) 
result = cursor.fetchone() 
conn. close () 
return result 
def get_question_id(user_id, guestion_text) 
conn = sqlileЗ.connect("data/ctata.db") 
cursor = conn.cursor() 
cur.sor.execute( """ 
SF.:J,EC'Г i.d FROM questions WHERE use r id ? AND question text ? 
....., , (user id , question_text,)) 
result = cursor . fetchone() 
conn. close () 
return result[O] if result else None 
def save_aпswer_to_db(question id,answer text): 
conn = sqliteЗ.connect('data/data.db' ) 
cursor = conn.cursor() 
cursor.execute( ''' 
lJPDATE questions 
SET answers texL ?, asked 1 
WHEIO:.: id - ? 
'' ' (answer text, question id)) 
соrш. commi t. ( ) 
conn. close () 
admin_d b.py 
:'.mport. sqli t.еЗ 
94 
482.ЧДТУ. 242243 12 01 21 
def get users count(): 
conn = sqliteЗ.connect('data/data.db') 
cursor = conn.cursor() 
cursor.execute("SELECT COUNT(*) FROM users " ) 
count = cursor.fetchone() [О] 
conn. close () 
return count 
def gєt active users count(): 
conn = sq1ite3.connect('data/data.db') 
cursor = conn.cursor() 
cursor.execute("SELECT COUNT(*) FROM users WHERE phone IS NOT NULL") 
count = cursor.fetchone{) (О) 
conn. close () 
return count 
def get_question s_coun t{): 
conn = sqliteЗ.connect('data/ctata.db') 
cursor = conn.cursor() 
cursor.execute("SELECT COlJNT(*) FROM questions") 
count ~ cursor.fetchone() (О] 
conn. close () 
return cour1t 
def get all user ids(): 
conn = sqlite3.connect('data/data.db') 
cursor = conn.cursor() 
cursor.execute('SELЄCT user id FROM users') 
user ids = [row[0] for row іп cursor.fetchall()] 
conn.close(} 
return user .ids 
def get unanswered_questions(): 
unanswered questions = (] 
conn = sqliLeЗ.connect('data/data.db' ) 
cursor = coпn.cursor() 
cursor.execute("SELECT user id, username, question text, id FROM question~ WHERE 
asked = 0") 
unanswered questions cursor.fetchall() 
conn.clnse() 
return unanswered questions 
95 
ДОДАТОК В 
Програмне забезпечення автоматизованої 
системи обліку пацієнтів лікарні 
Інструкція користувачеві 
482.ЧДТУ. 242243 34 01 
Листів 5 
• 
Жаботинський І.В. 
2024 
482.ЧДТУ. 242243 34 01 2 
1. Початок роботи з ботом 
Для того, щоб почати використовувати бот, необхідно завантажити додаток 
Telegram з офіційного сайту та авторизуватись в існуючий обліковий запис або 
створити новий, якщо такого немає. Після авторизації, необхідно перейти за 
посиланням по якому розміщений бот (наприклад: https://t.me/PortМedClinicBot 
або @PortМedClinicBot), в результаті чого відкриється головна сторінка боту 
(рис.В. І). Щоб розпочати взаємодіяти з ботом, необхідно натиснути кнопку 
«STA RТ >> яка знаходиться у нижній частині інтерфейсу додатку. 
,,... 
Рисунок В. І - Головна сторінка боту <~MedClinicBot>> 
2. Запис на прийом 
Після початку роботи з ботом у нижній частині інтерфейсу з'явиться панель 
управління (рис.В.2), за допомогою якої користувач може обирати необхідну 
функцію та перейти до запису на прийом (рис.В.З). 
97 
482.ЧДТУ. 242243 34 01 з 
· Декларація 
Поставити питання 
Рисунок В.2 - Панель управління ботом 
093543~257 
Рисунок В.З -Процес запису користувача на прийом 
Далі необхідно ввести усі запитувані дані, такі як номер телефону, ПІБ 
пацієнта, обрати лікаря та дату й час прийому (рис.В.4) 
• 
Рисунок В.4 - Введення необхідних даних користувачем для запису на прийом 
98 
482.ЧДТУ. 242243 34 01 4 
Якщо вс1 даю введеш правильно, користувачу буде запропоновано 
перевірити введені дані та надати підтвердження для завершення запису на прийом 
(рис.В.5). 
Будь ласка. ееедіrь бажаний цас ra дату прийому: 
Ви ввели нacтyntt1 д<>н~: 
Номер телефону: 
ПІБ пацієнта : Гос11інг Р<1йан І в.а,~овиц 
ПІБ лік;1ря: Бондаренко Владислава !горівн" 
Дат а прийому: 20.06.2024 16:4:і 
Ваша заява на nрийом прийня,а. найбпищим '-<асом з вами 
3є'яжуться для уточнення детаf!ей 
Рисунок В.5 - Завершення запису на прийом 
З. Оформлення декларації 
Для початку оформлення декларації, користувачу потрібно натиснути кнопку 
«Декларацію) у головному меню телеграм боту, після чого необхідно ввести всі 
запитувані дані для оформлення декларації та підтвердити правильність введених 
даних (рис.В.б). 
fі:"J.ІШАІІ <ЦІ i::=.:,Г;c.:!Jf) Шlt.:JO,LІ ніLІQІ;,~ ) фЩ1v~n 
ад,•М.РРFР: 
Н f~ І , 
r,1~:м~r-UnМ11 ie-. DіІ:н:t11ї' .. 
.r i.тa •iJIOO.U.•-.НІt N.Ctб2DO.z 
Рисунок В.б - Процес оформлення декларації 
99 
482.ЧДТУ. 242243 34 01 5 
4. Поставити запитання 
Щоб поставити запитання, необхідно натиснути «Поставити запитання» у 
головному меню боту, після чого користувач може залишити своє повідомлення 
(рис.8.7). Зміст повідомлення буде відправлений в реєстратуру, користувач 
• f • ~ • • 
отримає вщповщь як пльки адмш1стратор перегляне повщомлення та наднnле 
. . 
ВІДПОВІДЬ на нього. 
Посrавити питання 
тут ви можете залишити питання, яке вас ц1кавить. і наші лікар~ 
нададуть відповідь найближ.цим чашм. -~. 
Задайте ваше питання 
Коли з відпустки повернеться лікар Сименко В.В.? 
Відповідь на єаше питання від нашого лікаря: 
Наш лікар повернеться з відпустки на наступній неділі 15.06.2024 
а поки, може,е звє.>рнутись до його помічника Півень.О 
Рисунок В. 7 - Процес надсилання запитань через бот 
5. Завершення користування ботом 
Якщо користувачу необхідно завершити користування ботом, достатньо 
просто перейти у будь-який інший чат або вийти з додатку Telegram. 
100 
ДОДАТОКГ 
Програмне забезпечення автоматизованої 
системи обліку пацієнтів лікарні 
Графічні матеріали 
482.ЧДТУ. 242243 90 01 
Листів 11 
Жаботинський І.В. 
2024 
482.ЧДТУ. 242243 90 01 2 
Рисунок Г.1 - Титульний слайд 
Ан1'уаnt,ність rсомІ'! вкзна'tаетьсv nотребою лікарень та медичних уста,но" у 
nроrрамноцу =б~:tnе"енІ ЦПjО ~:,птммі::,ацІї робо1'и, покращення обслуrовуваннА nацІентів 
та підвищення ЯНQсті комунікації між nац,снтом та лІ~рем. О.11ним 3 ключори>1 
наnряммів ро:,кит1<у інфор,-,аційнІОк сисrе.,. в медичній rалузї с розробка та 
нnровадження nporpaмнoro забе:~nечення автомати::,ованої системи обліку nацІснУів, 
Мотою даноІ розробки е забезnецемня nІкарень та медицних установ зручним 
1'а сучасним Інструментом АІJА автомат"3ацІі обліку nаціенті~s, консуnьта1.Ф•, наrаlІ)'иань 
та аnтимізаці'і nро~ів )'nрnвnіння інформацією про nацієитін, nocny.-м меАмчммх 
устаNов~ 
Зав.данням розр'.>6кк с розроб11а nporpaмнoro забезпечення цnя т~nеrрам•бота 
"MedCllnlcBot", яке ре.u,І::.ує авто1,113ТИ3І)І'!ану систему ofinlм:y nаціентів, nокращуючм 
взаемодІю між пацієнтами ПІ пІ11ар11м..,, а також оптимізуючи nроцесм уnраsління 
меАичною імформаціо;ю. 3видаиня вІ<JІючаюrь розробну функціоналу АЛИ омnами• 
консультацій, наrадуваttня Пр<> nрийом ліків, управління записом на nрммом та обро6км 
м"Амчної інформацtі. 
Рисунок Г.2 - Актуальність теми, мета та завдання розробки 
102 
iLllllllllll8! 
482.ЧДТУ. 242243 90 01 
Об'ект:ом розроб~:м с nроrрамне 386ез"еченнR аа.-аматмзованої системи 0611Іку 
пацІ11;нтІв nІкариі, зокрем:~, теnеrрам-6от "M~Cli.n.icBot". 
nредме-rом ро:,робк"' с процес по6удо•и nporpaммoro забезпечення р,r1я 
створення те.nеrрам-6оту ... ~(Щnlc:~t» 
Мето,qм nроеІ(ТуааН- та коиструюаакни; 
Бот "MedClinJcB~t" створений за АОІЮмоrою мо•и nроrраму11ання Python та 
616nіотеки AiQgta!'n, 11110 за6е,я,ечус йоrо HQAliiltticn, та ефекn,•"І<:ть, ЗавАЯКИ 
використанню цмх техноnогім, 6от :,а6е3nечуе ме пише WІІМАКУ о6робку ~аnмтІв 
паціентів, ane І високмй р-Івень fіезnекм та -хисту конфіденційності медиqної 
Інф,:»рмацІІ', 
Рисунок Г.3 - Об'єкт та предмет розробки, методи проектування та 
конструювання 
Опис отриманих pe2vn1,тan•1 
ОднІею з ключових nepeвar "MedCllnlcBot" е можnивІсть nацІе"тІ• отримув:~ти 
онпаїtн•консу.nьтацП еІД nІкарів, що амачмо економить час та ресурси 11к nацісктІе, т•к І 
11І1tарі8, 160-r також може ttаrадувати npo nрнмом пікіе, nриsначати ,qaty та час nрмйому 
до nl1toplв, над,11а:1пt інформацію про наявні nhrlt та r,,~едичне о6nаднання, а також 
до11омаrа,и в управnІннІ фінаttсовммм операцінмк. 
Практично 3иачеwмR f>ТРИМаних р113уnьтаті111 
ВnроваАИ(ення T$J'l8f'Faм-6oтy "МedCltnlcBot" АОS80ЛЯ.: niкapHJ!M ra Мt>д"ЧНИМ 
устаноаам аначно nокращнтм еsаемо»,Ію а nацlєнтами, оnтимІsуватм роботу медичнІ'Іх 
nрацІвникІв та nІдвмщитм R11tk:т1, надання медичних noc.nyr. Це 11озвоnяе ефектмвнІwе 
внкористоsуватм ~сурси та .3;,~6<11аnечувати високиїt рівень о6сnуrовування nацІєнтІв. 
Завдяки вnроеаАЖ•нню такоrо інно11ацІй11оrо рІwенмя, nацієнтк можуть отримувати 
нео6хідну інформ~щію щодо МОАИЧНМХ nocдyr та sаnмсуватмсt. на. nрмйом в буА1,•fІІСІІІ!іІ 
час І 11 6удь•ЯІСОМУ Nlcu.i, що cnpмRe стеор<Іtииес 6/ni.w достуnноі -r:a •Ф•~nмвної медмциим. 
Рисунок Г.4 - Опис та практичне значення отриманих результатів 
103 
482.ЧДТУ. 242243 90 01 4 
У цій кваnіфІкаційнім po6on буnо спроектовано 1а розроблено 
програмне забезпечення для телеfl)іІІМ--бота "MedClinicBot··. В ході розробки 
було забезпечено його надійність та безпеку, опрова,ажені інноваційні 
рішення АfІЯ оптимізації взаємодії між nацІснтами та медичмими 
працІвниками. Реалізація даного npoeкry сприяє підвищенню ефоктивностІ 
роботи медичних усrанов і покращенню якості надання меQИЧtН4Х nocnyr. 
Розробка та впров..дження проrрамноrо забезпечення, такого як 
телеrрам-бот """e~_(ЩnlcBoJ", с аажпмвим кроком у напрямку створення більw 
доступноr та ефектионоV системи окорони з,qоров·я. 
Рисунок Г.5 - Особистий внесок 
-
(~-Р,) Вммоrм до системи ч!ІrІ 
\ ~ 
. . -
Функціонаnьні вимоrи 
функЩон.Аn дпн наданhнІ tшр"с1ува.чем д.анмх длn заnовненНй де11tлі11ра"ії; 
фу11к1Ці-анал Аf1Я зanwcy kормсту•ача та Иоrо данм.м в 6Д; 
фуни;ЩоtJ.а~л зanttcy на nptitйoм до пікари з можJІииіс..-ю о6vатм nікари; 
можnиаtстh nосfавиrм nи'flІнн•, відnранnеннJІ цього пм,а:ним nікарJІм; 
МО*ПtІІDісn. ві~nовідапt на запи1lІt-ІН'8 ,а відпрмІіІіка ВІАПОВtді .,;opwcryвa-cy. 
Нефункціональні вимоrи 
с14сrема nовмн~••• s1,i:noatдc:ни шв.,.дко tla звnи,аннJІІ кор111сrуаача; 
пов"""" nрацюваr~ на а~АЬ"RКому npиc1'pot· І буtм ,qoc:1yn"e 1tльки при н.а~wаносУі ін1'~р"еfу; 
закисr даних nацІєнт)а ■ід несанкціононаноrо дост~nу; 
Рисунок Г.6 - Вимоги до системи 
104 
482.ЧДТУ. 242243 90 01 
,,,_~....... І 
/,•м) Діаrрама прецедентів 
rcneii r.1 &• 
І ~ tunJ! ~ • 
І І 
~~ nwю 
---- ~- _:.,/ 
Рисунок Г. 7 - Діаграма прецедентів 
, ~·.Ь-.·" ' 
І, • ;, ПроеІСТУвання nоrічноі структури _ 
Діаrрама класів Діаrрама пакетів 
-, 
г---·-- -І----~ 
- ....,1 п 
~1 ,1_____._І --u 
Рисунок Г.8 - Проектування логічної структури 
]05 
482.ЧДТУ. 242243 90 01 6 
-
/.,.._. ....... 
І,і·.  ,Jq, ~' ' Архітектурне nроектування 
Діаrрама комnонентів Діаrрама ро3rортання 
t-~J ; І 
1 • - .• .• } ' J 
-~;J 
Рисунок Г.9 - Архітектурне проектування 
,,,,. ..,-;--. 
'!. ·1\ Модеnюванни nооедінкм системи 
Діаrрама діЯЛhНОСТі Діаrрама nоt:лідовності 
Зanvcx боть 
-+f_ __ __, 
-+І,.___, ...., ...t..\ ·lm- ' ' ··- . --- - -~ 
. ЗІ"ИСУЄ 11:0 8Д 
-.f.____, . .... ..r't.! .tt.ir.,.~. ....... ......... n.з.t.u.r.1., ......... .. . 
Рисунок Г .1 О - Діаграми діяльності та послідовності 
106 
---- - -- - ~-
482.ЧДТУ. 242243 90 О І 7 
:, ;:-~,. Моделювання nаведІнкм системи 
'v 
Діаrрама комунікації Діаrрама скінченоrо автомату 
• 
--
,-
• .. __ .... 
•І  . ------ ----- _І ·• 
і 
l ч.{tr) 
-
Рисунок Г.11 -Діаграми комунікації та скінченого автомату 
- ---- -
І~ -\ І 
'\_,И, .: · СтрУJПУрна схема 
І 
',!Му- ~ І w. іД';І: 
n08!,Щ!1,tМ.-щ, І 
і 
Рисунок Г.12 - Структурна схема 
107 
482.ЧДТУ. 242243 90 01 8 
----- --
rг-, 
, :,'- Функціонольна схема _ 
----
Рисунок Г.13 - Функціональна схема 
1. 3any,;1< 1101',: 31tпмс:: 
- І!ЩІІt~ТУ~'І ;,ii,1yc.к«c Gота, МЦС,8'JІ.1ІОЧМ 11.ома~.ду iвtatt. на,аанн• 11окrакrнк~ данмк, Kopмcr:v.t"l'I !f~,; ,;.101 
2~ r·onun1•є м1:ш:к><: кон1аос1ж Аані tномер rеnефону, ПІБІ, 
бот аі~ає •(1ркстув~ча та вj~ot).p_p~ ~t: ro11osнe ~вчю 3 •ибір ~~~~p,t.: &от еіD9б!)•жає. сш•сок А~с.1у"нмх 
AUi:.ry11t•t4мк nу1-11t:та,.,и. nrкaptк, і кормсту'Іаtоt ottмpaE: одкоrо а н~о:. 
3.. ,~f!iJ•, ПJti'(1'Y мvню: зani,,r А&ТІ'І тu ...,су: &от ~аnІОтує у кормстуw,..,а Оа>1<ану 
Д~knараЦІя~ 
~&'Іу ta ЧtЮ 3~~~C:;f°• 
'1,~аиНА HOtf1Rм;r~:x А.•~-~:~: ~9:рм~~~ч; і:І.~~ С~) nі4те&рА)І(єнмв запис.у: &о, "ід;таІW-рдж~с ~.алис , .1 
tto~т~k1'мi А,ак~ (нDмер теnефону, ЛІІі, дата ~«!ІІР.іr.а~ f,oro" сщ,зі QJIІ<ИJ(. 
-р~щженнм). J:tZІ~~-•111it1iH" ,.~~oмne_t:et.: !Еот ~~С!МfІ-Є " - · 
1',fд,1_98Рл.Qи(ЄИНW дан~_~r б<rf' Rі~~~~_у_є: .q~i та про з.:щнс. ІІО!І,І!С,УІІ'ІЧ!'.1.о •• n<>•ідо,,нт~t+"" • rруnовии 
зберіг11є і!< у б!І3і ,ІUHtl<Jt, 
чат. 
t1цсмлан;ня поаі~1;ІС;11м,те"ь; 601' ~~~смп~є. ~а~~-~~~н:~ 
npo .аек'1'о119а~но корис~ачнї та nов1~9м~~-r1н~ в 
rpy~_r;н:~~-" чат. 
Рисунок Г.14 - Опис логічної схеми, частина 1 
108 
482.ЧДТУ. 242243 90 01 9 
1J91щ"ll"r>I nа,:т,11"~-: 
,, nмrattt,!'j: l(<Іf!'!~ry&!l'I ВІІодип. "'"~ 11Ц1ан"11,. 
J-!)epeж!!tf. ..J І 11мт.1,~ І<>т аое.1>! rsc nм1онн11 тв 
'!!ІАСМ:Я'""' ощто nІ,ОІ./1.РМ"' АЯ• •IAm>tllAi• 
~<!Jl~0••11eнtt11. npo lf,Sll,C~!Щl/t'1'!І liio-t НІ!,ІІІОІ'l!ЗЄ 
ІІ<>!ІІА",,.nещ,t_R ІСDР.М.<;1)'11&'!~1 про п,, Ще\ 111ш1t1нR 
lfMl.!'n.aнo. 
ОТ9""'"'"" • ■ІдnоаІАІ; ~!!!;ч> tЩІ!'І. ..У !' Щ>.l!!M.""l llf',!!!,I! про 
l!!'J"HHII TD H-'",11.CHo,Q,: {ІW!$'\ЦІ\~• 
~~.!'Іnани• вІдnавІJІі •ор•~~•і: Ііот !'!'АС::""!:І!І.". 
вІдnоащ !(<>!І:!СсСJУ8а<ІООІ, 
Н111а~д: 
•орІЮfУ8В,. "'ож" nоsернутмс:а до ronoв1toro .,""'°· 
4-. n.~~!ll<ft pJit:, 
!(аристувач мо)Іtе noa1opro~ ,i,r 2.З, 11._,.111te в1111іщ11.т" 
за~єрw.,.rм роботу з Ііо1'ом. 
Рисунок Г .15 - Опис логічної схеми, частина 2 
-
('•' 
•~,W.) Структура баам даних 
"-,/ 
-- ------------ -
--·-
--
Рисунок Г. 16 - Структура бази даних 
109 
482.ЧДТУ. 242243 90 О 1 1О  
/ . І 
,. •,.І.,,• '\ І /1.n_ 8 І 
'~;:· Інтерфейс корис,уеача 'tцJ...1 
➔ ... ♦ • ♦ r .. ~ N ~ • • • + ♦ ••, • + • • + 
Головна сторінка n ,1,н•,1 1., ~ ,1p.н1t·1Htt1 
Введення даних 
Рисунок Г.17 - Інтерфейс користувача 
-
.{~ -} Тестування ч.{hу 
'О' -
Структура тестів Ре:sуnьтати проходження тестів 
- .t~•(.,:~ч,,r.t, у~~~.,!!~~ тестує оброtІ..,нк нома:1-н:,и /start; 
- N.'51_d tн::l:нatifm: Уес-rує o6po6wиk наvмсканн111 мноnки "Деклар,ац1.1111t•; 
rectyc обр<>бнк" callback query АЛЯ - Ін1еrраційне 1естуванми - успїwноt 
HltA,&HHR даних для декn.ораці1; 
- Систем.,.• "І"естуваннн - ycniwнo; 
- te-,C ~<::-o·tH!.itc1: rece,tJed: тес"t'Ує сбробн.tм- надсиnанwя kottraJ(ТниJt двн1,01; 
.. t~Іtt .Proc:t,~~_n;,ma~ тес"Уує ()6ро-бн~к ••е,деt-tни і,._..енt; - Прмймаnьне тес1уs"ння - усnішно1 
• te:!.t_,process dоь: t.ectyє обробнмк Іі!ІІn~ді!wнА дати народжР-ннм; 
.. t~з:~& et:infi'fm dвt& _уа-9~ 1естус nідт■е-рд»сеНМІR 111•e-дieoH.tJ( ,ааних~ 
- !~st --~~~ __ qщ;.11~t!O~: Уесrує оброб-нмtt аноnю4 ""Поста1н1м nм1амнйj 
. t~s.t ha:nd,c,•;JUf:'s.tJon: тестує. оСробммм U1І<ЄАЄШ-tR nмПJни11; 
те-стус оn~обнwм збережеш•• eiAnfiвiAi:i 
корнс.rуаачемt 
-v~H -~_pp9,ntment P.il'Dt:8:s'S~ 'І&Стуе nовн:мМ nроцес заnмсу ма 
при Мом д.о nікар А, 
Рисунок Г.18 - Тестування 
11 О 
482.ЧДТУ. 242243 90 01 11 
Рисунок Г.19 -Завершення презентації 
111