---
title: "Как AI-агенту интерпретировать цену, наличие и возможность заказа"
description: "Правила интерпретации цены, локального остатка, schema.org availability и фактической возможности заказа."
canonical: "https://vesremont.com/llms/availability.md"
last_modified: "2026-10-12"
---
# Наличие и возможность заказа

> Индекс документации: https://vesremont.com/llms.txt

## Связь этого раздела с задачей

**Задача:** Различить возможность заказа, складской остаток и самовывоз сегодня.

**Что нужно на входе:** Свежий ответ товара или карточка; у HTML и API различаются складские показатели и денежные единицы.

**Результат:** Отдельные факты о цене, наличии и возможности заказа без выдуманного срока поставки.

Другая цель? [Карта всех задач и режимов](https://vesremont.com/llms/capabilities.md). Права личного доступа — [auth.md](https://vesremont.com/auth.md); это не обязательный шаг для публичного чтения.

Следующий раздел по теме: [Данные карточки товара](https://vesremont.com/llms/products.md) — перечитать динамические данные · [Доставка и оплата](https://vesremont.com/llms/delivery.md) — проверить условия получения · [Корзина и оформление](https://vesremont.com/llms/purchase.md) — передать подборку или подготовить checkout.

## Значения в REST и UCP

REST `stock.total` и `stock.local` суммируют доступные остатки всей складской сети магазина. Это не тот же сигнал, что остаток первого склада в HTML-карточке, и не обещание самовывоза сегодня. Сроки доставки со складов отдельно не объявлены. В REST цена выражена в рублях; в UCP — в целых копейках с `currency: RUB`. Неизвестная цена — `null`, не ноль. Возможность заказа и актуальный итог проверяются сервером при работе с корзиной и checkout. [Public API](https://vesremont.com/llms/api.md).

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` отражает возможность заказа по положительной цене и не выводится из остатка.

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

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

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

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