Синхронізація 1С-Бітрікс з МІС: онлайн-запис

Онлайн-запис до лікаря: синхронізація Бітрікс і МІС Сайт приватної клініки приймає онлайн-записи до лікарів. МІС — медична інформаційна система — операційна система клініки: розклад лікарів, історія хвороби, електронна медкарта, облік послуг, каса. <cite>[МІС — медична інформаційна система](https
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Синхронізація 1С-Бітрікс з МІС: онлайн-запис
Середній
~1-2 тижні

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1455
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1018
  • 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
    760
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    803
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1162

Онлайн-запис до лікаря: синхронізація Бітрікс і МІС

Сайт приватної клініки приймає онлайн-записи до лікарів. МІС — медична інформаційна система — операційна система клініки: розклад лікарів, історія хвороби, електронна медкарта, облік послуг, каса. МІС — медична інформаційна система. Задача: запис з сайту має автоматично потрапляти до розкладу МІС, а вільні слоти — відображатися на сайті в реальному часі. Кожна година простою або ручного перенесення даних коштує до 30% втрачених пацієнтів — ми це бачили не раз.

Ринок МІС неоднорідний: Інфоклініка, 1С:Медицина, qMS, Medesk, Ренесанс-М, ArchiMed+, Medods — у кожної свій API (або його відсутність). Архітектура інтеграції 1С-Бітрікс з МІС залежить від конкретної системи. Ми гарантуємо підбір оптимального сценарію та реалізацію під ключ з повним тестуванням.

Типові сценарії інтеграції

Сценарій A: МІС надає REST/SOAP API. Сайт безпосередньо звертається до API МІС для отримання розкладу та запису пацієнта. Найчистіший варіант, але не всі МІС його підтримують.

Сценарій B: Проміжний брокер. МІС публікує розклад у проміжній базі (PostgreSQL або MySQL), сайт читає звідти. Запис на сайті створює заявку в проміжній таблиці, МІС забирає її по cron.

Сценарій C: Інтеграційна шина. Для великих клінік з декількома МІС та безліччю систем — окремий інтеграційний сервіс (наприклад, на базі RabbitMQ або Apache Kafka), який синхронізує дані між системами.

Який сценарій інтеграції обрати?

Вибір сценарію визначається бюджетом, кількістю систем та вимогами до затримок. Нижче — порівняння ключових параметрів:

Параметр REST API Проміжна база Інтеграційна шина
Швидкість впровадження 5–8 тижнів 8–14 тижнів від 12 тижнів
Затримка даних реальний час 1–5 хвилин реальний час
Навантаження на МІС висока низька (вичитується) збалансована
Відмовостійкість залежить від МІС висока (кеш у БД) висока (черга)

REST API в 2–3 рази швидше впроваджується та дає дані в реальному часі, але вимагає стабільного ендпоінта. Проміжна база підходить для МІС без API або з жорсткими лімітами. Інтеграційна шина — для складних ландшафтів.

Чому інтеграція через REST API — оптимальний вибір?

REST API — найшвидший і найпрозоріший спосіб інтеграції. У 90% випадків ми використовуємо саме його: клієнт отримує дані в реальному часі, а кодова база залишається чистою. Нижче приклад реалізації для Medesk — однієї з популярних МІС.

class MedeskApiClient { private string $apiKey; private string $baseUrl = 'https://api.medesk.net/api/v2'; public function getDoctorSchedule(int $doctorId, string $dateFrom, string $dateTo): array { return $this->request('GET', '/schedules', [ 'doctor_id' => $doctorId, 'from' => $dateFrom, 'to' => $dateTo, 'include' => 'free_slots', ]); } public function createAppointment(array $patientData, int $slotId): array { return $this->request('POST', '/appointments', [ 'slot_id' => $slotId, 'patient' => [ 'first_name' => $patientData['name'], 'last_name' => $patientData['surname'], 'phone' => $patientData['phone'], 'email' => $patientData['email'], 'birth_date' => $patientData['birth_date'], ], 'comment' => $patientData['comment'] ?? '', 'source' => 'website', ]); } public function cancelAppointment(int $appointmentId, string $reason = ''): array { return $this->request('DELETE', "/appointments/{$appointmentId}", [ 'reason' => $reason, ]); } 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 => [ 'Content-Type: application/json', "Authorization: Bearer {$this->apiKey}", ], CURLOPT_POSTFIELDS => in_array($method, ['POST', 'PUT', 'PATCH']) ? json_encode($data) : null, ]); $response = json_decode(curl_exec($ch), true); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode >= 400) { \Bitrix\Main\Diag\Debug::writeToFile( "MIS API Error {$httpCode}: " . json_encode($response), 'MIS', '/local/logs/mis-integration.log' ); throw new \RuntimeException("MIS API error: {$httpCode}"); } return $response ?? []; } } 

Чому кешування розкладу критичне?

Пряме звернення до API МІС при кожному відвідуванні сторінки лікаря — погана ідея: МІС може бути повільною або мати обмеження на кількість запитів (наприклад, 100 запитів на хвилину). Кешування знижує навантаження на МІС у 10–20 разів і прискорює завантаження сторінки до 200 мс. Деталі реалізації:

class DoctorScheduleService { private MedeskApiClient $mis; public function getAvailableSlots(int $doctorId, string $date): array { $cacheKey = "doctor_slots_{$doctorId}_{$date}"; $cacheTtl = 180; // 3 хвилини — баланс актуальності та навантаження $cache = \Bitrix\Main\Data\Cache::createInstance(); if ($cache->initCache($cacheTtl, $cacheKey, '/mis/slots/')) { return $cache->getVars()['slots']; } $schedule = $this->mis->getDoctorSchedule($doctorId, $date, $date); $slots = $this->formatSlots($schedule); $cache->startDataCache(); $cache->endDataCache(['slots' => $slots]); return $slots; } public function bookSlot(int $slotId, array $patientData): array { $result = $this->mis->createAppointment($patientData, $slotId); // Інвалідуємо кеш розкладу для цього лікаря $date = date('Y-m-d'); $doctorId = $this->getSlotDoctorId($slotId); \Bitrix\Main\Data\Cache::clearByTag("doctor_slots_{$doctorId}_{$date}"); // Зберігаємо запис у Бітрікс $this->saveAppointmentInBitrix($result, $patientData); return $result; } } 

Зберігання записів у Бітрікс

Записи дублюємо в Бітрікс — для історії, сповіщень та роботи без МІС при її недоступності:

class AppointmentTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'local_mis_appointments'; } public static function getMap(): array { return [ new \Bitrix\Main\ORM\Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new \Bitrix\Main\ORM\Fields\IntegerField('USER_ID'), new \Bitrix\Main\ORM\Fields\IntegerField('MIS_APPOINTMENT_ID'), new \Bitrix\Main\ORM\Fields\IntegerField('DOCTOR_ID'), new \Bitrix\Main\ORM\Fields\DatetimeField('APPOINTMENT_TIME'), new \Bitrix\Main\ORM\Fields\StringField('STATUS'), // booked|confirmed|cancelled|completed new \Bitrix\Main\ORM\Fields\StringField('SERVICE_NAME'), new \Bitrix\Main\ORM\Fields\StringField('PATIENT_PHONE'), new \Bitrix\Main\ORM\Fields\DatetimeField('CREATED_AT'), ]; } } 

Сповіщення пацієнту

Після запису — SMS та email-підтвердження через Бітрікс. За 24 години та за 2 години до прийому — нагадування. Нагадування реалізуються через агент Бітрікс, який щогодини перевіряє записи:

function SendMisAppointmentReminders(): string { $now = new \Bitrix\Main\Type\DateTime(); $in24h = (new \DateTime())->modify('+24 hours'); $in2h = (new \DateTime())->modify('+2 hours'); $appointments = AppointmentTable::getList([ 'filter' => [ 'STATUS' => 'booked', '>=APPOINTMENT_TIME' => \Bitrix\Main\Type\DateTime::createFromTimestamp($in2h->getTimestamp()), '<=APPOINTMENT_TIME' => \Bitrix\Main\Type\DateTime::createFromTimestamp($in24h->getTimestamp()), 'REMINDER_24H_SENT' => 'N', ], ]); while ($row = $appointments->fetch()) { SmsService::send($row['PATIENT_PHONE'], "Нагадуємо про запис до лікаря " . date('d.m.Y H:i', strtotime($row['APPOINTMENT_TIME'])) ); AppointmentTable::update($row['ID'], ['REMINDER_24H_SENT' => 'Y']); } return __FUNCTION__ . '();'; } 

Обробка помилок МІС

МІС може бути недоступною (технічні роботи, проблеми з сервером). Стратегія: якщо МІС недоступна — зберігаємо заявку в таблицю local_mis_pending_appointments зі статусом pending, відображаємо пацієнту «Запис прийнято, ми зв'яжемося з вами для підтвердження». Агент раз на 5 хвилин пробує відправити pending-записи в МІС. При повторних збоях заявка переводиться в статус manual — оператор зв'язується з пацієнтом. Ми впроваджуємо такий механізм у кожному проекті та гарантуємо нульову втрату заявок.

Як гарантувати нульову втрату заявок?

Якщо МІС недоступна, заявка зберігається в таблиці local_mis_pending_appointments зі статусом pending. Агент кожні 5 хвилин повторно відправляє заявку. Після 10 невдалих спроб статус змінюється на manual, і оператор зв'язується з пацієнтом. Така схема працює у всіх проектах і виключає втрату заявок.

Що входить в роботу

  • Аналіз документації API конкретної МІС та вибір сценарію
  • Розробка PHP-клієнта API з обробкою помилок та ретраями
  • Кешування розкладу з інвалідацією при записі
  • Компонент онлайн-запису на сайті (кастомний під дизайн клініки)
  • Таблиця записів у Бітрікс з синхронізацією статусів
  • Налаштування SMS/email сповіщень (підтвердження + нагадування)
  • Організація черги pending-записів при недоступності МІС
  • Тестування на навантаження та відмовостійкість
  • Документація з експлуатації та навчання адміністраторів

Як ми інтегруємо МІС за 5 кроків?

  1. Аналіз API МІС та узгодження сценарію (1–2 тижні).
  2. Розробка клієнта API та резервного сховища (3–6 тижнів).
  3. Інтеграція компонента запису на сайті (1–2 тижні).
  4. Налаштування сповіщень та черги помилок (1 тиждень).
  5. Навантажувальне тестування та навчання персоналу (1–2 тижні).

Терміни: від 5 до 14 тижнів залежно від складності. Замовте інтеграцію з гарантією нульової втрати заявок — наші сертифіковані спеціалісти з 10-річним досвідом підберуть рішення.

Етап Тривалість
Аналіз та проектування 1–2 тижні
Розробка та тестування 3–6 тижнів
Впровадження та навчання 1–2 тижні
Гарантійна підтримка 1 місяць після запуску

Отримайте безкоштовну консультацію та оцінку вашого проекту — ми підберемо оптимальний сценарій інтеграції та запропонуємо терміни.