Портфолио: West Visit — Как мы сократили время на документирование визитов с 15 минут до 2
1. Откуда взялась задача
Представьте медицинского представителя фармацевтической компании. Его день выглядит так: 6-8 визитов к врачам, поездки между клиниками, переговоры, презентации препаратов. А вечером — рутина: открыть ноутбук и потратить полтора часа на то, чтобы задокументировать все встречи в корпоративной CRM.
Проблемы, с которыми они сталкивались ежедневно:
- 10-15 минут на заполнение одного визита в Bitrix24
- Сначала записи в блокнот, потом в Excel, потом в CRM — тройное дублирование
- «Что мы обсуждали в прошлый раз с этим врачом?» — информация теряется
- Руководитель не видит, что происходит в полях в реальном времени
- Нестабильный интернет в регионах — визит не сохранился, данные потеряны
Именно эти боли легли в основу West Visit — Progressive Web Application, которое работает на любом устройстве, в том числе оффлайн, и превращает документирование визита из рутины в дело пары минут.
2. Что умеет West Visit
Кейс №1: Утро медпредставителя
Анна, медицинский представитель, открывает West Visit на планшете за завтраком. Сегодня у неё 7 визитов. Система автоматически подгрузила все запланированные встречи из Bitrix24:
9:00 — Клиника «Здоровье», ул. Ленина, 10
Врач: Иванов П.С., кардиолог
История: в прошлый раз обсуждали препарат X, обещали подумать
Ещё в машине Анна открывает карточку клиники и видит:
- Полную информацию о клинике (адрес, телефоны, контакты ЛПР)
- Историю всех предыдущих визитов к этой клинике
- Список врачей, которые там работают
- Заметки коллег из прошлых встреч
Результат: Анна приходит на встречу подготовленной, помнит контекст предыдущего разговора, знает, о чём договаривались.
Кейс №2: Во время визита
Встреча с врачом заняла 20 минут. Анна выходит из кабинета и прямо в коридоре, пока всё свежо в памяти, открывает карточку визита на телефоне:
- Меняет статус с «Запланирован» на «Состоялся» — визит становится зелёным
- Выбирает тип визита: «Презентация препарата»
- Отмечает, какие препараты обсуждали (список подгружается из Bitrix24)
- Добавляет комментарий: «Врач заинтересован, попросил прислать клинические исследования»
- Система автоматически сохраняет данные
Время затрачено: 2 минуты.
Все изменения мгновенно отправляются в Bitrix24. Даже если интернет пропал — не страшно, данные сохранятся локально и синхронизируются, как только связь появится. Визит помечен значком «ожидает синхронизации».
Кейс №3: Руководитель следит за работой команды
Олег, региональный менеджер, сидит в офисе и в реальном времени видит:
- Сколько визитов запланировано на сегодня у каждого медпредставителя
- Сколько уже состоялось, сколько проваленных
- Какие клиники посещаются регулярно, а какие «простаивают»
- Детали каждого визита: о чём говорили, какие препараты презентовали
Если видит, что у кого-то из команды все визиты показывают статус «Провалился» — может оперативно позвонить и помочь.

Кейс №4: Поиск клиники на ходу
Сергей едет по городу и решает заехать в новую клинику, мимо которой проезжает. Он знает только название: «Медцентр Плюс». Открывает West Visit, вбивает в поиск — система мгновенно находит клинику в базе Bitrix24:
- Полное название, ИНН, адрес
- Телефоны и контакты ЛПР
- История визитов коллег (если кто-то уже был)
- Какие врачи там работают
Прямо из карточки клиники Сергей создаёт новый визит — буквально в три клика. Система автоматически подставляет данные клиники, остаётся только выбрать дату и добавить комментарий.
3. Самое крутое — динамические поля
Каждая фармацевтическая компания работает по-своему. У одних в Bitrix24 есть поле «Количество выданных образцов», у других — «Уровень лояльности врача», у третьих — «Конкуренты в регионе».
Обычная проблема: чтобы добавить новое поле, нужно переделывать код приложения, тестировать, выкатывать обновление.
Наше решение: система маппинга полей. Администратор заходит в административную панель West Visit и настраивает соответствие:
Поле в Bitrix24:
UF_CRM_1732026990932(тип: список)
Название в приложении: «Тип визита»
Обязательное: Да
Показывать в карточке: Да
Всё! Теперь это поле автоматически появляется в формах создания и редактирования визитов. Если в Bitrix24 добавили новое значение списка — администратор нажимает одну кнопку «Обновить из Bitrix24», и список актуализируется.
Результат: компания может добавлять любые поля в CRM, и West Visit адаптируется автоматически, без разработки.
4. Технологии под капотом
Чтобы всё это работало быстро и надёжно, мы выбрали современный стек:
Backend
- FastAPI (Python 3.11) — быстрый и современный фреймворк для создания API. Работает асинхронно, поэтому обрабатывает множество запросов одновременно без задержек
- PostgreSQL 14 — надёжная база данных с поддержкой JSONB. Это позволяет хранить динамические поля из Bitrix24 без изменения структуры базы
- SQLAlchemy 2.0 — ORM для работы с базой данных. Упрощает написание запросов и защищает от SQL-инъекций
Frontend
- React 18 + TypeScript — интерактивный интерфейс с полной типизацией. Меньше ошибок, удобнее разработка
- Material-UI v5 — готовые компоненты для интерфейса. Тёмная тема специально оптимизирована для работы на улице под солнцем
- React Query — умное кеширование данных. Приложение работает быстро, даже если интернет медленный
DevOps
- Docker — приложение упаковано в контейнеры. Легко развернуть на любом сервере
- Nginx — веб-сервер для раздачи статики и проксирования запросов
5. Архитектура: как всё устроено
Система построена по классической схеме:
- Пользователь открывает West Visit на телефоне/планшете/компьютере
- Frontend (React) отправляет запросы к API
- Backend (FastAPI) обрабатывает логику, общается с базой данных и Bitrix24
- PostgreSQL хранит все данные локально для быстрого доступа
- Bitrix24 получает обновления через API и отправляет изменения обратно через вебхуки
Двусторонняя синхронизация
Это ключевая фишка системы:
- Изменили визит в West Visit? Данные автоматически отправляются в Bitrix24
- Изменили визит в Bitrix24? Обновление приходит в West Visit через вебхук
- Создали новую компанию? Она появляется в приложении
- Добавили врача в Bitrix24? Он тут же доступен для связи с визитами
Всё работает в обе стороны, данные всегда актуальные.
6. Основные модели данных
В основе системы — четыре ключевые сущности:
User (Пользователь)
Хранит данные о медпредставителях: email, пароль, роль (обычный пользователь или администратор), связь с пользователем в Bitrix24.
Company (Компания/Клиника)
Название, ИНН, адрес, телефоны, email, ID в Bitrix24 для синхронизации. Плюс динамические поля — всё, что настроено в CRM.
Visit (Визит)
Связан с пользователем и компанией. Содержит дату, статус (запланирован/состоялся/провалился), тип визита, комментарии, связь с врачами. Плюс динамические поля.
Contact/Doctor (Контакты и врачи)
ЛПР (лица, принимающие решения) и врачи. У каждого — имя, должность, телефоны (может быть несколько: рабочий, мобильный), email. Связь many-to-many с компаниями и визитами.
FieldMapping (Маппинг полей)
Самая важная таблица! Здесь хранятся настройки: какое поле из Bitrix24 (например, UF_CRM_123) соответствует какому полю в приложении, какой у него тип, обязательное ли оно, нужно ли показывать в карточках.
Благодаря этой таблице система гибко адаптируется к любым изменениям в CRM без переделки кода.
7. Progressive Web App — работает везде
West Visit — это PWA, что означает:
- Установка на домашний экран — приложение выглядит и работает как нативное
- Работает оффлайн — данные кешируются, изменения сохраняются локально и синхронизируются при появлении интернета
- Адаптивный дизайн — одинаково удобно на телефоне, планшете и компьютере
- Быстрая загрузка — благодаря кешированию и оптимизации
- Тёмная тема — удобно работать на улице и не сажать зрение в тёмное время суток
8. Административная панель
Администратор системы может:
- Управлять пользователями — добавлять новых медпредставителей, блокировать учётные записи
- Настраивать маппинги полей — создавать соответствия между полями Bitrix24 и приложением
- Просматривать метаданные из Bitrix24 — видеть все доступные поля и их типы
- Синхронизировать справочники — обновлять списки значений для выпадающих полей
Это делает систему полностью самообслуживаемой: администратор компании может настроить всё под свои процессы без программиста.
9. Что дальше: планы развития
Ближайшие улучшения (3-6 месяцев)
Календарь визитов
Полноценный интерактивный календарь с разными видами: месяц, неделя, день. Drag-and-drop для быстрого переноса визитов. Цветовая индикация загруженности.
Карточки компаний 2.0
Вкладки для разделения информации: «Основное», «Контакты», «Врачи», «История визитов». Timeline всех взаимодействий в виде ленты. Интеграция с Яндекс.Картами — построение маршрута одной кнопкой.
Push-уведомления
Напоминания о предстоящих визитах за час/за день. Уведомления об изменениях в Bitrix24. Геолокационные уведомления: «Вы рядом с клиникой, у которой запланирован визит».
Долгосрочные планы (6-12 месяцев)
Расширенный оффлайн-режим
Service Worker для полноценной работы без интернета. Background Sync API — отправка данных в фоне, когда появится связь. Умное разрешение конфликтов: если визит изменили и в приложении, и в Bitrix24, система предложит выбрать версию.
Геолокация и маршруты
Построение оптимального маршрута на день с учётом пробок (Google Maps / Яндекс.Карты). Верификация визитов: система проверяет, что медпредставитель действительно был рядом с клиникой. GPS-трекинг для расчёта пробега и компенсации ГСМ.
Аналитика для руководителей
Дашборды с KPI: сколько визитов в день, процент успешных, конверсия в продажи. Тепловые карты активности по регионам. Прогнозирование на основе истории: когда пора снова посетить клинику.
Интеграция с другими CRM
Система спроектирована так, чтобы добавить адаптеры для AmoCRM, Salesforce, Microsoft Dynamics. Это откроет рынок за пределами пользователей Bitrix24.
10. Результаты и достижения
Технические
- ✅ Полностью типобезопасная разработка (TypeScript + Python type hints)
- ✅ Современный async стек для высокой производительности
- ✅ Масштабируемая слоистая архитектура
- ✅ Продвинутая двусторонняя интеграция с Bitrix24
- ✅ Уникальная система динамических полей
- ✅ PWA с offline-capable архитектурой
- ✅ Responsive UI для всех устройств
- ✅ Высокая безопасность (JWT, bcrypt, CORS, валидация)
Бизнес
- Сокращение времени на документирование с 10-15 до 2 минут
- Повышение прозрачности работы команды на 100%
- Снижение ошибок синхронизации благодаря автоматизации
- Готовность к масштабированию без изменения архитектуры
- Ускорение адаптации новых сотрудников
11. Чем West Visit выделяется среди аналогов
- Гибкая система маппинга полей — не требует разработки при добавлении новых полей в CRM. Администратор всё настраивает сам через панель управления
- Offline-first подход — работает даже без интернета, данные синхронизируются автоматически при появлении связи (В планах)
- Always-editing режим — карточка визита всегда готова к редактированию, автосохранение, никаких лишних кликов
- Глубокая интеграция с Bitrix24 — не просто API, а полноценная двусторонняя синхронизация с обработкой вебхуков
- Type-safe full-stack — минимум runtime ошибок благодаря TypeScript и Pydantic
- Extensible архитектура — готовность к добавлению других CRM и новых функций
12. Заключение
West Visit — это не просто «планировщик визитов». Это цифровая экосистема для фармацевтических компаний, которая:
- Объединяет поле и офис
- Автоматизирует рутину
- Даёт данные для аналитики
- Масштабируется вместе с бизнесом
- Адаптируется под любые требования
Проект демонстрирует, как правильная архитектура и современные технологии могут превратить сложный бизнес-процесс в простой и понятный digital experience.
Медицинский представитель тратит 2 минуты вместо 15. Руководитель видит всю картину в реальном времени. Компания получает структурированные данные для принятия решений. Все довольны.
Технологии: Python 3.11, FastAPI, PostgreSQL, SQLAlchemy, React 18, TypeScript, Material-UI, React Query, Docker
Интеграции: Bitrix24 REST API, Smart Processes, Webhook
Статус: Production-ready, активная разработка новых features


