ПОЛИТОТДЕЛ — СОСТОЯНИЕ PHP-СБОРКИ НА 20.10.2026 КАТАЛОГ И РАСЧЁТ 98 физических номеров, 50 исходных ID типов, 52 группы для выбора. Группа определяется исходным ID, классом комфорта, основными и дополнительными местами. ID типа не является ID физического номера. Тип 16598 содержит 10 номеров. Гость выбирает карточку типа; фильтр типа убран из поисковой формы. Админка: карточки, названия для гостей, описания, видимость, до 8 фото на номер (JPEG/PNG/WebP до 6 МБ), обложки, тарифы будней и выходных. Праздничный тариф включается отдельно для ночей внутри заданных дат включительно. Эта включительность относится к тарифу, а не к finishDate обмена остатками. Дети 0–1 года не занимают места; с 2 лет требуется основное или дополнительное. Питание выбирается на оформлении отдельно каждому взрослому и ребёнку от 2 лет: только обед; завтрак + обед; обед + ужин; 3-х разовое. По умолчанию — 3-х разовое. Минимальный пакет — обед, без питания нельзя. Дети младше 2 лет без пакета и платы за питание. Цена каждого пакета едина для всех номеров, за число ночей. Выбор, цена и итог каждого гостя фиксируются в снимке брони. Старые брони сохраняют прежние суммы и правила расчёта; обновление их не пересчитывает. Исходные настройки: обед 850, обед + ужин 1400, 3-х разовое 1600 рублей. Для «Завтрак + обед» цена ещё не задана: её нужно заполнить в админке. Пакет без цены недоступен, остальные продолжают работать. Выходные ночи — пятница и суббота; заезд 17:00, выезд 15:00. Настройки редактируются в админке. 71 карточка уточнена по подтверждённому прайсу, красный текст исключён. 27 номеров (К2, К3, СК №15) пока без цен. Для карточек, уточнённых по прайсу, тариф за весь номер включает основные и дополнительные места. Для остальных расчёт размещения сверх основных мест требует согласования. Вход в админку — логин и пароль установщика, без ChatGPT. Сервер проверяет роль, CSRF и Origin для изменений из браузера. База SQLite, фото и сессии находятся в ../booking-data вне public_html. Обновление сохраняет эти данные. ВХОДЯЩИЙ ОБМЕН С 1С — ГОТОВ В ЭТОЙ СБОРКЕ POST https://booking.politotdel.ru/api/Sync/Quotes companyId: строка "64"; исходный секрет в Authorization и token тела. В коде хранится только SHA-256 токена. Авторизация браузера не нужна. Полный контракт и ответы: 1C-SYNC.txt. roomCategoryId — исходный ID типа. quota — абсолютное число свободных номеров, не прибавление. Пакет обновляет только указанные даты и типы. Ноль закрывает даты. Весь пакет проверяется до атомарной записи. Повтор не увеличивает остаток. Принятое предположение: startDate включительно, finishDate исключительно, как дата выезда. Его необходимо сверить с 1С. Принимаются календарные даты или даты с T00:00:00 без часового смещения, без преобразования часового пояса. Первый непустой принятый пакет включает режим 1С. До него доступность тестовая. Нужна начальная полная выгрузка по всем типам на весь горизонт продаж. При отсутствии остатка хотя бы на одну ночь тип недоступен. Доступность ограничена минимумом остатка по ночам с учётом локальных тестовых заказов и физического каталога. Невозможно забронировать больше квоты. У типов 16588 и 16605 расходятся вместимости вариантов. В режиме 1С эти группы заблокированы до исправления сопоставления, чтобы не использовать общую квоту несколько раз. Полученные данные сохраняются. В админке «Обмен с 1С» видны последнее получение, покрытие дат по типам и последние 10 пакетов. В базе журнал последних 100 успешных пакетов. Тела запросов и секреты не журналируются. Выключение режима 1С возвращает тестовую доступность; следующий непустой пакет снова включает 1С. В контракте нет ID/версии события. Последнее принятое значение заменяет прежнее. 1С должна сохранять порядок отправки и повторов. Желательно в будущем добавить монотонную версию изменения для защиты от позднего старого пакета. При обмене только по изменениям данные не имеют автоматического срока годности: для диагностики используйте дату обновления и периодическую полную сверку. ОЧЕРЕДЬ ЗАКАЗОВ — ДОБАВЛЕНА В ЭТОЙ СБОРКЕ GET /api/Sync/Orders?companyId=64&token=... — опрос со стороны 1С каждые 5 секунд. POST /api/Sync/SetStatusOrder — ответ о создании/отмене. Путь ответа выбран по именам файлов, его нужно сверить с фактическим вызовом обработки 1С. Полный контракт, настройки и ограничения: 1C-ORDERS.txt. Повторены 110 имён полей из примеров. Данные старых гостей и условия возврата не копировались. Цена рассчитывается сервером, выдаётся в рублях. Питание передаётся по vidPitName, vidPitId в новых заявках равен null и не используется. Коды типов и тарифов берутся из админки. Разные пакеты у гостей выбираются и рассчитываются на сайте. Оформление разрешено: выбор каждого гостя, цены и контакты сохраняются в заявке. Её передача в 1С отложена по решению владельца до завершения обработки. В админке и у гостя виден статус «Сохранена на сайте», без подтверждения резервирования. Такая заявка не попадает в Orders; формат передачи не подменяется. Сохраняется обычное временное удержание на 15 минут, затем заявка локально отменяется и остаётся в истории. Отмена вручную также локальная. Автоматической отправки сохранённых заявок после доработки нет. Одинаковое питание передаётся как раньше. По примерам приняты orderStatus 1 (создание), 3 (отмена), syncStatus 0 (создано), 2 (отменено). Другие коды требуют уточнения. Без ответа заказ выдаётся повторно с тем же ID. 1С должна не создавать дубль при повторном companyId/orderId. Поздние и повторные ответы не возвращают отменённый заказ в активное состояние. Новые заявки хранятся отдельно от demo_bookings. Гость вводит фамилию, имя, отчество при наличии, телефон и email. Контакты доступны в очереди 1С и админке; чужие заявки недоступны по ID. Данные карт и паспортов не запрашиваются. Передача изначально выключена до заполнения кодов тарифов и типов и согласования свободного диапазона ID. Старые демо-заказы не выгружаются. На ожидание создания — 15 минут. После принятия — 60 минут без оплаты по умолчанию (15–1440 в админке). Истечение срока запрашивает отмену в 1С. Доставленная заявка не освобождает место до подтверждения отмены. Выключение новых заявок не останавливает обмен существующей очереди. После ответа создания удержание квоты пока остаётся до ручной сверки: Quotes не содержит связи с заказами. Это может занизить доступность. В админке «Сверено с 1С» требует свежие остатки после ответа и проверки заказа в шахматке оператором. Для автоматической сверки нужен дополнительный контракт. ЧТО ОСТАЛОСЬ 1. Позже завершить обработку 1С и передачу питания по гостям. Заполнить цену «Завтрак + обед», актуальные тарифные и внутренние коды типов. Выбрать диапазон orderId без пересечений со старым сайтом. Коды питания не нужны. 2. Подтвердить фактический адрес SetStatusOrder, значения статусов и обёртку ответа Orders. Примеры могут быть журналом 1С, а не точным HTTP-ответом; массив без обёртки тоже поддерживается переключателем в админке. 3. Получить форматы ошибок/отказов 1С и согласовать автоматическую сверку квот. Подтверждение создания должно означать реальный резерв на весь заезд. 4. Подключить PayKeeper после успешного резерва: проверка подписи, суммы, заказа и уникальности платежа; подтверждение в 1С, повторы и сверка при сбоях. 5. Реальные уведомления, чеки и коммерческие правила отмены/возвратов. Ответ 1С о создании сейчас не является подтверждением оплаты. Источник тарифов — админка сайта. 1С предоставляет наличие и должна подтверждать резерв. Сайт фиксирует цены проживания и питания и передаёт согласованный заказ в 1С. Учёт отличий от внутренних тарифов 1С нужно согласовать. ПРОВЕРКИ И ДЕМОНСТРАЦИОННОЕ ОФОРМЛЕНИЕ Старые демонстрационные заказы сохраняют снимок цен. Удержание — 15 минут; подтверждение оплаты имитируется и не списывает деньги. Изменившиеся цена и квота проверяются заново. Создание заказа и проверка свободного места выполняются в одной транзакции. Повторный запрос с тем же ключом не создаёт вторую бронь. Заказы привязаны к текущему браузеру; администратор видит все тестовые заказы. PHP 8.2: 33 проверки основной системы, 29 проверок остатков, 34 проверки заказов и 29 проверок питания по гостям, обновления базы и отложенной передачи. Отдельно проверены 11 параллельных запросов в 3 PHP-процесса при квоте 3 — созданы только 3 заказа. Проверены импорт, сохранение старых данных при обновлении, авторизация, расчёт, фото, частичные обновления остатков, повторы, нули, границы дат и откат ошибок. Браузерная визуальная проверка, Apache на vh410, отправка из настоящей 1С и реальные платежи ещё не проверены. Архив загружает на хостинг пользователь.