Files
aiform_prod/docs/CF_2624_IMPLEMENTATION_SUMMARY.md
AI Assistant 080e7ec105 feat: Получение cf_2624 из MySQL и блокировка полей при подтверждении данных
- Добавлен сервис CrmMySQLService для прямого подключения к MySQL CRM
- Обновлён метод get_draft() для получения cf_2624 напрямую из БД
- Реализована блокировка полей (readonly) при contact_data_confirmed = true
- Добавлен выбор банка для СБП выплат с динамической загрузкой из API
- Обновлена документация по работе с cf_2624 и MySQL
- Добавлен network_mode: host в docker-compose для доступа к MySQL
- Обновлены компоненты формы для поддержки блокировки полей
2025-12-04 12:22:23 +03:00

5.4 KiB
Raw Blame History

Реализация проверки cf_2624 при формировании заявления

Что сделано

1. Backend API (/drafts/{claim_id})

  • Получает cf_2624 из CRM через webservice retrieve
  • Преобразует в contact_data_confirmed (boolean)
  • Возвращает в ответе API вместе с contact_data_from_crm

Файл: ticket_form/backend/app/api/claims.py (строки 459-539)

2. Frontend - Загрузка черновика

  • Получает contact_data_confirmed из ответа API
  • Сохраняет в formData
  • Передаёт в claimPlanData для StepClaimConfirmation

Файл: ticket_form/frontend/src/pages/ClaimForm.tsx (строки 564-848)

3. Frontend - Форма подтверждения

  • StepClaimConfirmation получает contact_data_confirmed из claimPlanData
  • Передаёт в generateConfirmationFormHTML
  • Форма блокирует персональные данные если contact_data_confirmed = true

Файлы:

  • ticket_form/frontend/src/components/form/StepClaimConfirmation.tsx (строки 89-96)
  • ticket_form/frontend/src/components/form/generateConfirmationFormHTML.ts (строки 4, 293, 724-740, 840, 907-915)

4. CreateWebContact

  • Возвращает cf_2624 в JSON ответе
  • Для новых контактов: cf_2624 = "0"
  • Для существующих: берёт значение из CRM

Файл: include/Webservices/CreateWebContact.php


Что нужно сделать

1. Обновить n8n workflow 6mxRJ2LLHmQXyaDz

После ноды CreateWebContacКлиентправ:

Добавить ноду Code: Extract Contact Data Confirmed:

// Парсим результат CreateWebContact
const rawResult = $node["CreateWebContacКлиентправ"].json.result;
const contactData = JSON.parse(rawResult);

// Извлекаем cf_2624 (Данные подтверждены)
const cf_2624 = contactData.cf_2624 || "0";
const contact_data_confirmed = cf_2624 === "1";

return {
  contact_id: contactData.contact_id,
  is_new_contact: contactData.is_new,
  cf_2624: cf_2624,
  contact_data_confirmed: contact_data_confirmed,
  contact_data_can_edit: !contact_data_confirmed
};

В ноде Code in JavaScriptКлиентправ (формирование ответа):

Добавить в return:

const contactStatus = $('Code: Extract Contact Data Confirmed').first().json;

return {
  // ... существующие поля ...
  contact_data_confirmed: contactStatus.contact_data_confirmed || false,
  contact_data_can_edit: contactStatus.contact_data_can_edit !== false,
  cf_2624: contactStatus.cf_2624 || "0",
  // ... остальные поля ...
};

См. подробности: ticket_form/docs/N8N_UPDATE_CF_2624_IN_RESPONSE.md


🔄 Логика работы

Сценарий 1: Загрузка черновика

  1. Пользователь выбирает черновик
  2. Frontend вызывает /api/v1/claims/drafts/{claim_id}
  3. Backend получает cf_2624 из CRM
  4. Backend возвращает contact_data_confirmed = (cf_2624 === "1")
  5. Frontend передаёт флаг в форму подтверждения
  6. Форма блокирует поля если contact_data_confirmed = true

Сценарий 2: Новое заявление (через n8n)

  1. Пользователь вводит телефон
  2. n8n вызывает CreateWebContact
  3. CreateWebContact возвращает cf_2624 в ответе
  4. n8n извлекает cf_2624 и передаёт в ответе для фронтенда
  5. Frontend получает contact_data_confirmed из ответа n8n
  6. Форма блокирует поля если contact_data_confirmed = true

📋 Какие поля блокируются

Если contact_data_confirmed = true, блокируются следующие поля:

  • Фамилия (lastname)
  • Имя (firstname)
  • Отчество (secondname, middle_name)
  • ИНН (inn)
  • Дата рождения (birthday)
  • Место рождения (birthplace, birth_place)
  • Адрес (mailingstreet, address)
  • Email (email)

Телефон (mobile) всегда только для чтения (не зависит от флага)


🧪 Проверка

  1. Создать контакт в CRM → cf_2624 должен быть "0"
  2. Загрузить черновик → поля должны быть редактируемыми
  3. Установить cf_2624 = "1" в CRM
  4. Загрузить черновик → поля должны быть заблокированы
  5. Проверить предупреждение "⚠️ Данные подтверждены" в форме

📝 Документация

  • ticket_form/docs/CRM_CONTACT_DATA_CONFIRMED_FIELD.md - Описание поля cf_2624
  • ticket_form/docs/CREATE_WEB_CONTACT_RESPONSE_FORMAT.md - Формат ответа CreateWebContact
  • ticket_form/docs/N8N_UPDATE_CF_2624_IN_RESPONSE.md - Обновление n8n workflow
  • ticket_form/docs/CODE_CREATE_WEB_CONTACT_FINAL.js - Код для n8n (обновлён)