142 lines
5.0 KiB
Markdown
142 lines
5.0 KiB
Markdown
# 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,
|
||
// ... остальные поля
|
||
}
|
||
};
|
||
```
|