# Добавление cf_2624 в событие ocr_status ready ## ✅ Да, правильно! Событие `ocr_status` с `status: "ready"` должно содержать поле `cf_2624` и сохраняться в черновик. ## Формат события в Redis **Канал:** `ocr_events:sess_5fc7cdd1-a848-4e92-aed4-3ee4bfb19b4c` **Событие:** ```json { "event_type": "ocr_status", "status": "ready", "claim_id": "ef853bac-f54b-46aa-adf8-f0c9c0cd76bc", "message": "Заявление сформировано", "timestamp": "2025-12-03T12:44:12.347Z", "cf_2624": "0" } ``` ## Что происходит ### 1. n8n workflow публикует событие После сохранения черновика (после `claimsave`) n8n публикует событие в Redis канал `ocr_events:{session_id}` с полем `cf_2624`. **Где добавить:** После ноды `claimsave`, перед публикацией в Redis. **См. подробности:** `ticket_form/docs/N8N_ADD_CF_2624_TO_OCR_STATUS_EVENT.md` --- ### 2. Backend обрабатывает событие Backend получает событие из Redis и: - ✅ Загружает `form_draft` из PostgreSQL - ✅ **Сохраняет `cf_2624` в черновик** (в `payload.cf_2624`) - ✅ Отправляет событие на фронтенд через SSE **Файл:** `ticket_form/backend/app/api/events.py` (строки 218-273) --- ### 3. Сохранение в черновик `cf_2624` сохраняется в таблицу `clpr_claims` в поле `payload.cf_2624`: ```sql UPDATE clpr_claims SET payload = jsonb_set( COALESCE(payload, '{}'::jsonb), '{cf_2624}', '"0"'::jsonb -- или '"1"' ) WHERE id::text = $1 OR payload->>'claim_id' = $1; ``` --- ## Порядок работы 1. **n8n workflow:** - `CreateWebContacКлиентправ` → получает `cf_2624` из CRM - `claimsave` → сохраняет черновик - `Code: Prepare OCR Status Event` → формирует событие с `cf_2624` - `HTTP Request` или `Redis Publish` → публикует в `ocr_events:{session_id}` 2. **Backend:** - Получает событие из Redis - Сохраняет `cf_2624` в черновик - Загружает `form_draft` из PostgreSQL - Отправляет на фронтенд через SSE 3. **Фронтенд:** - Получает событие через SSE - Использует `cf_2624` для блокировки полей --- ## Проверка 1. ✅ Событие публикуется в `ocr_events:{session_id}` с `cf_2624` 2. ✅ Backend сохраняет `cf_2624` в черновик (`payload.cf_2624`) 3. ✅ При загрузке черновика `cf_2624` доступен в `payload.cf_2624` --- ## SQL для проверки ```sql -- Проверить, что cf_2624 сохранён в черновик SELECT id, payload->>'claim_id' as claim_id, payload->>'cf_2624' as cf_2624, updated_at FROM clpr_claims WHERE payload->>'claim_id' = 'ef853bac-f54b-46aa-adf8-f0c9c0cd76bc' ORDER BY updated_at DESC LIMIT 1; ``` --- ## Итого ✅ **Да, правильно!** Событие `ocr_status` с `status: "ready"` должно содержать `cf_2624`, и это значение будет: - Публиковаться в Redis канал `ocr_events:{session_id}` - Сохраняться в черновик в `payload.cf_2624` - Использоваться для блокировки полей на фронтенде