Задача
В медицинском e-commerce ошибка выбора стоит дороже, чем неудобный возврат. Человек, который заказывает калоприёмники или катетеры на месяц вперёд, при неверном размере остаётся без нужного средства ухода. Часть позиций вдобавок невозвратна после вскрытия упаковки, так что «закажу и посмотрю» тут не работает.
При этом покупатель приходит с двух совершенно разных сторон. Один знает manufacturer code и хочет найти его за одно действие. Другой знает только, что ему нужно после операции, и начинает с направления ухода. Третий вообще покупает не для себя — это caregiver или родственник со своими платёжными и адресными данными. Четвёртый оплачивает заказ через программу покрытия и ждёт документ, который примет страховая.
Магазин должен обслуживать всех четверых, не превращаясь при этом в систему постановки диагноза.
Решение
Каталог в нескольких срезах. Товар одновременно живёт в дереве направлений ухода, на странице бренда, в результатах поиска и в подборках — без дублирования SKU. Глубина реальная: в ostomy-направлении отдельно существуют one-piece и two-piece системы, drainable и closed pouches, urostomy, skin barriers и фланцы, кольца, пасты и пудры, ирригация, детские позиции, аксессуары и поддерживающие пояса. Урологический раздел различает intermittent, pre-lubricated, closed-system и постоянные катетеры. Названия брендов нормализуются, чтобы варианты написания не дробили выдачу.
Поиск, который не теряет цифры. Он одинаково обслуживает запрос по manufacturer code, SKU, бренду, частичному названию, категории, медицинскому и бытовому синониму, размеру, типу упаковки и написанию с дефисом, пробелом или без них. Точное совпадение по коду приоритетнее маркетингового контента, а числа и единицы измерения не отбрасываются: две похожие модели могут отличаться только диаметром или количеством в коробке.
Фильтры по смыслу категории. Набор фильтров зависит от направления ухода: параметр, полезный для катетера, не появляется в повязках только потому, что существует в общей базе атрибутов. URL фильтра при этом сохраняется и индексируется по SEO-правилам, не порождая бесконечные дубли страниц.
Упаковка как обязательный атрибут. Позиция хранит внутренний SKU и manufacturer code, единицу упаковки — each, box, case — и количество внутри, размеры и диаметры, форму и материал, атрибуты совместимости, возвратный статус и требование документа, если оно есть. Длинное техническое название не сокращается так, чтобы из него пропал размер, вариант или упаковка. В строку заказа кладётся snapshot выбранного SKU с параметрами: изменение каталога потом не переписывает то, что человек уже купил.
Совместимость компонентов. Pouch, фланец, коннектор или аксессуар должны соответствовать размеру и линейке базового изделия. Для этого используются структурированные атрибуты совместимости, ссылки на совместимые товары, manufacturer family и size/flange-коды, а при очевидном несовпадении покупатель получает предупреждение и выход на специалиста поддержки. Система помогает найти подходящую позицию, но не предлагает клиническую замену.
Два пути оплаты. Обычный checkout идёт стандартно, а direct billing вынесен в отдельный поток: клиент выбирает соответствующий способ, система запрашивает только необходимые подтверждающие данные, проверяются eligibility и допустимость товара, заказ получает статус pending verification или approved, покрываемая и непокрываемая части фиксируются раздельно, при необходимости предлагается доплата другим способом. Ошибка проверки не имеет права перевести заказ в paid или ready-to-ship, а всё решение сохраняется в audit trail.
Документ для страховой. Itemized invoice содержит продавца и реквизиты заказа, покупателя, дату, наименование, manufacturer code, количество и упаковку, стоимость, скидку и налог, состояние оплаты и собственный invoice reference. Документ доступен после нужного состояния заказа и не меняется задним числом, когда обновляется каталог.
Возвраты по товару, а не по магазину. Общая политика сочетается с правилом на уровне позиции. Товар с пометкой No Returns не должен неожиданно принять автоматический RMA только потому, что остальной ассортимент возвращается.
Повторный заказ. Order history показывает точные SKU и упаковки прошлого заказа, а reorder собирает новую корзину по актуальным ценам и остаткам, заменяя недоступные строки, — а не клонирует финансовый результат старой покупки.
Knowledge Centre без самолечения. Статьи по wound care, ostomy, incontinence и урологии хранят автора и рецензента, дату обновления, источники, дисклеймер и связь с товарами. Отзывы проходят модерацию, которая отделяет опыт использования от недопустимого медицинского совета и персональных данных.
Результат
Покупатель находит нужный расходник любым из своих путей — по коду, по бренду, по направлению ухода — видит упаковку и размер до оплаты и возвращается к повторной покупке за одно действие. Клиент программы покрытия получает документ, с которым можно подать заявку, либо проходит через direct billing с раздельным учётом покрытой и непокрытой части.
Операционная команда работает в одном back office: каталог и атрибуты, импорт с валидацией обязательных полей и дублей manufacturer code, заказы, платежи, отгрузки, возвраты, модерация отзывов, контент и проверка direct-billing. Каждый пограничный случай — от заменённого производителем артикула до повторного платёжного callback — переведён в явный статус с безопасным продолжением, а не в скрытую автоматическую подмену.