# Aatex Analytics

> Аналитика по доскам ЦУП ААТех — сводки, просроченные карточки, загрузка команды. Применяй для "сколько задач", "что просрочено", "кто перегружен", "статистика по доске", "сводка по проекту", "кто чем занят". Использует прямые DB запросы для быстрых агрегатов.

- Skill: `awaik/aatex-analytics` (Agent Skill)
- Install (CLI): `npx skillmds@latest add awaik/aatex-analytics`
- Raw SKILL.md: https://api.skillmd.com/api/skills/awaik/aatex-analytics/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: awaik (https://skillmd.com/u/awaik)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/awaik/aatex-analytics

---


# Аналитика по доскам

## Когда использовать

Пользователь хочет увидеть агрегированную картину:
- Сводку состояния доски (счётчики по колонкам, без ответственного, просроченные)
- Просроченные карточки (плановая дата окончания в прошлом)
- Кто из команды чем загружен
- Общий статус проекта

**Не используй для поштучного просмотра** — для этого `list_cards` / `search_cards`.

## Инструменты

| Инструмент | Параметры | Возвращает |
|-----------|-----------|-----------|
| `get_board_summary` | `boardId` | Счётчики: всего, по колонкам, без ответственного, в финальной, просроченные |
| `get_overdue_cards` | `boardId, limit?` | Список просроченных (не в финальной колонке) |
| `get_team_workload` | `boardId` | Загрузка участников по типам карточек + unassigned count |

## Сценарии

### 1. Быстрая сводка по доске

```
get_board_summary(boardId)
```

Возвращает:
```json
{
  "boardTitle": "Производство",
  "totalCards": 42,
  "columns": [
    {"title": "Новые", "count": 5},
    {"title": "В работе", "count": 20},
    {"title": "Готово", "count": 17}
  ],
  "withoutResponsible": 3,
  "inFinalColumn": 17,
  "overdue": 4
}
```

**Используй для:** «как дела на доске X», «сколько задач в Y», первый шаг любой аналитической задачи.

### 2. Просроченные карточки

```
get_overdue_cards(boardId, limit: 50)
```

Возвращает карточки, где `productionEndDatePlanned < сегодня` **и** колонка **не финальная** (если не финальная, значит работа не завершена).

Для каждой карточки: `id, title, columnId, responsibleUserId, productionEndDatePlanned, cardType`.

**Типичный запрос:** «что просрочено», «какие задачи горят».

Дальше — можно:
- Показать список с датами
- Для каждой — `get_card` → детали, контрагенты
- Предложить переназначить ответственного (`assign_responsible`) или передвинуть сроки (`update_card`)

### 3. Загрузка команды

```
get_team_workload(boardId)
```

Возвращает:
```json
{
  "members": [
    {
      "userId": "uid_abc",
      "name": "Иван Иванов",
      "total": 12,
      "byType": { "order": 3, "position": 8, "documentation": 1 }
    },
    ...
  ],
  "unassignedCards": 3
}
```

Отсортировано по `total` убыв. — первые самые загруженные.

**Используй для:** «кто перегружен», «у кого свободно», «как распределена нагрузка».

### 4. Комбинированная картина проекта

Пользователь: «Покажи текущий статус по проекту X»

```
1. list_all_boards → найти доску по названию
2. get_board_summary(boardId) → общая картина
3. get_overdue_cards(boardId, limit: 10) → что горит
4. get_team_workload(boardId) → кто вовлечён
```

Сформируй сводку:

> **Доска «Проект X»** — 42 карточки
>
> - В работе: 20, готово: 17, новые: 5
> - Без ответственного: 3
> - Просрочено: 4 (можем посмотреть какие?)
>
> **Загрузка:**
> - Иван Иванов — 12 (3 заказа, 8 позиций, 1 документация)
> - Пётр Петров — 7 (1 заказ, 6 позиций)
> - Без назначенного: 3
>
> Что рассмотрим подробнее?

## Важные нюансы

### Фильтры запросов

Все три инструмента **автоматически**:
- Фильтруют по `organizationId`
- Исключают архивные (`isArchived = false`)
- Исключают скрытые (`isHidden = false`)

### Доступ

Требуется доступ к доске (через `userIds`). Если доски не видно в `list_all_boards`, analytics вернёт `Access denied`.

### Просроченные — только не в финальной

`get_overdue_cards` проверяет `columnId NOT IN finalColumnIds`. Финальная колонка (`isFinalColumn: true`) в настройках доски означает завершение — такие карточки **не считаются просроченными**, даже если дата в прошлом.

### Unassigned в workload

`unassignedCards` — карточки без `responsibleUserId`. Это отдельный счётчик, не включается в `members[].total`.

### Группировка по типам

`byType` — ключ = `cardType`, значение = количество. Если `cardType` null — группа `"untyped"`.

## Типичные ошибки

| Ошибка | Причина |
|--------|---------|
| `Board not found` | ID неверный или доска в другой орге |
| `Access denied` | Нет в `userIds` доски |
| Пустой `members` массив | На доске нет активных карточек с ответственным |

## Связь с другими скиллами

- **`aatex-navigation`** — найти нужную доску перед аналитикой
- **`aatex-cards`** — глубже нырнуть в конкретную карточку после сводки
- **`aatex-messenger`** — отправить найденного «перегруженного» участника через `send_message`

## Когда НЕ использовать

- Счёт карточек пользователя **по всей орге** — используй `get_user_cards(userId)`, а не `get_team_workload` (тот только по одной доске)
- Исторический тренд — MCP не хранит снапшоты, только текущее состояние
- Расчёт сроков / планирование — данные есть, но агрегаты упрощённые, для детального планирования используй UI

