Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Различить возможность заказа, складской остаток и самовывоз сегодня.
Что нужно на входе: Свежий ответ товара или карточка; у HTML и API различаются складские показатели и денежные единицы.
Результат: Отдельные факты о цене, наличии и возможности заказа без выдуманного срока поставки.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Данные карточки товара — перечитать динамические данные · Доставка и оплата — проверить условия получения · Корзина и оформление — передать подборку или подготовить checkout.
Значения в REST и UCP
REST stock.total и stock.local суммируют доступные остатки всей складской сети магазина. Это не тот же сигнал, что остаток первого склада в HTML-карточке, и не обещание самовывоза сегодня. Сроки доставки со складов отдельно не объявлены. В REST цена выражена в рублях; в UCP — в целых копейках с currency: RUB. Неизвестная цена — null, не ноль. Возможность заказа и актуальный итог проверяются сервером при работе с корзиной и checkout. Public API.
Vesremont хранит цену и остатки отдельно. Нельзя интерпретировать одно поле как полную бизнес-семантику.
В REST availability описывает складской сигнал, а orderable — возможность заказа по актуальной положительной цене. Даже in_stock не разрешает покупку при orderable: false. Надпись «Под заказ» сама по себе также не подтверждает цену или возможность оформления. Для решения проверяйте orderable и текущую цену; перед записью сервер проверяет их снова.
Старая цена и промо листинга
price.old_amount и discount_percent возвращаются только когда источник API содержит подходящую старую цену выше текущей. null означает неизвестное значение, не нулевую скидку и не обещание отсутствия акции.
В листинге зачёркнутая сравниваемая цена может вычисляться из текущей цены и отдельного промопроцента: текущая / (1 - процент / 100), с округлением интерфейса. Это объясняет показанный промоблок, но не доказывает историческую цену продажи. Не подставляйте рассчитанное число в old_amount и не объявляйте скидку подтверждённой историей. Текущая цена, оформление и показанный промоблок сохраняются независимо от наличия старой цены в API.
Фактические правила карточки
| Сигнал | Реальное значение |
|---|---|
| Цена больше 0 | Товар считается доступным для добавления в корзину |
| Цена отсутствует или 0 | «Недоступно для заказа», кнопки покупки отсутствуют |
| Остаток первого склада больше 0 | data-product-pickup-today="true", schema InStock, показаны «На складе N» и «Самовывоз Сегодня» |
| Остаток первого склада 0/отсутствует, но цена больше 0 | data-product-pickup-today="false", schema OutOfStock, склад/самовывоз отсутствуют в DOM, но кнопки покупки остаются |
ost_total в листинге | Человекочитаемая строка, сформированная сервером из суммарного остатка |
На детальной карточке data-product-stock содержит остаток первого склада. На листинге data-product-stock относится к суммарному остатку карточки, поэтому сравнивать эти два значения как один складской показатель нельзя. data-product-orderable отражает возможность заказа по положительной цене и не выводится из остатка.
Как принимать решение
- Для возможности заказа проверяйте наличие кнопки «В корзину» или «Быстрый заказ» и положительную цену.
- Для немедленного самовывоза требуйте
data-product-pickup-today="true", видимый блок «Самовывоз» и положительныйinventoryLevel. - Не преобразуйте
OutOfStockавтоматически в «заказать невозможно»: текущая реализация допускает заказ при нулевом остатке. - Не обещайте срок поставки товара с нулевым остатком; на карточке нет отдельного стабильного состояния «под заказ» со сроком.
Известное семантическое противоречие
При цене больше нуля и остатке 0 карточка одновременно имеет schema OutOfStock и активные кнопки покупки. Это реальное поведение, а не ошибка документации. До унификации бизнес-статусов агент должен сообщать оба факта отдельно: «локальный остаток 0» и «заказ через сайт доступен».