Files
aiform_dev/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

137 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Реализация проверки 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 (обновлён)