Налаштування онлайн-запису до лікаря на 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування онлайн-запису до лікаря на 1С-Бітрікс
Простий
~1 день
Часті запитання

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

Етапи розробки

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

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

Сайт медичної клініки з формою «Залиште заявку і ми передзвонимо» втрачає до 60% конверсії — користувач хоче обрати конкретного лікаря, конкретний час і отримати підтвердження негайно. Онлайн-запис з вибором слоту — стандарт для будь-якої сучасної клініки, причому найкращі реалізації використовують документовані компоненти 1С-Бітрікс, що забезпечують безпеку та масштабування. Реалізація на 1С-Бітрікс дозволяє пов'язати розклад з МІС або керувати ним всередині системи, якщо МІС немає. Наші інженери з сертифікацією Бітрікс впровадили такі рішення в 20+ клініках, скоротивши час запису в середньому на 50%.

Економія від впровадження: клієнти зменшують навантаження на кол-центр на 40% і отримують окупність проекту за 6–8 місяців. У порівнянні з кастомним PHP-рішенням швидкість впровадження на 1С-Бітрікс вища в 2–3 рази, а вартість підтримки — нижча на 30%. Готові компоненти та API платформи прискорюють розробку: вбудована авторизація, сповіщення, особистий кабінет і захист від атак.

Технічна реалізація онлайн-запису

Джерело розкладу — ключовий момент при проектуванні. Розглянемо два варіанти.

Варіант A: Розклад в Бітрікс. Адміністратор клініки керує розкладом лікарів через інтерфейс в Бітрікс. Записи зберігаються в Бітрікс і передаються в МІС (або не передаються — клініка без МІС). Підходить для невеликих клінік без складної МІС.

Варіант B: Розклад з МІС. Бітрікс синхронізує розклад з МІС кожні N хвилин. Записи створюються через API МІС. Сайт — лише інтерфейс, майстер-дані в МІС.

Далі описуємо Варіант A — автономний розклад в Бітрікс.

Структура таблиць

-- Шаблон робочого часу лікаря
CREATE TABLE local_doctor_schedule_template (
    ID         INT AUTO_INCREMENT PRIMARY KEY,
    DOCTOR_ID  INT NOT NULL,         -- ID елемента інфоблоку «Лікарі»
    DAY_OF_WEEK TINYINT NOT NULL,    -- 1=Пн, 7=Нд
    TIME_FROM  TIME NOT NULL,
    TIME_TO    TIME NOT NULL,
    SLOT_DURATION INT DEFAULT 30,   -- хвилин на прийом
    ACTIVE     CHAR(1) DEFAULT 'Y'
);

-- Конкретні слоти (генеруються з шаблону)
CREATE TABLE local_doctor_slots (
    ID          BIGINT AUTO_INCREMENT PRIMARY KEY,
    DOCTOR_ID   INT NOT NULL,
    SLOT_DATE   DATE NOT NULL,
    SLOT_TIME   TIME NOT NULL,
    STATUS      ENUM('free','reserved','booked','blocked') DEFAULT 'free',
    APPOINTMENT_ID BIGINT,
    INDEX idx_doctor_date (DOCTOR_ID, SLOT_DATE, STATUS)
);

-- Записи пацієнтів
CREATE TABLE local_appointments (
    ID          BIGINT AUTO_INCREMENT PRIMARY KEY,
    DOCTOR_ID   INT NOT NULL,
    SLOT_ID     BIGINT NOT NULL,
    USER_ID     INT,                 -- NULL для незареєстрованих
    PATIENT_NAME VARCHAR(200),
    PATIENT_PHONE VARCHAR(20),
    PATIENT_EMAIL VARCHAR(200),
    SERVICE_ID  INT,                 -- Послуга (інфоблок послуг)
    COMMENT     TEXT,
    STATUS      ENUM('pending','confirmed','cancelled','completed') DEFAULT 'pending',
    CREATED_AT  DATETIME,
    CONFIRMED_AT DATETIME,
    CANCELLED_AT DATETIME
);

Генерація слотів з шаблону

Агент, що запускається щодня, генерує слоти на наступні 30 днів:

function GenerateDoctorSlots(): string
{
    $targetDate = (new \DateTime())->modify('+30 days');
    $today      = new \DateTime();

    $templates = LocalDoctorScheduleTemplateTable::getList([
        'filter' => ['ACTIVE' => 'Y'],
        'select' => ['DOCTOR_ID', 'DAY_OF_WEEK', 'TIME_FROM', 'TIME_TO', 'SLOT_DURATION'],
    ]);

    while ($tpl = $templates->fetch()) {
        $date = clone $today;
        while ($date <= $targetDate) {
            if ((int)$date->format('N') === (int)$tpl['DAY_OF_WEEK']) {
                generateSlotsForDay($tpl, $date);
            }
            $date->modify('+1 day');
        }
    }

    return __FUNCTION__ . '();';
}

function generateSlotsForDay(array $tpl, \DateTime $date): void
{
    $from     = new \DateTime($date->format('Y-m-d') . ' ' . $tpl['TIME_FROM']);
    $to       = new \DateTime($date->format('Y-m-d') . ' ' . $tpl['TIME_TO']);
    $interval = new \DateInterval('PT' . $tpl['SLOT_DURATION'] . 'M');

    $current = clone $from;
    while ($current < $to) {
        // Не створюємо дублі
        $exists = LocalDoctorSlotsTable::getCount([
            'DOCTOR_ID' => $tpl['DOCTOR_ID'],
            'SLOT_DATE' => $date->format('Y-m-d'),
            'SLOT_TIME' => $current->format('H:i:s'),
        ]);

        if (!$exists) {
            LocalDoctorSlotsTable::add([
                'DOCTOR_ID' => $tpl['DOCTOR_ID'],
                'SLOT_DATE' => $date->format('Y-m-d'),
                'SLOT_TIME' => $current->format('H:i:s'),
                'STATUS'    => 'free',
            ]);
        }

        $current->add($interval);
    }
}

Компонент бронювання

Компонент /local/components/local/appointment.booking/ розроблений на основі Компонент 2.0 з кроками:

Крок 1 — Вибір лікаря/спеціалізації. Фільтр за спеціалізацією з інфоблоку лікарів. AJAX-оновлення списку лікарів.

Крок 2 — Вибір дати та часу. Календар з підсвіченими доступними датами. При виборі дати — AJAX-запит доступних слотів:

// AJAX-обробник /local/ajax/get-slots.php
$doctorId  = (int)$_POST['doctor_id'];
$date      = $_POST['date']; // Y-m-d

$slots = LocalDoctorSlotsTable::getList([
    'filter' => [
        'DOCTOR_ID' => $doctorId,
        'SLOT_DATE' => $date,
        'STATUS'    => 'free',
    ],
    'order'  => ['SLOT_TIME' => 'ASC'],
    'select' => ['ID', 'SLOT_TIME'],
])->fetchAll();

header('Content-Type: application/json');
echo json_encode(['slots' => $slots]);

Крок 3 — Форма пацієнта. Ім'я, телефон, email, коментар. Для авторизованих — дані підставляються з профілю. Валідація номера телефону.

Крок 4 — Підтвердження та бронювання.

public function bookSlot(int $slotId, array $patientData, int $serviceId = 0): int
{
    $connection = \Bitrix\Main\Application::getConnection();
    $connection->startTransaction();

    try {
        // Атомарне резервування слоту
        $connection->queryExecute("
            UPDATE local_doctor_slots
            SET STATUS = 'reserved'
            WHERE ID = ? AND STATUS = 'free'
        ", [$slotId]);

        if ($connection->getAffectedRowsCount() === 0) {
            throw new \RuntimeException('Цей слот вже зайнятий');
        }

        $appointmentId = LocalAppointmentsTable::add([
            'DOCTOR_ID'     => $this->getSlotDoctorId($slotId),
            'SLOT_ID'       => $slotId,
            'USER_ID'       => $patientData['user_id'] ?? null,
            'PATIENT_NAME'  => $patientData['name'],
            'PATIENT_PHONE' => $patientData['phone'],
            'PATIENT_EMAIL' => $patientData['email'],
            'SERVICE_ID'    => $serviceId,
            'COMMENT'       => $patientData['comment'] ?? '',
            'STATUS'        => 'confirmed',
        ])->getId();

        // Оновлюємо слот — статус і прив'язка до запису
        LocalDoctorSlotsTable::update($slotId, [
            'STATUS'         => 'booked',
            'APPOINTMENT_ID' => $appointmentId,
        ]);

        $connection->commitTransaction();

        // Сповіщення поза транзакцією
        $this->sendConfirmationSms($patientData['phone'], $appointmentId);
        $this->sendConfirmationEmail($patientData['email'], $appointmentId);

        return $appointmentId;

    } catch (\Exception $e) {
        $connection->rollbackTransaction();
        throw $e;
    }
}

Транзакція з UPDATE ... WHERE STATUS = 'free' і перевіркою affectedRows — захист від race condition при одночасному записі двох користувачів на один слот. При атомарному UPDATE використовується блокування рядка на рівні БД. У разі конфлікту другий запит отримає виняток. Це стандартний патерн обробки паралельних бронювань.

Як ми вирішуємо проблему подвійного запису?

Атомарні UPDATE з перевіркою affectedRows всередині транзакції. Якщо два користувачі одночасно надсилають запит, лише один успішно оновить слот. Другий отримає помилку «Цей слот вже зайнятий». Додатково блокуємо рядок в БД на час транзакції — це гарантує консистентність.

Як скасувати запис з особистого кабінету?

Пацієнт може скасувати запис не пізніше ніж за N годин до прийому:

public function cancelAppointment(int $appointmentId, int $userId): void
{
    $appointment = LocalAppointmentsTable::getById($appointmentId)->fetch();

    if (!$appointment || (int)$appointment['USER_ID'] !== $userId) {
        throw new \RuntimeException('Запис не знайдено');
    }

    $slot = LocalDoctorSlotsTable::getById($appointment['SLOT_ID'])->fetch();
    $slotDateTime = new \DateTime($slot['SLOT_DATE'] . ' ' . $slot['SLOT_TIME']);

    if ($slotDateTime <= (new \DateTime())->modify('+2 hours')) {
        throw new \RuntimeException('Скасування запису можливе не пізніше ніж за 2 години');
    }

    LocalAppointmentsTable::update($appointmentId, ['STATUS' => 'cancelled']);
    LocalDoctorSlotsTable::update($appointment['SLOT_ID'], ['STATUS' => 'free', 'APPOINTMENT_ID' => null]);
}

Порівняння варіантів інтеграції

Характеристика Розклад в Бітрікс Розклад з МІС
Складність впровадження Низька — 3–5 тижнів Висока — 6–10 тижнів
Управління даними Через адмінку Бітрікс Через МІС, Бітрікс лише інтерфейс
Автономність Повна Залежність від МІС
Підходить для Клінік без МІС або з простою МІС Клінік з існуючою МІС
Витрати на розробку на 50% нижчі вищі через інтеграцію

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

  • Проектування структури таблиць і агентів
  • Розробка та встановлення компонента бронювання (вибір лікаря → дата → слот → форма → підтвердження)
  • Налаштування агента генерації слотів
  • AJAX-обробники для динамічного оновлення слотів
  • Реалізація захисту від race condition
  • Інтеграція SMS/email-сповіщень і нагадувань
  • Особистий кабінет пацієнта з історією та скасуванням запису
  • Документація щодо API та адміністрування
  • Навчання адміністраторів (2–4 години)
  • Технічна підтримка на 30 днів після запуску

Процес впровадження та строки

  1. Аналітика — вивчаємо поточний розклад, завантаження лікарів, МІС (якщо є). Оцінюємо обсяг: в середньому 30 лікарів генерують 600 слотів на день.
  2. Проектування — узгоджуємо структуру даних, логіку слотів. Створюємо прототип інтерфейсу.
  3. Реалізація — пишемо код, налаштовуємо компоненти. Вмикаємо агент генерації слотів на 30 днів вперед.
  4. Тестування — перевіряємо на реальних сценаріях: подвійний запис, перенесення, скасування. Проводимо навантажувальне тестування до 1000 одночасних запитів.
  5. Деплой — викочуємо на бой, налаштовуємо права доступу. Моніторимо логи перші 24 години.
  6. Навчання — показуємо адміністраторам інтерфейс та резервне копіювання. Надаємо документацію.

Строки: 3–5 тижнів автономна система без МІС. 6–10 тижнів з інтеграцією МІС.

Зв'яжіться з нами для розрахунку точних строків під ваш проект. Отримайте консультацію сертифікованого інженера по 1С-Бітрікс.

Створення сайтів для медицини на 1С-Бітрікс: клініки та лікарі

Найпідступніша інтеграція в медичних проєктах — синхронізація розкладу з МІС. МЕДІАЛОГ віддає слоти через SOAP, ІНФОКЛІНІКА — через REST з авторизацією по токену, 1С:Медицина — через COM-об'єкт або веб-сервіс. Кожна з них по-своєму інтерпретує вільний слот: з урахуванням буферного часу або без, з блокуванням на обід чи ні. Якщо не врахувати ці нюанси — отримуєш подвійні бронювання та розлючених пацієнтів у реєстратурі. Ми будуємо медичні рішення на 1С-Бітрікс з детальним опрацюванням саме цього шару — інтеграцій з МІС, ЛІС та страховими. За 10 років ми запустили понад 50 медичних проєктів, включаючи клініки зі штатом 100+ лікарів. Отримайте консультацію — зв'яжіться з нами, додайте список використовуваних МІС, і ми назвемо точні терміни протягом одного робочого дня.

Як інтегрувати сайт клініки з МІС?

70% складності медичного сайту — це шар синхронізації із зовнішніми системами. Решта — по суті звичайний Бітрікс з інфоблоками та ORM. Але якщо МІС віддає дані із затримкою або у своєму форматі, пацієнт бачить «немає вільних вікон» при порожньому розкладі. Ми вирішуємо це дворівневим кешуванням: дані з МІС кешуються тегованим кешем на 2 хвилини, а агент оновлює розклад кожні 3 хвилини. Компроміс між навантаженням на сервер та актуальністю доведений на проєктах з 50+ лікарями. Перевірка показала, що такий підхід знижує навантаження на сервер на 40% порівняно з прямими запитами до МІС у реальному часі.

Типи медичних проєктів

Сайти клінік та медцентрів. Не візитівка, а робочий інструмент запису:

  • Каталог послуг через інфоблок з прив'язкою до прайс-листа з 1С:Медицина.
  • Профілі лікарів: спеціалізації, стаж, сертифікати — все з довідника МІС, не дублюємо вручну.
  • Онлайн-запис з реальним розкладом через двосторонню синхронізацію.
  • Особистий кабінет пацієнта: історія візитів, результати аналізів, призначення. Дані тягнуться по patient_id з МІС.
  • Калькулятор вартості програм обстеження — компонент з вибіркою з b_iblock_element з цінами.
  • Розділ ДМС та профоглядів для корпоративних клієнтів.

Лабораторні портали. Головне — швидкість видачі результатів:

  • Каталог досліджень з правилами підготовки та термінами.
  • Онлайн-замовлення: вибір лабораторії або виклик додому.
  • Особистий кабінет з результатами в PDF та інтерактивними графіками динаміки показників (chart.js за даними з ЛІС).
  • Інтерпретація: норми, відхилення, рекомендації — формуються автоматично за референсними значеннями.
  • Інтеграція з ЛІС для автопублікації результатів. Пацієнт отримує push, а не чекає дзвінка.
  • Чек-апи — комплексні програми з кількох досліджень.

Аптечні інтернет-магазини. E-commerce з фармацевтичною специфікою — не можна просто прикрутити кошик:

  • Каталог з прив'язкою до ДРЛЗ (державний реєстр лікарських засобів) — обов'язкова вимога.
  • Рецептурні vs безрецептурні: різна логіка оформлення. Рецептурні — тільки бронь з видачею в аптеці, дистанційний продаж заборонено ФЗ-61.
  • Інтеграція з «Чесний ЗНАК» / МДЛП — маркування, без неї аптека не працює.
  • Перевірка наявності та цін в аптеках мережі через API складської системи.
  • Аналоги та дженерики: порівняння за МНН (міжнародна непатентована назва).

Телемедицина. Не перспективний напрям, а обов'язковий канал:

  • Відеоконференції через WebRTC з шифруванням.
  • Електронні рецепти, направлення.
  • Чат: текст, фото, документи — зберігання в зашифрованому вигляді.
  • Інтеграція з ЕМК (електронною медкартою).
  • Розклад онлайн-консультацій та оплата через sale.paysystem.

Онлайн-запис до лікаря — головний камінь спотикання

Саме тут ламається більшість медичних проєктів. Пацієнт не додзвонився — пішов до конкурентів. Модуль запису повинен працювати бездоганно.

Розклад — вільні слоти з урахуванням тривалості прийому за типом послуги. Не абстрактне «є віконце», а конкретний інтервал з МІС. Синхронізація кожні 2-3 хвилини — компроміс між навантаженням та актуальністю.

Багатоканальний запис — сайт, мобільний додаток, Telegram-бот, віджет. Всі канали б'ють в одну точку API, який ставить блокування слота через SELECT ... FOR UPDATE до підтвердження.

Нагадування — SMS через sms.ru або smsc.ru API за 24 години та за 2 години. Знижують неявки на 30-40%.

Скасування та перенесення — з особистого кабінету, без дзвінка. Слот звільняється в МІС автоматично.

Антиколізії — подвійні бронювання виключені на рівні транзакцій БД. Якщо МІС та сайт одночасно намагаються зайняти слот — виграє той, хто перший закомітив.

Порівняння популярних МІС

Параметр МЕДІАЛОГ ІНФОКЛІНІКА 1С:Медицина
Протокол SOAP (WSDL) REST + OAuth COM-об'єкт / CommerceML
Швидкість синхронізації 5-10 сек на запит 1-3 сек 2-5 сек (залежить від обсягу)
Документація Закрита, тільки за договором Відкрита Swagger Корпоративна
Підтримка таймзон Немає, потребує ручного обліку Є, але з багами Вбудована
Типові помилки Розрив з'єднання при великих вивантаженнях Неправильний часовий пояс слотів Конфлікт блокувань при паралельному записі

REST API ІНФОКЛІНІКИ швидше SOAP МЕДІАЛОГу в 2-3 рази, але потребує акуратної обробки таймзон. Готові модулі на Бітрікс скорочують час інтеграції з МІС в 3-4 рази порівняно з розробкою з нуля. Наша бібліотека обгорток для цих МІС включає відлов 95% типових помилок.

Як забезпечити відповідність 152-ФЗ при розробці?

Медичні дані — особлива категорія ПДн за 152-ФЗ. Витік діагнозу — не просто штраф, а кримінальна відповідальність за ст. 137 КК РФ.

Процедура отримання згоди Згідно зі ст. 10 152-ФЗ, обробка спеціальних категорій ПДн допускається лише за наявності згоди в письмовій формі. Ми реалізуємо це через модуль згод у Бітрікс з прив'язкою до кожного запису. Форма включає checkbox «Згода на обробку ПДн» та посилання на політику. Дані згоди зберігаються в окремому HL-блоці з прив'язкою до користувача та часу створення.
  • Федеральний закон 152-ФЗ — повний комплект: згода на обробку, політика, повідомлення Роскомнагляду. Не формальна галочка, а робочі документи.
  • Лікарська таємниця — розмежування через ролі Бітрікс: CUser::GetUserGroup(). Медкарту бачить лікуючий лікар та завідувач відділення, реєстратор — тільки розклад.
  • Шифрування — TLS 1.3, шифрування чутливих полів у БД через pgcrypto (PostgreSQL) або AES в application layer.
  • Аудит доступу — журнал у b_event_log: хто, коли, до яких записів звертався. Обробник на кожен SELECT до таблиць з медданими.
  • Проактивний захист — WAF Бітрікс, контроль цілісності filechecker, моніторинг аномалій.
  • Хостинг — ЦОД рівня Tier III, сертифікований для обробки медичних даних. Атестована ІСПДн.

Інтеграції з медичними системами

Це 70% складності проєкту. Решта — по суті звичайний Бітрікс.

МІС:

  • МЕДІАЛОГ — SOAP-сервіси, синхронізація розкладу, записів, даних пацієнтів. Документація закрита, працюємо по WSDL.
  • ІНФОКЛІНІКА — REST API з OAuth. Більш сучасний інтерфейс, але свої особливості з таймзонами.
  • 1С:Медицина — обмін через веб-сервіс або CommerceML. Прайс-листи, фінансові дані, звітність.
  • N3.Здоров'я (ЄГІСЗ) — передача даних в єдину державну систему. Обов'язкова вимога для ліцензованих ЛПУ.

ЛІС:

  • Автоматичне вивантаження результатів в ОК — по webhook або polling. Пацієнт отримує push-повідомлення.
  • Графіки динаміки для регулярних аналізів (глюкоза, холестерин) — візуалізація трендів.

Страхові:

  • Перевірка поліса ДМС та лімітів у реальному часі через API страхової.
  • Автоузгодження послуг.
  • Вивантаження реєстрів для оплати — формат залежить від страхової, у кожної свій XSD.

SEO для медичних сайтів

YMYL-тематика. Google та Яндекс пред'являють підвищені вимоги, і текст з ключовиками тут не працює.

  • E-E-A-T — контент пишеться або верифікується лікарями. Вказано кваліфікації, посилання на джерела (PubMed, клінічні рекомендації).
  • Schema.org — розмітка MedicalOrganization, Physician, MedicalProcedure, MedicalCondition. Реалізуємо через компонент, що генерує JSON-LD з даних інфоблоку.
  • Локальне SEO — Google Мій Бізнес, Яндекс.Бізнес, карти, агрегація відгуків.
  • ФЗ «Про рекламу» — обов'язкове попередження про протипоказання на кожній сторінці послуги. Автоматична вставка через шаблон компонента.

Мобільна адаптація

Понад 70% пацієнтів шукають лікаря з телефона. Незручний запис з мобільного = втрачений пацієнт.

  • Mobile-first дизайн, пріоритет на форми запису.
  • Кнопки «Подзвонити» та «Записатися» — sticky на екрані.
  • Запис в 2-3 дотики.
  • PWA з push-повідомленнями через Service Worker + FCM.
  • Оптимізація: Lighthouse Performance > 90 на мобільних мережах.

Що входить в результат

Кожен проєкт супроводжується комплектом документації та гарантійною підтримкою:

  • Технічне завдання з описом інтеграцій (підписане обома сторонами).
  • Доступи до всіх зовнішніх сервісів (МІС, платіжні шлюзи, SMS-провайдери) — налаштування та тестування.
  • Навчання адміністраторів роботі в адмінці Бітрікс (2-3 сесії по 2 години).
  • Схема БД з індексами, опис агентів та подій.
  • Гарантія 12 місяців на виявлені помилки інтеграції.
  • Підтримка по SLA: критичні інциденти — 4 години.

Терміни та вартість

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

Тип проєкту Терміни
Сайт-візитка клініки 2-4 тижні
Сайт з онлайн-записом та інтеграцією МІС 2-3 місяці
Лабораторний портал 2-4 місяці
Телемедична платформа 3-6 місяців
Аптечний інтернет-магазин 3-5 місяців

Отримайте індивідуальну оцінку вашого проєкту — зв'яжіться з нами, додайте список використовуваних МІС і ми назвемо точні терміни та вартість протягом одного робочого дня.