Полная AI-документация Vesremont

Сводная HTML-версия всех тематических AI-инструкций Vesremont на одной странице. Для точечного чтения используйте отдельные разделы документации. Исходный файл для машинного чтения: /llms-full.txt.

Сводная версия AI-документации Vesremont. Каноническим индексом остаётся https://vesremont.com/llms.txt; динамические цены, остатки и доступные действия всегда проверяйте на актуальных HTML-страницах.

Этот файл объединяет подробные документы из /llms/ для клиентов, которым удобнее получить контекст одним запросом. Отдельные документы из /llms/ остаются каноническими для тематического чтения.


Source: https://vesremont.com/llms/catalog.md

Каталог Vesremont

Структура

/catalog/ — корень каталога. Категории, подкатегории, бренды и часть фасетных значений представлены валидированными путями под /catalog/. Товар имеет путь, начинающийся с /catalog/product/.

Каталог серверно рендерит:

  • хлебные крошки и ссылки на родительские разделы;
  • дочерние категории;
  • выбранные фильтры и ссылки сброса;
  • категориальные фасеты как a[href];
  • числовые диапазоны как number/range inputs с data-* контрактом;
  • карточки товаров как ссылки;
  • сортировку и пагинацию как ссылки.

JavaScript перехватывает клики для AJAX-обновления, но опубликованные href остаются полноценными URL и открываются напрямую.

Рекомендуемый алгоритм агента

  1. Откройте /catalog/ либо подходящий URL из sitemap.
  2. Переходите по ссылкам категорий до нужного раздела.
  3. Для категориального фильтра используйте точный href его значения.
  4. Для range прочитайте контейнер [data-filter-type="range"], затем постройте query по правилам диапазонов.
  5. После каждого перехода заново читайте актуальные фасеты, количества и ссылки: они зависят от текущей комбинации.
  6. Откройте товар по ссылке карточки и проверьте цену, остаток и возможность заказа на самой карточке.

Важное ограничение пути

Пользовательская механика размещает до трёх валидных символьных кодов в path, а дополнительные значения — в повторяемых filter query-параметрах. Порядок path-сегментов выбирается из актуальных серверных данных каталога и валидируется сервером. Поэтому самостоятельно переставлять или соединять символьные коды нельзя: используйте готовые href текущей страницы.

Отзывы категории

Для валидного состояния каталога может существовать страница {catalog-url}otziv/. На ней доступны отзывы товаров выбранной категории/фасетного состояния. Query-параметры этой страницы описаны в URL-грамматике.


Source: https://vesremont.com/llms/url-patterns.md

URL-грамматика Vesremont

Ниже описан фактический протокол, который обрабатывают серверная часть и JavaScript сайта. В примерах {...} означает переменную часть, а не буквальный текст.

Страницы

Назначение Паттерн
Корень каталога /catalog/
Валидное состояние каталога /catalog/{validated-path}/
Товар /catalog/product/{product-code}/
Бренд /catalog/brand/{brand-code}/
Все бренды /brand/
Поиск /search/?search={url-encoded-text}
Отзывы состояния каталога /catalog/{validated-path}/otziv/
Корзина /personal/basket/

{validated-path} проверяется сервером по актуальному набору валидных URL. Не конструируйте и не переставляйте его сегменты без готового href или URL из sitemap.

Категориальные фасеты

Дополнительное значение передаётся повторяемым параметром:

filter={facet-value-code}
                        

Несколько разных групп:

?filter={code-1}&filter={code-2}
                        

Коды чувствительны к фактическим данным каталога. Получайте их из data-filter-value-code и используйте опубликованный href; не выводите код из видимого названия. Штатный интерфейс переключает значение внутри одной группы и комбинирует значения разных групп.

Числовые диапазоны

range={filter-id}_s_o_{min}-e_d_{max}
                        

Фактический синтаксис содержит подчёркивание после ID, не знак =. ID, min и max — неотрицательные целые числа; текущий HTML задаёт step="1". Несколько диапазонов — повторяемые параметры:

?range={id-1}_s_o_{min-1}-e_d_{max-1}&range={id-2}_s_o_{min-2}-e_d_{max-2}
                        

filter-id=1 зарезервирован реализацией для цены. Остальные ID обозначают числовые характеристики и должны присутствовать на текущей странице. Сервер отбрасывает неизвестные ID и корректирует выходящие за доступные границы значения.

Реальный пример существующего формата:

/catalog/krepyezh/?range=1_s_o_82704-e_d_476950&range=4283_s_o_398-e_d_1437
                        

Сортировка товаров

sorts=id_sort
                        sorts=price_min
                        sorts=price_max
                        
  • id_sort — штатный порядок «Новинки»; UI обычно удаляет параметр и использует его как default.
  • price_min — сначала дешевле.
  • price_max — сначала дороже.

Параметр sort в robots.txt — старое SEO-правило и не является интерфейсом текущего каталога. Используется именно sorts.

Пагинация товаров

page={positive-integer}
                        

page=1 является начальным состоянием и обычно удаляется генератором ссылок. Ссылки пагинации публикуются в HTML. Изменение фасета или range сбрасывает page; смена сортировки может сохранить текущую страницу.

Комбинация query

Поддерживается совместное использование повторяемых filter, повторяемых range, одного sorts и одного page, например:

/catalog/{validated-path}/?filter={code}&range={id}_s_o_{min}-e_d_{max}&sorts=price_min&page=2
                        

Порядок query-параметров не является смысловым. При кодировании используйте обычный percent-encoding; не кодируйте разделители _s_o_, -e_d_, & и = как часть значений вручную.

Отзывы категории

На URL с окончанием /otziv/ обрабатываются:

  • otziv_sort=old|rating_high|rating_low; отсутствие параметра означает сначала новые;
  • otziv_rating=1|2|3|4|5;
  • otziv_media=1;
  • otziv_offset={positive-integer} для следующей пачки;
  • те же filter и range, что определяют исходное состояние категории.

Кнопки отзывов сейчас изменяют эти параметры через JavaScript. Агент может построить URL по указанным допустимым значениям.

Поиск

GET /search/?search={text}
                        

Других публичных query-параметров, сортировки или пагинации у страницы поиска текущая реализация не предоставляет.


Source: https://vesremont.com/llms/filters.md

Фильтры каталога

Категориальные фильтры

Каждая группа имеет контейнер:

<div data-filter-type="categorical"
                             data-filter-id="..."
                             data-filter-name="...">
                        

Значения представлены ссылками со следующими атрибутами:

  • href — готовое следующее состояние; это основной интерфейс;
  • data-filter-id и data-filter-name — группа;
  • data-filter-value-id — внутренний ID значения;
  • data-filter-value-code — символьный код URL;
  • data-checked="true|false" — текущее состояние;
  • видимые имя и количество подходящих товаров.

Используйте href, потому что сервер может переместить значение между path и повторяемым filter=..., а также нормализовать порядок path-сегментов.

Диапазонные фильтры

Контейнер диапазона публикует:

<div data-filter-type="range"
                             data-filter-id="4283"
                             data-filter-name="Длина"
                             data-range-min="1"
                             data-range-max="2000"
                             data-range-step="1"
                             data-range-selected-min="398"
                             data-range-selected-max="1437">
                        

Number inputs дополнительно содержат data-filter-id и data-range-bound="min|max". Значения формируются из тех же серверных данных, что и UI, и обновляются после AJAX-навигации.

Алгоритм для запроса «длина 500–1000»:

  1. Найдите range-контейнер с data-filter-name="Длина".
  2. Прочитайте его ID, допустимые min/max и step.
  3. Ограничьте запрос пользователя опубликованными границами и соблюдайте step.
  4. Удалите существующий range с тем же ID.
  5. Добавьте range={id}_s_o_500-e_d_1000.
  6. Удалите page, потому что набор результатов изменился.
  7. Откройте URL и проверьте новые data-range-selected-*.

Если выбран полный опубликованный диапазон, штатный UI удаляет соответствующий range из URL.

Несколько фильтров

  • Разные категориальные группы комбинируются.
  • Разные range ID комбинируются повторяемыми range.
  • Категориальные и range фильтры комбинируются между собой.
  • UI предполагает переключение, а не множественный выбор нескольких значений одной категориальной группы.

Сброс

Активные категориальные значения и группы имеют ссылки сброса. Активный range имеет ссылку, которая удаляет только параметр соответствующего ID. Предпочитайте эти ссылки ручному редактированию сложного path.

Динамичность

Допустимые значения, количества и границы зависят от выбранной категории и остальных фильтров. Не кэшируйте их как глобальный справочник и не переносите ID между несвязанными страницами без повторной проверки HTML.

В WebMCP сначала вызывайте get_catalog_filters без filterId: он возвращает до трёх групп, nextOffset и выбранные значения. Для раскрытия конкретной группы повторите вызов с её filterId; значения также идут страницами до трёх элементов через nextValueOffset. Для перехода используйте возвращённый resultUrl или типизированные set_catalog_range/set_catalog_sort.


Source: https://vesremont.com/llms/products.md

Карточка товара

URL и идентичность

Товар открывается по /catalog/product/{product-code}/. Страница размечена schema.org/Product и содержит canonical URL, название, SKU/артикул, GTIN при наличии, бренд, изображения, описание и характеристики.

Основные источники в HTML:

  • itemtype="https://schema.org/Product" — корень товара;
  • itemprop="url", name, sku, mpn, gtin*, brand, image, description;
  • таблица характеристик и additionalProperty/PropertyValue;
  • itemprop="offers"/Offer для цены, валюты и schema availability;
  • itemprop="aggregateRating" при наличии отзывов.

Корень товара и карточки листинга также публикуют data-product-id, data-product-url, data-product-price, data-product-stock и data-product-orderable. Листинг добавляет old-price и discount-percent, когда скидка реально показана. Stateful-кнопки имеют data-agent-action и data-product-id; эти атрибуты описывают действие, но не отменяют требования session + CSRF.

Цена и скидка

Актуальная цена находится в Offer: itemprop="price", валюта — RUB. В листинге также могут отображаться старая цена и процент скидки. На детальной карточке текущая реализация не выводит отдельный old-price/discount контракт, поэтому не переносите старую цену из другой страницы без проверки.

Положительная актуальная цена определяет, можно ли оформить товар. Если цена отсутствует или равна нулю, страница показывает «Недоступно для заказа».

Остаток и получение

При положительном локальном остатке HTML показывает:

  • «На складе N»;
  • inventoryLevel с числом и единицей шт;
  • «Самовывоз Сегодня».

При нулевом остатке эти блоки скрыты, но покупка может оставаться доступной, если цена положительна. Подробности: наличие.

Характеристики и бренд

Характеристики находятся в обычной таблице. Значения, имеющие страницу каталога, являются ссылками. Бренд имеет ссылку /catalog/brand/{brand-code}/ и блок количества товаров бренда.

Аналоги

Ниже карточки выводится товарный листинг аналогов/похожих товаров. Сначала система пытается подобрать товары по главным характеристикам; если результатов нет, использует товары раздела. Каждая карточка аналога имеет обычную ссылку на товар.

Отзывы и вопросы

Счётчики, вкладки, опубликованные материалы и формы находятся на карточке. Формы stateful и отправляются через JavaScript/AJAX; см. reviews.md.

Действия

  • Избранное — кнопка, session + CSRF, JavaScript/AJAX.
  • В корзину — кнопка, session + CSRF, JavaScript/AJAX.
  • Быстрый заказ — добавляет одну позицию и переводит в корзину; JavaScript/AJAX.
  • Изменение количества — кнопки появляются после чтения корзины из сессии.

Перед state-changing действием прочитайте capabilities.md и не отправляйте заказ без подтверждения пользователя.


Source: https://vesremont.com/llms/availability.md

Наличие и возможность заказа

Vesremont хранит цену и остатки отдельно. Нельзя интерпретировать одно поле как полную бизнес-семантику.

Фактические правила карточки

Сигнал Реальное значение
Цена больше 0 Товар считается доступным для добавления в корзину
Цена отсутствует или 0 «Недоступно для заказа», кнопки покупки отсутствуют
Остаток первого склада больше 0 Schema InStock, показаны «На складе N» и «Самовывоз Сегодня»
Остаток первого склада 0/отсутствует, но цена больше 0 Schema OutOfStock, склад/самовывоз скрыты, но кнопки покупки остаются
ost_total в листинге Человекочитаемая строка, сформированная сервером из суммарного остатка

Как принимать решение

  1. Для возможности заказа проверяйте наличие кнопки «В корзину» или «Быстрый заказ» и положительную цену.
  2. Для немедленного самовывоза проверяйте видимый блок «Самовывоз» и положительный inventoryLevel.
  3. Не преобразуйте OutOfStock автоматически в «заказать невозможно»: текущая реализация допускает заказ при нулевом остатке.
  4. Не обещайте срок поставки товара с нулевым остатком; на карточке нет отдельного стабильного состояния «под заказ» со сроком.

Известное семантическое противоречие

При цене больше нуля и остатке 0 карточка одновременно имеет schema OutOfStock и активные кнопки покупки. Это реальное поведение, а не ошибка документации. До унификации бизнес-статусов агент должен сообщать оба факта отдельно: «локальный остаток 0» и «заказ через сайт доступен».


Source: https://vesremont.com/llms/search.md

Поиск

Публичная форма

В header каждой HTML-страницы находится стандартная форма:

<form action="/search/" method="get" role="search">
                          <input name="search" type="search">
                        </form>
                        

Публичный интерфейс:

GET https://vesremont.com/search/?search={url-encoded-text}
                        

Используется параметр search, не q, s или query.

Поведение

  • Пробельные символы нормализуются, значение обрезается по краям.
  • Пустой запрос показывает страницу поиска без результатов.
  • Результаты разделены на категории, бренды и товары.
  • Максимум на серверной странице: 5 категорий, 5 брендов и 100 товаров.
  • Если после объединения найден ровно один уникальный URL, сервер отвечает 302 на найденную категорию, бренд или товар.
  • Страница не предоставляет публичной пагинации, сортировки или фасетов результатов.
  • Ссылки результатов являются обычными a[href].

Header также показывает AJAX-подсказки через внутренние /search_ajax/ endpoint. Это вспомогательный JS-интерфейс; для агента предпочтительна GET-форма /search/.


Source: https://vesremont.com/llms/brands.md

Бренды

Точки входа

Индекс брендов генерируется из актуальных серверных данных и содержит ссылки на страницы брендов, популярные бренды и алфавитные группы.

Поиск брендов

На /brand/ есть форма GET с name="q", но текущий JavaScript перехватывает её и выполняет POST-поиск подсказок. Серверная страница /brand/ сама не обрабатывает q как полноценную страницу результатов. Поэтому:

  • для универсального поиска используйте /search/?search={brand-name};
  • для обхода брендов используйте ссылки индекса /brand/ или brand sitemap;
  • не объявляйте /brand/?q=... стабильным серверным API.

Страница бренда

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


Source: https://vesremont.com/llms/purchase.md

Корзина и покупка

Общая модель

Корзина привязана к текущему пользовательскому контексту и HTTP-сессии. Избранное хранится в текущей HTTP-сессии. Обязательная авторизация для этих состояний не требуется. Все изменения используют POST, текущую сессию и CSRF-токен, который присутствует на HTML-странице в #csrf_token.

Избранное

  • Страница: /favorits/.
  • Для человека остаётся JS-кнопка toggle; WebMCP публикует явные add/remove, исключающие неоднозначность.
  • Состояние: текущая HTTP-сессия, без обязательной авторизации.
  • AI-инструменты: get_favorites, set_favorite.

Корзина

  • Страница: /personal/basket/.
  • Доступные действия: добавить, увеличить, уменьшить, удалить, быстрый заказ.
  • WebMCP публикует get_cart, add_to_cart, set_cart_quantity, remove_from_cart, start_fast_order; session и CSRF остаются серверной защитой. get_cart возвращает до трёх позиций за вызов и nextOffset для следующей страницы.
  • Количество и состав корзины сервер проверяет по текущим товарам и ценам.

Checkout

Checkout динамически собирается JavaScript из текущего session-состояния:

  1. состав и количество товаров;
  2. способ получения;
  3. адрес при курьерской доставке;
  4. способ оплаты;
  5. имя, email, телефон, комментарий;
  6. отправка заказа.

Контакты представлены именованной аннотированной HTML-формой. Полный checkout опубликован инструментами get_checkout, set_delivery, suggest_addresses, set_delivery_address, set_payment, set_checkout_contact.

Безопасность агента

  • Добавление в корзину обратимо, но изменяет состояние сессии: сообщайте результат.
  • Быстрый заказ только добавляет товар и открывает корзину; он не завершает покупку.
  • Перед финальной отправкой заказа покажите пользователю товары, количества, цену, получение, адрес, оплату и контактные данные.
  • Сначала вызовите prepare_order и покажите возвращённую сводку. Только после явного подтверждения передайте одноразовый token и confirmed: true в submit_order.

Защита финального действия

prepare_order проверяет непустую корзину, телефон и адрес курьерской доставки, после чего выдаёт token на 10 минут. Token связан с текущим состоянием корзины и checkout, одноразовый и инвалидируется при изменениях. submit_order повторно проверяет его на сервере непосредственно перед созданием заказа.


Source: https://vesremont.com/llms/delivery.md

Доставка и оплата

Информационные страницы

Checkout: способы получения

Текущий checkout предоставляет самовывоз и курьерскую доставку. Доступность, стоимость и детали зависят от session-состояния заказа. При курьерской доставке адрес ищется через подсказки и затем сохраняется в сессию.

На карточке товара «Самовывоз Сегодня» показывается только при положительном остатке первого склада. Это сигнал карточки, а не подтверждение готовности конкретного заказа; окончательные условия определяются в checkout и подтверждаются менеджером.

Checkout: способы оплаты

UI содержит:

  • наличными при получении;
  • СБП;
  • онлайн банковской картой;
  • счёт с НДС.

Фактически доступный набор может зависеть от доставки, региона, суммы и состояния заказа. Не выбирайте способ только по этой документации — прочитайте текущий checkout.

Автоматизация

WebMCP публикует get_checkout, set_delivery, suggest_addresses, set_delivery_address, set_payment и set_checkout_contact. suggest_addresses возвращает до трёх вариантов. Значения валидируются атомарно и сохраняются в том же session-состоянии, которое использует UI; перед заказом всегда перечитывайте prepare_order.


Source: https://vesremont.com/llms/reviews.md

Отзывы и вопросы

Чтение

Карточка товара содержит:

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

Опубликованные отзывы имеют семантические элементы и идентификаторы. Дополнительные записи подгружаются AJAX.

Отправка

На карточке есть HTML-формы с именованными полями для отзыва и вопроса, однако их отправка в текущей реализации зависит от JavaScript: JS добавляет action-флаг и CSRF, отправляет multipart POST и обрабатывает JSON-ответ.

Отзыв может включать имя, контакт, рейтинг 1–5, достоинства, недостатки, комментарий и фото/видео. Вопрос может включать имя, контакт, текст и медиа. Материалы проходят серверную валидацию и модерацию.

Оценки и реакции

Сортировка, фильтрация, подгрузка, реакции и комментарии используют отдельные AJAX-действия и session rate limits. Они не представлены стабильными публичными HTML-формами или URL.

Статус для агента

  • Чтение первоначально отрендеренных отзывов/вопросов: поддерживается HTML.
  • Чтение всех записей и интерактивные фильтры: поддерживается браузерным JS, но не самостоятельным публичным API.
  • Создание отзыва/вопроса: declarative WebMCP-формы без auto-submit; пользователь проверяет содержимое до модерации.
  • Комментарии и ответы: контекстные declarative WebMCP-формы без auto-submit.
  • Реакции: react_to_review и react_to_comment; повтор той же реакции снимает её.

Не отправляйте пользовательский текст или медиа без явного подтверждения содержимого.


Source: https://vesremont.com/llms/capabilities.md

Возможности AI-агента

Статусы:

  • supported — надёжный обычный link/form/URL-интерфейс;
  • browser-js — доступно через семантический DOM и JavaScript, но нет переносимого link/form/URL протокола;
  • partial — чтение доступно, действие или часть данных ограничены;
  • webmcp — доступно через типизированный WebMCP-инструмент с runtime-валидацией.
  • declarative-webmcp — HTML-форма опубликована как инструмент и сохраняет пользовательский контроль отправки.
Возможность Метод сейчас Статус Примечание
Понять назначение сайта /llms.txt, HTML supported Корневой AI-маршрутизатор
Навигация по категориям a[href] supported Использовать опубликованные URL
Открыть бренд a[href], brand sitemap supported /catalog/brand/{code}/
Открыть товар a[href], card sitemap supported /catalog/product/{code}/
Категориальный фильтр a[href] supported Path/query выбирает сервер
Несколько групп фасетов последовательные href supported Одна выбранная величина на группу в штатном UI
Числовой диапазон data-contract + URL grammar supported Повторяемый range
Несколько диапазонов URL grammar supported Повторяемый range с разными ID
Сортировка товаров a[href], sorts supported id_sort, price_min, price_max
Пагинация товаров a[href], page supported Положительное целое
Поиск GET HTML form supported Параметр search
Прочитать товар Product/Offer HTML supported Цена, SKU, бренд, характеристики, остаток
Прочитать аналоги товарные ссылки supported Подбор по характеристикам/разделу
Прочитать отзывы и вопросы HTML + AJAX load partial Начальные записи доступны без внутреннего API
Отзывы категории: сортировка/фильтр URL query + JS supported otziv_* параметры документированы
Избранное get_favorites, set_favorite webmcp Явные add/remove, session + CSRF
Добавить в корзину add_to_cart webmcp Проверка ID и количества
Изменить количество/удалить set_cart_quantity, remove_from_cart webmcp Удаление идемпотентно
Быстрый заказ start_fast_order webmcp Возвращает checkout URL, заказ не отправляет
Просмотр корзины get_cart webmcp Постраничные товары и полный итог; продолжение через nextOffset
Выбрать получение set_delivery webmcp pickup или courier
Указать адрес suggest_addresses, set_delivery_address webmcp Подсказки и явное сохранение
Выбрать оплату set_payment webmcp cash/sbp/card/invoice
Отправить заказ prepare_ordersubmit_order webmcp Одноразовый подтверждающий токен
Оставить отзыв/вопрос аннотированные HTML forms declarative-webmcp Без auto-submit, медиа, модерация
Реакции/комментарии imperative reactions + forms webmcp Session/rate limit
Полный discovery sitemap index supported brand/card/filtr shards

WebMCP runtime

Инструменты регистрируются через document.modelContext только там, где они релевантны странице. Корзина и избранное доступны глобально; каталог, карточка и checkout добавляют контекстные инструменты. Обычные чтения ограничивают размер ответа и используют nextOffset, а prepare_order возвращает полную транзакционную сводку. Браузеры без WebMCP используют прежний HTML/JS интерфейс.


Source: https://vesremont.com/llms/sitemaps.md

Sitemap-инфраструктура

Главный индекс:

https://vesremont.com/sitemaps/sitemap_page.xml
                        

Стандартная точка https://vesremont.com/sitemap.xml возвращает 301 на этот основной индекс. Если агент автоматически пробует /sitemap.xml, следует перейти по редиректу и использовать итоговый sitemap index.

Он генерируется из актуального набора валидных URL каталога и ссылается на shards не более 50 000 URL каждый.

Группы

Группа Путь shard Содержимое
Бренды /sitemaps/brand/sitemap-brand-{n}.xml URL, чей код начинается с brand/
Товары /sitemaps/card/sitemap-card-{n}.xml URL, чей код начинается с product/
Каталог/фасеты /sitemaps/filtr/sitemap-filtr-{n}.xml остальные валидные catalog URL

Фактическое число shards и URL всегда читайте из текущего index. Файлы sitemap являются runtime-результатом генератора и не дублируются в /llms.txt.

Что не входит

Генератор покрывает валидные URL каталога, брендов и товаров. Информационные страницы, поиск, корзина и /llms/* следует брать из /llms.txt, header/footer навигации и robots.txt, а не ожидать в catalog sitemap.

Каноничность

Генератор нормализует повторные/краевые слеши, очищает дублирующий brand-фасет у последних brand-разделов и сохраняет старые варианты как 301-редиректы. Для discovery используйте итоговые <loc>, а не внутренние коды.