med-cms 0.0.1 → 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README +161 -0
  2. package/database/config/db-init.js +44 -0
  3. package/database/models/appointments.js +39 -0
  4. package/database/models/clinics.js +18 -0
  5. package/database/models/diseases.js +37 -0
  6. package/database/models/user-addresses.js +34 -0
  7. package/database/models/users.js +31 -0
  8. package/database/services/admin/create-clinic.js +19 -0
  9. package/database/services/admin/db-analytics.js +34 -0
  10. package/database/services/admin/index.js +12 -0
  11. package/database/services/admin/manage-staff.js +41 -0
  12. package/database/services/doctor/conduct-exam.js +33 -0
  13. package/database/services/doctor/get-schedule.js +23 -0
  14. package/database/services/doctor/index.js +10 -0
  15. package/database/services/doctor/patient-access.js +34 -0
  16. package/database/services/patient/book-appointment.js +45 -0
  17. package/database/services/patient/calc-district.js +49 -0
  18. package/database/services/patient/get-profile.js +47 -0
  19. package/database/services/patient/index.js +10 -0
  20. package/index.d.ts +25 -0
  21. package/index.js +67 -0
  22. package/migrate-diseases.js +134 -0
  23. package/package.json +15 -5
  24. package/public/css/admin.css +129 -0
  25. package/public/css/auth.css +55 -0
  26. package/public/css/doctor.css +204 -0
  27. package/public/html/dashboard-admin.html +112 -0
  28. package/public/html/dashboard-doctor.html +78 -0
  29. package/public/html/dashboard-patient.html +113 -0
  30. package/public/html/home.html +0 -0
  31. package/public/html/login.html +48 -0
  32. package/public/js/admin.js +199 -0
  33. package/public/js/auth.js +55 -0
  34. package/public/js/doctor.js +137 -0
  35. package/public/js/patient.js +141 -0
  36. package/server/midleware.js +65 -0
  37. package/server/permissions.js +47 -0
  38. package/server/server.js +255 -0
  39. package/test.js +27 -0
@@ -0,0 +1,204 @@
1
+ /* Общие настройки интерфейса врача */
2
+ body {
3
+ font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
4
+ background-color: #f1f5f9;
5
+ color: #0f172a;
6
+ margin: 0;
7
+ padding: 0;
8
+ }
9
+
10
+ .dashboard {
11
+ max-width: 1200px;
12
+ margin: 0 auto;
13
+ padding: 20px;
14
+ }
15
+
16
+ /* Шапка АРМ Врача */
17
+ header {
18
+ display: flex;
19
+ justify-content: space-between;
20
+ align-items: center;
21
+ background: linear-gradient(135deg, #1e3a8a 0%, #3b82f6 100%);
22
+ color: white;
23
+ padding: 20px 30px;
24
+ border-radius: 12px;
25
+ box-shadow: 0 4px 15px rgba(30, 58, 138, 0.15);
26
+ margin-bottom: 25px;
27
+ }
28
+
29
+ header h1 {
30
+ margin: 0;
31
+ font-size: 22px;
32
+ font-weight: 600;
33
+ letter-spacing: 0.5px;
34
+ }
35
+
36
+ .btn-logout {
37
+ background-color: rgba(255, 255, 255, 0.2);
38
+ color: white;
39
+ border: 1px solid rgba(255, 255, 255, 0.4);
40
+ padding: 8px 18px;
41
+ border-radius: 6px;
42
+ font-weight: bold;
43
+ cursor: pointer;
44
+ transition: all 0.2s;
45
+ }
46
+
47
+ .btn-logout:hover {
48
+ background-color: #ef4444;
49
+ border-color: #ef4444;
50
+ }
51
+
52
+ /* Главный рабочий контент (Сетка) */
53
+ .main-content {
54
+ display: grid;
55
+ grid-template-columns: 1fr 2fr;
56
+ gap: 25px;
57
+ align-items: start;
58
+ }
59
+
60
+ /* Секция расписания и очереди */
61
+ .schedule-section {
62
+ background: white;
63
+ padding: 20px;
64
+ border-radius: 12px;
65
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
66
+ border-top: 4px solid #3b82f6;
67
+ }
68
+
69
+ .schedule-section h3, .exam-section h3 {
70
+ margin-top: 0;
71
+ margin-bottom: 15px;
72
+ color: #1e3a8a;
73
+ font-size: 18px;
74
+ }
75
+
76
+ .patient-list {
77
+ list-style: none;
78
+ padding: 0;
79
+ margin: 0;
80
+ }
81
+
82
+ .patient-list li {
83
+ display: flex;
84
+ justify-content: space-between;
85
+ align-items: center;
86
+ padding: 12px 15px;
87
+ background: #f8fafc;
88
+ border: 1px solid #e2e8f0;
89
+ border-radius: 8px;
90
+ margin-bottom: 10px;
91
+ font-size: 14px;
92
+ }
93
+
94
+ .patient-list li b {
95
+ color: #2563eb;
96
+ background: #eff6ff;
97
+ padding: 2px 6px;
98
+ border-radius: 4px;
99
+ }
100
+
101
+ .btn-action {
102
+ background-color: #10b981;
103
+ color: white;
104
+ border: none;
105
+ padding: 6px 12px;
106
+ border-radius: 6px;
107
+ cursor: pointer;
108
+ font-weight: 600;
109
+ font-size: 13px;
110
+ transition: background 0.2s;
111
+ }
112
+
113
+ .btn-action:hover {
114
+ background-color: #059669;
115
+ }
116
+
117
+ /* Секция интерактивного осмотра */
118
+ .exam-section {
119
+ background: white;
120
+ padding: 25px;
121
+ border-radius: 12px;
122
+ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.04);
123
+ border-top: 4px solid #10b981;
124
+ }
125
+
126
+ .exam-section h3 span {
127
+ color: #059669;
128
+ text-decoration: underline;
129
+ }
130
+
131
+ /* Стилизация медицинских текстовых полей */
132
+ .form-group {
133
+ margin-bottom: 20px;
134
+ }
135
+
136
+ .form-group label {
137
+ display: block;
138
+ font-weight: 600;
139
+ margin-bottom: 8px;
140
+ font-size: 14px;
141
+ color: #334155;
142
+ }
143
+
144
+ .form-group textarea {
145
+ width: 100%;
146
+ height: 90px;
147
+ padding: 12px;
148
+ border: 1px solid #cbd5e1;
149
+ border-radius: 8px;
150
+ font-family: inherit;
151
+ font-size: 14px;
152
+ box-sizing: border-box;
153
+ resize: vertical;
154
+ background-color: #f8fafc;
155
+ }
156
+
157
+ .form-group textarea:focus, .form-group select:focus {
158
+ border-color: #10b981;
159
+ outline: none;
160
+ background-color: #fff;
161
+ box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1);
162
+ }
163
+
164
+ .form-group select {
165
+ width: 100%;
166
+ padding: 12px;
167
+ border: 1px solid #cbd5e1;
168
+ border-radius: 8px;
169
+ font-size: 14px;
170
+ background-color: #f8fafc;
171
+ box-sizing: border-box;
172
+ cursor: pointer;
173
+ }
174
+
175
+ /* Кнопка сохранения осмотра в статистику */
176
+ .btn-save {
177
+ width: 100%;
178
+ padding: 14px;
179
+ background: #10b981;
180
+ color: white;
181
+ border: none;
182
+ border-radius: 8px;
183
+ font-weight: bold;
184
+ font-size: 15px;
185
+ cursor: pointer;
186
+ transition: background 0.2s;
187
+ box-shadow: 0 2px 5px rgba(16, 185, 129, 0.2);
188
+ }
189
+
190
+ .btn-save:hover {
191
+ background: #059669;
192
+ }
193
+
194
+ /* Служебные классы */
195
+ .hidden {
196
+ display: none !important;
197
+ }
198
+
199
+ /* Адаптивность для небольших экранов */
200
+ @media (max-width: 768px) {
201
+ .main-content {
202
+ grid-template-columns: 1fr;
203
+ }
204
+ }
@@ -0,0 +1,112 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ru">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Панель Администратора | MED-CMS</title>
6
+ <link rel="stylesheet" href="/med/css/admin.css">
7
+ <style>
8
+ .clickable-card { cursor: pointer; transition: transform 0.2s, background 0.2s; }
9
+ .clickable-card:hover { transform: translateY(-3px); background: #f1f5f9; }
10
+ .data-table-box { background: white; padding: 25px; border-radius: 8px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04); margin-top: 30px; }
11
+ table { width: 100%; border-collapse: collapse; margin-top: 15px; font-size: 14px; }
12
+ th, td { text-align: left; padding: 12px; border-bottom: 1px solid #cbd5e1; }
13
+ th { background-color: #f1f5f9; color: #1e3a8a; }
14
+ .uid-badge { background: #f1f5f9; font-family: monospace; padding: 3px 6px; border-radius: 4px; color: #e11d48; font-size: 12px; }
15
+ </style>
16
+ </head>
17
+ <body>
18
+ <div class="admin-panel">
19
+ <header>
20
+ <h1>Управление медицинской платформой (Суперадмин)</h1>
21
+ <button onclick="logout()" class="btn-logout">Выйти</button>
22
+ </header>
23
+ <section class="stats-cards">
24
+ <div class="card clickable-card" onclick="viewClinicsTable()">Всего клиник: <span id="statClinics">0</span></div>
25
+ <div class="card clickable-card" onclick="viewStaffTable()">Врачей в штате: <span id="statStaff">0</span></div>
26
+ <div class="card">Пациентов в базе: <span id="statPatients">0</span></div>
27
+ </section>
28
+ <div id="tableViewerBlock" class="data-table-box hidden">
29
+ <h3 id="tableViewerTitle">Название таблицы</h3>
30
+ <div id="tableViewerContent"></div>
31
+ </div>
32
+ <div class="grid-forms" style="margin-top: 30px;">
33
+ <div class="form-box">
34
+ <h3>1. Добавить клинику / поликлинику</h3>
35
+ <form id="clinicForm">
36
+ <input type="text" id="clinicName" placeholder="Название учреждения" required>
37
+ <select id="clinicType" required>
38
+ <option value="больница">Больница</option>
39
+ <option value="поликлиника">Поликлиника</option>
40
+ <option value="станция скорой помощи">Станция скорой помощи</option>
41
+ </select>
42
+ <input type="text" id="clinicAddress" placeholder="Адрес (Город, улица, дом)" required>
43
+ <button type="submit">Создать учреждение</button>
44
+ </form>
45
+ </div>
46
+ <div class="form-box">
47
+ <h3>2. Зарегистрировать сотрудника (Выдача аккаунта)</h3>
48
+ <form id="staffForm">
49
+ <input type="text" id="staffName" placeholder="ФИО сотрудника (Иванов И.И.)" required>
50
+ <input type="email" id="staffEmail" placeholder="Рабочий Email" required>
51
+ <input type="text" id="staffPassword" placeholder="Временный пароль для входа" required>
52
+
53
+ <div class="form-group" style="margin-bottom: 15px;">
54
+ <label>Должность / Специальность</label>
55
+ <select id="staffMedicalProfile" required>
56
+ <option value="">-- Выберите профиль сотрудника --</option>
57
+ <option value="Главврач">Главврач</option>
58
+ <option value="Медсестра">Медсестра</option>
59
+ <option value="Врач скорой помощи">Врач скорой помощи</option>
60
+ <option value="Фельдшер">Фельдшер</option>
61
+ <option value="Регистратор">Регистратор</option>
62
+ <option value="Терапевт">Терапевт</option>
63
+ <option value="Педиатр">Педиатр</option>
64
+ <option value="Врач общей практики">Врач общей практики</option>
65
+ <option value="Кардиолог">Кардиолог</option>
66
+ <option value="Невролог">Невролог</option>
67
+ <option value="Эндокринолог">Эндокринолог</option>
68
+ <option value="Гастроэнтеролог">Гастроэнтеролог</option>
69
+ <option value="Пульмонолог">Пульмонолог</option>
70
+ <option value="Нефролог">Нефролог</option>
71
+ <option value="Ревматолог">Ревматолог</option>
72
+ <option value="Гематолог">Гематолог</option>
73
+ <option value="Хирург">Хирург</option>
74
+ <option value="Травматолог-ортопед">Травматолог-ортопед</option>
75
+ <option value="Сосудистый хирург">Сосудистый хирург</option>
76
+ <option value="Нейрохирург">Нейрохирург</option>
77
+ <option value="Кардиохирург">Кардиохирург</option>
78
+ <option value="Пластический хирург">Пластический хирург</option>
79
+ <option value="Офтальмолог">Офтальмолог</option>
80
+ <option value="Отоларинголог">Отоларинголог</option>
81
+ <option value="Дерматолог">Дерматолог</option>
82
+ <option value="Стоматолог">Стоматолог</option>
83
+ <option value="Гинеколог">Гинеколог</option>
84
+ <option value="Уролог">Уролог</option>
85
+ <option value="Онколог">Онколог</option>
86
+ <option value="Инфекционист">Инфекционист</option>
87
+ <option value="Аллерголог-иммунолог">Аллерголог-иммунолог</option>
88
+ <option value="Психиатр">Психиатр</option>
89
+ <option value="Психотерапевт">Психотерапевт</option>
90
+ <option value="Нарколог">Нарколог</option>
91
+ <option value="Анестезиолог-реаниматолог">Анестезиолог-реаниматолог</option>
92
+ <option value="Рентгенолог">Рентгенолог</option>
93
+ <option value="Врач УЗД">Врач УЗД</option>
94
+ <option value="Эндоскопист">Эндоскопист</option>
95
+ <option value="Патологоанатом">Патологоанатом</option>
96
+ </select>
97
+ </div>
98
+
99
+ <div class="form-group" style="margin-bottom: 15px;">
100
+ <label>Больница привязки</label>
101
+ <select id="staffClinic" required>
102
+ <option value="">-- Выберите больницу --</option>
103
+ </select>
104
+ </div>
105
+ <button type="submit">Создать аккаунт сотрудника</button>
106
+ </form>
107
+ </div>
108
+ </div>
109
+ </div>
110
+ <script src="/med/js/admin.js"></script>
111
+ </body>
112
+ </html>
@@ -0,0 +1,78 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ru">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Панель Врача | MED-CMS</title>
6
+ <link rel="stylesheet" href="/med/css/doctor.css">
7
+ </head>
8
+ <body>
9
+ <div class="dashboard">
10
+ <header>
11
+ <div>
12
+ <h1 id="doctorTitle">АРМ Медицинского Сотрудника</h1>
13
+ <p style="margin: 5px 0 0 0; font-size: 14px; opacity: 0.9;">
14
+ Вы вошли как: <span id="doctorPosition" style="font-weight: bold; text-decoration: underline;">Загрузка должности...</span>
15
+ (<span id="doctorName">ФИО</span>)
16
+ </p>
17
+ </div>
18
+ <div style="display: flex; gap: 10px; align-items: center;">
19
+ <button onclick="togglePasswordModal()" class="btn-logout" style="background: #2563eb; border-color: #2563eb;">Сменить пароль</button>
20
+ <button onclick="logout()" class="btn-logout">Выйти</button>
21
+ </div>
22
+ </header>
23
+ <div id="passwordModal" class="hidden" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); display: flex; justify-content: center; align-items: center; z-index: 9999;">
24
+ <div style="background: white; padding: 25px; border-radius: 8px; width: 320px; box-shadow: 0 4px 15px rgba(0,0,0,0.15);">
25
+ <h3 style="margin-top:0; color:#1e3a8a;">Смена пароля</h3>
26
+ <form id="changePasswordForm">
27
+ <div class="form-group">
28
+ <label>Текущий пароль</label>
29
+ <input type="password" id="oldPassword" required style="width:100%; padding:8px; box-sizing:border-box; border:1px solid #cbd5e1; border-radius:4px;">
30
+ </div>
31
+ <div class="form-group">
32
+ <label>Новый пароль</label>
33
+ <input type="password" id="newPassword" required style="width:100%; padding:8px; box-sizing:border-box; border:1px solid #cbd5e1; border-radius:4px;">
34
+ </div>
35
+ <div style="display:flex; gap:10px; margin-top:20px;">
36
+ <button type="submit" class="btn-save" style="padding:10px; font-size:14px;">Сохранить</button>
37
+ <button type="button" onclick="togglePasswordModal()" class="btn-logout" style="color:#0f172a; background:#e2e8f0; border-color:#cbd5e1; width:100%;">Отмена</button>
38
+ </div>
39
+ </form>
40
+ </div>
41
+ </div>
42
+ <div class="main-content">
43
+ <section class="schedule-section">
44
+ <h3>Записи на сегодня</h3>
45
+ <ul id="scheduleList" class="patient-list">
46
+ <li>Загрузка расписания...</li>
47
+ </ul>
48
+ </section>
49
+ <section class="exam-section hidden" id="examBlock">
50
+ <h3>Проведение осмотра: <span id="currentPatientName"></span></h3>
51
+ <form id="examForm">
52
+ <input type="hidden" id="activeAppointmentId">
53
+ <div class="form-group">
54
+ <label>Жалобы пациента</label>
55
+ <textarea id="examComplaints" required placeholder="Кашель, температура 38.2..."></textarea>
56
+ </div>
57
+ <div class="form-group">
58
+ <label>Объективные данные осмотра</label>
59
+ <textarea id="examObjective" required placeholder="Зев гиперемирован, хрипы в легких..."></textarea>
60
+ </div>
61
+ <div class="form-group">
62
+ <label>Личные заметки врача / Лечение</label>
63
+ <textarea id="examNotes" placeholder="Рекомендован постельный режим..."></textarea>
64
+ </div>
65
+ <div class="form-group">
66
+ <label>Установить диагноз (Болезнь)</label>
67
+ <select id="examDisease" required>
68
+ <option value="">-- Выберите диагноз из справочника МКБ --</option>
69
+ </select>
70
+ </div>
71
+ <button type="submit" class="btn-save">Завершить осмотр и внести в статистику</button>
72
+ </form>
73
+ </section>
74
+ </div>
75
+ </div>
76
+ <script src="/med/js/doctor.js"></script>
77
+ </body>
78
+ </html>
@@ -0,0 +1,113 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ru">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Личный кабинет пациента | MED-CMS</title>
7
+ <link rel="stylesheet" href="/med/css/auth.css">
8
+ <style>
9
+ body { display: block; height: auto; padding: 20px; box-sizing: border-box; }
10
+ .container { max-width: 900px; margin: 0 auto; background: white; padding: 25px; border-radius: 8px; box-shadow: 0 4px 15px rgba(0,0,0,0.05); }
11
+ header { display: flex; justify-content: space-between; align-items: center; border-bottom: 2px solid #e2e8f0; padding-bottom: 15px; margin-bottom: 20px; }
12
+ .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 25px; }
13
+ .section-box { border: 1px solid #e2e8f0; padding: 15px; border-radius: 6px; background: #f8fafc; }
14
+ h3 { margin-top: 0; color: #1e3a8a; }
15
+ .badge { background: #dbeafe; color: #1e40af; padding: 4px 8px; border-radius: 4px; font-weight: bold; font-size: 14px; }
16
+ .record-card { background: white; border-left: 4px solid #2563eb; padding: 12px; margin-bottom: 10px; border-radius: 0 4px 4px 0; box-shadow: 0 2px 5px rgba(0,0,0,0.02); }
17
+ .record-card.future { border-left-color: #10b981; }
18
+ .btn-logout { background-color: #ef4444; color: white; border: none; padding: 8px 16px; border-radius: 4px; cursor: pointer; font-weight: bold; }
19
+ .btn-logout:hover { background-color: #dc2626; }
20
+ </style>
21
+ </head>
22
+ <body>
23
+ <div class="container">
24
+ <header>
25
+ <div>
26
+ <h2 id="patientName">Загрузка профиля...</h2>
27
+ <p id="patientEmail" style="color: #64748b; margin: 5px 0 0 0;"></p>
28
+ </div>
29
+ <button onclick="logout()" class="btn-logout">Выйти</button>
30
+ </header>
31
+
32
+ <div class="grid">
33
+ <div class="section-box" style="border-top: 4px solid #2563eb;">
34
+ <h3>📅 Запись на прием к врачу</h3>
35
+ <form id="bookingForm">
36
+ <div class="form-group" style="margin-bottom: 10px;">
37
+ <label>Выберите специалиста</label>
38
+ <select id="bookingDoctor" required>
39
+ <option value="">-- Загрузка списка врачей... --</option>
40
+ </select>
41
+ </div>
42
+ <div class="grid" style="grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 10px;">
43
+ <div class="form-group" style="margin-bottom: 0;">
44
+ <label>Дата приема</label>
45
+ <input type="date" id="bookingDate" required>
46
+ </div>
47
+ <div class="form-group" style="margin-bottom: 0;">
48
+ <label>Время (Слот)</label>
49
+ <select id="bookingTime" required>
50
+ <option value="">-- Время --</option>
51
+ <option value="08:00">08:00</option>
52
+ <option value="08:30">08:30</option>
53
+ <option value="09:00">09:00</option>
54
+ <option value="09:30">09:30</option>
55
+ <option value="10:00">10:00</option>
56
+ <option value="10:00">10:30</option>
57
+ <option value="10:00">11:00</option>
58
+ <option value="10:00">11:30</option>
59
+ <option value="10:00">12:00</option>
60
+ <option value="10:00">12:30</option>
61
+ <option value="10:00">13:00</option>
62
+ <option value="10:00">13:30</option>
63
+ <option value="14:00">14:00</option>
64
+ <option value="14:30">14:30</option>
65
+ <option value="08:00">15:00</option>
66
+ <option value="08:30">15:30</option>
67
+ <option value="09:00">16:00</option>
68
+ <option value="09:30">16:30</option>
69
+ <option value="10:00">17:00</option>
70
+ <option value="14:00">17:30</option>
71
+ <option value="14:30">18:00</option>
72
+ <option value="14:30">18:30</option>
73
+ <option value="14:30">19:00</option>
74
+ <option value="14:30">19:30</option>
75
+ </select>
76
+ </div>
77
+ </div>
78
+ <button type="submit" class="btn" style="padding: 10px; background-color: #2563eb;">Забронировать талон</button>
79
+ </form>
80
+ </div>
81
+ <div class="section-box">
82
+ <h3>📍 Мой медицинский участок</h3>
83
+ <div id="districtInfo" style="margin-bottom: 15px;">
84
+ <p>Участок и кабинет не определены. Укажите адрес проживания ниже.</p>
85
+ </div>
86
+ <form id="addressForm">
87
+ <h4 style="margin: 10px 0;">Обновить адрес проживания</h4>
88
+ <div class="form-group" style="margin-bottom: 10px;">
89
+ <input type="text" id="addrCity" placeholder="Город (например, Минск)" required>
90
+ </div>
91
+ <div class="grid" style="grid-template-columns: 2fr 1fr; gap: 10px; margin-bottom: 10px;">
92
+ <input type="text" id="addrStreet" placeholder="Улица (например, Пушкина)" required>
93
+ <input type="text" id="addrHouse" placeholder="Дом / Корпус" required>
94
+ </div>
95
+ <button type="submit" class="btn" style="padding: 8px;">Сохранить адрес и рассчитать участок</button>
96
+ </form>
97
+ </div>
98
+ <div class="section-box">
99
+ <h3>ℹ️ Справка пациента</h3>
100
+ <p>При заполнении адреса наша медицинская система **автоматически распределяет** вас к нужной поликлинике, терапевтическому участку и назначает постоянный кабинет для посещения.</p>
101
+ <p>Ниже отображается ваша полная электронная медицинская карта: диагнозы, рекомендации и рецепты на лекарства, выписанные врачами во время осмотров.</p>
102
+ </div>
103
+ </div>
104
+ <section class="section-box" style="background: #ffffff;">
105
+ <h3>📋 Моя электронная медицинская карта и история приемов</h3>
106
+ <div id="medicalHistoryList">
107
+ <p style="color: #64748b;">Загрузка истории болезни...</p>
108
+ </div>
109
+ </section>
110
+ </div>
111
+ <script src="/med/js/patient.js"></script>
112
+ </body>
113
+ </html>
File without changes
@@ -0,0 +1,48 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ru">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Медицинская Платформа | Вход</title>
7
+ <link rel="stylesheet" href="/med/css/auth.css">
8
+ </head>
9
+ <body>
10
+ <div class="auth-container">
11
+ <div class="auth-box" id="loginBox">
12
+ <h2>Вход в систему</h2>
13
+ <form id="loginForm">
14
+ <div class="form-group">
15
+ <label>Email</label>
16
+ <input type="email" id="loginEmail" required placeholder="doctor@clinic.com">
17
+ </div>
18
+ <div class="form-group">
19
+ <label>Пароль</label>
20
+ <input type="password" id="loginPassword" required placeholder="••••••••">
21
+ </div>
22
+ <button type="submit" class="btn">Войти</button>
23
+ </form>
24
+ <p class="toggle-text">Впервые у нас? <span onclick="toggleAuth()">Зарегистрироваться как пациент</span></p>
25
+ </div>
26
+ <div class="auth-box hidden" id="registerBox">
27
+ <h2>Регистрация пациента</h2>
28
+ <form id="registerForm">
29
+ <div class="form-group">
30
+ <label>ФИО полностью</label>
31
+ <input type="text" id="regName" required placeholder="Иванов Иван Иванович">
32
+ </div>
33
+ <div class="form-group">
34
+ <label>Email</label>
35
+ <input type="email" id="regEmail" required placeholder="patient@mail.ru">
36
+ </div>
37
+ <div class="form-group">
38
+ <label>Пароль</label>
39
+ <input type="password" id="regPassword" required placeholder="Минимум 6 символов">
40
+ </div>
41
+ <button type="submit" class="btn">Создать аккаунт</button>
42
+ </form>
43
+ <p class="toggle-text">Уже есть аккаунт? <span onclick="toggleAuth()">Войти</span></p>
44
+ </div>
45
+ </div>
46
+ <script src="/med/js/auth.js"></script>
47
+ </body>
48
+ </html>