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 — Аналитика когорты и временного среза
- GIVEN Изолированная когорта из набора; формула версии1
- WHEN Построить отчёт с from,to,as_of каждого случая
- THEN Точные показатели когорты по expected.metrics
Подробности и данные: 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 — Аналитика когорты и временного среза
- GIVEN Изолированная когорта из набора; формула версии1
- WHEN Построить отчёт с from,to,as_of каждого случая
- THEN Равенство не просрочка; поздний ответ и открытая просрочка считаются отдельно
Подробности и данные: 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 — Аналитическая роль и запрещённые поля
- GIVEN Роль analyst; фиксированные разрешённые измерения
- WHEN Запросить агрегаты и затем идентификаторы/текст
- THEN Только агрегаты; малые ячейки suppressed; 403 при запросе запрещённых полей
Подробности и данные: acceptance/scenarios/scn-pos-016.json.