{ "clients": [ { "id": "client_romashka", "type": "company", "name": "DCTOUCH", "legalName": "ООО ДИСИТАЧ", "status": "active", "demoEndsAt": "2026-05-29T21:00:00.000Z", "contactName": "Иван Петров", "contactEmail": "suppert@dctouch.ru", "notes": "Основной demo-клиент для проверки Task Manager, NodeDC и deny-исключений.", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T21:04:34.270Z", "contractEndsAt": "2026-05-30T21:00:00.000Z", "contractStartsAt": "2026-04-25T21:00:00.000Z" }, { "id": "client_roga_kopyta", "type": "company", "name": "ООО Рога и Копыта", "legalName": "ООО Рога и Копыта", "status": "demo", "demoEndsAt": "2026-06-01T00:00:00Z", "contactName": "Мария Иванова", "contactEmail": "maria@example.ru", "notes": "Клиент на демо-доступе, подключены только базовые сервисы.", "createdAt": "2026-04-10T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "client_private_architect", "type": "person", "name": "Илья Архитектор", "legalName": null, "status": "suspended", "demoEndsAt": "2026-04-20T00:00:00Z", "contactName": "Илья Архитектор", "contactEmail": "ilya@example.ru", "notes": "Пример приостановленного частного клиента.", "createdAt": "2026-03-14T10:00:00Z", "updatedAt": "2026-05-01T21:03:56.861Z", "contractStartsAt": "2026-04-30T21:00:00.000Z", "contractEndsAt": "2026-05-30T21:00:00.000Z" } ], "users": [ { "id": "user_root", "authentikUserId": "ak-root", "name": "Root Admin", "email": "root@nodedc.local", "globalStatus": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "user_ivan", "authentikUserId": "ak-ivan", "name": "Иван Петров", "email": "ivan@romashka.ru", "globalStatus": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "user_vera", "authentikUserId": "ak-vera", "name": "Вера Соколова", "email": "vera@romashka.ru", "globalStatus": "active", "createdAt": "2026-04-02T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "user_vasya", "authentikUserId": "ak-vasya", "name": "Василий Орлов", "email": "vasya@romashka.ru", "globalStatus": "active", "createdAt": "2026-04-05T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "user_lena", "authentikUserId": "ak-lena", "name": "Лена Волкова", "email": "lena@romashka.ru", "globalStatus": "active", "createdAt": "2026-04-08T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "user_maria", "authentikUserId": "ak-maria", "name": "Мария Иванова", "email": "maria@example.ru", "globalStatus": "active", "createdAt": "2026-04-10T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "user_blocked", "authentikUserId": "ak-blocked", "name": "Олег Заблокирован", "email": "oleg@romashka.ru", "globalStatus": "blocked", "createdAt": "2026-04-12T10:00:00Z", "updatedAt": "2026-05-01T18:49:59.865Z" } ], "memberships": [ { "id": "mem_ivan_romashka", "clientId": "client_romashka", "userId": "user_ivan", "role": "client_owner", "status": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "mem_vera_romashka", "clientId": "client_romashka", "userId": "user_vera", "role": "client_admin", "status": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "mem_vasya_romashka", "clientId": "client_romashka", "userId": "user_vasya", "role": "member", "status": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "mem_lena_romashka", "clientId": "client_romashka", "userId": "user_lena", "role": "member", "status": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "mem_blocked_romashka", "clientId": "client_romashka", "userId": "user_blocked", "role": "member", "status": "disabled", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "mem_maria_roga", "clientId": "client_roga_kopyta", "userId": "user_maria", "role": "client_owner", "status": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "mem_ivan_roga", "clientId": "client_roga_kopyta", "userId": "user_ivan", "role": "client_admin", "status": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" } ], "groups": [ { "id": "group_romashka_leads", "clientId": "client_romashka", "name": "Руководство", "description": "Собственники и руководители клиента.", "memberIds": [ "user_ivan", "user_vera" ], "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "group_romashka_accounting", "clientId": "client_romashka", "name": "Бухгалтерия", "description": "1C и финансовые сценарии.", "memberIds": [ "user_lena" ], "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "group_romashka_ops", "clientId": "client_romashka", "name": "Операторы", "description": "Ежедневная работа в задачах и тендерах.", "memberIds": [ "user_vasya", "user_lena" ], "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "group_roga_demo", "clientId": "client_roga_kopyta", "name": "Демо-команда", "description": "Пилотный контур клиента.", "memberIds": [ "user_maria", "user_ivan" ], "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" } ], "services": [ { "id": "service_nodedc", "slug": "nodedc", "title": "AGENT CORE", "subtitle": "Агентная платформа", "description": "Сборка, запуск и мониторинг агентных workflow.", "fullDescription": "NodeDC используется для настройки агентных процессов, визуальной оркестрации, интеграций и runtime-мониторинга.", "url": "https://dev.handhdc.ru", "launchUrl": "https://dev.handhdc.ru/sso/launch", "accentColor": "#B5FF5A", "fallbackGradient": "linear-gradient(128deg, rgba(181, 255, 90, 0.84), rgba(37, 58, 36, 0.86) 42%, #0A0D10 82%)", "status": "active", "order": 10, "authentikApplicationSlug": "nodedc", "authentikGroupName": "service-nodedc", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-02T08:15:08.667Z", "coverImageUrl": "/storage/uploads/1777649382309-49d8c393-2026-05-01-17.31.21.jpg", "coverMediaKind": "image", "coverMediaSource": "file", "coverMediaFileName": "1777649382309-49d8c393-2026-05-01-17.31.21.jpg", "ambientVideoUrl": "/storage/uploads/1777649395844-a878de95-090aff247929335.69e6521716ea9.gif", "ambientMediaKind": "gif", "ambientMediaSource": "file", "ambientMediaFileName": "1777649395844-a878de95-090aff247929335.69e6521716ea9.gif" }, { "id": "service_task_manager", "slug": "task-manager", "title": "OPERATIONAL CORE", "subtitle": "Операционный слой", "description": "Задачи, контуры предприятия, процессы и AI-функции поверх задачника.", "fullDescription": "Task Manager основан на архитектуре Plane и расширен AI-функциями NODE.DC.", "url": "https://tasks.handhdc.ru", "launchUrl": "https://tasks.handhdc.ru/sso/launch", "accentColor": "#D7C8FF", "fallbackGradient": "linear-gradient(132deg, rgba(215, 200, 255, 0.82), rgba(51, 41, 79, 0.9) 46%, #0B0D10 84%)", "status": "active", "order": 20, "authentikApplicationSlug": "task-manager", "authentikGroupName": "service-task-manager", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-02T08:15:01.508Z", "coverImageUrl": "/storage/uploads/1777652545129-cf547e17-NODEDC_TASK.png", "coverMediaKind": "image", "coverMediaSource": "file", "coverMediaFileName": "1777652545129-cf547e17-NODEDC_TASK.png" }, { "id": "service_1c", "slug": "1c-assistant", "title": "1C AI ASSISTANT", "subtitle": "Бухгалтерский ассистент", "description": "Вопросы к 1С, точные выборки и доказательная навигация по данным.", "fullDescription": "Ассистент для бухгалтерских запросов, анализа операций, остатков и документов.", "url": "https://1c.handhdc.ru", "launchUrl": "https://1c.handhdc.ru/sso/launch", "accentColor": "#8FD7FF", "fallbackGradient": "linear-gradient(126deg, rgba(143, 215, 255, 0.8), rgba(32, 61, 80, 0.9) 44%, #080B0F 84%)", "status": "maintenance", "order": 40, "authentikApplicationSlug": "1c-assistant", "authentikGroupName": "service-1c-assistant", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-02T08:16:05.517Z", "coverImageUrl": "/storage/uploads/1777657277366-a9886413-LLM_MANAGER.png", "coverMediaKind": "image", "coverMediaSource": "file", "coverMediaFileName": "1777657277366-a9886413-LLM_MANAGER.png" }, { "id": "service_tender", "slug": "tender-agent", "title": "TENDER AI AGENT", "subtitle": "Госзакупки и тендеры", "description": "Поиск, анализ и подготовка тендерных решений.", "fullDescription": "Сервис собирает тендерные данные, строит выжимку рисков и помогает подготовить пакет участия.", "url": "https://tender.handhdc.ru", "launchUrl": "https://tender.handhdc.ru/sso/launch", "accentColor": "#FFD166", "fallbackGradient": "linear-gradient(135deg, rgba(255, 209, 102, 0.84), rgba(74, 53, 19, 0.92) 42%, #0B0D10 86%)", "status": "active", "order": 30, "authentikApplicationSlug": "tender-agent", "authentikGroupName": "service-tender-agent", "createdAt": "2026-04-03T10:00:00Z", "updatedAt": "2026-05-02T08:15:32.328Z", "coverImageUrl": "/storage/uploads/1777652810531-1f17b7ed-LAP_PURP4k.jpg", "coverMediaKind": "image", "coverMediaSource": "file", "coverMediaFileName": "1777652810531-1f17b7ed-LAP_PURP4k.jpg", "ambientVideoUrl": "/storage/uploads/1777652817155-199c5e6c-090aff247929335.69e6521716ea9.gif", "ambientMediaKind": "gif", "ambientMediaSource": "file", "ambientMediaFileName": "1777652817155-199c5e6c-090aff247929335.69e6521716ea9.gif" }, { "id": "service_digital_twin", "slug": "digital-twin", "title": "DIGITAL TWIN MOSCOW", "subtitle": "3D и пространственные данные", "description": "Просмотр цифровых двойников, карт и объектных сцен.", "fullDescription": "Витрина геометрии, объектов, слоёв и статусов инфраструктуры.", "url": "https://twin.handhdc.ru", "launchUrl": "https://launch.dcserve.ru/", "accentColor": "#76E4F7", "fallbackGradient": "linear-gradient(140deg, rgba(118, 228, 247, 0.82), rgba(23, 69, 87, 0.92) 47%, #080B0F 86%)", "status": "active", "order": 50, "authentikApplicationSlug": "digital-twin", "authentikGroupName": "service-digital-twin", "createdAt": "2026-04-05T10:00:00Z", "updatedAt": "2026-05-02T08:55:28.665Z", "coverImageUrl": "/storage/uploads/1777711943125-691830c2-NODEDC_DT_MMAP.png", "coverMediaKind": "image", "coverMediaSource": "file", "coverMediaFileName": "1777711943125-691830c2-NODEDC_DT_MMAP.png" }, { "id": "service_dm", "slug": "digital-modules", "title": "Digital Modules", "subtitle": "Будущие модули", "description": "Скрытый каталог модулей для root-admin preview.", "fullDescription": "Площадка для будущих цифровых модулей NODE.DC.", "url": "https://dm.handhdc.ru", "launchUrl": "https://dm.handhdc.ru/sso/launch", "accentColor": "#FF9AC2", "fallbackGradient": "linear-gradient(135deg, rgba(255, 154, 194, 0.78), rgba(76, 41, 64, 0.9) 44%, #090B0F 86%)", "status": "hidden", "order": 60, "authentikApplicationSlug": "digital-modules", "authentikGroupName": "service-digital-modules", "createdAt": "2026-04-10T10:00:00Z", "updatedAt": "2026-05-01T17:59:10.713Z" } ], "grants": [ { "id": "grant_romashka_task", "serviceId": "service_task_manager", "targetType": "client", "targetId": "client_romashka", "appRole": "member", "status": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "grant_romashka_nodedc_leads", "serviceId": "service_nodedc", "targetType": "group", "targetId": "group_romashka_leads", "appRole": "admin", "status": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "grant_romashka_1c_accounting", "serviceId": "service_1c", "targetType": "group", "targetId": "group_romashka_accounting", "appRole": "member", "status": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "grant_romashka_tender_ops", "serviceId": "service_tender", "targetType": "group", "targetId": "group_romashka_ops", "appRole": "viewer", "status": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "grant_romashka_twin_vasya", "serviceId": "service_digital_twin", "targetType": "user", "targetId": "user_vasya", "appRole": "viewer", "status": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "grant_roga_task", "serviceId": "service_task_manager", "targetType": "client", "targetId": "client_roga_kopyta", "appRole": "member", "status": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "grant_roga_nodedc", "serviceId": "service_nodedc", "targetType": "client", "targetId": "client_roga_kopyta", "appRole": "viewer", "status": "active", "createdAt": "2026-04-01T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" } ], "exceptions": [ { "id": "exception_lena_task_deny", "serviceId": "service_task_manager", "userId": "user_lena", "type": "deny", "reason": "Индивидуально отключён Task Manager на период ревизии доступа.", "createdAt": "2026-04-28T10:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" } ], "invites": [ { "id": "invite_romashka_analyst", "clientId": "client_romashka", "email": "analyst@romashka.ru", "role": "member", "invitedByUserId": "user_ivan", "token": "romashka-analyst-demo", "expiresAt": "2026-05-15T12:00:00Z", "status": "sent", "createdAt": "2026-04-30T12:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "invite_roga_admin", "clientId": "client_roga_kopyta", "email": "ops@example.ru", "role": "client_admin", "invitedByUserId": "user_maria", "token": "roga-admin-demo", "expiresAt": "2026-05-18T12:00:00Z", "status": "created", "createdAt": "2026-04-30T14:00:00Z", "updatedAt": "2026-05-01T09:00:00Z" } ], "syncStatuses": [ { "id": "sync_romashka_auth", "objectId": "client_romashka", "objectName": "ООО Ромашка", "objectType": "client", "target": "authentik", "state": "synced", "lastSyncAt": "2026-05-01T08:00:00Z", "error": null, "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "sync_task_auth", "objectId": "service_task_manager", "objectName": "Task Manager", "objectType": "service", "target": "authentik", "state": "synced", "lastSyncAt": "2026-05-01T08:00:00Z", "error": null, "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "sync_lena_task", "objectId": "exception_lena_task_deny", "objectName": "Deny: Лена / Task Manager", "objectType": "grant", "target": "task_manager", "state": "pending", "lastSyncAt": null, "error": null, "updatedAt": "2026-05-01T09:00:00Z" }, { "id": "sync_roga_nodedc", "objectId": "client_roga_kopyta", "objectName": "ООО Рога и Копыта", "objectType": "client", "target": "nodedc", "state": "error", "lastSyncAt": "2026-05-01T08:00:00Z", "error": "OIDC binding ещё не создан для demo-клиента.", "updatedAt": "2026-05-01T09:00:00Z" } ], "auditEvents": [ { "id": "audit_1", "at": "2026-05-01T08:40:00Z", "actorUserId": "user_root", "actorName": "Root Admin", "action": "Создан сервис", "objectType": "service", "objectName": "Digital Modules", "clientId": "client_romashka", "result": "success", "details": null }, { "id": "audit_2", "at": "2026-05-01T08:20:00Z", "actorUserId": "user_ivan", "actorName": "Иван Петров", "action": "Создан invite", "objectType": "invite", "objectName": "analyst@romashka.ru", "clientId": "client_romashka", "result": "success", "details": "Срок действия до 15.05.2026" }, { "id": "audit_3", "at": "2026-04-30T17:10:00Z", "actorUserId": "user_root", "actorName": "Root Admin", "action": "Создано deny-исключение", "objectType": "access", "objectName": "Лена / Task Manager", "clientId": "client_romashka", "result": "warning", "details": "Индивидуальное правило перекрыло client grant." }, { "id": "audit_4", "at": "2026-04-30T16:00:00Z", "actorUserId": "user_root", "actorName": "Root Admin", "action": "Ошибка синхронизации", "objectType": "sync", "objectName": "ООО Рога и Копыта / NodeDC", "clientId": "client_romashka", "result": "error", "details": "Нет application binding." } ] }