Джина Гайд

analytics Specification

Purpose

Аналитика обработки жалоб в системе «Обратная связь — регион».

Requirements

Requirement: REQ-ANA-001 — Единицы подсчёта

{
  "id": "REQ-ANA-001",
  "level": "REQ",
  "status": "agreed",
  "owner": "product-owner",
  "parents": [
    "HLR-POS-006"
  ],
  "sources": [
    "DEC-POS-005",
    "contracts/analytics-input.schema.json"
  ],
  "questions": [],
  "required_aspects": [
    "distinct_complaints",
    "assignments"
  ],
  "verification": "test",
  "risk": "high"
}

Система MUST считать complaints_total как число различных complaint_id в выбранном диапазоне registered_at [from,to), с registered_at ≤ as_of. assignments_total — число созданных на as_of поручений этих жалоб, включая superseded; входной снимок содержит это число на выбранный момент. answered_total — число этих жалоб с published_at ≤ as_of. Одна жалоба с двумя поручениями увеличивает complaints_total на 1 и assignments_total на 2. Отчёт фиксирует from, to, as_of и версию формулы.

Scenario: SCN-POS-015 — Аналитика когорты и временного среза

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

Requirement: REQ-ANA-002 — Просрочка на временном срезе

{
  "id": "REQ-ANA-002",
  "level": "REQ",
  "status": "agreed",
  "owner": "product-owner",
  "parents": [
    "HLR-POS-006",
    "HLR-POS-008"
  ],
  "sources": [
    "DEC-POS-002",
    "DEC-POS-005"
  ],
  "questions": [],
  "required_aspects": [
    "boundary",
    "late_answer"
  ],
  "verification": "test",
  "risk": "high"
}

Система MUST считать open_overdue_total для жалоб выбранной когорты с deadline_at < as_of, у которых published_at отсутствует или published_at > as_of. late_answered_total — для опубликованных на срезе жалоб с published_at > deadline_at. Равенство deadline_at не считается просрочкой. Дата внутреннего согласования ответа не заменяет published_at. Жалобы, зарегистрированные после as_of, не входят в срез.

Scenario: SCN-POS-015 — Аналитика когорты и временного среза

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

Requirement: REQ-ANA-003 — Ограниченная аналитическая выгрузка

{
  "id": "REQ-ANA-003",
  "level": "REQ",
  "status": "agreed",
  "owner": "product-owner",
  "parents": [
    "HLR-POS-006",
    "HLR-POS-007"
  ],
  "sources": [
    "DEC-POS-006"
  ],
  "questions": [],
  "required_aspects": [
    "aggregate_only",
    "denied_fields"
  ],
  "verification": "test",
  "risk": "high"
}

Система MUST предоставлять роли analyst только агрегаты по категории, территории и ведомству без complaint_id, author_id, исходного текста и полного ответа. Запрос недопустимого поля возвращает 403. В системе «Обратная связь — регион» ячейки с количеством менее 5 показываются как suppressed без раскрытия точного числа; этого правила недостаточно для общей гарантии обезличивания — реальная политика согласуется отдельно.

Scenario: SCN-POS-016 — Аналитическая роль и запрещённые поля

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