Skip to content

Collatio

Согласование документов. UI: «Согласование», путь /collatio (сайдбар, как Консьерж). Данные scoped по выбранному пространству. Секция ACL: collatio. Ключ карточки: CLT-N.

Порты

ПортНазначение
8108HTTP REST (PM2)
18108Docker host
  • БД: collatio_db
  • Gateway: /proxy/collatio/

Назначение

Отдельный сервис, не конфиг Task Tracker. Маршрут — versioned graph (как pipeline templates): raw ng-diagram JSON, save = новая версия. Узлы: startNode, stageNode, endNode. Ребро этапа на endNode — нет следующих этапов → карточка approved. Задача снимает snapshot этапов в цикл. Процесс уходит в архив (archived_at), не удаляется: скрыт из пикера, новые карточки с него нельзя стартовать, текущие циклы живут на snapshot. EnsureDefault считает и архивные — иначе после архива последнего процесса снова появляется «Договор».

Статусы: new, in_review, approved, rework, rejected, completed, hold.

Решения этапа (approved / rework / rejected) append-only. rework сразу переводит карточку; rejected ждёт закрытия этапа. Hold / Complete / новый цикл — только инициатор.

Рабочие дни: weekday hours минус hold_seconds, / 8. Праздников нет.

Обсуждение — messaging (collatio / collation). Резолюция хранится на collation_decisions.

API

База: /api/v1/collatio — JWT + секция collatio. Без space_id в пути. view — свои карточки (инициатор или исполнитель этапа), старт (POST /), решение участника (POST /:id/decisions), повторный цикл и замена файла на доработке (POST /:id/cycles, PATCH /:id). GET /routes без графа. edit — ещё граф процесса, мутации /routes/:id и удаление любой карточки (DELETE /:id).

Список: q (title/key), scope (active = new/in_review/rework/hold, history = approved/rejected/completed, inbox = ждёт решения текущего пользователя), status, document_type, participant_id, created_from.

GET /stats читает rollup-таблицы (collation_stat_spaces, _users, _routes, _route_users), не живые карточки. Счётчики пишутся на create / decide / hold / resume / complete / delete. Ответ: KPI, by_status, by_route[] (by_status, slowest_user_id, slowest_wait_days), people[] отсортированы по суммарному времени на этапе (wait_days, плюс max_wait_days / avg_wait_days; открытые waiting этапы добавляются в сумму). Время — раб. дн. = секунды / 8ч. Пустой rollup при наличии карточек пересобирается один раз.

GET/POST     /
GET          /inbox
GET          /stats
GET          /key/:key
GET/PATCH/DELETE /:id   PATCH — файлы, только инициатор на `rework`
POST         /:id/decisions
POST         /:id/hold
POST         /:id/resume
POST         /:id/complete
POST         /:id/cycles
GET          /:id/analytics
GET          /:id/history
GET          /types
GET/POST     /routes                 ?archived=1 — архив
GET/PATCH/DELETE /routes/:route_id   DELETE = архив
POST         /routes/:route_id/archive
POST         /routes/:route_id/restore
POST         /routes/:route_id/templates
GET          /routes/:route_id/templates
GET          /routes/:route_id/templates/:version

S2S: GET /api/v1/internal/access (RequireService) для messaging.

Swagger: /swagger/index.html

События

SubjectКогда
collatio.createdКарточка создана
collatio.status_changedСмена статуса
collatio.decisionРешение этапа
collatio.stage_queuedЭтап в очереди
collatio.deletedУдаление (каскад messaging)

NATS Bridge: collatio.> → namespace collatio.

Notifications: collatio.assigned на stage_queued (исполнители этапа, link = /collatio/:key), плюс collatio.status_changed / collatio.rework / collatio.completed наблюдателям.

Env

ПеременнаяПо умолчаниюНазначение
PORT8108HTTP. Docker host: COLLATIO_PORT (18108)
DB_NAMEcollatio_dbPostgreSQL
JWT_SECRETПодпись JWT
SERVICE_TOKENS2S
MESSAGING_URLnats://localhost:4222NATS
SPACES_SERVICE_URLhttp://localhost:8092Проверка пространства

Gateway / messaging ACL: COLLATIO_SERVICE_URL (http://localhost:8108).

Интеграции

  • Storage категория collatio
  • Messaging comment_resources collatio / collation
  • Auth секция collatio