Commit Graph

84 Commits

Author SHA1 Message Date
AI Assistant
4c8fda5f55 Добавлено логирование для отладки черновиков
- Добавлены логи в frontend (ClaimForm.tsx) для отслеживания unified_id и запросов к API
- Добавлены логи в backend (claims.py) для отладки SQL запросов
- Создан лог сессии с описанием проблемы и текущего состояния
- Проблема: API возвращает 0 черновиков, хотя в БД есть данные
2025-11-19 18:46:48 +03:00
AI Assistant
cbab1c0fe6 feat(ticket_form): add wizard plan step and dev cache 2025-11-15 18:48:15 +03:00
AI Assistant
3306d01e0d Ticket form: new stack + description step 2025-11-14 19:06:36 +03:00
AI Assistant
3d121054ab docs: Финальная документация с прямым PHP эндпоинтом 2025-11-02 19:25:29 +03:00
AI Assistant
ec44f43ca0 docs: Добавлена краткая шпаргалка для быстрого старта 2025-11-02 19:21:37 +03:00
AI Assistant
efb0cd6f05 feat: Поддержка batch-обработки документов и умного парсинга S3 путей
Изменения в /api/n8n/documents/attach:
 Принимает массив документов (не одиночный объект)
 Умная обработка S3 путей:
   - /bucket/path → https://s3.twcstorage.ru/bucket/path
   - bucket/path → https://s3.twcstorage.ru/bucket/path
   - https://... → без изменений
 Поддержка обоих форматов полей:
   - file / file_url
   - filename / file_name
 Batch-обработка с детальной статистикой
 Возвращает результаты для каждого документа отдельно
 Логирование успешных и неуспешных операций

Формат ответа:
{
  total_processed: N,
  successful: M,
  failed: K,
  results: [...],
  errors: [...]
}

Тесты:
- TEST_REAL_DATA.sh - тест с реальными данными из n8n
- TEST_QUICK.sh - быстрые тесты

Документация обновлена с примерами batch-обработки
2025-11-02 19:21:02 +03:00
AI Assistant
e27280e675 docs: Добавлена полная документация API привязки документов 2025-11-02 19:06:51 +03:00
AI Assistant
936cea62ae feat: Добавлен эндпоинт для привязки документов к проекту/заявке
Изменения:
 Новый endpoint: POST /api/n8n/documents/attach
 Поддерживает привязку к Project или HelpDesk
 Логика: если указан ticket_id → HelpDesk, иначе → Project
 Полное логирование всех операций
 Интеграция с upload_documents_to_crm.php

Входные данные:
- contact_id (обязательно)
- project_id (обязательно)
- file_url (обязательно)
- file_name (обязательно)
- ticket_id (опционально, для привязки к заявке)
- file_type (опционально, описание документа)

Готово к интеграции в n8n workflow!
2025-11-02 19:05:53 +03:00
AI Assistant
d3b7b3bb6a feat: Добавлены все N8N webhook URLs в config.py
Изменения:
 Добавлены переменные n8n_create_contact_webhook и n8n_create_claim_webhook в Settings
 Все webhook URLs теперь централизованно в .env
 Удалён хардкод из n8n_proxy.py

Теперь все N8N webhooks:
- N8N_POLICY_CHECK_WEBHOOK
- N8N_FILE_UPLOAD_WEBHOOK
- N8N_CREATE_CONTACT_WEBHOOK
- N8N_CREATE_CLAIM_WEBHOOK
2025-11-02 12:45:30 +03:00
AI Assistant
2d08043b4d feat: Добавлено логирование response для policy/check
Проблема:
- Backend не логировал что именно n8n возвращает для /api/n8n/policy/check
- Не видно откуда брать project_id в response

Исправление:
 Добавлено логирование response.text[:500] для policy/check
 Добавлена обработка ошибок парсинга JSON

Теперь в логах видно полный ответ от n8n!
2025-11-02 10:47:56 +03:00
AI Assistant
cd2ff8e61b feat: Добавлен backend proxy для создания контакта
Проблема:
- Step1Phone делал запрос НАПРЯМУЮ к n8n (палил webhook URL)
- В backend логах не было видно что n8n возвращает для контакта
- Нельзя было отследить contact_id, claim_id, is_new_contact

Решение:
 Добавлен endpoint /api/n8n/contact/create в n8n_proxy.py
 Step1Phone.tsx теперь использует proxy вместо прямого URL
 Backend логирует полный response от n8n (contact_id, claim_id и тд)

Теперь весь трафик к n8n идёт через backend proxy!
2025-11-02 10:40:57 +03:00
AI Assistant
b17825ee52 fix: Добавлены недостающие поля в FormData интерфейс
Проблема:
- TypeScript игнорировал project_id, is_new_project, ticket_id, ticket_number
- Они не были объявлены в interface FormData

Исправление:
 Добавлены в FormData:
  - project_id?: string          (ID проекта в vTiger)
  - is_new_project?: boolean     (флаг создания)
  - ticket_id?: string           (ID заявки HelpDesk)
  - ticket_number?: string       (номер заявки)

Теперь updateFormData корректно сохраняет все данные от n8n!
2025-11-02 10:25:24 +03:00
AI Assistant
c6d848fd14 fix: Корректное извлечение данных из n8n response в Step1Phone
Проблема:
- n8n возвращает [{success: true, result: {claim_id, contact_id, ...}}]
- Код пытался взять data.claim_id вместо data.result.claim_id

Исправление:
-  Обработка массива от n8n
-  Извлечение данных из result: const result = crmResult.result || crmResult
-  Улучшенное логирование для отладки
-  Проверка crmResult.success перед обработкой

Теперь formData корректно получает:
- claim_id (от n8n)
- contact_id (от CreateWebContact)
- is_new_contact (флаг)
2025-11-02 08:42:41 +03:00
AI Assistant
ea287b32eb feat: Сохранение project_id в formData при проверке полиса
-  Добавлена обработка массива от n8n (как в Step2EventType)
-  Сохранение project_id, is_new_project в formData
-  Сохранение contact_id для консистентности
-  Работает как для найденного, так и для не найденного полиса

Теперь formData содержит полную информацию:
- claim_id (из n8n)
- contact_id (из CreateWebContact)
- project_id (из CreateWebProject) ← НОВОЕ
- is_new_project (флаг создания) ← НОВОЕ
2025-11-02 08:37:25 +03:00
AI Assistant
0be216ba43 docs: Добавлен лог сессии CreateWebClaim + полная интеграция
Подробная документация:
-  CreateWebClaim.php - операция vTiger для заявок
-  n8n workflow get_claim_CRM_ERV (ID: qdYZqhIDGhK9E4DA)
-  Backend proxy /api/n8n/claim/create
-  Frontend интеграция Step2EventType
-  Решенные проблемы: BOM, пустой ответ n8n, массив вместо объекта
-  Полный флоу создания заявки
-  Метрики и статистика

Создано заявок: 8 (последняя ЗАЯВКА_825)
Время работы: 4 часа 15 минут
2025-11-02 01:19:12 +03:00
AI Assistant
6cd7027e1a fix: Улучшена обработка ответа n8n в claim/create
-  Проверка на пустой ответ
-  Подробное логирование тела ответа
-  Детальное сообщение об ошибке парсинга JSON
2025-11-02 00:57:03 +03:00
AI Assistant
927a8f5f7c feat: Проксирование CreateClaim через backend
-  Новый endpoint: POST /api/n8n/claim/create
-  Проксирует запросы к n8n webhook создания заявки
-  Frontend теперь использует /api/n8n/claim/create вместо прямого URL
-  Решает проблему CORS и скрывает webhook URL
-  Логирование запросов и ошибок
2025-11-02 00:55:25 +03:00
AI Assistant
cacb2ee7bb fix: Обработка массива в ответе n8n для CreateWebClaim
-  n8n может вернуть [{success: true, ...}] вместо {success: true, ...}
-  Добавлена проверка Array.isArray и извлечение первого элемента
-  Теперь корректно обрабатывается ответ от webhook создания заявки
2025-11-02 00:53:21 +03:00
AI Assistant
793177b1e2 feat: Интеграция создания черновика заявки в Step2EventType
-  Вызов n8n webhook после выбора типа события
-  Формирование title из event_type + voucher
-  Передача всех данных: claim_id, contact_id, project_id, event_type
-  Сохранение ticket_id и ticket_number в formData
-  Loading состояние кнопки
-  Debug события для отслеживания
2025-11-02 00:09:35 +03:00
AI Assistant
b06fdb731c fix: claim_id теперь генерируется только на бэкенде (n8n)
-  Удалена локальная генерация claim_id в ClaimForm.tsx
-  claim_id создаётся n8n при SMS верификации
-  Step1Phone: передаёт session_id в n8n, сохраняет claim_id
-  Step1Policy: сохраняет claim_id из ответа n8n при проверке полиса
-  Добавлено детальное логирование для отладки
- 📝 PROJECT_TIMELINE.md - полная хронология проекта (24 окт - 1 ноя)
2025-11-01 16:53:10 +03:00
AI Assistant
c049ed6666 fix: Добавлены n8n webhook URLs в docker-compose.yml
- N8N_POLICY_CHECK_WEBHOOK для проверки полиса
- N8N_FILE_UPLOAD_WEBHOOK для загрузки документов
- Backend теперь может проксировать запросы к n8n
2025-11-01 13:41:04 +03:00
AI Assistant
6b1979c93f docs: Лог сессии 01 ноября - CreateWebProject + SMS валидация + n8n интеграция
- Создана операция CreateWebProject для vTiger CRM
- Исправлена валидация SMS кодов (нормализация телефона)
- Добавлен вызов n8n webhook после SMS верификации
- Backend подключён к внешнему Redis
- Frontend пересобран с интеграцией CRM
- Протестировано: создание/поиск проектов, SMS коды, n8n workflow
- Все изменения задокументированы
2025-11-01 13:39:16 +03:00
AI Assistant
89a182bc7b fix: Интеграция n8n webhook для создания контакта после SMS
- Step1Phone теперь вызывает n8n webhook после SMS верификации
- Webhook создаёт/находит контакт в CRM через CreateWebContact
- Возвращает: contact_id, claim_id, is_new_contact
- Данные сохраняются в formData для дальнейшей работы
- Исправлена нормализация телефона в sms_service (убираем +)
- Отключен rate limiting SMS для тестирования
- Backend подключён к внешнему Redis (crm.clientright.ru:6379)
- Добавлены поля contact_id, is_new_contact в FormData
- Frontend пересобран с новым кодом
2025-11-01 13:31:05 +03:00
AI Assistant
8c21450e4a docs: Лог сессии 30 октября - Телефон на шаг 1 + интеграция CRM
- Перенос телефона на первый шаг с SMS верификацией
- Создана операция CreateWebContact в vTiger CRM
- N8N workflow: контакт + claim_id + Redis session
- Docker-compose: убраны локальные postgres/redis
- Backend подключён к внешним сервисам
- Флаг is_new_contact для UX (новый vs существующий клиент)
- Исправлено 7 проблем (Postgres v16, Redis, N8N webhooks, Gitea)
- Готовность к черновикам и личному кабинету
2025-10-30 19:59:56 +03:00
AI Assistant
7b554c0ad2 feat: Полный флоу для создания контакта через CreateWebContact
- docker-compose.yml: убраны локальные postgres/redis, только внешние
- Frontend: телефон в формате 79001234567 (без +)
- Готово к интеграции с n8n webhook для создания контакта в CRM
- CreateWebContact: только создание или возврат ID, БЕЗ обновления
2025-10-30 19:22:14 +03:00
AI Assistant
6708092662 fix: Формат телефона БЕЗ + (79001234567 вместо +79001234567)\n\n- Step1Phone: sendCode и verifyCode отправляют 7XXXXXXXXXX\n- Step3Payment: DEV MODE кнопки используют формат без +\n- Совместимость с vTiger CRM (mobile поле хранит без +) 2025-10-30 18:54:05 +03:00
AI Assistant
fe5cbdd756 ui: Добавлена DEV MODE кнопка на шаг 1 (телефон)\n\n- Кнопка 'Далее → (Step 2) [пропустить]'\n- Автозаполняет phone=+79001234567, email=test@test.ru\n- Автоматически подтверждает телефон и переходит на Step 2 2025-10-30 16:02:02 +03:00
AI Assistant
cc880d3485 refactor: Убраны неиспользуемые локальные контейнеры Postgres и Redis\n\n- Backend использует внешний PostgreSQL (147.45.189.234:5432)\n- Backend использует внешний Redis (crm.clientright.ru:6379)\n- Удалены сервисы postgres и redis из docker-compose\n- Удалена зависимость depends_on: postgres\n- Остались только frontend и backend контейнеры\n- Удалены orphan контейнеры 2025-10-30 14:16:15 +03:00
AI Assistant
350ce0c654 fix: N8N webhook URLs переданы в backend через environment\n\n- N8N_POLICY_CHECK_WEBHOOK и N8N_FILE_UPLOAD_WEBHOOK\n- Backend теперь видит webhooks и проксирует запросы\n- Протестировано: /api/n8n/policy/check возвращает 200 OK 2025-10-30 14:13:16 +03:00
AI Assistant
543725324b fix: Backend подключается к внешнему Redis на crm.clientright.ru:6379\n\n- Убран локальный контейнер redis (конфликт порта 6379)\n- REDIS_HOST, REDIS_PORT, REDIS_PASSWORD из .env\n- Postgres обновлён до v16 под существующие данные\n- SMS API работает: 200 OK с debug_code 2025-10-30 14:06:55 +03:00
AI Assistant
c9ed114dd4 fix: API вызовы через относительные пути (proxy)\n\n- Step1Phone: /api/v1/sms/send, /api/v1/sms/verify\n- ClaimForm: /api/v1/claims/create 2025-10-30 10:00:28 +03:00
AI Assistant
14d1b6fb63 ui: Телефон вводится без +7, префикс зашит (addonBefore)\n\n- Валидация: 10 цифр без кода страны\n- В API отправляется с +7\n- Плейсхолдер 9001234567, maxLength=10 2025-10-30 09:54:14 +03:00
AI Assistant
3caf855d4a ui: Убран email со шага 1, перенесён на последний шаг\n\n- Step1Phone: только телефон + SMS\n- Step3Payment: добавлено поле email 2025-10-30 09:52:26 +03:00
AI Assistant
58a12a3c05 feat: Телефон перенесен на шаг 1 (SMS верификация)\n\n- Новый шаг Step1Phone.tsx (отправка/проверка SMS)\n- ClaimForm: новая последовательность шагов (Телефон -> Полис -> Тип -> Документы -> Оплата)\n- Step3Payment: убран блок верификации телефона 2025-10-30 09:50:26 +03:00
AI Assistant
847dbe73a9 docs: Обновлён лог сессии 29.10 + корректировки конфигов документов\n\n- Дополнен SESSION_LOG_2025-10-29.md\n- Правки Step2EventType.tsx (выбор eventType)\n- Актуализированы constants/documentConfigs.ts 2025-10-30 09:35:27 +03:00
AI Assistant
ac1e127702 docs: Лог сессии 29.10 (часть 2) - Безопасность N8N Webhooks
Детальный лог работы по спрятыванию webhook URLs:
- Backend proxy для n8n
- Webhook URLs в .env
- Исправления проблем (относительные пути, event_type, пропущенные поля)
- Полная документация SECURITY_N8N_PROXY.md
- 4 коммита, все проблемы решены

Результат: Webhook URLs больше не видны в коде фронтенда
2025-10-29 18:24:53 +03:00
AI Assistant
789f891026 fix: Поддержка разных вариантов event_type для OCR событий
Проблема: Frontend ждал event_type='ocr_completed', но n8n отправлял 'policy_ocr_completed'
Из-за этого событие не обрабатывалось и показывалась ошибка

Решение: Гибкая проверка event_type:
- ocr_completed (старый формат)
- policy_ocr_completed (новый формат из n8n)
- любой *_ocr_completed (includes)

Теперь работает с любыми workflow которые шлют разные типы событий
2025-10-29 17:11:55 +03:00
AI Assistant
9a2deb97af fix: Добавлены пропущенные поля filename и upload_timestamp в n8n proxy
Проблема: Backend proxy не передавал filename и upload_timestamp к n8n
Это ломало обработку файлов в workflow

Изменения:
- Добавлены параметры filename и upload_timestamp в proxy_file_upload()
- Теперь передаём все поля которые отправляет frontend

Было в n8n body: {claim_id, voucher, session_id, file_type}
Стало: {claim_id, voucher, session_id, file_type, filename, upload_timestamp}
2025-10-29 17:01:59 +03:00
AI Assistant
2945cad263 fix: Используем относительные пути для API вместо localhost
Проблема: Frontend в Docker не мог достучаться до http://localhost:8100
Решение: Используем '/api/n8n/*' - Vite proxy автоматически перенаправит на backend

Изменения:
- Step1Policy.tsx: fetch('/api/n8n/policy/check')
- Step1Policy.tsx: fetch('/api/n8n/upload/file')
- StepDocumentUpload.tsx: fetch('/api/n8n/upload/file')

Vite proxy настроен в vite.config.ts:
  /api -> host.docker.internal:8100
  /events -> host.docker.internal:8100
2025-10-29 16:53:53 +03:00
AI Assistant
ef6a4160a4 security: 🔒 N8N webhook URLs спрятаны через backend proxy
- Создан n8n_proxy.py для безопасного проксирования запросов
- Webhook URLs перенесены в .env (скрыты от фронтенда)
- Frontend теперь использует /api/n8n/* endpoints
- Добавлена документация SECURITY_N8N_PROXY.md

Преимущества:
- Webhook URLs не видны в DevTools
- Централизованное логирование
- Возможность добавить rate limiting и auth
- Легко менять URLs без пересборки фронтенда
2025-10-29 16:49:03 +03:00
AI Assistant
f12416a901 docs: Создан лог сессии 29 октября - рефакторинг визарда на динамические шаги
- Документирован полный рефакторинг визарда (Вариант B)
- Каждый документ = отдельный шаг в прогресс-баре
- Созданы Step2EventType.tsx, StepDocumentUpload.tsx, documentConfigs.ts
- Переделан ClaimForm.tsx на динамические шаги через useMemo
- Исправлены проблемы: URL n8n, FormData структура, SSE логирование
- Исправлены прогресс и навигация через useCallback
- Всего 9 коммитов, ~1500 строк кода
2025-10-29 15:12:20 +03:00
AI Assistant
9f39847172 fix: Исправлена навигация назад через useCallback
- Обернул nextStep, prevStep, updateFormData, handleSubmit в useCallback
- Теперь функции стабильны и не пересоздаются при ререндере
- nextStep и prevStep используют functional update для setState
- Добавлено логирование навигации: ' nextStep' и ' prevStep'
- Исправлены зависимости useMemo для steps

ПРОБЛЕМА: prevStep вызывался, но setCurrentStep не обновлял стейт
РЕШЕНИЕ: useCallback гарантирует что функции стабильны
2025-10-29 14:09:20 +03:00
AI Assistant
d727b74d3c fix: Явно установлен disabled=false для всех кнопок Назад
- Добавлен disabled={false} для основной кнопки Назад
- Добавлен disabled={false} для DEV кнопок (Назад и Пропустить)
- Добавлено логирование при нажатии для отладки
- Теперь кнопки гарантированно кликабельны
2025-10-29 14:04:08 +03:00
AI Assistant
145a9bd205 fix: Исправлен расчёт прогресса загрузки документов
- Было: (currentDocNumber / totalDocs) * 100
  Документ 2/2 показывал 100% ДО загрузки

- Стало: ((currentDocNumber - 1) / totalDocs) * 100
  Документ 1/2: 0% (до загрузки) → 50% (после)
  Документ 2/2: 50% (до загрузки) → 100% (после)
2025-10-29 13:56:33 +03:00
AI Assistant
67f054d0b9 fix: Улучшено логирование SSE - убраны ложные ошибки
- Изменён console.error на console.log для нормального закрытия SSE
- Теперь показывается ' SSE закрыто после получения результата - всё ОК'
- Реальная ошибка выводится только если данные не получены
- Консоль больше не пугает красными ошибками при успешной работе
2025-10-29 12:58:09 +03:00
AI Assistant
4ad6b780fc fix: Исправлена структура FormData для загрузки документов
- Добавлен filename (оригинальное имя файла)
- Добавлен upload_timestamp (ISO timestamp)
- Изменён 'files' -> 'file' (единственное число)
- Исправлен webhook URL на правильный (7e2abc64...)
- Теперь структура соответствует ожидаемой n8n:
  {claim_id, file_type, filename, voucher, session_id, upload_timestamp, file}
2025-10-29 12:53:52 +03:00
AI Assistant
4e5bc767b2 fix: Исправлен URL n8n webhook на правильный домен
- Изменён URL с n8n.clientright.ru на n8n.clientright.pro
- Теперь загрузка файлов будет работать корректно
2025-10-29 12:47:35 +03:00
AI Assistant
f06105df98 fix: Исправлена работа Upload и кнопки Назад в StepDocumentUpload
- Upload: добавлен disabled во время загрузки
- Upload onChange: правильная обработка newFileList
- Кнопка Назад: убран disabled - теперь всегда доступна
- DEV кнопка Назад: также убран disabled
- Добавлено логирование handleUpload и onChange для отладки
2025-10-29 12:44:17 +03:00
AI Assistant
1f25301979 feat: Переделан визард на динамические шаги - каждый документ отдельный Step
- Создан Step2EventType.tsx для выбора типа страхового случая
- Создан StepDocumentUpload.tsx - универсальный компонент для загрузки одного документа
- Создан constants/documentConfigs.ts с конфигурацией документов для всех типов событий
- Переделан ClaimForm.tsx на динамическое создание шагов через useMemo
- Прогресс-бар теперь показывает: [Полис] → [Тип] → [Док1] → [Док2] → [Оплата]
- Бэкап старого Step2Details сохранён как Step2Details.OLD_WIZARD_INLINE.tsx
- Каждый документ загружается на отдельном шаге с модалкой обработки
- SSE для каждого документа с уникальным event_type
- DEV MODE кнопки для быстрой навигации на всех шагах
2025-10-29 12:36:30 +03:00
AI Assistant
6c19392528 docs: Обновлён лог сессии - добавлена вторая часть (умная форма Step 2) 2025-10-28 18:07:38 +03:00