med-cms 1.0.0-beta.2 → 1.0.0
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.
- package/LICENSE.txt +13 -0
- package/README.md +117 -0
- package/database/config/db-init.js +67 -53
- package/database/models/appointments.js +35 -20
- package/database/models/clinics.js +25 -13
- package/database/models/diseases.js +21 -13
- package/database/models/districts.js +55 -0
- package/database/models/news.js +25 -0
- package/database/models/user-addresses.js +21 -14
- package/database/models/users.js +69 -26
- package/database/services/admin/create-clinic.js +18 -6
- package/database/services/admin/db-analytics.js +42 -16
- package/database/services/admin/index.js +6 -6
- package/database/services/admin/manage-staff.js +47 -17
- package/database/services/doctor/conduct-exam.js +26 -20
- package/database/services/doctor/get-schedule.js +26 -18
- package/database/services/doctor/index.js +6 -6
- package/database/services/doctor/patient-access.js +34 -25
- package/database/services/patient/book-appointment.js +37 -17
- package/database/services/patient/calc-district.js +70 -21
- package/database/services/patient/get-profile.js +49 -21
- package/database/services/patient/index.js +5 -5
- package/env_init.js +55 -0
- package/index.d.ts +38 -24
- package/index.js +48 -25
- package/migrate-diseases.js +192 -120
- package/package.json +3 -3
- package/public/css/admin.css +80 -80
- package/public/css/auth.css +52 -44
- package/public/css/doctor.css +131 -125
- package/public/css/home.css +155 -0
- package/public/html/dashboard-admin.html +423 -101
- package/public/html/dashboard-doctor.html +155 -66
- package/public/html/dashboard-patient.html +199 -94
- package/public/html/home/about.html +0 -0
- package/public/html/home/contact.html +0 -0
- package/public/html/home/info.html +0 -0
- package/public/html/home.html +159 -0
- package/public/html/login.html +73 -43
- package/public/js/admin.js +329 -165
- package/public/js/auth.js +45 -41
- package/public/js/doctor.js +117 -103
- package/public/js/home.js +113 -0
- package/public/js/patient.js +130 -108
- package/server/midleware.js +33 -13
- package/server/permissions.js +105 -43
- package/server/server.js +517 -176
- package/README +0 -161
- package/test.js +0 -27
package/README
DELETED
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
# MED-CMS (v1.0.0-beta.1) 🚀
|
|
2
|
-
|
|
3
|
-
`med-cms` — это автономный, монолитный медицинский движок (МИС/SaaS) «всё в одном» на базе **Express**, **Sequelize** и **SQLite3**, разработанный для управления сетями клиник, медицинским персоналом, расписанием приемов и электронными картами пациентов.
|
|
4
|
-
|
|
5
|
-
Модуль поставляется со встроенной базой данных, системой разграничения прав доступа на основе **34 медицинских специальностей** и готовым веб-интерфейсом (АРМ Врача, Личный Кабинет Пациента, Панель Суперадминистратора).
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 🌟 Ключевые возможности
|
|
10
|
-
|
|
11
|
-
* **📦 Автономность «из коробки»:** База данных SQLite3 не требует установки тяжелых серверов (PostgreSQL/MySQL/MongoDB). Файл БД и таблицы создаются автоматически прямо в папке проекта.
|
|
12
|
-
* **🔐 Безопасность и Сессии:** Авторизация реализована через зашифрованные JWT-токены, хранящиеся в защищенных **HttpOnly Cookie** (жесткая защита от XSS и CSRF атак). JS на клиенте не имеет доступа к токену.
|
|
13
|
-
* **🩺 Матрица прав доступа (34 специальности):** Гибкое разграничение возможностей врачей (Терапевт, Хирург, Кардиохирург, Патологоанатом и др.) через кастомные Middleware. Стоматолог или Эндокринолог не смогут получить доступ к эндпоинтам назначения нейрохирургических операций.
|
|
14
|
-
* **📍 Автоматический расчет участков:** При регистрации или изменении адреса проживания пациента система сама вычисляет номер его терапевтического участка и закрепленный кабинет врача.
|
|
15
|
-
* **📊 Статистика болезней и МКБ-10:** Выделенный независимый справочник заболеваний в базе данных с возможностью автономной миграции и автоматическим инкрементом счетчиков заболеваемости при закрытии приемов врачами.
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## 📂 Структура проекта
|
|
20
|
-
|
|
21
|
-
Архитектура построена по принципу **Clean Architecture (Чистая архитектура)** с полной изоляцией слоев бэкенда и раздачей статики:
|
|
22
|
-
|
|
23
|
-
```text
|
|
24
|
-
med-cms/
|
|
25
|
-
├── package.json # Зависимости движка (express, sequelize, sqlite3, bcryptjs)
|
|
26
|
-
├── index.js # Главная точка входа (Инициализация и контроль гонки процессов)
|
|
27
|
-
├── index.d.ts # TypeScript декларации для автокомплита 34 специальностей
|
|
28
|
-
├── test.js # Скрипт локального запуска тестового сервера
|
|
29
|
-
├── migrate-diseases.js # Скрипт независимой миграции справочника МКБ-10 в SQLite
|
|
30
|
-
│
|
|
31
|
-
├── database/
|
|
32
|
-
│ ├── config/
|
|
33
|
-
│ │ └── db-init.js # Инициализация и синхронизация таблиц/связей Sequelize
|
|
34
|
-
│ ├── models/
|
|
35
|
-
│ │ ├── users.js # Таблица пользователей (Числовые автоинкрементные ID)
|
|
36
|
-
│ │ ├── clinics.js # Таблица медицинских учреждений (Больницы, Поликлиники)
|
|
37
|
-
│ │ ├── user-addresses.js # Адреса пациентов с авторасчетом участков и кабинетов
|
|
38
|
-
│ │ ├── diseases.js # Изолированная таблица болезней и статистики
|
|
39
|
-
│ │ └── appointments.js # Журнал приемов (осмотры, жалобы, статусы)
|
|
40
|
-
│ └── services/ # Атомарная бизнес-логика (Разделена по ролям)
|
|
41
|
-
│ ├── admin/ # (create-clinic.js, manage-staff.js, db-analytics.js)
|
|
42
|
-
│ ├── doctor/ # (get-schedule.js, patient-access.js, conduct-exam.js)
|
|
43
|
-
│ └── patient/ # (get-profile.js, calc-district.js, book-appointment.js)
|
|
44
|
-
│
|
|
45
|
-
├── server/
|
|
46
|
-
│ ├── server.js # Раздельные маршрутизаторы Express (web-страницы и api)
|
|
47
|
-
│ ├── midleware.js # Валидация HttpOnly кук сессий и проверка матрицы разрешений
|
|
48
|
-
│ └── permissions.js # Карта соответствия медицинских специальностей и прав
|
|
49
|
-
│
|
|
50
|
-
└── public/ # Статические файлы фронтенда (HTML, CSS, JS)
|
|
51
|
-
├── css/ # (auth.css, admin.css, doctor.css)
|
|
52
|
-
├── js/ # (auth.js, admin.js, doctor.js, patient.js)
|
|
53
|
-
└── html/ # (login.html, dashboard-admin.html, dashboard-doctor.html, ...)
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## 🛠️ Установка и быстрая настройка
|
|
59
|
-
|
|
60
|
-
### 1. Установка модуля
|
|
61
|
-
Установите пакет в ваше Node.js приложение:
|
|
62
|
-
```bash
|
|
63
|
-
npm install med-cms@1.0.0-beta.1
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
> **Важно для пользователей Linux:** Пакетам `sequelize` и `sqlite3` требуются компиляторы C++ для сборки бинарных файлов под вашу архитектуру ядра. Перед развертыванием убедитесь, что в системе установлены базовые утилиты сборки:
|
|
67
|
-
> ```bash
|
|
68
|
-
> sudo apt update && sudo apt install -y build-essential python3
|
|
69
|
-
> ```
|
|
70
|
-
|
|
71
|
-
### 2. Подключение в Express
|
|
72
|
-
Для интеграции CMS в ваш Express-сервер импортируйте функцию инициализации и передайте туда ваш инстанс `app`:
|
|
73
|
-
|
|
74
|
-
```javascript
|
|
75
|
-
const express = require('express');
|
|
76
|
-
require("dotenv").config();
|
|
77
|
-
|
|
78
|
-
const app = express();
|
|
79
|
-
const PORT = process.env.PORT || 3000;
|
|
80
|
-
|
|
81
|
-
// Импортируем инициализатор нашего npm-модуля
|
|
82
|
-
const initMedCms = require('med-cms');
|
|
83
|
-
|
|
84
|
-
async function startServer() {
|
|
85
|
-
// Запускаем медицинский движок med-cms (он сам настроит БД, роуты и статику)
|
|
86
|
-
await initMedCms(app);
|
|
87
|
-
|
|
88
|
-
app.listen(PORT, () => {
|
|
89
|
-
console.log(`🚀 Основной сервер успешно запущен на http://localhost:${PORT}`);
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
startServer();
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
## 📊 Миграция расширенного справочника болезней (РБ)
|
|
99
|
-
|
|
100
|
-
Справочник заболеваний полностью изолирован от кода ядра CMS. Для наполнения пустой таблицы `Diseases` актуальными и социально значимыми кодами МКБ-10 для Республики Беларусь, запустите команду миграции перед стартом основного сервера:
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
node node_modules/med-cms/migrate-diseases.js
|
|
104
|
-
# или
|
|
105
|
-
node node_modules\med-cms\migrate-diseases.js
|
|
106
|
-
```
|
|
107
|
-
Это наполнит отдельную таблицу базы данных 18 распространенными диагнозами (ОРВИ, Острый бронхит, Внебольничная пневмония, Артериальная гипертензия, Остеохондроз, Эндемический зоб и др.), которые автоматически начнут подтягиваться в HTML-тег `<select>` на рабочем месте врача.
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## 👥 Роли и Маршрутизация (API & Web)
|
|
112
|
-
|
|
113
|
-
Архитектура роутера жестко разделяет отдачу интерфейсов и данных, исключая ошибки парсинга `JSON.parse` в браузере:
|
|
114
|
-
|
|
115
|
-
* **Интерфейс (Web-страницы):** `http://localhost:3000/med/...`
|
|
116
|
-
* **Данные (JSON API):** `http://localhost:3000/med/api/...`
|
|
117
|
-
|
|
118
|
-
### Матрица маршрутов
|
|
119
|
-
|
|
120
|
-
| Действие | Метод | Маршрут (URL) | Доступ (Роль) |
|
|
121
|
-
| :--- | :--- | :--- | :--- |
|
|
122
|
-
| Страница авторизации и входа | `GET` | `/med/med-login` | Публичный |
|
|
123
|
-
| API Аутентификации (Вход) | `POST` | `/med/api/auth/login` | Публичный |
|
|
124
|
-
| API Завершения сессии (Выход) | `POST` | `/med/api/auth/logout` | Публичный |
|
|
125
|
-
| Личный кабинет Пациента | `GET` | `/med/med-patient` | `patient` |
|
|
126
|
-
| Выгрузка полной медицинской карты | `GET` | `/med/api/patient/me` | `patient` |
|
|
127
|
-
| Бронирование талона к врачу | `POST` | `/med/api/patient/book` | `patient` |
|
|
128
|
-
| АРМ (Рабочее место) Врача | `GET` | `/med/med-doctor` | `doctor` |
|
|
129
|
-
| Загрузка справочника МКБ-10 | `GET` | `/med/api/doctor/diseases-list` | `doctor`, `admin` |
|
|
130
|
-
| Закрытие приема и фиксация осмотра | `POST` | `/med/api/doctor/complete-examination` | `doctor` |
|
|
131
|
-
| Панель Суперадминистратора | `GET` | `/med/med-admin` | `admin` |
|
|
132
|
-
| Создание новой больницы/поликлиники | `POST` | `/med/api/admin/clinics` | `admin` |
|
|
133
|
-
| Регистрация врача (выдача аккаунта) | `POST` | `/med/api/admin/staff` | `admin` |
|
|
134
|
-
| Мониторинг таблиц и аналитика БД | `GET` | `/med/api/admin/stats` | `admin` |
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
## 🛡️ Инструкция к проведению Гипертеста (Тестирование)
|
|
139
|
-
|
|
140
|
-
В модуле подготовлен файл `test.js` для развертывания локальной среды. При самом первом запуске и создании чистой базы данных `db/med-cms.sqlite` скрипт автоматически генерирует мастер-аккаунт **Суперадминистратора** системы:
|
|
141
|
-
|
|
142
|
-
* **Логин (Email):** `admin@medcms.ru`
|
|
143
|
-
* **Пароль:** `SuperAdminPassword2026`
|
|
144
|
-
* **Физический ID в базе:** `1`
|
|
145
|
-
|
|
146
|
-
### Алгоритм проведения сквозного теста:
|
|
147
|
-
1. Выполните миграцию справочника МКБ-10: `node migrate-diseases.js`.
|
|
148
|
-
2. Запустите тестовую среду: `node test.js`.
|
|
149
|
-
3. Откройте браузер на `http://localhost:3000/med/med-login` и войдите под аккаунтом админа.
|
|
150
|
-
4. В левой форме добавьте поликлинику. Она запишется в SQLite под числовым `ID: 1`.
|
|
151
|
-
5. Кликните на карточку «Всего клиник», чтобы развернуть интерактивную таблицу и проверить числовой ID.
|
|
152
|
-
6. В правой форме зарегистрируйте аккаунт врача, выбрав созданную поликлинику №1 из выпадающего списка.
|
|
153
|
-
7. Выйдите из админки, нажмите «Зарегистрироваться как пациент» и создайте профиль.
|
|
154
|
-
8. В кабинете пациента выберите созданного врача, дату, время и нажмите **«Забронировать талон»**. Талон мгновенно отобразится в блоке предстоящих приемов.
|
|
155
|
-
9. Авторизуйтесь под созданным врачом. Пациент появится в вашей очереди. Нажмите «Принять», заполните жалобы, выберите из подгрузившегося справочника диагноз *«Острый бронхит»* и закройте прием. Системные счетчики зафиксируют визит, а статистика болезни обновится в SQLite!
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
## 📄 Лицензия
|
|
160
|
-
|
|
161
|
-
Проект распространяется на условиях открытой лицензии **MIT**. Разработано для создания масштабируемых и отказоустойчивых медицинских информационных систем. 🇧🇾
|
package/test.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
const express = require('express');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
const initMedCms = require('./index.js'); // Импортируем наш модуль через главную точку входа
|
|
4
|
-
const chalk = require("chalk-palette");
|
|
5
|
-
const app = express();
|
|
6
|
-
const PORT = process.env.PORT || 3000;
|
|
7
|
-
|
|
8
|
-
(async()=>{
|
|
9
|
-
await initMedCms(app);
|
|
10
|
-
app.use((req, res) => {
|
|
11
|
-
res.status(404).send('<h1>404 | Медицинский модуль: Страница не найдена</h1>');
|
|
12
|
-
});
|
|
13
|
-
app.listen(PORT, () => {
|
|
14
|
-
console.log('\n==================================================');
|
|
15
|
-
console.log(`🚀 ТЕСТОВЫЙ СЕРВЕР MED-CMS УСПЕШНО ЗАПУЩЕН!`);
|
|
16
|
-
console.log(chalk.url(`🔗 Откройте в браузере: http://localhost:${PORT}`));
|
|
17
|
-
console.log('==================================================\n');
|
|
18
|
-
console.log('📝 ИНСТРУКЦИЯ ДЛЯ ТЕСТИРОВАНИЯ:');
|
|
19
|
-
console.log('1. Перейдите по ссылке, откроется страница входа.');
|
|
20
|
-
console.log('2. Нажмите "Зарегистрироваться как пациент" и создайте тестовый аккаунт.');
|
|
21
|
-
console.log('3. Проверьте в консоли разработчика (F12 -> Application -> Cookies), что кука med_auth_token установилась.');
|
|
22
|
-
console.log('4. Чтобы зайти под Админом или Врачом, вы можете использовать созданный файл test-database.sqlite.\n');
|
|
23
|
-
});
|
|
24
|
-
})()
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|