Вопросы к АСБ (ihmanagement) по интеграции бронирования

Контур: тест test.ihmanagement.ru/webservice/api/res/v1, логин Provotorov_API · 17.07.2026 (исправленная версия).

Исправлено: часть прежних пунктов оказалась описанной в документации (правка заказа PUT /letters, поля и фильтры quotes) — убраны из вопросов и перенесены в раздел «Что уже выяснили». Ниже — только реальные пробелы.
⬇ Скачать в .docx
0 Что уже выяснили1 Коды ошибок2 Квоты false 3 catplacefl/oneplacefl4 Правка/фейк5 calcsum 6 Оплата7 СправочныеПриоритеты

0. Что уже выяснили из доки/проб (НЕ вопросы — для контекста)

1. Справочник кодов ошибок setletter/PUT (ref ≤ 0) — не описан

Наблюдение. В доке нет списка кодов ошибок (только поле «ref: код ошибки»). Встретили:

refmes (дословно)наша догадка
-2the check-in date cannot be less than the current oneдата заезда в прошлом
-21Quota is empty...нет квоты на весь номер
-35Booking of one main seat is not available!нельзя продать одно место
-36 / -37the check-in/out time is not equal to the time in the accommodation programвремя заезда/выезда ≠ программе
-31max days 0срок / минимум дней?
-32(программа недоступна на период)?
-3нет денег на счёте агента (letter_set_status_sold)баланс агента
Вопросы:
  1. Полный список ref-кодов (setletter, PUT /letters, letter_set_status_sold) с расшифровкой и рекомендацией по обработке.
  2. Подтвердите догадки (особенно -31, -32).
  3. Стабилен ли код ref или ориентироваться на текст mes? Локализуется ли mes?

2. quotes возвращает false по части объектов

Наблюдение. Прогон по 169 объектам: 58 отдают квоту (50 с местами), 111 → false. Объект 1456 («Кристалл Уют») — false при ЛЮБЫХ параметрах (datein/length/catcod, GET и POST); контрольный объект 1 с теми же параметрами отдаёт список. Формат запроса верный — дело в объекте.

Вопросы:
  1. Что означает false: аллотмент не заведён в контуре / нет договора у логина / квота не ведётся / иное?
  2. На боевом контуре по этим объектам квота будет? Нужно ли отдельно заводить доступ?
  3. Если quotes=false — бронировать нельзя, или квота просто не публикуется, но setletter может пройти? (по таким объектам мы видели -21/-35)

3. catplacefl не описан + oneplacefl расходится с поведением

Что в доке: oneplacefl (категория) = «Возможность размещения 1 гостя во весь номер, 1/0». catplacefl (запрос) — описания нет, только "catplacefl": 0.

Что показали пробы (объект 1, concod=1, живой setletter с авто-отменой):

КатегорияЗапросРезультат
catcod 5, oneplacefl=11 гость, catplacefl=0✅ 59 850 (цена одного места)
catcod 5, oneplacefl=11 гость, catplacefl=1✅ 89 950 (≈1.5× места)
catcod 5, oneplacefl=12 гостя, catplacefl=0✅ 119 700 (2× места)
catcod 9, oneplacefl=01 гость, catplacefl=0-35 «one main seat not available»
catcod 9, oneplacefl=01 гость, catplacefl=1✅ 105 700 (выкуп прошёл ДАЖЕ при oneplacefl=0)
catcod 9, oneplacefl=02 гостя, catplacefl=0✅ 140 700

Расхождение: дока про oneplacefl звучит как «выкуп всего номера», но выкуп идёт через catplacefl=1 и НЕ зависит от oneplacefl (прошёл и при 0). А oneplacefl=1 реально разрешает продать одно место (подселение, по цене места), не «занять весь номер».

Вопросы:
  1. Официальное определение catplacefl и все значения. Верно ли, что 1 = выкуп всего номера?
  2. Точный смысл oneplacefl: «продать одно место (подселение)» или «выкупить весь номер»?
  3. Подтвердите: выкуп (catplacefl=1) работает независимо от oneplacefl?
  4. Откуда коэффициент выкупа/одноместного (~1.5×)? Настраивается per-объект / per-договор?
  5. oneplacedates («ограничения по подселению») — когда подселение запрещено или разрешено?
  6. Как в API запросить: (а) одно место с подселением; (б) выкуп для одного; (в) занять все места? Подтвердите модель.

4. Правка (PUT /letters) и «фейк-бронь» — политика и границы

Наблюдение. Правка работает (раздел 0). Значит технически можно: забронировать заглушками (setletter), увидеть результат проверки квоты, затем поправить на реальные данные (PUT) или отменить (DELETE). ФИО-заглушки setletter принимает.

Вопросы:
  1. Какие поля можно менять через PUT /letters (даты, программу, состав, номер) и в каких статусах (только «Забронирован», или и «Продан»/«Оплачен»)?
  2. Допустимо ли по вашим правилам бронировать заглушками ради проверки наличия и затем править/отменять? Есть ли антифрод/лимит?
  3. Есть ли отдельный механизм удержания места (hold) без полноценного заказа?

5. calcsum — разбивка итога

Наблюдение. Цена «за место» (2 гостя = 2× одного), calcsum отдаёт только суммарный price.

Вопрос:
  1. Можно ли из calcsum получить разбивку итога (по гостю / по услугам лечения-питания), или только суммарный price? Как учитываются pricedop и детское доп. место?

6. Оплата и статусы заказа

Наблюдение. На тесте платёжка не подключена (paysysurl:"", paysysid:0). Статусы: Забронирован(1)→Продан(2)→Оплачен(3)→Аннулирован(4). letter_set_status_sold-3 «нет денег на счёте агента».

Вопросы:
  1. Как подключается онлайн-оплата (paysysurl)? Есть ли callback/webhook о факте оплаты?
  2. Модель агентского счёта: пополнение, работа letter_set_status_sold, переходы статусов.
  3. Возвраты / отмена оплаченных — механизм и сроки?
  4. Ваучер (url_let_docs) доступен сразу после брони (Забронирован) — это ожидаемо или должен быть только после оплаты?

7. Справочные

  1. Признак профсоюзной путёвки: в programms явного флага нет — определяем по слову «Профсоюзная». Есть ли отдельное поле?
  2. Справочник договоров (concod → название/тип/условия)? Сейчас приходит concod + connr, без типа.
  3. check_price_by_object — как использовать для инкрементального синка (что в «изменённых», что в last_check_date)?

Приоритетные (блокируют продукт)