# 🧭 Правила навигации - Полное руководство

## 🎯 Возможности

Правила навигации поддерживают **все типы условий** как и вариативность экранов:

### 1. ✅ AB тесты (Unleash)
Направляйте пользователей на разные экраны в зависимости от AB теста

### 2. ✅ Опции (list экраны)
На основе выбранных опций в list экранах

### 3. ✅ Значения (возраст, зодиак, email)
На основе конкретных значений из специальных экранов

---

## 📚 Примеры

### Пример 1: AB тест - короткий vs длинный onboarding

```json
{
  "id": "gender",
  "template": "list",
  "navigation": {
    "defaultNextScreenId": "birthdate",
    "rules": [
      {
        "conditions": [
          {
            "screenId": "gender",
            "conditionType": "unleash",
            "unleashFlag": "onboarding-flow-test",
            "unleashVariants": ["short"],
            "operator": "equals"
          }
        ],
        "nextScreenId": "payment"
      }
    ]
  }
}
```

**Результат:**
- Вариант `short` → сразу на payment (пропустить birthdate)
- Другие варианты → на birthdate (стандартный путь)

---

### Пример 2: AB тест + пол пользователя

```json
{
  "id": "welcome",
  "template": "info",
  "navigation": {
    "defaultNextScreenId": "standard-flow",
    "rules": [
      {
        "conditions": [
          {
            "screenId": "gender",
            "conditionType": "options",
            "optionIds": ["female"],
            "operator": "includesAny"
          },
          {
            "screenId": "welcome",
            "conditionType": "unleash",
            "unleashFlag": "female-special-offer",
            "unleashVariants": ["v1"],
            "operator": "equals"
          }
        ],
        "nextScreenId": "special-offer-women"
      }
    ]
  }
}
```

**Результат:**
- Если **женщина** И **AB тест = v1** → special-offer-women
- Иначе → standard-flow

---

### Пример 3: Зависимость от возраста

```json
{
  "id": "age-result",
  "template": "info",
  "navigation": {
    "defaultNextScreenId": "standard-path",
    "rules": [
      {
        "conditions": [
          {
            "screenId": "age",
            "conditionType": "options",
            "optionIds": ["18-24", "25-34"],
            "operator": "includesAny"
          }
        ],
        "nextScreenId": "young-audience-path"
      },
      {
        "conditions": [
          {
            "screenId": "age",
            "conditionType": "options",
            "optionIds": ["45-54", "55+"],
            "operator": "includesAny"
          }
        ],
        "nextScreenId": "mature-audience-path"
      }
    ]
  }
}
```

**Результат:**
- 18-34 лет → young-audience-path
- 45+ лет → mature-audience-path
- Остальные → standard-path

---

### Пример 4: Зависимость от знака зодиака

```json
{
  "id": "zodiac-result",
  "template": "info",
  "navigation": {
    "defaultNextScreenId": "default-path",
    "rules": [
      {
        "conditions": [
          {
            "screenId": "profile.zodiac",
            "conditionType": "options",
            "optionIds": ["aries", "leo", "sagittarius"],
            "operator": "includesAny"
          }
        ],
        "nextScreenId": "fire-signs-path"
      },
      {
        "conditions": [
          {
            "screenId": "profile.zodiac",
            "conditionType": "options",
            "optionIds": ["cancer", "scorpio", "pisces"],
            "operator": "includesAny"
          }
        ],
        "nextScreenId": "water-signs-path"
      }
    ]
  }
}
```

**Результат:**
- Огненные знаки → fire-signs-path
- Водные знаки → water-signs-path
- Остальные → default-path

---

### Пример 5: Множественные AB тесты

```json
{
  "id": "onboarding",
  "template": "info",
  "navigation": {
    "defaultNextScreenId": "standard",
    "rules": [
      {
        "conditions": [
          {
            "screenId": "onboarding",
            "conditionType": "unleash",
            "unleashFlag": "flow-type",
            "unleashVariants": ["premium"],
            "operator": "equals"
          },
          {
            "screenId": "onboarding",
            "conditionType": "unleash",
            "unleashFlag": "upsell-test",
            "unleashVariants": ["aggressive"],
            "operator": "equals"
          }
        ],
        "nextScreenId": "premium-aggressive-upsell"
      },
      {
        "conditions": [
          {
            "screenId": "onboarding",
            "conditionType": "unleash",
            "unleashFlag": "flow-type",
            "unleashVariants": ["premium"],
            "operator": "equals"
          }
        ],
        "nextScreenId": "premium-standard-upsell"
      }
    ]
  }
}
```

**Результат:**
- flow-type=premium + upsell-test=aggressive → premium-aggressive-upsell
- flow-type=premium + другой upsell → premium-standard-upsell
- Остальные → standard

---

## 🛠️ Как настроить в админке

### 1. Откройте экран для редактирования
В конструкторе воронок выберите нужный экран

### 2. Найдите секцию "Правила переходов"
Она находится в боковой панели после секции "Навигация"

### 3. Добавьте правило
Нажмите кнопку **"+"** чтобы добавить новое правило

### 4. Настройте условия

#### Для AB теста:
1. **Тип условия:** выберите "AB тест (Unleash)"
2. **Название флага:** введите название флага из Unleash (например `trial-offer-test`)
3. **Оператор:** 
   - "Равен (один вариант)" - точное совпадение
   - "Любой из вариантов (OR)" - хотя бы один совпадает
4. **Ожидаемые варианты:** введите через запятую (например `v1, v2`)

#### Для опций list экрана:
1. **Тип условия:** "Выбранные опции (list экраны)"
2. **Экран:** выберите list экран
3. **Оператор:** "Любое из (OR)" или "Все из (AND)"
4. **Значения:** отметьте нужные опции

#### Для значений (возраст, зодиак):
1. **Тип условия:** "Значения (зодиак, возраст, email)"
2. **Экран:** выберите экран с данными
3. **Оператор:** обычно "Любое из (OR)"
4. **Значения:** выберите из списка

### 5. Добавьте несколько условий (опционально)
Нажмите **"+ Добавить условие"** чтобы добавить ещё условия
Все условия работают как **AND** (все должны выполниться)

### 6. Выберите целевой экран
В поле "Переход на экран" выберите куда направить пользователя

### 7. Сохраните
Правило автоматически сохраняется при изменениях

---

## 💡 Типы операторов

### includesAny (Любой из - OR)
Условие выполняется если **хотя бы одно** значение совпадает
```
Выбрано: ["female"]
Условие: ["female", "non-binary"]
Результат: ✅ TRUE (female есть в списке)
```

### includesAll (Все из - AND)
Условие выполняется если **все** значения совпадают
```
Выбрано: ["premium", "early-access"]
Условие: ["premium", "early-access"]
Результат: ✅ TRUE (оба есть)

Выбрано: ["premium"]
Условие: ["premium", "early-access"]
Результат: ❌ FALSE (early-access отсутствует)
```

### equals (Равен)
Точное совпадение одного значения
```
AB тест вариант: "v1"
Условие: ["v1"]
Результат: ✅ TRUE

AB тест вариант: "v2"
Условие: ["v1"]
Результат: ❌ FALSE
```

---

## 📊 Порядок проверки правил

Правила проверяются **сверху вниз**:
1. Первое правило с выполненными условиями → используется
2. Если ни одно правило не подошло → используется `defaultNextScreenId`
3. Если нет defaultNextScreenId → следующий экран по порядку

**Пример:**
```json
{
  "navigation": {
    "defaultNextScreenId": "standard",
    "rules": [
      { "conditions": [...], "nextScreenId": "path-1" },  // Проверяется первым
      { "conditions": [...], "nextScreenId": "path-2" },  // Проверяется вторым
      { "conditions": [...], "nextScreenId": "path-3" }   // Проверяется третьим
    ]
  }
}
```

---

## ✅ Best Practices

### 1. Используйте осмысленные названия
```
❌ Плохо: nextScreenId: "screen-5"
✅ Хорошо: nextScreenId: "premium-trial-offer"
```

### 2. Группируйте связанные условия
```json
{
  "conditions": [
    { "screenId": "gender", "optionIds": ["female"] },
    { "unleashFlag": "female-offer-test", "unleashVariants": ["v1"] }
  ]
}
```

### 3. Всегда указывайте defaultNextScreenId
Это fallback если ни одно правило не подошло

### 4. Тестируйте все варианты
- Создайте правило для каждого варианта AB теста
- Проверьте что defaultNextScreenId работает
- Протестируйте комбинации условий

### 5. Документируйте сложные правила
Добавляйте комментарии в JSON или ведите документацию

---

## 🐛 Troubleshooting

### Правило не срабатывает

**Проверьте:**
1. ✅ Все условия в правиле выполняются (AND логика)
2. ✅ Название флага в Unleash совпадает с указанным
3. ✅ Вариант AB теста написан правильно (регистр важен!)
4. ✅ Правило находится выше других конфликтующих правил
5. ✅ Экран указанный в условии существует

### AB тест не работает

**Проверьте:**
1. ✅ Unleash флаг создан и включен
2. ✅ Rollout > 0%
3. ✅ Environment variables настроены
4. ✅ В консоли браузера есть логи `[Unleash Analytics]`

### Всегда переходит на default

**Причины:**
- Ни одно условие не выполняется
- Ошибка в названии флага/варианта
- AB тест не загрузился

---

## 📚 Связанные документы

- **AB_TESTING_GUIDE.md** - Полное руководство по AB тестам
- **UNLEASH_SETUP.md** - Настройка Unleash
- **AB_TESTING_UPDATES.md** - Аналитика и оптимизация

---

## 🎉 Заключение

Правила навигации - это мощный инструмент для персонализации пути пользователя через воронку. Используйте AB тесты, условия по полу/возрасту/зодиаку и их комбинации для максимальной конверсии!

**Возможности полностью идентичны вариативности экранов** - используется один и тот же редактор условий.
