Skip to content

gr33njj/lis-mini

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ЛИС mini МД - Система управления лабораторными результатами

Автоматизированная система для загрузки и рассылки лабораторных результатов для 1С:Управление медицинским центром (ПервыйБит).

📋 Описание проекта

ЛИС mini МД — это модуль автоматической загрузки и рассылки лабораторных результатов, который интегрируется с 1С:Управление медицинским центром без необходимости внедрения полноценной ЛИС. Система минимизирует ручной труд, исключает ошибки и обеспечивает прозрачный контроль потока результатов анализов.

Основные возможности

✅ Автоматическое получение PDF-файлов результатов из лаборатории с NAS
Извлечение ФИО и даты рождения из имени файла (формат: Фамилия Имя Отчество ДД.ММ.ГГГГ.pdf)
Поиск пациента в 1С по раздельным полям (Фамилия + Имя + Отчество + Дата рождения)
✅ Парсинг результатов анализов из PDF (18 биохимических показателей)
✅ Передача результатов в 1С через HTTP API
Автоматическое создание документа "Прием" в 1С с результатами
✅ Отправка результатов пациентам по e-mail
✅ Визуальный контроль и отчётность через веб-интерфейс
✅ Интеграция через OpenVPN с локальной сетью офиса
✅ Автоматическое архивирование обработанных файлов
✅ Система аудита всех операций

📝 Важно! Формат имени файла

Обязательный формат: Фамилия Имя Отчество ДД.ММ.ГГГГ.pdf

Примеры:

  • Иванов Иван Иванович 21.05.1982.pdf
  • Петрова Мария Сергеевна 15.03.1995.pdf
  • 123456.pdf (неправильно!)

Подробнее: FILE-NAMING-GUIDE.md

Архитектура

Интернет
    ↓ HTTPS (lis.it-mydoc.ru)
Облачный сервер (185.247.185.145)
    ↓ OpenVPN туннель
Локальная сеть офиса (192.168.100.0/24)
    ├─ 1С Сервер (192.168.100.234)
    └─ NAS (192.168.100.177/laba)

🚀 Быстрый старт

Полное развертывание с нуля

Следуйте подробному руководству: docs/deployment-guide.md

Краткая инструкция

1. Настройка сервера

# Подключиться к серверу
ssh root@185.247.185.145

# Перейти в директорию проекта
cd /opt/lis-md

# Запустить скрипт настройки сервера
chmod +x setup-server.sh
./setup-server.sh

2. Настройка OpenVPN

# Установить OpenVPN и зависимости
chmod +x setup-openvpn.sh
./setup-openvpn.sh

# Скопировать конфигурацию OpenVPN (с локального компьютера)
scp client.ovpn root@185.247.185.145:/etc/openvpn/client/client.conf

# Запустить OpenVPN
systemctl enable openvpn-client@client
systemctl start openvpn-client@client

# Проверить подключение
ping 192.168.100.234  # 1С сервер
ping 192.168.100.177  # NAS

Подробности: docs/openvpn-setup-guide.md

3. Настройка монтирования NAS

# Создать credentials файл
nano /etc/openvpn/nas-credentials

Содержимое:

username=your_nas_user
password=your_nas_password
# Защитить файл
chmod 600 /etc/openvpn/nas-credentials

# Добавить в /etc/fstab
echo "//192.168.100.177/laba /mnt/nas cifs credentials=/etc/openvpn/nas-credentials,vers=3.0,iocharset=utf8,file_mode=0777,dir_mode=0777,_netdev,x-systemd.after=openvpn-client@client.service 0 0" >> /etc/fstab

# Примонтировать
mount -a

# Проверить
ls -la /mnt/nas

4. Настройка приложения

# Создать .env файл
cp env.template .env
nano .env

Важно! Обязательно заполните:

  • API_1C_URL - URL API 1С сервера
  • API_1C_TOKEN - токен авторизации для API 1С
  • SMTP_* - настройки email сервера
  • SECRET_KEY - секретный ключ (сгенерируйте: openssl rand -hex 32)
  • ADMIN_PASSWORD - пароль администратора

5. Запуск системы

# Запустить контейнеры
systemctl start lis-md

# Проверить статус
systemctl status lis-md

# Посмотреть логи
docker compose logs -f app

6. Получение SSL сертификата

# Остановить nginx
docker compose stop nginx

# Получить сертификат
certbot certonly --standalone -d lis.it-mydoc.ru

# Запустить nginx
docker compose start nginx

7. Проверка системы

# Запустить полную проверку
./check-system.sh

📋 Функциональность

Модули системы

🔍 Watcher (Мониторинг файлов)

  • Автоматический мониторинг NAS каждые 30 секунд
  • Проверка новых PDF по хешу (SHA256) для предотвращения дубликатов
  • Очередь задач с повторной обработкой при сбое
  • Автоматическое извлечение номера исследования из имени файла

🔗 Integrator (Интеграция с 1С)

  • Передача PDF в 1С через HTTPS API
  • Авторизация по токену в заголовке запроса
  • До 3 попыток отправки при ошибке с увеличением интервала
  • SQLite для аудита и обеспечения идемпотентности
  • Автоматическое архивирование успешно обработанных файлов
  • Перемещение неудачных файлов в карантин с логом ошибок

📧 Mailer (Отправка email)

  • Отправка писем пациентам через SMTP (TLS, порт 465/587)
  • Настраиваемый шаблон письма
  • Возможность повторной отправки через GUI
  • Поддержка различных SMTP провайдеров (Gmail, Yandex, и др.)

🖥️ Web GUI (Веб-интерфейс)

  • Доступен по адресу: https://lis.it-mydoc.ru
  • Аутентификация: Логин/пароль (bcrypt)
  • Роли: администратор, оператор
  • Разделы:
    • Панель управления - общая статистика и состояние системы
    • Очередь - просмотр и управление очередью обработки
    • Архив - история обработанных файлов
    • Журнал - подробный аудит всех операций
    • Настройки - конфигурация системы

📊 Audit (Аудит)

  • Журнал всех операций с файлами
  • Хранение информации о попытках обработки
  • Детальные логи ошибок
  • Возможность отслеживания полного жизненного цикла файла

Возможности веб-интерфейса

Основные функции:

  • ✅ Просмотр статистики обработки файлов в реальном времени
  • ✅ Список всех записей с фильтрацией по статусу (pending, processing, completed, failed)
  • ✅ Журнал аудита всех операций
  • ✅ Повторная обработка неудачных файлов
  • ✅ Повторная отправка email уведомлений
  • ✅ Просмотр PDF файлов inline в браузере
  • ✅ Поиск по номеру исследования
  • ✅ Экспорт данных для отчётности

Доступ:

🔧 Структура проекта

/opt/lis-md/
├── app/                        # FastAPI приложение
│   ├── main.py                # Основное приложение FastAPI
│   ├── watcher.py             # Мониторинг файлов на NAS
│   ├── integrator.py          # Интеграция с 1С
│   ├── mailer.py              # Отправка email
│   ├── auth.py                # Аутентификация JWT
│   ├── database.py            # Модели SQLAlchemy
│   ├── config.py              # Конфигурация приложения
│   ├── requirements.txt       # Зависимости Python
│   ├── Dockerfile             # Docker образ приложения
│   └── templates/             # Jinja2 HTML шаблоны
│       ├── base.html          # Базовый шаблон
│       ├── login.html         # Страница входа
│       ├── index.html         # Главная страница
│       └── dashboard.html     # Панель управления
├── docs/                       # Документация
│   ├── deployment-guide.md    # Полное руководство по развертыванию
│   ├── openvpn-setup-guide.md # Настройка OpenVPN туннеля
│   └── 1c-integration.md      # Интеграция с 1С (код для 1С)
├── nginx/                      # Конфигурация Nginx
│   ├── nginx.conf             # Основная конфигурация
│   └── conf.d/                # Виртуальные хосты
│       └── lis-md.conf        # Конфигурация для lis.it-mydoc.ru
├── data/                       # Данные приложения
│   └── lis.db                 # База данных SQLite
├── docker-compose.yml          # Оркестрация контейнеров
├── setup-server.sh             # Скрипт первоначальной настройки сервера
├── setup-openvpn.sh            # Скрипт настройки OpenVPN
├── check-system.sh             # Скрипт проверки системы
├── backup.sh                   # Скрипт резервного копирования
├── env.template                # Шаблон переменных окружения
└── README.md                   # Этот файл

🔒 Безопасность

  • HTTPS с сертификатами Let's Encrypt
  • Аутентификация пользователей с ролями (администратор/оператор)
  • JWT токены с ограниченным временем жизни
  • Логирование без хранения персональных данных
  • Контейнеризация с непривилегированным пользователем

📊 Мониторинг

Система автоматически:

  • Мониторит появление новых PDF файлов на NAS
  • Отправляет результаты в 1С через HTTP API
  • Перемещает обработанные файлы в архив
  • Сохраняет неудачные файлы в карантин с логами ошибок
  • Ведет полный аудит всех операций

🛠 Технический стек

  • Backend: Python 3.12 + FastAPI
  • Frontend: Tailwind CSS + HTMX
  • База данных: SQLite
  • Контейнеризация: Docker + Docker Compose
  • Веб-сервер: Nginx с SSL
  • Мониторинг: Встроенная система логирования

🔗 Интеграция с 1С

Требования для 1С

Для работы системы необходимо настроить HTTP-сервис в 1С:Управление медицинским центром.

Подробное руководство с кодом: docs/1c-integration.md

Краткое описание API

Endpoint: /lab/attachResult
Метод: POST
Авторизация: Bearer Token

Запрос:

{
  "orderNo": "123456",
  "fileName": "123456.pdf",
  "fileBase64": "JVBERi0xLjQK...",
  "sendEmail": true
}

Ответ:

{
  "status": "ok",
  "docRef": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "email": "patient@example.com",
  "alreadyAttached": false
}

Поток данных

1. PDF файл → NAS (\\192.168.100.177\laba\Иванов Иван Иванович 21.05.1982.pdf)
2. Watcher обнаруживает файл
3. Парсер извлекает из ИМЕНИ ФАЙЛА:
   - ФИО: "Иванов Иван Иванович"
   - Дата рождения: "21.05.1982"
   - Возраст: "42" (автоматически)
4. Парсер извлекает из PDF:
   - Результаты анализов (18 показателей)
   - Даты (опционально)
5. Integrator отправляет в 1С JSON с ФИО и датой рождения
6. 1С разбирает ФИО на части (Фамилия, Имя, Отчество)
7. 1С ищет пациента по Клиенты.Фамилия + Имя + Отчество + ДатаРождения
8. Если пациент найден:
   → 1С создаёт документ "Прием" с врачом "МД Lab"
   → 1С заполняет HTML шаблон с результатами
   → 1С отправляет email пациенту (опционально)
   → Файл архивируется в /mnt/nas/archive/YYYY-MM-DD/
9. Если пациент НЕ найден:
   → Файл в карантин /mnt/nas/quarantine/
   → Ошибка: "Пациент не найден в базе"

📊 Мониторинг и логирование

Просмотр логов

# Логи приложения
docker compose logs -f app

# Логи nginx
docker compose logs -f nginx

# Логи OpenVPN
journalctl -u openvpn-client@client -f

# Логи systemd сервиса
journalctl -u lis-md -f

Статистика через API

# Общая статистика
curl -H "Authorization: Bearer YOUR_TOKEN" https://lis.it-mydoc.ru/api/stats

# Список записей
curl -H "Authorization: Bearer YOUR_TOKEN" https://lis.it-mydoc.ru/api/records

# Журнал аудита
curl -H "Authorization: Bearer YOUR_TOKEN" https://lis.it-mydoc.ru/api/logs

Проверка здоровья системы

# Автоматическая проверка всех компонентов
/opt/lis-md/check-system.sh

# Health check endpoint
curl https://lis.it-mydoc.ru/health

🔄 Обслуживание

Резервное копирование

Автоматическое резервное копирование настроено через cron:

# Ручной запуск
/opt/lis-md/backup.sh

# Настройка автоматического (выполняется скриптом setup-server.sh)
# Каждый день в 3:00
0 3 * * * /opt/lis-md/backup.sh >> /var/log/lis-md-backup.log 2>&1

Обновление системы

cd /opt/lis-md

# Обновить код (если используется git)
git pull

# Пересобрать контейнеры
docker compose down
docker compose build --no-cache
docker compose up -d

# Проверить логи
docker compose logs -f

Очистка старых файлов

Система автоматически управляет архивами согласно ARCHIVE_RETENTION_DAYS (по умолчанию 90 дней).

Ручная очистка:

# Удалить файлы старше 90 дней из архива
find /mnt/nas/archive -type f -mtime +90 -delete

# Очистить Docker кеш
docker system prune -a

🐛 Устранение неполадок

Проблема: OpenVPN не подключается

# Проверить статус
systemctl status openvpn-client@client

# Просмотреть логи
journalctl -u openvpn-client@client -n 50

# Перезапустить
systemctl restart openvpn-client@client

Проблема: NAS не монтируется

# Проверить credentials
cat /etc/openvpn/nas-credentials

# Попробовать вручную
umount /mnt/nas
mount -a

# Проверить доступность
ping 192.168.100.177

Проблема: Приложение не запускается

# Проверить логи
docker compose logs app

# Проверить .env файл
cat /opt/lis-md/.env

# Пересобрать контейнеры
docker compose down
docker compose build --no-cache
docker compose up -d

Проблема: Не работает интеграция с 1С

# Проверить доступность 1С сервера
ping 192.168.100.234

# Проверить API
curl -X POST http://192.168.100.234/УправлениеМЦ/hs/lab/attachResult \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'

# Проверить логи приложения
docker compose logs app | grep "1C\|1С"

📚 Документация

🔑 Учётные данные по умолчанию

Веб-интерфейс:

  • Username: admin (настраивается в .env)
  • Password: changeme (ОБЯЗАТЕЛЬНО измените в .env)

ВАЖНО: Обязательно измените пароль администратора после первого входа!

⚙️ Технический стек

  • Backend: Python 3.12 + FastAPI + Uvicorn
  • Frontend: HTML + Tailwind CSS + HTMX
  • База данных: SQLite + SQLAlchemy (async)
  • Контейнеризация: Docker + Docker Compose
  • Веб-сервер: Nginx с SSL (Let's Encrypt)
  • VPN: OpenVPN client
  • Монтирование: CIFS/SMB
  • Мониторинг: Встроенная система логирования и аудита

📈 Производительность

  • Обработка файлов: ~30 секунд от появления на NAS до отправки в 1С
  • Поддержка до 10,000 файлов в день
  • Размер базы данных: ~1MB на 1000 записей
  • Требования к серверу: минимум 2 CPU cores, 4 GB RAM

🌟 Особенности

  • ✅ Полностью асинхронная архитектура
  • ✅ Автоматическое восстановление после сбоев
  • ✅ Защита от дубликатов через SHA256 хеширование
  • ✅ Идемпотентность операций
  • ✅ Полный аудит всех действий
  • ✅ Автоматическое архивирование
  • ✅ Карантин для проблемных файлов
  • ✅ Веб-интерфейс с real-time обновлением
  • ✅ RESTful API для интеграции
  • ✅ Docker контейнеризация для лёгкого развертывания

📞 Поддержка

По вопросам настройки и эксплуатации:

  1. Проверьте документацию
  2. Запустите диагностику: ./check-system.sh
  3. Просмотрите логи: docker compose logs -f app
  4. Обратитесь к администратору системы

📄 Лицензия

Проприетарное ПО. Все права защищены.

👨‍💻 Разработка

Проект создан для медицинского центра IT-MyDoc для автоматизации обработки лабораторных результатов.

Версия: 3.1 FINAL (поиск по раздельным полям Фамилия+Имя+Отчество)
Дата: 24.11.2025

About

ЛИС Мой Доктор

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •