Commit Graph

82 Commits

Author SHA1 Message Date
Fedor
e114231541 feat: Получение cf_2624 из MySQL при загрузке черновика
- Добавлен сервис CrmMySQLService для подключения к MySQL БД vtiger CRM
- Обновлён get_draft() для прямого SQL запроса к MySQL вместо webservice API
- Получение cf_2624 и всех данных контакта из MySQL
- Обновлена документация и SQL файлы для n8n
- Добавлено логирование для отладки

Преимущества:
- Проще: один SQL запрос вместо цепочки HTTP запросов
- Быстрее: прямой запрос к БД
- Надёжнее: не зависит от webservice API
- Актуальнее: всегда свежие данные из БД
2025-12-03 16:04:25 +03:00
Fedor
b7197e0da5 feat(forms): автоподстановка банков и улучшенная обработка телефона
- Step1Phone: добавлена обработка вставки телефона с автоматической очисткой от +7 и обрезкой до 10 цифр
- Step3Payment: заменён Select на AutoComplete для выбора банка с автоподстановкой
- generateConfirmationFormHTML: заменён select на input с datalist для автоподстановки банков в форме подтверждения
- Добавлены скрытые поля bank_id для сохранения ID банка отдельно от названия
- Добавлены файлы для проверки заявки 226564ce

Улучшения UX:
- Пользователь может вводить название банка вместо прокрутки длинного списка
- Автоматическая фильтрация списка банков при вводе
- Предупреждение при обрезке номера телефона при вставке
2025-12-02 17:12:25 +03:00
Fedor
ee1c4af5c3 feat: добавлен выбор банка для СБП выплат
Frontend:
- Динамическая загрузка 226 банков из NSPK API
- Выбор банка добавлен в Step3Payment (новая заявка)
- Выбор банка добавлен в generateConfirmationFormHTML (редактирование)
- Поля: bank_id (ID из NSPK) и bank_name (название для отображения)

Backend:
- Добавлено поле bank_id в ClaimCreateRequest

API:
- http://212.193.27.93/api/payouts/dictionaries/nspk-banks

Изменения:
- ticket_form/frontend/src/components/form/Step3Payment.tsx
- ticket_form/frontend/src/components/form/generateConfirmationFormHTML.ts
- ticket_form/frontend/src/pages/ClaimForm.tsx
- ticket_form/backend/app/api/models.py
2025-12-02 11:06:15 +03:00
Fedor
834520a045 docs: add session log 2025-12-01 2025-12-01 22:19:31 +03:00
Fedor
da82100b60 feat: UI/UX improvements + CRM integration methods + documents_meta deduplication
Frontend:
- Changed main title to 'Подать обращение о защите прав потребителя'
- Changed browser title to 'Clientright — защита прав потребителей'
- Enhanced draft cards: show problem_description (250 chars), category tag, document progress bar
- Fixed 'Назад' button to always return to draft selection
- Added SSE connection for OCR status updates
- Renamed steps: Вход, Обращение, Документы, Заявление
- Skip 'Проверка полиса' and 'Тип события' steps for new claim flow

Backend:
- Fixed client IP extraction (X-Forwarded-For, X-Real-IP)
- Added problem_title, category, documents_required_list to draft list API
- Fixed documents_uploaded count to count unique field_labels

CRM Webservices:
- Added UpsertContact.php - create/update contacts with tgid support
- Added UpsertAccounts.php - batch upsert offenders by INN
- Added UpsertProject.php - create/update projects with offender mapping

Database:
- Fixed documents_meta duplicates in existing claims
- SQL query for deduplication by field_name provided
2025-12-01 22:18:21 +03:00
Fedor
81acd49fd9 feat(frontend): использование form_draft для формы подтверждения
- StepDraftSelection: кнопка 'Продолжить' активна для draft_docs_complete
- ClaimForm: проверка form_draft при загрузке черновика
- Если есть form_draft — преобразуем в propertyName и показываем форму подтверждения
- Поддержка статуса draft_docs_complete для перехода к подтверждению
2025-11-30 11:45:35 +03:00
Fedor
0f8631bf20 fix(backend): исправлен алгоритм hash для совместимости с JS
- Использован ctypes.c_int32 для эмуляции JS 32-битного сдвига
- Теперь Python hash совпадает с JS hash в n8n
- Кэширование form_draft работает корректно
2025-11-30 11:37:16 +03:00
Fedor
3801bc4949 feat(backend): кэширование form_draft в check-ocr-status
- Добавлена проверка наличия черновика в БД перед запуском RAG
- Если documents_hash совпадает — возвращаем черновик из кэша
- Если черновика нет или он устарел — запускаем RAG workflow
- Добавлен параметр force_refresh для принудительного обновления
- Импортирован db сервис для работы с PostgreSQL
2025-11-30 11:30:36 +03:00
Fedor
985ee23810 feat(n8n): RAG workflow для извлечения данных из документов
- Обновлён Code1: нормализация данных из give_data1 с поддержкой payload.applicant, ai_analysis, wizard_plan
- Обновлён Code6: генерация промптов для RAG (user, project, offenders)
- Добавлена документация по настройке n8n нод для OCR статуса
- Добавлен эндпоинт check-ocr-status в documents.py
- Добавлен лог сессии с полным описанием workflow

Workflow itX62h38faB51y9J успешно извлекает:
- Данные пользователя (ФИО, контакты, адрес)
- Данные проекта (сумма, предмет, даты договора)
- Несколько контрагентов с разными ролями (seller, service_provider)
2025-11-29 19:29:14 +03:00
Fedor
840acca51a feat(documents): дедупликация documents_meta и исправление field_label
- Исправлен N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js: использовать uploads_field_labels[0] вместо [grp]
- Создан SQL_CLAIMSAVE_FIXED_NEW_FLOW_DEDUP.sql с дедупликацией documents_meta
- Создан SQL_CLEANUP_DOCUMENTS_META_DUPLICATES.sql для очистки существующих дубликатов
- Создан полный уникальный индекс idx_document_texts_hash_unique на document_texts(file_hash)
- Добавлен SESSION_LOG_2025-11-28_documents_dedup.md с описанием всех изменений

Fixes:
- field_label теперь корректно отображает 'Переписка' вместо 'group-2'
- documents_meta не накапливает дубликаты при повторных сохранениях
- ON CONFLICT (file_hash) теперь работает для document_texts
2025-11-28 18:16:53 +03:00
Fedor
6c770f0a87 feat(ticket_form): Новая архитектура загрузки документов
- 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
2025-11-26 12:52:54 +03:00
Fedor
0868d37484 Сессия 26.11.2025: Исправления UI Wizard - блоки загрузки, retry аутентификации 2025-11-25 23:42:32 +03:00
Fedor
55c1402d99 Исправлен React.useRef → useRef 2025-11-25 23:38:24 +03:00
Fedor
18fcdecae8 Исправлено дублирование блоков документов (ref для отслеживания созданных) 2025-11-25 23:36:32 +03:00
Fedor
f058ca91ad Убран дублирующий useEffect для создания блоков документов 2025-11-25 23:33:59 +03:00
Fedor
796316d969 Убраны лишние поля для предустановленных документов (description, кнопка Удалить) 2025-11-25 23:31:40 +03:00
Fedor
f3b5771c09 Блоки загрузки документов сразу развёрнуты при загрузке плана 2025-11-25 23:28:36 +03:00
Fedor
2ce0c585ff Чекбокс 'нет документа' перенесён под блок загрузки 2025-11-25 23:26:20 +03:00
Fedor
6cc07b0ba6 Исправлен JSX Fragment для блоков загрузки документов 2025-11-25 23:22:34 +03:00
Fedor
b5478c143f Заменены чекбоксы docs_exist на блоки загрузки файлов 2025-11-25 23:20:33 +03:00
Fedor
be1ac2ed49 Добавлен retry механизм для webservice аутентификации (race condition fix) 2025-11-25 23:02:52 +03:00
Fedor
2b1dca9e92 Автогенерация уникального описания для дополнительных блоков документов 2025-11-25 21:22:11 +03:00
Fedor
99ef902a31 Показываем поле описания для всех блоков если блоков > 1 2025-11-25 21:20:48 +03:00
Fedor
8626c9aff4 Автоматическая нумерация дубликатов field_label при отправке визарда 2025-11-25 21:12:30 +03:00
Fedor
444e5d2b91 Добавлен лог отправляемых метаданных документов (field_label) 2025-11-25 20:53:19 +03:00
Fedor
8f4cff55e9 Добавлен полный лог диалога за 22 ноября 2025 2025-11-25 20:46:59 +03:00
Fedor
52fe013375 feat(ticket_form): unified_id/contact_id передача, исправлен мерж сессии, новая сессия для жалобы
- Добавлены unified_id и contact_id в TicketFormDescriptionRequest
- Исправлен CODE_MERGE_PROJECT_TO_SESSION.js - теперь сохраняются ВСЕ данные из body.other
- Добавлен fallback на получение other из Webhook напрямую
- Генерация новой session_id при создании новой жалобы (сохраняя авторизацию)
- Добавлен SQL_SELECT_CONTACT_WITH_CUSTOM_FIELDS.sql для CRM контактов
- Создан SESSION_LOG_2025-11-25.md с документацией сессии
2025-11-25 20:02:21 +03:00
Fedor
a20a4d0e09 Добавлен лог сессии 2025-11-22 2025-11-22 09:40:14 +03:00
Fedor
486f3619ff Добавлен field_label в результат переименования файлов, исправлена загрузка черновиков, обновлен формат пути S3 с project_name 2025-11-22 09:38:38 +03:00
Fedor
d3ba054027 Исправление архивации проектов: поддержка S3 файлов и документов из связанных сущностей
- Добавлен метод getRelatedDocs() для получения документов из связанных сущностей (контакты, контрагенты)
- Добавлен метод downloadS3File() для скачивания файлов из S3 во временную папку
- Добавлен метод cleanupTempFiles() для очистки временных файлов
- Исправлен getPaths() для корректной обработки S3 файлов (всегда запрашивает s3_bucket/s3_key из БД)
- Исправлен getArchive() для проектов: собирает документы из основной записи и связанных сущностей
- Исправлен путь к vendor/autoload.php (поиск по нескольким путям)
- Исправлено имя временного файла (короткое имя вместо полного пути для избежания 'File name too long')

Результат: архив успешно создается с документами из проекта и связанных сущностей (25 документов для проекта 396447)
2025-11-21 10:23:52 +03:00
Fedor
30a0df9c64 docs: добавлен лог сессии 19.11.2025 2025-11-20 00:39:04 +03:00
Fedor
d2f37faa7b fix: убран claim_id, используется только session_id на ранних этапах
- Убрана проверка claim_id из StepDescription.tsx
- Заменен claim_id на session_id в StepWizardPlan.tsx для SSE подключения
- Убран claim_id из запросов к API и сохранения в Step1Phone
- Обновлен backend для работы с опциональным claim_id
- Добавлена документация по исправлению узла claimsave для первичного черновика
- Добавлены SQL запросы и примеры кода для n8n workflow
2025-11-20 00:38:33 +03:00
Fedor
de011efba9 fix: исправлен конфликт имён переменных в loadDraft (claimId -> finalClaimId)
- Исправлена ошибка ReferenceError при загрузке черновиков
- Переименована локальная переменная claimId в finalClaimId для избежания конфликта с параметром функции
- Обновлена логика извлечения claim_id из разных источников (claim.claim_id, payload.claim_id, body.claim_id, claim.id)
- Добавлен fallback на параметр claimId функции для надёжности
2025-11-19 23:33:52 +03:00
Fedor
cd90b0d58a feat: Добавлен инструмент генерации документов для AI Ассистента
- Создан API create_document_with_text.php для создания DOCX/XLSX/PPTX с текстом от AI
- Поддержка Markdown форматирования (заголовки, жирный, курсив, списки, код)
- Установлен PHPWord для красивого форматирования документов
- Исправлены пути сохранения (crm2/CRM_Active_Files/... без /crm/ в начале)
- Замена пробелов на подчеркивания в именах папок
- Создана документация для AI и разработчиков
- Добавлены API для работы с шаблонами Nextcloud
2025-11-12 19:46:06 +03:00
Fedor
75912e5cfb Добавлена возможность изменения ширины AI Drawer
- Добавлен resize handle (полоска для перетаскивания) слева от drawer
- Реализовано изменение ширины перетаскиванием (от 300px до 50% экрана)
- Сохранение ширины в localStorage
- Автоматическое обновление margin для main-container
- Обработка изменения размера окна браузера
- Скрытие resize handle на мобильных устройствах
2025-11-11 15:24:27 +03:00
Fedor
43e760aad6 Добавлен лог сессии реализации SSE + Redis для AI Drawer 2025-11-11 15:17:06 +03:00
Fedor
1a4653298d Реализован SSE + Redis Pub/Sub для AI Drawer
- Добавлен SSE endpoint (aiassist/ai_sse.php) для real-time получения ответов от n8n
- Обновлен n8n_proxy.php: убран callback, добавлена передача Redis параметров в n8n
- Обновлен ai-drawer-simple.js: переход с polling на SSE с fallback через Redis
- Добавлен check_redis_response.php для прямого чтения из Redis кэша
- Добавлена документация: N8N_REDIS_SETUP.md, N8N_REDIS_FIX.md, AI_DRAWER_REDIS_SSE.md
- Поддержка plain text ответов от n8n (автоматическое определение формата)
- Кэширование ответов в Redis для надежности (TTL 5 минут)
2025-11-11 15:16:27 +03:00
Fedor
f770bd0e43 Fix AI Drawer SSE Redis caching 2025-11-10 22:58:35 +03:00
Fedor
546ce83763 feat: Прямой PHP эндпоинт для привязки документов
Создан api_attach_documents.php:
 Прямой эндпоинт без backend proxy
 URL: https://crm.clientright.ru/api_attach_documents.php
 Принимает массив документов из n8n
 Умная обработка S3 путей (добавляет хост если нужно)
 Поддержка file/file_url, filename/file_name
 Привязка к HelpDesk или Project (зависит от ticket_id)
 Проксирует к upload_documents_to_crm.php
 Полное логирование в logs/api_attach_documents.log

Готово к использованию в n8n!
2025-11-02 19:25:04 +03:00
Fedor
5f4f99245d feat: Добавлена поддержка привязки документов к HelpDesk
Изменения в upload_documents_to_crm.php:
 Добавлена логика привязки к HelpDesk (заявке) если указан ticket_id
 Если ticket_id не указан - привязываем к Project (старая логика)
 Обновлена функция normalizeInputData для передачи ticket_id
 Добавлено логирование привязки к HelpDesk/Project

Использование:
- Передать ticket_id в payload → документ привязывается к HelpDesk
- Не передавать ticket_id → документ привязывается к Project
2025-11-02 19:05:46 +03:00
Fedor
c60d00f563 feat: Создана операция CreateWebClaim для заявок через webservice
-  CreateWebClaim.php: создание заявок (HelpDesk) в vTiger
-  Обязательные поля: title, contact_id, project_id, event_type
-  Опциональные: description, incident_date, transport_number
-  Маппинг event_type на русские категории
-  Возврат: {ticket_id, ticket_number, title, category, status}
-  Зарегистрирована в БД: operationid=52
-  webservice.php: ob_get_clean + ob_start для очистки BOM
-  Логирование в logs/CreateWebClaim.log
2025-11-02 00:09:22 +03:00
Fedor
746367606e fix: CreateWebProject возвращает чистый JSON без BOM
-  CreateWebProject.php: возвращает массив (не json_encode)
-  CreateWebProject.php: ob_start/ob_end_clean для глушения warnings
-  Удалён closing tag ?> и лишние переносы
-  webservice.php: ob_clean() после includes (удаляет BOM)
-  Результат: чистый JSON без BOM и переносов
- 🎯 N8N теперь корректно парсит ответ

Связанные изменения:
- erv_platform: claim_id генерируется только в n8n
2025-11-01 16:53:20 +03:00
Fedor
901259f5b8 chore: Обновлён submodule erv_platform (лог сессии 01.11) 2025-11-01 13:39:23 +03:00
Fedor
f720c14ed1 chore: Обновлён submodule erv_platform 2025-11-01 13:37:03 +03:00
Fedor
c34f7c9bd9 docs: Документация для CreateWebProject 2025-11-01 12:52:41 +03:00
Fedor
af80214990 feat: Добавлена операция CreateWebProject для vTiger webservice
- Упрощённая операция создания проекта: обязательно policy_number + contact_id
- Логика: если проект с таким полисом существует - возвращает ID БЕЗ обновления
- Если не существует - создаёт новый проект
- Поля:
  * projectname: 'ERV {полис} цифровой адвокат'
  * projectstatus: 'модерация'
  * projecttype: 'ерв урегулирование'
  * linktoaccountscontacts: привязка к контакту
  * cf_1994: Заявитель (контрагент 67458)
  * cf_1885: номер полиса
  * cf_1887, cf_1889: периоды страхования (опционально)
- Возвращает JSON: {"project_id": "123", "is_new": true/false}
- Зарегистрировано в БД:
  * vtiger_ws_operation (id: 51)
  * vtiger_ws_operation_parameters (policy_number, contact_id, period_start, period_end)
- Логи: logs/CreateWebProject.log
- Протестировано: проект 396865 создан и повторно найден без дублирования
2025-11-01 12:51:54 +03:00
Fedor
6bedfbc429 📋 Добавлен лог сессии 01.11.2025 2025-11-01 12:23:47 +03:00
Fedor
7e3f0dcede Исправление путей к папкам проектов в Nextcloud + создание файлов из CRM
🔧 Исправления:
- Исправлены пути к папкам проектов: теперь /Documents/Project/{Name}_{Id}
- Исправлена функция openProjectFolder() во всех JS файлах
- Добавлены кнопки создания Word/Excel/PowerPoint из CRM (10 модулей)
- Создание файлов напрямую в S3 с автоиндексацией через Redis
- Исправлена ошибка 'Class Redis not found' (использован Predis)

📁 Изменённые файлы:
- layouts/v7/lib/nextcloud-editor.js
- crm_extensions/nextcloud_editor/js/nextcloud-editor.js
- layouts/v7/lib/nextcloud-editor-v3.js
- crm_extensions/file_storage/api/create_nextcloud_file.php
- layouts/v7/modules/*/DetailViewHeaderTitle.tpl (10 модулей)
- layouts/v7/modules/Documents/*.tpl (кнопки редактирования)

🎯 Результат:
- Кнопка 'Папка в Nextcloud' открывает правильную папку
- Создание файлов работает молниеносно (прямо в S3)
- Redis события публикуются корректно
- OnlyOffice открывается для редактирования

Проект 391552 теперь открывается по правильному пути!
2025-11-01 12:22:12 +03:00
Fedor
3a1635ec4d feat: OnlyOffice Document Server integration with auto-save
- Добавлен s3Path в callbackUrl для сохранения в оригинальный файл
- Исправлено сохранение: теперь файлы обновляются в S3 автоматически
- Отключена проверка SSL в OnlyOffice (rejectUnauthorized: false)
- Разрешены callback на приватные IP адреса
- Добавлено логирование callback в onlyoffice_callback.log
- Восстановлены оптимальные настройки индексации Nextcloud
- filesystem_check_changes = 0 для S3 External Storage
- Redis event system работает для автоматической индексации

Документация:
- ИСПРАВЛЕНИЕ_СОХРАНЕНИЯ_ONLYOFFICE_01_11_2025.md
- ИСПРАВЛЕНИЕ_SSL_ONLYOFFICE_01_11_2025.md
- ВОССТАНОВЛЕНИЕ_ОПТИМИЗАЦИИ_01_11_2025.md
- ONLYOFFICE_НАСТРОЙКИ.md
- ТЕСТИРОВАНИЕ_СОХРАНЕНИЯ_ONLYOFFICE.md
2025-11-01 10:32:51 +03:00
Fedor
3e8c3968a0 docs: Добавлена документация по OnlyOffice Standalone setup 2025-11-01 01:04:08 +03:00