Портфолио: Система учёта визитов «Visit»

Портфолио: 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 минут. Анна выходит из кабинета и прямо в коридоре, пока всё свежо в памяти, открывает карточку визита на телефоне:

  1. Меняет статус с «Запланирован» на «Состоялся» — визит становится зелёным
  2. Выбирает тип визита: «Презентация препарата»
  3. Отмечает, какие препараты обсуждали (список подгружается из Bitrix24)
  4. Добавляет комментарий: «Врач заинтересован, попросил прислать клинические исследования»
  5. Система автоматически сохраняет данные

Время затрачено: 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. Архитектура: как всё устроено

Система построена по классической схеме:

  1. Пользователь открывает West Visit на телефоне/планшете/компьютере
  2. Frontend (React) отправляет запросы к API
  3. Backend (FastAPI) обрабатывает логику, общается с базой данных и Bitrix24
  4. PostgreSQL хранит все данные локально для быстрого доступа
  5. 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. Административная панель

Администратор системы может:

  1. Управлять пользователями — добавлять новых медпредставителей, блокировать учётные записи
  2. Настраивать маппинги полей — создавать соответствия между полями Bitrix24 и приложением
  3. Просматривать метаданные из Bitrix24 — видеть все доступные поля и их типы
  4. Синхронизировать справочники — обновлять списки значений для выпадающих полей

Это делает систему полностью самообслуживаемой: администратор компании может настроить всё под свои процессы без программиста.

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 выделяется среди аналогов

  1. Гибкая система маппинга полей — не требует разработки при добавлении новых полей в CRM. Администратор всё настраивает сам через панель управления
  2. Offline-first подход — работает даже без интернета, данные синхронизируются автоматически при появлении связи (В планах)
  3. Always-editing режим — карточка визита всегда готова к редактированию, автосохранение, никаких лишних кликов
  4. Глубокая интеграция с Bitrix24 — не просто API, а полноценная двусторонняя синхронизация с обработкой вебхуков
  5. Type-safe full-stack — минимум runtime ошибок благодаря TypeScript и Pydantic
  6. 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