Files
erv-clientright/n8n_policy_check_README.md
2026-03-13 10:42:01 +03:00

142 lines
5.0 KiB
Markdown
Raw Permalink 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.

# SQL запросы для проверки полиса в n8n
## Описание
SQL-запросы для проверки полиса в базе данных `lexrpiority`. Возвращают **все поля из таблицы** + поле `found` (1/0) для разделения потоков в n8n.
## Варианты запросов
### 1. `n8n_policy_check_sql.sql` (рекомендуется)
**Полная проверка: существование + валидность тарифа**
Возвращает:
- **Все поля** из таблицы `lexrpiority` (SELECT *)
- `found: 1` - полис найден И тариф подходит для задержки рейса
- `found: 0` - полис найден, но тариф не подходит
- **Пустой результат** - полис не найден в базе
**Использование в n8n:**
1. Добавьте **MySQL** ноду
2. Используйте запрос из файла
3. Параметр `:voucher` замените на `{{ $json.normalized }}` или `{{ $json.police_number }}`
4. После ноды добавьте **IF** ноду с условием: `{{ $json.found }} === 1`
### 2. `n8n_policy_check_sql_simple.sql`
**Только проверка существования полиса (без проверки тарифа)**
Возвращает:
- **Все поля** из таблицы `lexrpiority` (SELECT *)
- `found: 1` - полис найден
- **Пустой результат** - полис не найден
**Использование:**
- Если нужно только проверить наличие полиса, без проверки тарифа
### 3. `n8n_policy_check_sql_with_data.sql`
**Расширенный вариант: возвращает данные + флаги**
Возвращает:
- **Все поля** из таблицы `lexrpiority` (SELECT *)
- `is_valid_tariff` - 1/0 (валиден ли тариф)
- `found` - 1/0 (найден и валиден, основной для IF Node)
**Использование:**
- Если нужны данные о полисе для дальнейшей обработки + детальная проверка тарифа
## Workflow в n8n
```
Webhook
→ [Нормализация номера полиса] (Code Node)
→ [Проверка полиса] (MySQL Node)
→ [IF Node: policy_found_and_valid === 1]
├─ Да (1) → Полис валиден → Продолжение формы
└─ Нет (0) → Полис не найден/не валиден → Загрузка скана полиса
```
## Параметры запроса
- `:voucher` - номер полиса (уже нормализованный, кириллица → латиница)
- Используйте значение из ноды нормализации: `{{ $json.normalized }}`
## Валидные тарифы
### Basic тарифы:
- `STB0048`, `STB1099`, `STB1100`, `STB2099`, `AVS21500`, `AVS22500`
### Other тарифы:
- `SPV0001`, `SPV0002`, `SPV0003`, `SPV0004`, `SPV0005`
- `STV0090`
- `SPV1001`, `SPV1002`, `SPV1003`, `SPV1004`, `SPV1005`
- `SPV2001`, `SPV2002`, `SPV2004`, `SPV2005`
- `OPV1001`, `OPV1002`, `OPV1003`, `OPV1004`, `OPV1005`
- `OPV2001`, `OPV2002`, `OPV2004`, `OPV2005`
## Пример использования в MySQL Node n8n
**Query:**
```sql
SELECT
*,
CASE
WHEN (
tariff_code_basic IN ('STB0048', 'STB1099', 'STB1100', 'STB2099', 'AVS21500', 'AVS22500')
OR
tariff_code_other IN ('SPV0001', 'SPV0002', 'SPV0003', ...)
) THEN 1
ELSE 0
END AS found
FROM lexrpiority
WHERE voucher = :voucher
LIMIT 1;
```
**Parameters:**
```json
{
"voucher": "{{ $json.normalized }}"
}
```
## Пример IF Node условия
**Condition:**
```
{{ $json.found }} === 1
```
Или:
```
{{ $json.found }} == 1
```
## Доступные поля из результата
После выполнения запроса доступны все поля из таблицы `lexrpiority`:
- `id`, `row_no`, `agent_code`, `voucher`
- `insured_name`, `insured_birth`, `insured_gender`, `status`
- **`insured_from`** - дата начала полиса (используется на фронтенде)
- **`insured_to`** - дата окончания полиса (используется на фронтенде)
- `tariff_code_basic`, `tariff_code_other`
- `premium_cur`, `premium_loc`
- И другие поля таблицы
- **`found`** - флаг валидности (1/0)
## Пример использования данных в Code Node
```javascript
// После MySQL Node доступны все поля
const insuredFrom = $input.item.json.insured_from; // "19.11.2025"
const insuredTo = $input.item.json.insured_to; // "24.11.2025"
const found = $input.item.json.found; // 1 или 0
return {
json: {
found: found,
insured_from: insuredFrom,
insured_to: insuredTo,
// ... остальные поля
}
};
```