- StepDocumentsNew.tsx: поэкранная загрузка документов - StepWaitingClaim.tsx: ожидание формирования заявления с SSE - StepDraftSelection.tsx: поддержка новых статусов черновиков - documents.py: API для загрузки документов - NEW_FLOW_ARCHITECTURE.md: документация новой архитектуры Флоу: Description → Documents → Waiting → Claim Review → SMS Статусы: draft_new, draft_docs_progress, draft_docs_complete, draft_claim_ready
193 lines
11 KiB
Markdown
193 lines
11 KiB
Markdown
# Лог диалога - 22 ноября 2025
|
||
|
||
## Хронология диалога
|
||
|
||
### Начало работы
|
||
Пользователь начал работу с исправлениями в `ticket_form`, связанными с обработкой черновиков и прикреплением документов к проектам.
|
||
|
||
### 1. Проблема с извлечением данных из payload
|
||
|
||
**Проблема:** В `payload` данные вложены в `body` (`payload.body.wizard_plan`, `payload.body.answers`), а не в `payload` напрямую.
|
||
|
||
**Решение:**
|
||
- Исправлено извлечение данных из `payload.body` для telegram-черновиков
|
||
- Добавлен парсинг JSON-строк в `wizard_plan` и `answers`
|
||
- Использование `claim.id` (UUID) как `claim_id`, если `claim_id` null
|
||
- Логика перехода: если есть `wizard_plan` → переходим к StepWizardPlan (шаг 2)
|
||
|
||
**Файлы изменены:**
|
||
- `ticket_form/frontend/src/pages/ClaimForm.tsx`
|
||
|
||
### 2. Ошибка при загрузке черновика
|
||
|
||
**Ошибка:** `ReferenceError: Cannot access 'claimId2' before initialization` в `ClaimForm.tsx:160:50`
|
||
|
||
**Причина:** Конфликт имён переменных - локальная переменная `claimId` конфликтовала с параметром функции.
|
||
|
||
**Решение:** Переименована локальная переменная `claimId` в `finalClaimId` внутри функции `loadDraft`.
|
||
|
||
**Файлы изменены:**
|
||
- `ticket_form/frontend/src/pages/ClaimForm.tsx`
|
||
|
||
### 3. Работа с n8n workflow `b4K4u851b4JFivyD` (ticket_form:description)
|
||
|
||
**Задача:** Настроить ноду `claimsave` для сохранения первичного черновика жалобы после построения wizard plan.
|
||
|
||
**Требования:**
|
||
1. Сохранить черновик сразу после первичного построения wizard plan
|
||
2. Включить данные из агентов (агент1 и агент13)
|
||
3. Учесть `session_token` и `unified_id`
|
||
4. Сохранить: `wizard_plan`, `problem_description`, `answers_prefill`, `coverage_report`, AI agent outputs
|
||
|
||
**Документация создана:**
|
||
- `ticket_form/docs/CLAIMSAVE_PRIMARY_DRAFT_FIX.md`
|
||
- `ticket_form/docs/SQL_CLAIMSAVE_PRIMARY_DRAFT.sql`
|
||
|
||
### 4. Ошибка в n8n Code node (Code4)
|
||
|
||
**Ошибка:** `ReferenceError: session is not defined [line 34]`
|
||
|
||
**Проблема:** В коде использовалась переменная `session`, которая не была определена.
|
||
|
||
**Решение:** Исправлен код в `CODE4_FIXED.js`:
|
||
- Заменено `const sessionToken = $('Redis Trigger').first().json.message.claim_id` на более надёжную логику
|
||
- `sessionToken` теперь берётся из `Edit Fields11` или `Redis Trigger`, с fallback на временный ключ
|
||
- `redisKey` теперь использует `sessionToken` вместо `claim_id`
|
||
|
||
**Файлы:**
|
||
- `ticket_form/docs/CODE4_FIXED.js`
|
||
|
||
### 5. Исправление CreateWebContact ноды
|
||
|
||
**Задача:** Убрать генерацию `claim_id`, добавить `unified_id` из ноды `user_get`, убрать `voucher` и `event_type` из `redis_value`.
|
||
|
||
**Решение:** Обновлён код `CODE_CREATE_WEB_CONTACT_FINAL.js`:
|
||
- Убрана генерация `claim_id`
|
||
- Добавлен `unified_id` из ноды `user_get`
|
||
- Убраны `voucher` и `event_type` из `sessionData`
|
||
- `redis_key` использует `session_id`
|
||
|
||
**Файлы:**
|
||
- `ticket_form/docs/CODE_CREATE_WEB_CONTACT_FIXED.js`
|
||
|
||
### 6. Ошибка "Не удалось определить номер обращения"
|
||
|
||
**Проблема:** При создании нового обращения появлялась ошибка "Не удалось определить номер обращения. Вернитесь на шаг с телефоном."
|
||
|
||
**Решение:** Принято решение использовать только `session_id` на ранних этапах, убрать зависимость от `claim_id`.
|
||
|
||
**Изменения:**
|
||
- `ticket_form/frontend/src/components/form/StepDescription.tsx` - убрана проверка `claim_id`
|
||
- `ticket_form/frontend/src/components/form/Step1Phone.tsx` - убран `claim_id` из сохраняемых данных
|
||
- `ticket_form/frontend/src/components/form/StepWizardPlan.tsx` - изменён EventSource на использование `session_id`
|
||
- `ticket_form/backend/app/api/claims.py` - обновлено логирование для опционального `claim_id`
|
||
|
||
### 7. Модификация api_attach_documents.php
|
||
|
||
**Задача:** Вернуть `project_name` в дополнение к `project_id`.
|
||
|
||
**Решение:** Обновлён `include/Webservices/CreateClientProject.php`:
|
||
- Функция теперь возвращает `project_name` вместе с `project_id` и `is_new`
|
||
- Добавлен SQL запрос для получения `project_name`, если проект найден (не новый)
|
||
|
||
**Файлы:**
|
||
- `include/Webservices/CreateClientProject.php`
|
||
|
||
### 8. Обновление S3 пути для файлов
|
||
|
||
**Задача:** Изменить формат пути S3 на `/f9825c87-.../crm2/CRM_Active_Files/Documents/Project/{project_name}_{project_id}/{doc_id}__{slug}.{ext}`
|
||
|
||
**Решение:** Обновлён `CODE_FILES_RENAME_FIXED.js`:
|
||
- Добавлено получение `project_id` и `project_name` из нескольких источников
|
||
- Реализована санитизация `projectFolder` для удаления недопустимых символов
|
||
- Обновлена генерация `slug` с приоритетом: `field_label` > `field_name` > `description`
|
||
- Добавлен `field_label` в `renames` и `finalDocumentsMeta`
|
||
|
||
**Файлы:**
|
||
- `ticket_form/docs/CODE_FILES_RENAME_FIXED.js`
|
||
|
||
### 9. Исправление slug для названий документов
|
||
|
||
**Задача:** Использовать название поля из формы визарда вместо generic "upload-contr".
|
||
|
||
**Решение:**
|
||
- В `StepWizardPlan.tsx` добавлена отправка `uploads_field_labels[i]` (содержит `block.docLabel`)
|
||
- В `CODE_FILES_RENAME_FIXED.js` обновлена генерация `slug` с использованием `field_label`
|
||
|
||
**Файлы:**
|
||
- `ticket_form/frontend/src/components/form/StepWizardPlan.tsx`
|
||
- `ticket_form/docs/CODE_FILES_RENAME_FIXED.js`
|
||
|
||
### 10. Ошибка "Multiple matching items" в Edit Fields13
|
||
|
||
**Ошибка:** `Multiple matching items for item [0] [item 0]` в ноде "Edit Fields13".
|
||
|
||
**Решение:** Обновлены выражения в "Edit Fields13":
|
||
- Добавлен `.first()` для нод, возвращающих один item (`Edit Fields6`, `Code5`)
|
||
- Исправлено обращение к `Split Out2` (используется `$json.to` вместо `$('Split Out2').item.json.to`)
|
||
|
||
### 11. Исправление CODE_MERGE_PROJECT_TO_SESSION
|
||
|
||
**Ошибка:** `TypeError: Cannot assign to read only property 'name' of object 'Error: Referenced node doesn't exist'`
|
||
|
||
**Решение:** Заменён оператор `||` для доступа к ноде на `try-catch` блоки для безопасной проверки существования ноды.
|
||
|
||
**Файлы:**
|
||
- `ticket_form/docs/CODE_MERGE_PROJECT_TO_SESSION.js`
|
||
|
||
### 12. Финальные исправления и коммит
|
||
|
||
**Выполнено:**
|
||
- Исправлена загрузка черновиков (упрощена логика перехода)
|
||
- Убрано отображение `claim_id` в заголовке черновика
|
||
- Обновлён формат пути S3 с `project_name`
|
||
- Добавлен `field_label` в результат переименования файлов
|
||
|
||
**Git коммиты:**
|
||
- `486f3619`: "Добавлен field_label в результат переименования файлов, исправлена загрузка черновиков, обновлен формат пути S3 с project_name"
|
||
- `a20a4d0e`: "Добавлен лог сессии 2025-11-22"
|
||
|
||
## Итоговые изменения
|
||
|
||
### Frontend
|
||
1. `ClaimForm.tsx` - исправлена загрузка черновиков, убрана зависимость от `claim_id`
|
||
2. `StepDescription.tsx` - убрана проверка `claim_id`
|
||
3. `Step1Phone.tsx` - убран `claim_id` из сохраняемых данных
|
||
4. `StepWizardPlan.tsx` - добавлена отправка `uploads_field_labels`, изменён EventSource на `session_id`
|
||
5. `StepDraftSelection.tsx` - убран `claim_id` из заголовка черновика
|
||
|
||
### Backend
|
||
1. `claims.py` - обновлено логирование для опционального `claim_id`
|
||
2. `CreateClientProject.php` - добавлен возврат `project_name`
|
||
|
||
### n8n Workflows
|
||
1. Code4 - исправлена ошибка с `session is not defined`
|
||
2. CreateWebContact - убрана генерация `claim_id`, добавлен `unified_id`
|
||
3. CODE_FILES_RENAME_FIXED - обновлён формат пути S3, добавлен `field_label`
|
||
4. CODE_MERGE_PROJECT_TO_SESSION - безопасная проверка существования ноды
|
||
5. Edit Fields13 - исправлена ошибка "Multiple matching items"
|
||
|
||
### Документация
|
||
1. `CLAIMSAVE_PRIMARY_DRAFT_FIX.md` - описание сохранения первичного черновика
|
||
2. `SQL_CLAIMSAVE_PRIMARY_DRAFT.sql` - SQL запрос для сохранения черновика
|
||
3. `CODE4_FIXED.js` - исправленный код для Code4
|
||
4. `CODE_CREATE_WEB_CONTACT_FIXED.js` - исправленный код для CreateWebContact
|
||
5. `CODE_FILES_RENAME_FIXED.js` - обновлённый код для переименования файлов
|
||
6. `CODE_MERGE_PROJECT_TO_SESSION.js` - код для мержа данных проекта
|
||
|
||
## Статистика
|
||
|
||
- **Изменено файлов:** 212
|
||
- **Добавлено строк:** +6706
|
||
- **Удалено строк:** -125
|
||
- **Git коммитов:** 2
|
||
|
||
## Важные замечания
|
||
|
||
1. На ранних этапах используется только `session_id`, `claim_id` генерируется позже в workflow
|
||
2. `project_name` теперь используется в пути S3 для лучшей организации файлов
|
||
3. `field_label` из формы визарда используется для генерации slug файлов
|
||
4. Все ноды n8n должны безопасно обрабатывать отсутствие данных
|
||
|
||
|