- Добавлен сервис CrmMySQLService для прямого подключения к MySQL CRM - Обновлён метод get_draft() для получения cf_2624 напрямую из БД - Реализована блокировка полей (readonly) при contact_data_confirmed = true - Добавлен выбор банка для СБП выплат с динамической загрузкой из API - Обновлена документация по работе с cf_2624 и MySQL - Добавлен network_mode: host в docker-compose для доступа к MySQL - Обновлены компоненты формы для поддержки блокировки полей
5.4 KiB
5.4 KiB
Реализация проверки cf_2624 при формировании заявления
✅ Что сделано
1. Backend API (/drafts/{claim_id})
- ✅ Получает
cf_2624из CRM через webserviceretrieve - ✅ Преобразует в
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: Загрузка черновика
- Пользователь выбирает черновик
- Frontend вызывает
/api/v1/claims/drafts/{claim_id} - Backend получает
cf_2624из CRM - Backend возвращает
contact_data_confirmed = (cf_2624 === "1") - Frontend передаёт флаг в форму подтверждения
- Форма блокирует поля если
contact_data_confirmed = true
Сценарий 2: Новое заявление (через n8n)
- Пользователь вводит телефон
- n8n вызывает
CreateWebContact CreateWebContactвозвращаетcf_2624в ответе- n8n извлекает
cf_2624и передаёт в ответе для фронтенда - Frontend получает
contact_data_confirmedиз ответа n8n - Форма блокирует поля если
contact_data_confirmed = true
📋 Какие поля блокируются
Если contact_data_confirmed = true, блокируются следующие поля:
- ✅ Фамилия (
lastname) - ✅ Имя (
firstname) - ✅ Отчество (
secondname,middle_name) - ✅ ИНН (
inn) - ✅ Дата рождения (
birthday) - ✅ Место рождения (
birthplace,birth_place) - ✅ Адрес (
mailingstreet,address) - ✅ Email (
email)
Телефон (mobile) всегда только для чтения (не зависит от флага)
🧪 Проверка
- ✅ Создать контакт в CRM →
cf_2624должен быть "0" - ✅ Загрузить черновик → поля должны быть редактируемыми
- ⏳ Установить
cf_2624 = "1"в CRM - ⏳ Загрузить черновик → поля должны быть заблокированы
- ⏳ Проверить предупреждение "⚠️ Данные подтверждены" в форме
📝 Документация
ticket_form/docs/CRM_CONTACT_DATA_CONFIRMED_FIELD.md- Описание поля cf_2624ticket_form/docs/CREATE_WEB_CONTACT_RESPONSE_FORMAT.md- Формат ответа CreateWebContactticket_form/docs/N8N_UPDATE_CF_2624_IN_RESPONSE.md- Обновление n8n workflowticket_form/docs/CODE_CREATE_WEB_CONTACT_FINAL.js- Код для n8n (обновлён)