med-cms 1.0.0-beta.5 → 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 ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2026 RPM-programmer (github) / prm-programmer (npmjs)
2
+
3
+ Permission to use, copy, modify, and/or distribute this software for any purpose with or
4
+ without fee is hereby granted, provided that the above copyright notice and this permission
5
+ notice appear in all copies.
6
+
7
+ THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
13
+ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,117 @@
1
+ # MED-CMS (v1.0.0)
2
+
3
+ > ## `med-cms` — Это автономный медецинский движок для управления сетями клиник, персоналом и расписание приймов и т.д. Написан `med-cms` на node.js с использованием **express**, **sequelize**
4
+
5
+ ### Модуль поставляется со встроенной базой данных, системой разграничения прав доступа на основе **34 медицинских специальностей** и готовым веб-интерфейсом (АРМ Врача, Личный Кабинет Пациента, Панель Суперадминистратора), а также готовой главной страницей
6
+
7
+ ---
8
+
9
+ ## Ключевые возможности
10
+
11
+ - **Автономность** База данных SQLite3 не требует установки тяжелых серверов (PostgreSQL/MySQL/MongoDB). Файл БД и таблицы создаются автоматически прямо в папке проекта.
12
+ - **Безопасность и Сессии:** Авторизация реализована через зашифрованные JWT-токены, хранящиеся в защищенных **HttpOnly Cookie**. JS на клиенте не имеет доступа к токену.
13
+ - **Матрица прав доступа (34 специальности):** Гибкое разграничение возможностей врачей. Стоматолог или Эндокринолог не смогут получить доступ к эндпоинтам назначения нейрохирургических операций — то-есть не к своим данным
14
+ - **Автоматический расчет участков:** При регистрации или изменении адреса проживания пациента система сама вычисляет номер его терапевтического участка и закрепленный кабинет врача. Участки настраиваются админом.
15
+ - **Статистика болезней и МКБ-10:** Выделенный независимый справочник заболеваний в базе данных с возможностью автономной миграции и автоматическим инкрементом счетчиков заболеваемости при закрытии приемов врачами.
16
+ - **Возможность управлять новостями** А админ панеле есть форма позволяющая выкладывать новости.
17
+ - **Автозапись в `.env`** При запуске проекта код проверяет есть ли `.env` и настройки в нём, если то записывает настройки в него.
18
+
19
+ ---
20
+
21
+ ## Установка и быстрая настройка
22
+
23
+ ### 1. Установка модуля
24
+
25
+ #### Установите пакет в ваше Node.js приложение:
26
+
27
+ ```bash
28
+ npm install med-cms
29
+ # или
30
+ yarn add med-cms
31
+ ```
32
+
33
+ > **Важно для пользователей Linux:** Пакетам `sequelize` и `sqlite3` иногда требуются компиляторы C++ для сборки бинарных файлов под вашу архитектуру ядра. Перед развертыванием убедитесь, что в системе установлены базовые утилиты сборки:
34
+ >
35
+ > ```bash
36
+ > sudo apt update && sudo apt install -y build-essential python3
37
+ > ```
38
+
39
+ ### 2. Подключение в Express
40
+
41
+ #### Для интеграции CMS в ваш Express-сервер импортируйте функцию инициализации и передайте туда ваш инстанс `app`:
42
+
43
+ ```javascript
44
+ const express = require("express");
45
+ require("dotenv").config();
46
+
47
+ const app = express();
48
+
49
+ // Импортируем инициализатор нашего npm-модуля
50
+ const MI = require("med-cms");
51
+
52
+ // здесь ваши роуты ...
53
+ app.get("/", async (req, res) => {
54
+ res.end("HELLO!");
55
+ });
56
+
57
+ (async function startServer() {
58
+ // Запускаем медицинский движок med-cms
59
+ // требуется асинхронность из-за запросов в к бд
60
+ await MI(app);
61
+
62
+ app.listen(3000, () => {
63
+ console.log(`Сервер успешно запущен!`);
64
+ });
65
+ })();
66
+ ```
67
+
68
+ ---
69
+
70
+ ## Миграция расширенного справочника болезней (РБ)
71
+
72
+ ### Справочник заболеваний полностью изолирован от кода ядра CMS. Для наполнения пустой таблицы `Diseases` актуальными и социально значимыми кодами МКБ-10 для Республики Беларусь, запустите команду миграции перед стартом основного сервера:
73
+
74
+ ```bash
75
+ node node_modules/med-cms/migrate-diseases.js
76
+ # или
77
+ node node_modules\med-cms\migrate-diseases.js
78
+ ```
79
+
80
+ ### Это наполнит отдельную таблицу базы данных 18 распространенными диагнозами (ОРВИ, Острый бронхит, Внебольничная пневмония, Артериальная гипертензия, Остеохондроз, Эндемический зоб и др.), которые автоматически начнут подтягиваться в HTML-тег `<select>` на рабочем месте врача.
81
+
82
+ ---
83
+
84
+ ## Роли и Маршрутизация (API & Web)
85
+
86
+ ### Архитектура роутера жестко разделяет отдачу интерфейсов и данных, исключая ошибки парсинга `JSON.parse` в браузере:
87
+
88
+ - **Интерфейс (Web-страницы):** `http://localhost:3000/med/...`
89
+ - **Данные (JSON API):** `http://localhost:3000/med/api/...`
90
+
91
+ ### Матрица маршрутов
92
+
93
+ | Действие | Метод | Маршрут (URL) | Доступ (Роль) |
94
+ | :--------------------------- | :---- | :---------------------------------------- | :------------ |
95
+ | Страница авторизации и входа | `GET` | `/med/html/login.html` (или `/med/login`) | Публичный |
96
+ | Главная страница | `GET` | `/med/html/home.html` (или `/med/home`) | Публичный |
97
+
98
+ ---
99
+
100
+ ### Алгоритм проведения инициялизации:
101
+
102
+ 1. Выполните миграцию справочника болезней: `node node_modules/med-cms/migrate-diseases.js` или `node node_modules\med-cms\migrate-diseases.js`.
103
+ 2. Откройте браузер на `http://localhost:3000/med/home` и нажмите на кнопку **`вход`**.
104
+ 3. Авторизируйтесь (заполните поля почты и пароля) (данные можно узнать в настройках `.env`)
105
+ 4. В левой форме добавьте поликлинику. Она запишется в SQLite под числовым `ID: 1`.
106
+ 5. Кликните на карточку «Всего клиник», чтобы развернуть интерактивную таблицу и проверить числовой ID.
107
+ 6. В правой форме зарегистрируйте аккаунт врача, выбрав созданную поликлинику №1 из выпадающего списка.
108
+ 7. Выйдите из админки, нажмите «Зарегистрироваться как пациент» и создайте профиль.
109
+ 8. В кабинете пациента выберите созданного врача, дату, время и нажмите **«Забронировать талон»**. Талон мгновенно отобразится в блоке предстоящих приемов.
110
+ 9. Авторизуйтесь под созданным врачом. Пациент появится в вашей очереди. Нажмите «Принять», заполните жалобы, выберите из подгрузившегося справочника диагноз _«Острый бронхит»_ и закройте прием. Системные счетчики зафиксируют визит, а статистика болезни обновится в SQLite.
111
+ 10. Также можете с аккаунта админа настроить участки и новости!
112
+
113
+ ---
114
+
115
+ ## Лицензия
116
+
117
+ ### Проект распространяется на условиях открытой лицензии [**ISC**](LICENSE.txt). Разработано [RPM-programmer](https://github.com/RPM-programmer/) для создания масштабируемых и отказоустойчивых медицинских информационных систем.
package/env_init.js ADDED
@@ -0,0 +1,55 @@
1
+ const fs = require("fs");
2
+ const path = require("path");
3
+ const process = require("process");
4
+ const envPath = path.resolve(process.cwd(), ".env");
5
+ const logger = require("custom-color-logs").print;
6
+ const defaultEnvContent = `
7
+
8
+
9
+ # ==============================================================================
10
+ # MED-CMS (v1.0.0)
11
+ # ==============================================================================
12
+
13
+ # Специяльный тег инициализации (значение не меняйте)
14
+ MED_CMS_INITIALIZED = true
15
+
16
+
17
+ # Код который будет хешироваться в куки
18
+ JWT_SECRET = 0000
19
+
20
+
21
+ # Данные админа
22
+ # Почта админестратора
23
+ ADMIN_GMAIL = x@gmail.com
24
+
25
+ # Телефон админестратора
26
+ ADMIN_PHONE = +375 00 00000000
27
+
28
+ # Пароль аккаунта админестратора
29
+ ADMIN_PASSWORD = 1234
30
+ `;
31
+
32
+ function initializeEnvironment() {
33
+ try {
34
+ if (!fs.existsSync(envPath)) {
35
+ fs.writeFileSync(envPath, defaultEnvContent, "utf8");
36
+ } else {
37
+ const currentEnv = fs.readFileSync(envPath, "utf8");
38
+ if (currentEnv.includes("MED_CMS_INITIALIZED")) {
39
+ require("dotenv").config({ path: envPath });
40
+ return;
41
+ }
42
+ fs.appendFileSync(envPath, `\n\n${defaultEnvContent}`, "utf8");
43
+ }
44
+ } catch (err) {
45
+ console.log(
46
+ logger.ServerMedError(
47
+ "Не удалось проверить или обновить .env:",
48
+ err.message,
49
+ ),
50
+ );
51
+ }
52
+ require("dotenv").config({ path: envPath });
53
+ }
54
+ initializeEnvironment();
55
+ module.exports = { envPath };
package/index.d.ts CHANGED
@@ -1,25 +1,39 @@
1
- import { Router } from 'express';
2
-
3
- export interface MedCmsConfig {
4
- jwtSecret: string;
5
- dbPath?: string;
6
- }
7
-
1
+ import { Express } from "express";
8
2
  export type DoctorSpecialty =
9
-
10
- | 'Терапевт' | 'Педиатр' | 'Врач общей практики' | 'Кардиолог' | 'Невролог'
11
- | 'Эндокринолог' | 'Гастроэнтеролог' | 'Пульмонолог' | 'Нефролог' | 'Ревматолог'
12
- | 'Гематолог' | 'Хирург' | 'Травматолог-ортопед' | 'Сосудистый хирург' | 'Нейрохирург'
13
- | 'Кардиохирург' | 'Пластический хирург' | 'Офтальмолог' | 'Отоларинголог' | 'Дерматолог'
14
- | 'Стоматолог' | 'Гинеколог' | 'Уролог' | 'Онколог' | 'Инфекционист' | 'Аллерголог-иммунолог'
15
- | 'Психиатр' | 'Психотерапевт' | 'Нарколог' | 'Анестезиолог-реаниматолог' | 'Рентгенолог'
16
- | 'Врач УЗД' | 'Эндоскопист' | 'Патологоанатом';
17
-
18
- export type UserRole = 'patient' | 'doctor' | 'admin';
19
-
20
- /**
21
- * Инициализирует модуль med-cms и возвращает Express Router
22
- */
23
- declare function initMedCms(config: MedCmsConfig): Router;
24
-
25
- export default initMedCms;
3
+ | "Терапевт"
4
+ | "Педиатр"
5
+ | "Врач общей практики"
6
+ | "Кардиолог"
7
+ | "Невролог"
8
+ | "Эндокринолог"
9
+ | "Гастроэнтеролог"
10
+ | "Пульмонолог"
11
+ | "Нефролог"
12
+ | "Ревматолог"
13
+ | "Гематолог"
14
+ | "Хирург"
15
+ | "Травматолог-ортопед"
16
+ | "Сосудистый хирург"
17
+ | "Нейрохирург"
18
+ | "Кардиохирург"
19
+ | "Пластический хирург"
20
+ | "Офтальмолог"
21
+ | "Отоларинголог"
22
+ | "Дерматолог"
23
+ | "Стоматолог"
24
+ | "Гинеколог"
25
+ | "Уролог"
26
+ | "Онколог"
27
+ | "Инфекционист"
28
+ | "Аллерголог-иммунолог"
29
+ | "Психиатр"
30
+ | "Психотерапевт"
31
+ | "Нарколог"
32
+ | "Анестезиолог-реаниматолог"
33
+ | "Рентгенолог"
34
+ | "Врач УЗД"
35
+ | "Эндоскопист"
36
+ | "Патологоанатом";
37
+ export type UserRole = "patient" | "doctor" | "admin";
38
+ declare function init(app: Express): void;
39
+ export default init;
package/index.js CHANGED
@@ -5,7 +5,7 @@ const chalk = require("chalk-palette");
5
5
  const logger = require("custom-color-logs").print;
6
6
  const path = require("path");
7
7
  const fs = require("fs");
8
-
8
+ require(path.join(__dirname, "env_init.js"));
9
9
  // Оставляем только импорт самого модуля базы данных
10
10
  const dbConfig = require(
11
11
  path.join(__dirname, "database", "config", "db-init.js"),
@@ -57,20 +57,20 @@ async function init(app) {
57
57
  if (!adminExists) {
58
58
  console.log(
59
59
  logger.ServerMedInfo(
60
- "Администратор не найден. Создаю аккаунт по умолчанию...",
60
+ "Администратор не найден. Создание аккаунта по умолчанию...",
61
61
  ),
62
62
  );
63
- const adminPassword = "SuperAdminPassword2026";
63
+ const adminPassword = process.env.ADMIN_PASSWORD;
64
64
  const hashedPassword = await bcrypt.hash(adminPassword, 10);
65
65
  await User.create({
66
- email: "admin@medcms.ru",
66
+ email: process.env.ADMIN_GMAIL,
67
67
  password: hashedPassword,
68
68
  fullName: "Главный Администратор",
69
69
  role: "admin",
70
70
  specialty: null,
71
71
  });
72
72
  console.log(
73
- logger.ServerMedInfo(`Аккаунт суперадмина успешно создан in SQLite!`),
73
+ logger.ServerMedInfo(`Аккаунт суперадмина успешно создан in SQLite.`),
74
74
  );
75
75
  } else {
76
76
  console.log(
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "med-cms",
3
- "version": "1.0.0-beta.5",
3
+ "version": "1.0.0",
4
4
  "description": "Медицинская мультитендантная CMS на Express и Sequelize (SQLite3) с системой ролей и автоматическим расчетом участков",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
7
7
  "scripts": {
8
- "test": "echo \"Error: no test specified\" && exit 1"
8
+ "test": "node test.js"
9
9
  },
10
10
  "keywords": [
11
11
  "medical",
@@ -17,7 +17,7 @@
17
17
  "cookies"
18
18
  ],
19
19
  "author": "prm-programmmer",
20
- "license": "MIT",
20
+ "license": "ICS",
21
21
  "dependencies": {
22
22
  "bcrypt": "^6.0.0",
23
23
  "chalk-palette": "^3.0.0",
package/server/server.js CHANGED
@@ -575,6 +575,30 @@ function createMedRouter(jwtSecret) {
575
575
  phone: process.env.ADMIN_PHONE,
576
576
  });
577
577
  });
578
+ api.get("/home", async (req, res) => {
579
+ res.redirect("/med/html/home.html");
580
+ });
581
+ api.get("/general", async (req, res) => {
582
+ res.redirect("/med/html/home.html");
583
+ });
584
+ api.get("/h", async (req, res) => {
585
+ res.redirect("/med/html/home.html");
586
+ });
587
+ api.get("/главная", async (req, res) => {
588
+ res.redirect("/med/html/home.html");
589
+ });
590
+ api.get("/Главная", async (req, res) => {
591
+ res.redirect("/med/html/home.html");
592
+ });
593
+ api.get("/Home", async (req, res) => {
594
+ res.redirect("/med/html/home.html");
595
+ });
596
+ api.get("/login", async (req, res) => {
597
+ res.redirect("/med/html/login.html");
598
+ });
599
+ api.get("/вход", async (req, res) => {
600
+ res.redirect("/med/html/login.html");
601
+ });
578
602
 
579
603
  return { web: web, api: api };
580
604
  }
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,16 +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
12
- .status(404)
13
- .send("<h1>404 | Медицинский модуль: Страница не найдена</h1>");
14
- });
15
- app.listen(PORT, () => {});
16
- })();