Модуль для маркетплейс — от идеи до старта продаж. Часть 2 — функциональные требования

Итак, теперь нужно разобраться с тем, что именно я буду делать и зачем.

Немного предыстории.
На протяжении всего моего скромного опыта веб-разработки мне приходилось работать в основном с клиентами из e-commerce сферы. Кто-то из них продавал много, кто-то мало. Но неизменным было одно — все пытались тем или иным способом стимулировать продажи с помощью акций. В битриксе на эту тему есть неплохой функционал «Правила работы с корзиной», который позволяет довольно гибко настроить условия скидок (неплохой — с точки зрения администратора системы, но никак не в плане реализации). Кроме того, этот функционал позволяет создавать и привязывать купоны к скидкам таким образом, что скидки будут привязываться к заказу только в том случае, если был применен купон.

Купоны в битриксе — это сущность с очень длинной историей. Купоны существовали в битриксе еще очень давно, сначала в модуле «Торговый каталог», как и вся скидочная программа. Этот модуль ранее позволял присваивать скидки на конкретные товары, в том числе и с использованием купонов.
Потом в модуле «Интернет-магазин» появились правила работы с корзиной. Так в битриксе образовалось сразу 2 сервиса, дающих примерно одинаковую функциональность, но которую было очень сложно использовать вместе. Одни скидки применялись только в корзине, а другие — в каталоге и корзине, а условия применения скидок были разными. Купонов для правил работы с корзиной тогда не выпустили, что было неудобно.
Чуть позже был разработан очень крутой конструктор скидок (слямзили у Magento, вероятно, ну да ладно), а впоследствии добавили и купоны в правила работы с корзиной.
В итоге получилось 2 абсолютно идентичных функционала, которые отличались одной деталью — старый модуль давал скидки на отдельные товары, даже если они еще не лежали в корзине (и соответственно показывал эту скидку в каталоге товаров), а новый давал скидку только на товары, которые лежат в корзине (и не показывал скидку в каталоге). Не так давно было выпущено обновление, которое сливает эти две подсистемы в одну единую, что несомненно очень хорошо.
Однако до купонов все это время особо дела никому не было, и эта часть скидочной системы развивается медленнее остальных.

Так вот, моя задача будет заключаться в том, чтобы расширить функциональность подсистемы купонов. Исходя из моей практики, многим интернет-магазинам требуется работать с купонами очень много.
Часто возникает задача работать с большими и очень большими пулами одноразовых купонов. Создавать эти купоны вручную — очень муторно. Обычно их либо генерируют пачкой и заливают на сайт с помощью дополнительно написанных импортов, либо пытаются генерировать на сайте с помощью встроенных средств, которые в битриксе довольно печальны. При создании правила работы с корзиной можно указать необходимость генерации нужного количества купонов, однако повлиять на код купона никак нельзя, прогресс выполнения отследить нельзя, а также функционал валится уже при небольших количествах. Также, несмотря на то, что функционал купонов существует довольно давно, нет никакой возможности проанализировать список купонов, найти в огромной куче именно тот купон, который был применен каким-то из покупателей.

Бизнес-цели.

Исходя из описанного выше можно сформулировать проблемы владельцев магазинов и поставить цели. Администраторам нужно дать возможность:
— самостоятельно заниматься генерацией купонов для скидок;
— отслеживать прогресс генерации купонов;
— влиять на код сгенерированного купона;
— просматривать сводную информацию по каждому пулу купонов (общее количество купонов, количество погашенных купонов, количество свободных купонов, количество оплаченных заказов, сумма оплаченных заказов и т.д.);
— искать купоны в пулах по параметрам, а также искать купоны за пределами пулов;
— выгружать пул купонов целиком или частично по условиям;
— загружать купоны в пул из файла;
— выполнять групповые операции над купонами (гашение, управление датами начала и окончания активности, переброс между пулами).

В процессе решения задачи я хочу поставить еще одну благородную цель (хоть и не самую важную) — это расширяемость модуля. У сторонних разработчиков должна быть возможность повлиять на работу этого модуля по максимуму. Сторонним разработчикам должно быть удобно работать с этим модулем. Цель, к сожалению, пока довольно абстрактна, и я пока не знаю, как её лучше сформулировать, но она пока является не самой важной, нужно в первую очередь решить бизнес-цели.

Ограничения

Нам важно выпустить решение на рынок настолько быстро, насколько это возможно. Это стандартная практика в Agile-командах. Проще и дешевле выпустить на рынок функционирующую версию продукта, которая решает небольшую задачу, а после этого наращивать функционал до поставленных целей, а также собирать фидбек от реальных пользователей и модифицировать его исходя из реальных потребностей.
В связи с этим нам потребуется ввести ряд ограничений, который позволит нам заранее не думать о слишком мелких деталях реализации, а также позволят исключить широкий круг потенциальных проблем.

Мне видится следующий набор ограничений:
— модуль должен работать только с d7. Старое API использовать мы не хотим пока. Новая версия магазина началась в 16.0, после чего было очень много исправлений ошибок. Будем разрабатывать для модуля «Интернет-магазин» версии 16.5+;
— не так давно было объявлено, что с 1 января 2018 года минимальной версией php в битриксе будет являться 5.6. До нового года осталось не так много времени, поэтому будем писать именно на этой версии для начала. Если на модерации решение завернут, то быстренько вернем совместимость с 5.3;
— модуль должен работать только с правилами работы с корзины. Скидки каталога поддерживать нет смысла в виду их исчезновения в новых версиях;
— на этапе аналитики выделяем только набор ключевых (по мнению автора) функций и реализовываем только их на этапе старта.

Конкуренты и аналоги на других платформах

Про то, что данного функционала нет в стандартной поставке битрикса, я уже писал выше.
Среди модулей в маркетплейсе битрикса найти аналогов не удалось. Что странно .. Складывается впечатление, что я плохо искал … Подскажите, если у вас есть на заметке аналоги под битрикс, буду рад. Ну а если конкуренции действительно нет, надо быстрее хватать, пока никто не сделал 🙂

Для других платформ решений хватает, полноценных и не очень:
https://hardmandev.com/plugin/coupon/
https://www.insales.ru/collection/all/product/generator-kuponov
http://old.bezev.com/opencart-coupon
https://netcat.ru/products/modules/view/constructor.html
https://marketplace.magento.com/aheadworks-module-coupongenerator.html
https://apps.shopify.com/bulk-discounts

Подробно останавливаться на каждом не буду. При необходимости буду возвращаться к ним в следующих статьях.

Итог

Были собраны бизнес-требования на основании проблематики. Для ускорения запуска задачи было принято решение ввести ряд ограничений для модуля. Также, были проанализированы аналогичные решения, что поможет сформировать более четкое видение итоговой задачи.

В следующей статье постараюсь оформить функциональное задание для себя. Построю требования на самый базовый необходимый для запуска функционал, постараюсь по максимуму все детализировать, чтобы появилось основание для составления технического задания и проектирования архитектуры.