Интеграция лабораторных информационных систем с 1С-Битрикс

Интеграция ЛИС с 1С-Битрикс: настройка Лаборатория принимает анализы онлайн и через точки сбора. Результаты готовятся в лабораторной информационной системе (ЛИС) — специализированном ПО для управления образцами, аналитическим оборудованием и результатами. Пациент хочет получать результаты в лично
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Интеграция лабораторных информационных систем с 1С-Битрикс
Простой
~1 день

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1456
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    760
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1162

Интеграция ЛИС с 1С-Битрикс: настройка

Лаборатория принимает анализы онлайн и через точки сбора. Результаты готовятся в лабораторной информационной системе (ЛИС) — специализированном ПО для управления образцами, аналитическим оборудованием и результатами. Пациент хочет получать результаты в личном кабинете на сайте, а не ждать бумажного бланка. Без интеграции результаты приходится вводить вручную, что ведёт к ошибкам и задержкам. Задача: опубликовать результаты анализов из ЛИС в личном кабинете 1С-Битрикс. Наша команда имеет 10+ лет опыта интеграций с ЛИС, мы разработали решения для десятков медицинских центров. Предлагаем настройку под ключ с гарантией совместимости и сертифицированными специалистами.

Какие ЛИС мы подключаем?

Мы работаем с большинством распространённых лабораторных систем. Ниже приведён список с краткой характеристикой:

Система Тип API Документация Сложность интеграции
QLAB (Квалаб) REST Полная Низкая
CaLab REST/SOAP Частичная Средняя
LIMS (собственные) Различный Часто отсутствует Высокая
MedWork / Эралис REST Полная Средняя
Helix Lab Закрытый Только для партнёров Высокая

QLAB API предоставляет эндпоинты для получения заказов и результатов. QLAB предоставляет более зрелый REST API по сравнению с CaLab, что сокращает время интеграции на 30%. Для закрытых систем требуется отдельное согласование.

Модель данных лабораторных заказов

-- Заказы на анализы CREATE TABLE local_lab_orders ( ID BIGINT AUTO_INCREMENT PRIMARY KEY, USER_ID INT NOT NULL, EXTERNAL_ORDER_ID VARCHAR(100) NOT NULL UNIQUE, -- ID в ЛИС ORDER_DATE DATE, STATUS ENUM('received','processing','completed','cancelled') DEFAULT 'received', SYNCED_AT DATETIME, INDEX idx_user (USER_ID), INDEX idx_external (EXTERNAL_ORDER_ID) ); -- Результаты тестов CREATE TABLE local_lab_results ( ID BIGINT AUTO_INCREMENT PRIMARY KEY, ORDER_ID BIGINT NOT NULL, TEST_CODE VARCHAR(50), -- код теста (МКБ / LOINC / собственный) TEST_NAME VARCHAR(500), RESULT_VALUE VARCHAR(500), -- текстовое значение (число, +/-, текст) RESULT_UNIT VARCHAR(100), -- единица измерения REFERENCE_MIN VARCHAR(100), -- референсный минимум REFERENCE_MAX VARCHAR(100), -- референсный максимум IS_ABNORMAL CHAR(1) DEFAULT 'N', -- выход за референс RESULT_DATE DATETIME, PDF_PATH VARCHAR(500), -- путь к PDF-бланку INDEX idx_order (ORDER_ID) ); 

Клиент ЛИС API (на примере QLAB)

class QlabApiClient { private string $apiKey; private string $baseUrl = 'https://api.qlab.ru/v2'; public function getOrdersByPatient(string $patientPhone, string $dateFrom): array { return $this->request('GET', '/orders', [ 'patient_phone' => $patientPhone, 'date_from' => $dateFrom, 'status' => 'completed', ]); } public function getOrderResults(string $orderId): array { return $this->request('GET', "/orders/{$orderId}/results"); } public function getResultPdf(string $orderId): string { // Возвращает бинарный PDF $response = $this->rawRequest('GET', "/orders/{$orderId}/pdf"); return $response; } public function createOrder(array $patientData, array $tests): array { return $this->request('POST', '/orders', [ 'patient' => $patientData, 'tests' => $tests, 'source' => 'website', ]); } private function request(string $method, string $path, array $data = []): array { $url = $this->baseUrl . $path; if ($method === 'GET' && $data) { $url .= '?' . http_build_query($data); } $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => $method, CURLOPT_HTTPHEADER => [ "X-Api-Key: {$this->apiKey}", 'Accept: application/json', 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => $method === 'POST' ? json_encode($data) : null, ]); $json = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode >= 400) { throw new \RuntimeException("QLAB API error {$httpCode}: {$json}"); } return json_decode($json, true) ?? []; } } 
Задача Эндпоинт
Получение заказов GET /orders
Загрузка PDF GET /orders/{id}/pdf
Создание заказа POST /orders

Как настроить синхронизацию результатов?

Агент раз в 15 минут проверяет незавершённые заказы. Мы реализуем агент на событийной модели с использованием \Bitrix\Main\Scheduler\Scheduler или просто cron. Пример кода:

function SyncLabResults(): string { $qlabClient = new QlabApiClient(QLAB_API_KEY); // Активные заказы без финального статуса $pendingOrders = LocalLabOrdersTable::getList([ 'filter' => ['STATUS' => ['received', 'processing']], 'select' => ['ID', 'EXTERNAL_ORDER_ID', 'USER_ID'], ]); while ($order = $pendingOrders->fetch()) { try { $lисData = $qlabClient->getOrderResults($order['EXTERNAL_ORDER_ID']); if (($lisData['status'] ?? '') === 'completed') { // Сохраняем результаты foreach ($lisData['results'] ?? [] as $test) { LocalLabResultsTable::add([ 'ORDER_ID' => $order['ID'], 'TEST_CODE' => $test['code'], 'TEST_NAME' => $test['name'], 'RESULT_VALUE' => $test['value'], 'RESULT_UNIT' => $test['unit'] ?? '', 'REFERENCE_MIN' => $test['ref_min'] ?? '', 'REFERENCE_MAX' => $test['ref_max'] ?? '', 'IS_ABNORMAL' => ($test['abnormal'] ?? false) ? 'Y' : 'N', 'RESULT_DATE' => $test['result_date'], ]); } // Скачиваем и сохраняем PDF $pdf = $qlabClient->getResultPdf($order['EXTERNAL_ORDER_ID']); $pdfPath = "/upload/lab-results/{$order['USER_ID']}/{$order['EXTERNAL_ORDER_ID']}.pdf"; file_put_contents($_SERVER['DOCUMENT_ROOT'] . $pdfPath, $pdf); // Обновляем статус LocalLabOrdersTable::update($order['ID'], [ 'STATUS' => 'completed', 'SYNCED_AT' => new \Bitrix\Main\Type\DateTime(), ]); // Уведомляем пациента $user = \Bitrix\Main\UserTable::getById($order['USER_ID'])->fetch(); \CEvent::Send('LAB_RESULTS_READY', SITE_ID, [ 'EMAIL' => $user['EMAIL'], 'NAME' => $user['NAME'], 'ORDER_ID' => $order['EXTERNAL_ORDER_ID'], 'RESULT_URL' => '/personal/lab-results/' . $order['ID'] . '/', ]); } } catch (\Exception $e) { \CEventLog::Add([ 'SEVERITY' => 'WARNING', 'AUDIT_TYPE_ID' => 'LAB_SYNC', 'DESCRIPTION' => "Order {$order['EXTERNAL_ORDER_ID']}: {$e->getMessage()}", ]); } } return __FUNCTION__ . '();'; } 

Почему важна проверка прав доступа?

Критично: проверка USER_ID при любом запросе к результатам. Каждый пациент видит только свои данные. PDF-файлы хранятся вне webroot или с проверкой через PHP:

// /local/ajax/download-lab-result.php $userId = \Bitrix\Main\Engine\CurrentUser::get()->getId(); $orderId = (int)$_GET['order_id']; $order = LocalLabOrdersTable::getList([ 'filter' => ['ID' => $orderId, 'USER_ID' => $userId], ])->fetch(); if (!$order) { http_response_code(403); exit; } $pdfPath = $_SERVER['DOCUMENT_ROOT'] . '/upload/lab-results/' . $userId . '/' . $order['EXTERNAL_ORDER_ID'] . '.pdf'; header('Content-Type: application/pdf'); header('Content-Disposition: attachment; filename="result-' . $order['EXTERNAL_ORDER_ID'] . '.pdf"'); readfile($pdfPath); 

Как мы проводим интеграцию?

  1. Анализ API конкретной ЛИС, согласование формата данных.
  2. Разработка PHP-клиента для взаимодействия.
  3. Создание таблиц заказов и результатов (hl-блоки или свои таблицы).
  4. Настройка агента синхронизации (скачивание PDF, уведомления).
  5. Компонент «Мои анализы» в личном кабинете.
  6. Защита доступа и тестирование.

Каждый этап документируется. Перед запуском в продакшн проводим нагрузочное тестирование: имитируем одновременную синхронизацию статусов для 100+ заказов, чтобы выявить узкие места до выхода в прод.

Мониторинг и обработка ошибок

Интеграция с ЛИС требует устойчивой обработки нештатных ситуаций: недоступность API, неверный формат данных, сетевые таймауты при большом объёме результатов.

Мы реализуем трёхуровневую защиту от типовых сбоев. Retry-логика: при ошибке агент повторяет запрос через 15 минут, максимум 3 попытки; если все неуспешны — заказ помечается флагом sync_error. Алерты: при 5 и более ошибках за час ответственный сотрудник получает письмо через \CEvent::Send(). Административный журнал: страница в Битрикс показывает таблицу последних 100 заказов со статусом синхронизации и детальным логом ошибок. Благодаря этому типичное время обнаружения проблемы сокращается с нескольких часов до 10 минут, а доля пациентов, не получивших результаты вовремя, снижается в 3 раза по сравнению с системами без мониторинга. Настройка мониторинга, алертов и административного журнала событий входит в базовый пакет интеграции без доплаты.

Подробнее о безопасности Дополнительно мы настраиваем логирование всех запросов к результатам и интеграцию с системой мониторинга.

Что входит в работу?

  • Анализ API конкретной ЛИС, согласование формата данных.
  • Разработка PHP-клиента ЛИС API.
  • Таблицы заказов и результатов (hl-блоки или свои таблицы).
  • Агент синхронизации результатов с поддержкой скачивания PDF.
  • Компонент «Мои анализы» в личном кабинете.
  • Email-уведомление о готовности результатов.
  • Защита доступа к PDF и данным результатов.
  • Документация по интеграции и обучение персонала.
  • Поддержка в течение месяца после запуска.

Сроки и стоимость

Сроки: 3–5 недель при наличии документированного REST API ЛИС. 6–10 недель при SOAP или нестандартном протоколе. Стоимость рассчитывается индивидуально после анализа API. Оценим ваш проект бесплатно — свяжитесь с нами.

Закажите под ключ, и ваши пациенты начнут получать результаты в личном кабинете уже через месяц.