feat: Add claim plan confirmation flow via Redis SSE

Problem:
- After wizard form submission, need to wait for claim data from n8n
- Claim data comes via Redis channel claim:plan:{session_token}
- Need to display confirmation form with claim data

Solution:
1. Backend: Added SSE endpoint /api/v1/claim-plan/{session_token}
   - Subscribes to Redis channel claim:plan:{session_token}
   - Streams claim data from n8n to frontend
   - Handles timeouts and errors gracefully

2. Frontend: Added subscription to claim:plan channel
   - StepWizardPlan: After form submission, subscribes to SSE
   - Waits for claim_plan_ready event
   - Shows loading message while waiting
   - On success: saves claimPlanData and shows confirmation step

3. New component: StepClaimConfirmation
   - Displays claim confirmation form in iframe
   - Receives claimPlanData from parent
   - Generates HTML form (placeholder - should call n8n for real HTML)
   - Handles confirmation/cancellation via postMessage

4. ClaimForm: Added conditional step for confirmation
   - Shows StepClaimConfirmation when showClaimConfirmation=true
   - Step appears after StepWizardPlan
   - Only visible when claimPlanData is available

Flow:
1. User fills wizard form → submits
2. Form data sent to n8n via /api/v1/claims/wizard
3. Frontend subscribes to SSE /api/v1/claim-plan/{session_token}
4. n8n processes data → publishes to Redis claim:plan:{session_token}
5. Backend receives → streams to frontend via SSE
6. Frontend receives → shows StepClaimConfirmation
7. User confirms → proceeds to next step

Files:
- backend/app/api/events.py: Added stream_claim_plan endpoint
- frontend/src/components/form/StepWizardPlan.tsx: Added subscribeToClaimPlan
- frontend/src/components/form/StepClaimConfirmation.tsx: New component
- frontend/src/pages/ClaimForm.tsx: Added confirmation step to steps array
This commit is contained in:
AI Assistant
2025-11-24 13:36:14 +03:00
parent 40ad46c026
commit 0978e485dc
34 changed files with 870 additions and 20 deletions

View File

@@ -0,0 +1,60 @@
# Лог сессии работы с ticket_form - 22 ноября 2025
## Основные изменения
### 1. Исправлена загрузка черновиков
- Добавлено расширенное логирование в `checkDrafts` (ClaimForm.tsx)
- Упрощена логика перехода к шагу выбора черновика (заменён двойной `requestAnimationFrame` на `setTimeout(100)`)
- Убрано отображение `claim_id` в заголовке черновика (теперь просто "Черновик")
### 2. Обновлен формат пути файлов в S3
- Изменён формат с `{project_id}_Клиентправ` на `{project_name}_{project_id}`
- `project_name` берётся из Redis (например, "ERV_6381_КлиентПрав")
- Итоговый путь: `/f9825c87-.../crm2/CRM_Active_Files/Documents/Project/ERV_6381_КлиентПрав_398957/{doc_id}__{slug}.{ext}`
- Файл: `ticket_form/docs/CODE_FILES_RENAME_FIXED.js`
### 3. Добавлено использование названия поля из формы визарда
- В `StepWizardPlan.tsx` добавлена отправка `uploads_field_labels[i]` (содержит `block.docLabel`)
- В `CODE_FILES_RENAME_FIXED.js` добавлен `field_label` в результат (`renames` и `documents_meta`)
- Приоритет для slug: `field_label` > `field_name` > `description` > `group_index`
- Теперь вместо `upload-contr` будет использоваться название поля (например, "Оглавление" → `oglavlenie`)
### 4. Обновлена операция CreateClientProject
- Теперь возвращает не только `project_id`, но и `project_name`
- `project_name` сохраняется в Redis сессии
- Файл: `include/Webservices/CreateClientProject.php`
### 5. Исправлена нода Edit Fields13 в n8n
- Добавлен `.first()` для обращения к нодам, возвращающим один item
- Исправлено обращение к Split Out2 (используется `$json.to` вместо `$('Split Out2').item.json.to`)
### 6. Добавлен код для мержа данных проекта в сессию
- Файл: `ticket_form/docs/CODE_MERGE_PROJECT_TO_SESSION.js`
- Безопасная проверка существования ноды `CreateClientProject`
- Добавлен `project_name` в Redis сессию
## Изменённые файлы
### Frontend
- `ticket_form/frontend/src/pages/ClaimForm.tsx` - исправлена загрузка черновиков
- `ticket_form/frontend/src/components/form/StepDraftSelection.tsx` - убран claim_id из заголовка
- `ticket_form/frontend/src/components/form/StepWizardPlan.tsx` - добавлена отправка `uploads_field_labels`
### Backend
- `include/Webservices/CreateClientProject.php` - добавлен возврат `project_name`
### Документация
- `ticket_form/docs/CODE_FILES_RENAME_FIXED.js` - обновлён формат пути, добавлен `field_label`
- `ticket_form/docs/CODE_MERGE_PROJECT_TO_SESSION.js` - новый файл для мержа данных проекта
## Git коммит
- Commit: `486f3619`
- Message: "Добавлен field_label в результат переименования файлов, исправлена загрузка черновиков, обновлен формат пути S3 с project_name"
- Изменено: 212 файлов, +6706 строк, -125 строк
## Важные замечания
1. **Нода editfiletobd1 в n8n** должна добавлять `field_label` из `uploads_field_labels[i]` в каждый элемент `filesRows`
2. **Нода Edit Fields13** должна использовать `.first()` для нод, возвращающих один item
3. **Операция CreateClientProject** теперь возвращает `project_name`, который используется для формирования пути файлов