Dictionary

Ordering - встроенный модуль Ti-Rate, позволяющий реализовать бизнес логику заказов товаров и услуг. Модуль интегрирован с существующими модулями: Account management, Rating, Invoicing, Payments.

Order (Заказ) - ключевая сущность модуля Ordering. Определяет условия (аккаунт, цена, даты) и объем (перечень услуг или товары), который должен быть поставлен клиенту. Order состоит из позиций заказа, которые являются или уже предоставленными услугами и товарами или обязательными к предоставлению. Заказ имеет свой список статусов, которые определяют этап выполнения услуг или передачи товаров клиенту (Draft, in progress, Close, etc) Заказ имеет свои статусы оплаты, которые фиксируют текущий статус этапа получения платежей за заказ. На него влияет в первую очередь факт выставления счета и получения платежей (Has no invoice, Waiting for payment, Payed, etc). В заказе может быть зафиксирована информация по деталям фактичного выполнения заказа: комментарии, исполнители, время, другое.

Quote ("коммерческое предложение", "offer", "замер") - сущность, определяющая условия (аккаунт, цена, даты) и объем (перечень услуг или товары), которые предлагаются клиенту. Задача "замера" в том, что бы выполнить расчет стоимости работ или товаров и согласовать его с клиентом. В случае успешного согласования из КП будет сформирован заказ. Quote может иметь множество версий перед успешных согласованием.

Order position (позиция заказа) - детальная сущность заказа, которая фиксирует конкретную услугу\товар в заказе и хранит параметры этой услуги: количество, конечную цену, дисконт, исполнителя, другое. Сумма заказа фактически равна сумме цен всех позиций заказа. Позицией заказа может быть некий "контейнер", в который вложен список опций - других товаров и услуг (В реализации на втором этапе). В таком случае при формировании заказа или КП можно дополнительно конфигурировать такие сложные продукты. Позиция заказа может хранить дополнительные детали касающиеся непосредственно выполнения заказа: время, исполнитель, комментарий, параметры продукта. Название и типы позиций могут быть как выбраны из каталога так и внесены вручную.

Quote position (позиция замера, КП) - полностью аналогично позиции заказа, кроме того что не может хранить детали фактического выполнения заказа. В модели данных лежит в той же структуре.

Бизнес задачи

  • Ведение каталога товаров и услуг с ценами.
  • Формирование "замеров" и "заказов", наполнение позициями.
  • Выставление счетов на заказ.
  • Выставление счетов на замер.
  • Получение платежей для оплаты заказов.

Features

Каталог

  1. Наполнение каталога товаров и услуг API (+ bulk operations).
  2. Внесение коллекции цен с разными метками для товаров и услуг.
  3. Индивидуальные цены для выделенных аккаунтов или контрактов аккаунтов.
  4. Обновление цен для товаров и услуг.
  5. Актуальные и неактуальные продукты и цены в каталоге .
  6. Создание товара с вложенными позициями и пост конфигурацией. (этап 2).
  7. Система меток для товаров: продуктовая позиция в каталоге имеет коллекцию меток. В свою очередь метки могут быть связаны между собой в виде графов.
  8. Получение отфильтрованного по меткам продуктов списка товаров и услуг.

Заказы

  1. Формирование "quotation" ("коммерческое предложение", "offer", "замер"). Наполнение его позициями из каталога, калькуляция общей стоимости. Экспорт документа. Редактирование предложения и его версионность.
  2. Генерация сущности заказа из quote. Опция блокирования редактирования заказа. Перерасчет заказа.
  3. Формирование инвойса с ссылками на оплату из заказа.
  4. Закрытие заказа и смена статуса оплаты после получения платежа.
  5. Генерация документа "акт".


Успешный сценарий полного цикла.


Рассмотрим следующий бизнес кейс: тенантом является бизнес по продаже и уходу за эксклюзивными комнатными растениями. Типичными товарами являются: горшки, грунт, удобрения и непосредственно растения. Типичными услугами могут быть доставка, полив, удобрение или пересадка растений. Услуги и доставку выполняют полевые сотрудники, бизнес уже частично автоматизирован с помощью сервиса Zegoal. Аккаунтами (клиентами) бизнеса являются частные лица или корпоративные клиенты. Часть из них могут выполнять оплату через платежную систему, настроенную в Ti-Rate+PayMaze.


Инициация нового тенанта выполняется приложением Zegoal через API "InitNewTenant" (после продажи продукта с опцией Ordering). Для автогенерации нового тенанта передается его новое уникальное имя и шаблон, по которому он будет создан. После генерации, бизнес создает свои организации-клиенты через стандартную API CreateAccount и наполняет каталог. После чего система готова к созданию сущностей с заказами (даже без настроенного каталога товаров-услуг и цен).


Субъекты процесса: полевой сотрудник бизнеса (далее "пользователь", веб-сервис Zegoal (далее "Zegoal"), система Ti-Rate с модулем Ordering, в котором тенантом является описаный выше бизнес, далее "система".

Предусловия:  Полевой сотрудник прибыл к клиенту, для выезда была создана задача (zegoal task) в сервисе Zegoal.

Этап 1. Согласование замера

Пользователь: собирает информацию у клиента и хочет сформировать "замер" (Quote) на перечень товаров и услуг для согласования цены с клиентом. В сервисе Zegoal на текущей задаче выполняет действие "Создать замер".

Zegoal:  открывает форму создание "замера" с параметрами текущего аккаунта и выполняет запрос в систему через API GetOrderingProduct с указанием аккаунта и дополнительных параметров (product_name, product_code, product_category, product_labels price_label) для получения каталога услуг и цен. Каталог товаров будет отфильтрован по указанной категории или имени товаров. Цены будут отфильтрованы согласно меткам или аккаунту.

Система: выполняет фильтрацию по каталогу товаров и услуг по заданным параметрам и возвращает каталог (коллекцию товаров-услуг) в виде: название позиции, тип позиции, цена по умолчанию для аккаунта, дополнительные возможные цены.

Zegoal: отображает форму наполнения "замера" и позволяет через кнопку "добавить" наполнить его позициями с ценами.

Пользователь: наполняет "замер" двумя товарами (грунт, 2 кг, 4$; удобрение, 1 кг, 3$) и двумя услугами (пересаживание маленького растеня, 1шт, 5$ и чистка, 2шт, 2$). Количество и цена будут "подтянуты" из каталона, но могут быть перезаписаны. После наполнения пользователь выполняет сохранение "замера".

Пользователь: добавляет вручную один товар, которого нет в каталоге: горшок, 1 шт, 4$.

Zegoal: получив наполнение "замера" выполняет создание и расчет заказа в системе, используя запрос API CreateQuote с дополнительными опцией AddPositions. Передает коллекцию товаров и услуг с выбранным количеством и ценой. 

Система: выполняет создание новой записи "Quote" и ее деталей, позиций (quote position). Фактически будет создана первая версия нового замера. Система выполняет калькуляцию суммы заказа исходя из количества в позициях и цен. Применяет ранее настроенные скидки согласно количества в позициях. В ответе предоставляет всю информацию по "замеру" с рассчитанными сумами к оплате (уникальный номер замера, номер и дата текущей версии, другая информация).

Zegoal: отображает результаты расчета замера пользователю.

Пользователь: вносит дополнительные правки в позиции заказа: для всех товаров указывает скидку 10% и изменяет количество услуг "пересадки растений" до двух. Выполняет действие "рассчитать".

Zegoal: выполняет запрос API UpdateQuote, в котором указывает все позиции с новыми значениями.

Система: выполняет обновление позиций замера и выполняет перерасчет. В ответ возвращает результаты перерасчета (полный лист позиций замера и общие суммы по замеру).

Пользователь: вносит дополнительные правки в тело замера: выбирает из списка один из адресов аккаунта.

Zegoal: выполняет запрос API UpdateQuote, в котором указывает все позиции с новыми значениями.

Система: выполняет обновление атрибутов замера.

Пользователь: выполняет действие "отправить замер клиенту".

Zegoal или Система: выполняют формирование документа с деталями замера и отправляют его на контактный e-mail аккаунта.


Примечание: параллельно будет доступна логика пошаговой работы с замером: сначала создание через API CreateQuote, а далее постепенное наполнение (и редактирование) через API PositionManagement каждой отдельной позиции. Так в Zegoal можно будет не держать промежуточные данные, а сразу отправлять все на обработку в Ordering.


Этап 2. Версии замера

Пользователь: открывает форму замера.

Zegoal: выполняет запрос API GetAccountQuote, передает требуемый quote_version_id или original_quote_id (для получения последней по дате версии замера).

Система: отвечает полным списком атрибутов и позиций замера

Пользователь: выбирает опцию "создать новую версию из текушей"

Zegoal: выполняет запрос через API CreateQuoteVersion. Указывая quote_version_id или original_quote_id.

Система:

  • создает копию выбранной версии, присваивает ей новые номер версии, дату версии, id версии. 
  • может быть использована опция "закрыть предыдущую версию", после которой указанная версия сменит статус на Closed.
  • система возвращает все атрибуты.

Zegoal: отображает пользователю новую версию.

Этап 3. Инициация заказа

Пользователь: после получения подтверждения на выполнение заказа, выполняет в приложении Zegoal выполняет действие "Сгенерировать заказ из замера".

Zegoal: выполняет запрос на API CreateOrder с указанием опции generate_from_quote. В запросе указывает quote_version_id, на основе которой нужно сгенерировать заказ.

Система:

  • выполняет создание нового заказа.
  • Все позиции, которые были в замере будут скопированы с выбранными там ценами.
  • Будут перенесены все параметры касательно заказа: аккаунт, адрес, тип оплаты, другое...
  • Если при выполнении запроса API CreateOrder были указаны дополнительные атрибуты - они будут так же добавлены в заказ, иначе будут использованы значения по-умолчанию.
  • Новый заказ будет привязан к конкретной версии замера.
  • Система возвращает все реквизиты нового заказа и все его позиции.

Zegoal: открывает для пользователя страницу просмотра заказа со всеми позициями.


Этап 4. Работа с заказом.

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

Zegoal: выполняет обновление заказа через API UpdateOrder и API PositionManagement, передает все измененные атрибуты заказа и позиций заказа.

Система: обновляет ранее сохраненный заказ. выполняет перерасчет сумм, если были изменены атрибуты влияющие на сумму и возвращает все его атрибуты. 

Zegoal: отображает обновленный заказ.

Пользователь:  Выполняет действие "добавить позицию".

Zegoal: выполняет кейс, аналогично добавлению позиций в замер. использует API GetOrderingProduct для получения списка продуктов с ценами и API PositionManagement для добавления их в заказ.

Система: вносит изменения, делает пересчет, возвращает новые данные заказа и позиций.


Этап 5. Инвойс и ссылки на оплату

Пользователь: Выполняет действие "Сформировать счет для заказа".

Zegoal: Выполняет запрос API OrderInvoice, для которого указывает нужный Order_id.

Система:

  • из позиций заказа (цены+количество+дисконт) выполняет формирования пакета данных для "проброски" в рейтинг.
  • "рассчитывает" заказ и формирует rating events.
  • выполняет формирование документа Invoice, включая в него список сформированных events
  • генерирует PDF документ согласно настроенного шаблона по данным заказа и аккаунта
  • выполняет запрос в платежный шлюз для формирования ссылок на оплату, согласно настроенных профилей оплаты.
  • генерирует ответ со всеми данными про инвойс и ссылками на оплату

Zegoal: отображает для пользователя ссылку на открытие PDF документа и наличие ссылок на его оплату.

Пользователь: выбирает действие "отправить инвойс клиенту" и выбирает целевой e-mail, если нужно.

Zegoal: выполняет нотифицирование клиенту по требуемому каналу, используя полученные данные по инвойсу, сгенерированному PDF и ссылками на оплату.


Этап 6. Оплата заказа (наличные)

Пользователь: выполняет действие "оплата наличными на месте".

Zegoal: выполняет запрос через API AddPayment, с указанием account_id и order_id (или invoice_id) и payment_channel = cash

Система: выполняет:

  • создание платежа для требуемого аккаунта
  • погашение инвойса, если суммы было достаточно
  • сменяет статус оплаты заказа на "оплачен"

Этап 7. Оплата заказа (онлайн)

Клиент пользователя: выполняет он-лайн оплату по полученной ссылке.

Система: выполняет:

  • получает платеж с платежного шлюза
  • создание платежа для требуемого аккаунта
  • погашение инвойса, если суммы было достаточно
  • сменяет статус оплаты заказа на "оплачен"
  • нотифицирует Zegoal о новом платеже и изменении статуса заказа.