Автоматизированная система для загрузки и рассылки лабораторных результатов для 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
# Подключиться к серверу
ssh root@185.247.185.145
# Перейти в директорию проекта
cd /opt/lis-md
# Запустить скрипт настройки сервера
chmod +x setup-server.sh
./setup-server.sh# Установить 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
# Создать 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# Создать .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- пароль администратора
# Запустить контейнеры
systemctl start lis-md
# Проверить статус
systemctl status lis-md
# Посмотреть логи
docker compose logs -f app# Остановить nginx
docker compose stop nginx
# Получить сертификат
certbot certonly --standalone -d lis.it-mydoc.ru
# Запустить nginx
docker compose start nginx# Запустить полную проверку
./check-system.sh- Автоматический мониторинг NAS каждые 30 секунд
- Проверка новых PDF по хешу (SHA256) для предотвращения дубликатов
- Очередь задач с повторной обработкой при сбое
- Автоматическое извлечение номера исследования из имени файла
- Передача PDF в 1С через HTTPS API
- Авторизация по токену в заголовке запроса
- До 3 попыток отправки при ошибке с увеличением интервала
- SQLite для аудита и обеспечения идемпотентности
- Автоматическое архивирование успешно обработанных файлов
- Перемещение неудачных файлов в карантин с логом ошибок
- Отправка писем пациентам через SMTP (TLS, порт 465/587)
- Настраиваемый шаблон письма
- Возможность повторной отправки через GUI
- Поддержка различных SMTP провайдеров (Gmail, Yandex, и др.)
- Доступен по адресу: https://lis.it-mydoc.ru
- Аутентификация: Логин/пароль (bcrypt)
- Роли: администратор, оператор
- Разделы:
- Панель управления - общая статистика и состояние системы
- Очередь - просмотр и управление очередью обработки
- Архив - история обработанных файлов
- Журнал - подробный аудит всех операций
- Настройки - конфигурация системы
- Журнал всех операций с файлами
- Хранение информации о попытках обработки
- Детальные логи ошибок
- Возможность отслеживания полного жизненного цикла файла
Основные функции:
- ✅ Просмотр статистики обработки файлов в реальном времени
- ✅ Список всех записей с фильтрацией по статусу (pending, processing, completed, failed)
- ✅ Журнал аудита всех операций
- ✅ Повторная обработка неудачных файлов
- ✅ Повторная отправка email уведомлений
- ✅ Просмотр PDF файлов inline в браузере
- ✅ Поиск по номеру исследования
- ✅ Экспорт данных для отчётности
Доступ:
- Продакшн: https://lis.it-mydoc.ru
- API документация: https://lis.it-mydoc.ru/docs
- Health check: https://lis.it-mydoc.ru/health
/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
- Мониторинг: Встроенная система логирования
Для работы системы необходимо настроить HTTP-сервис в 1С:Управление медицинским центром.
Подробное руководство с кодом: docs/1c-integration.md
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# Общая статистика
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>&1cd /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# Проверить статус
systemctl status openvpn-client@client
# Просмотреть логи
journalctl -u openvpn-client@client -n 50
# Перезапустить
systemctl restart openvpn-client@client# Проверить 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С сервера
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С"- Полное руководство по развертыванию - пошаговая инструкция с нуля
- Настройка OpenVPN - настройка VPN туннеля
- Интеграция с 1С - код HTTP-сервиса для 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 контейнеризация для лёгкого развертывания
По вопросам настройки и эксплуатации:
- Проверьте документацию
- Запустите диагностику:
./check-system.sh - Просмотрите логи:
docker compose logs -f app - Обратитесь к администратору системы
Проприетарное ПО. Все права защищены.
Проект создан для медицинского центра IT-MyDoc для автоматизации обработки лабораторных результатов.
Версия: 3.1 FINAL (поиск по раздельным полям Фамилия+Имя+Отчество)
Дата: 24.11.2025