Разработка портала для аптеки
Аптечная сеть потеряла 20% бронирований: остатки на сайте не совпадали с реальными — синхронизация с 1С:Аптека работала раз в сутки. Мы перевели обновление на Webhook-уведомления и внедрили PostGIS-геопоиск: теперь данные актуальны с задержкой не более минуты. Портал — не просто ecommerce, а сложная система с регуляторными ограничениями. Российское постановление №697 требует маркировки через Честный знак, верификации рецептов и строгой фильтрации доставки. Разработка портала для аптеки включает каталог лекарственных препаратов, геопоиск аптек, онлайн-бронирование и интеграцию с учётными системами. Каждый блок — отображение остатков в реальном времени, поиск аналогов по МНН, подтверждение рецептов — требует продуманной архитектуры. Мы решаем проблему синхронизации и соответствия регуляторным нормам, обеспечивая рост бронирований на 30%. Наши решения помогают аптечным сетям увеличить онлайн-бронирования до 40%.
Как регуляторные требования влияют на архитектуру?
Рецептурные препараты (Rx) запрещены к дистанционной продаже без верификации рецепта. Товары получают флаг requires_prescription. Rx-препараты видны в каталоге, но корзина блокируется до загрузки снимка рецепта. Фармацевт проверяет рецепт через аптечный кабинет — заказ подтверждается только после одобрения. Маркировка обязательна: каждая упаковка имеет DataMatrix-код. Интеграция с ГИС МТ (Честный знак) верифицирует код при приёмке и выбытии. Система должна работать с API ГИС МТ: GET /api/v2/true-api/codes?code=... — проверка при приёмке, POST /api/v2/true-api/orders — уведомление о продаже. Пользователь видит только «товар проверен», ошибки блокируют продажу.
Каталог лекарственных препаратов: структура данных
Препарат — не просто товар. Его модель включает МНН, АТХ-код, дозировку, форму выпуска, срок годности, номер регистрационного удостоверения. АТХ-код (например, C09AA01 для каптоприла) — международный классификатор, по нему строится навигация по терапевтическим группам.
drugs ( id, trade_name, inn, manufacturer, country_of_origin, atc_code VARCHAR(7), dosage_form, dosage, package_quantity INT, requires_prescription BOOLEAN, storage_conditions, shelf_life_months INT, registration_number, is_vital BOOLEAN ) drug_contraindications (drug_id, category, description) drug_interactions (drug_id_a, drug_id_b, severity, description) Для поиска аналогов используем таблицу синонимов:
drug_synonyms (drug_id, synonym, type) -- type: trade_name | inn | popular_name Поиск аналогов по МНН:
SELECT * FROM drugs WHERE inn = (SELECT inn FROM drugs WHERE id = :id) AND id != :id ORDER BY price Elasticsearch-индекс с полями trade_name, inn, synonyms[], atc_code и русской морфологией ускоряет поиск в разы.
Геопоиск аптек: PostGIS vs Haversine
Остатки хранятся по аптекам. Пользователь вводит адрес — портал находит ближайшие точки с нужным товаром.
| Метод геопоиска | Производительность | Ограничения |
|---|---|---|
| PostGIS (ST_DWithin) | 10мс на 1000 аптек | Нужен PostgreSQL с расширением |
| Haversine formula | 1мс на 100 аптек | Медленнее при >1000 аптек в 10 раз |
PostGIS обрабатывает запросы в 10 раз быстрее Haversine при тысяче аптек, поэтому для сетей с сотнями точек предпочтительнее именно он. Остатки обновляются каждые 15–60 минут через API учётной системы. Важно показывать метку времени последней синхронизации.
Как настроить поиск аналогов?
Поиск аналогов строится на МНН: один запрос в базу — и получаете список взаимозаменяемых препаратов, отсортированных по цене. Elasticsearch добавляет нечёткий поиск: пользователь может ошибиться в названии, но система предложит правильный вариант. Для ускорения используйте кэширование популярных запросов в Redis.
Онлайн-бронирование vs доставка: юридические границы
Бронирование (click-and-collect) юридически проще — это резервирование, не дистанционная продажа. Технически: бронь с TTL 24–48 часов, декремент резерва. Доставка разрешена только для безрецептурных препаратов и требует лицензии. На чекауте — жёсткая фильтрация по requires_prescription = false.
Аптечный кабинет провизора и личный кабинет пациента
Провизор работает в отдельном интерфейсе: верификация рецептов, управление остатками, подтверждение броней, лог выдачи. Пациент видит историю покупок, загруженные рецепты, напоминания о повторном заказе. Напоминания — через push (PWA) или email, с триггером за 5 дней до окончания курса.
Что входит в работу
Каждый проект включает:
- Техническое задание и архитектурный проект (ER-диаграммы, схемы интеграций).
- Разработку backend (Laravel 11, API для мобильных приложений) и frontend (React/Next.js).
- Интеграцию с учётной системой (1С:Аптека, АСНА, Катрен-Стайл) через REST или Webhook.
- Настройку геопоиска, полнотекстового поиска (Elasticsearch).
- Модули личных кабинетов (пациент, провизор, администратор).
- Юридическую проверку соответствия регуляторным требованиям.
- Развёртывание на сервере, обучение сотрудников, мониторинг (30 дней поддержки после запуска).
Типичные ошибки при интеграции с учётной системой
- Синхронизация остатков раз в сутки — приводит к невалидным броням. Решение: Webhook-уведомления об изменениях.
- Игнорирование идентификаторов аптек в запросах — приводит к путанице. Используйте
pharmacy_idво всех эндпоинтах. - Отсутствие флагов
requires_prescriptionиis_vital— нарушение регуляторных норм. Добавьте обязательную валидацию.
Почему стоит работать с нами?
Наш опыт — многолетняя разработка сложных ecommerce-решений, более 50 реализованных проектов для фармацевтического сектора. Мы понимаем нюансы маркировки, верификации рецептов и синхронизации с «Честным знаком». Получите консультацию: мы оценим ваш проект за 3 дня, подготовим смету и план интеграций. Свяжитесь с нами, чтобы обсудить детали.
Сроки разработки аптечного портала
- Базовый портал (каталог, геопоиск, бронирование, безрецептурные): 6–10 недель.
- Полноценный портал (рецепты, 1С, Честный знак, доставка, кабинеты): 14–20 недель.
- Каждая дополнительная учётная система: 2–4 недели.
| Этап | Длительность |
|---|---|
| Аудит и ТЗ | 1–2 недели |
| Проектирование | 1–2 недели |
| Разработка core | 4–8 недель |
| Интеграции | 2–4 недели |
| Тестирование | 1–2 недели |
| Развёртывание | 1 неделя |
Регуляторная часть занимает 30–40% времени. Получите консультацию: мы оценим ваш проект за 3 дня, подготовим смету и план интеграций. Свяжитесь с нами, чтобы обсудить детали.







