Files
erv-clientright/n8n_policy_check_README.md

142 lines
5.0 KiB
Markdown
Raw Permalink Normal View History

2026-03-13 10:42:01 +03:00
# 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,
// ... остальные поля
}
};
```