Джина Гайд

routing Specification

Purpose

Маршрутизация жалоб и переназначение поручений в системе «Обратная связь — регион».

Requirements

Requirement: REQ-RTE-001 — Выбор маршрута

{
  "id": "REQ-RTE-001",
  "level": "REQ",
  "status": "agreed",
  "owner": "product-owner",
  "parents": [
    "HLR-POS-003"
  ],
  "sources": [
    "docs/models.md"
  ],
  "questions": [],
  "required_aspects": [
    "matched",
    "fallback"
  ],
  "verification": "test",
  "risk": "high"
}

Система MUST по подтверждённой категории и территории выбрать маршрут из версии справочника, действующей в момент назначения. В поручениях сохраняются идентификатор правила и версия. При отсутствии единственного применимого правила жалоба переводится в manual_routing, оператору видна причина; произвольное ведомство не выбирается.

Scenario: SCN-POS-001 — Полный путь жалобы в одно ведомство

Подробности и данные: acceptance/scenarios/scn-pos-001.json.

Scenario: SCN-POS-006 — Нет маршрута

Подробности и данные: acceptance/scenarios/scn-pos-006.json.

Requirement: REQ-RTE-002 — Несколько исполнителей

{
  "id": "REQ-RTE-002",
  "level": "REQ",
  "status": "agreed",
  "owner": "product-owner",
  "parents": [
    "HLR-POS-003",
    "HLR-POS-004"
  ],
  "sources": [
    "DEC-POS-003",
    "docs/models.md"
  ],
  "questions": [],
  "required_aspects": [
    "fanout",
    "lead"
  ],
  "verification": "test",
  "risk": "high"
}

Система MUST создавать отдельное поручение каждому ведомству маршрута с признаком обязательности и назначать ровно одного ведущего ответственного. Число жалоб остаётся одним. Ведущий отвечает за сборку итогового ответа, а каждое ведомство — за своё поручение. В этом срезе все поручения обязательны.

Scenario: SCN-POS-007 — Два ведомства и неполный комплект

Подробности и данные: acceptance/scenarios/scn-pos-007.json.

Requirement: REQ-RTE-003 — Переназначение

{
  "id": "REQ-RTE-003",
  "level": "REQ",
  "status": "agreed",
  "owner": "product-owner",
  "parents": [
    "HLR-POS-003",
    "HLR-POS-004",
    "HLR-POS-008"
  ],
  "sources": [
    "DEC-POS-003",
    "docs/models.md"
  ],
  "questions": [],
  "required_aspects": [
    "superseded",
    "stale_denied",
    "clock_preserved"
  ],
  "verification": "test",
  "risk": "high"
}

Система MUST при переназначении помечать прежнее поручение superseded, создавать новую версию назначения и исключать ответ прежней версии из комплекта. Запись ответа по старой версии возвращает 409, даже если ведомство входит в новый маршрут. Дедлайн жалобы сохраняется. Смена назначения доступна оператору маршрутизации до публикации итогового ответа.

Scenario: SCN-POS-009 — Переназначение и запоздавший ответ

Подробности и данные: acceptance/scenarios/scn-pos-009.json.

Requirement: REQ-RTE-004 — Конкурентное изменение маршрута

{
  "id": "REQ-RTE-004",
  "level": "REQ",
  "status": "agreed",
  "owner": "product-owner",
  "parents": [
    "HLR-POS-003"
  ],
  "sources": [
    "docs/models.md"
  ],
  "questions": [],
  "required_aspects": [
    "version_conflict"
  ],
  "verification": "test",
  "risk": "high"
}

Система MUST принимать изменение маршрута только с актуальной версией жалобы. Из двух изменений с одной исходной версией ровно одно применяется; второе получает 409 и актуальную версию без потери первого изменения.

Scenario: SCN-POS-018 — Конкурентная маршрутизация

Подробности и данные: acceptance/scenarios/scn-pos-018.json.