# Changelog ## [sync2 vibe] — 2026-03-23 ### Новое: «Служебный статус в интре» — двусторонняя синхронизация #### Колонка в таблице заявок - Добавлена новая колонка **«Служ. статус в интре»** (`servstatus`) — отображает значение дополнительного поля `addfield_2f6eaa2vnutrennij_statusSingleSelect` из IntraDesk - Колонка интерактивная: при наведении открывается выпадающий пикер с полным списком внутренних статусов (аналогично колонке «Статус») - Текущее значение подсвечивается цветом соответствующего внутреннего статуса (если совпадает по label) - Есть пункт «— очистить» для сброса значения в IntraDesk #### Синхронизация IntraDesk → наш статус (входящая) - При каждом обновлении задачи в ходе инкрементального или полного сканирования проверяется значение доп. поля - Если значение доп. поля совпадает с label одного из активных внутренних статусов — этот статус автоматически выставляется через `setExclusiveMark` (без участия пользователя) - Управляется настройкой `sync_addfield_status` (по умолчанию выключена) #### Синхронизация наш статус → IntraDesk (исходящая) - При смене внутреннего статуса через `POST /api/marks` значение нового статуса (его `label`) автоматически записывается в доп. поле IntraDesk через `PUT /changes/v3/tasks/` - Если статус снимается без замены — доп. поле очищается (`null`) - Работает только при включённом `sync_addfield_status` #### Прямое редактирование из UI - Новый эндпоинт `POST /api/tasks/:taskId/intra-addfield` — позволяет записать произвольное значение в доп. поле IntraDesk напрямую, независимо от внутреннего статуса - После успешной записи локальный кеш задачи обновляется немедленно (без ожидания следующего сканирования) - SSE-событие `intra_addfield` рассылается всем подключённым клиентам — обновление отображается в реальном времени на других вкладках/у других пользователей - Тост-уведомление показывается другим пользователям при изменении #### Настройки - Новая настройка **«Синхронизировать служебный статус с доп. полем IntraDesk (двусторонняя)»** в панели администратора → Status Automation - Ключ: `sync_addfield_status`, булева строка `'0'`/`'1'` #### Запуск локально - Добавлен `docker-compose.local.yml` — compose-файл для локальной сборки из исходников (вместо пулла готового образа из registry), данные хранятся в `./data` - Добавлен `start-local.bat` — батник для запуска локального Docker одним двойным кликом --- ### Затронутые файлы | Файл | Изменения | |---|---| | `refresh-service.js` | Константа алиаса доп. поля; извлечение `_addfield_status` при fetch; `updateIntraAdditionalField()`; inbound-синхронизация в `applyStatusAutomationForChangedTasks`; `sync_addfield_status` в `normalizeSettings` | | `server.js` | Outbound-вызов после `POST /api/marks`; новый эндпоинт `POST /api/tasks/:taskId/intra-addfield`; настройка `sync_addfield_status` в `ALLOWED_SETTINGS` и `GET/POST /api/settings` | | `public/js/ui.js` | Колонка `servstatus` в `ALL_COLS`; функции `_addfieldBadgeHtml`, `intraAddfieldPickerHtml`, `setIntraAddfield` | | `public/js/sse.js` | Обработчик события `intra_addfield` | | `public/js/auth.js` | Загрузка/сохранение чекбокса `sync_addfield_status` | | `public/index.html` | Чекбокс настройки в панели Status Automation | | `docker-compose.local.yml` | Новый файл — compose для локальной разработки | | `start-local.bat` | Новый файл — скрипт запуска локального Docker |