Files
aiform_prod/docs/SESSION_LOG_2025-11-22.md

61 lines
4.1 KiB
Markdown
Raw Normal View History

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
2025-11-24 13:36:14 +03:00
# Лог сессии работы с 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`, который используется для формирования пути файлов