- Добавлен сервис CrmMySQLService для прямого подключения к MySQL CRM - Обновлён метод get_draft() для получения cf_2624 напрямую из БД - Реализована блокировка полей (readonly) при contact_data_confirmed = true - Добавлен выбор банка для СБП выплат с динамической загрузкой из API - Обновлена документация по работе с cf_2624 и MySQL - Добавлен network_mode: host в docker-compose для доступа к MySQL - Обновлены компоненты формы для поддержки блокировки полей
137 lines
5.4 KiB
Markdown
137 lines
5.4 KiB
Markdown
# Реализация проверки 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`:
|
||
|
||
```javascript
|
||
// Парсим результат 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:
|
||
|
||
```javascript
|
||
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 (обновлён)
|
||
|
||
|