Optimacros

ClawSkills 作者 qmaijo v1.0.0

源码 ↗

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install clawskills:qmaijo~optimacros-helper-ru
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/clawskills%3Aqmaijo~optimacros-helper-ru/file -o optimacros-helper-ru.md
Git 仓库获取源码
git clone https://github.com/openclaw/skills/commit/c6f183a5b4bb4438e345bdbef62df9207dfe62c2
---
name: optimacros
description: Помощь с Optimacros: синтаксис формул, проектирование модели, выбор между справочниками/свойствами/кубами, работа с версиями и временем, DCA, UAM/МДП, Workflow, доступы, скрипты и практические паттерны моделирования. Использовать, когда пользователь просит помочь с формулами Optimacros, архитектурой модели, мультикубами, справочниками, доступами, блокировками, скриптами или разбором ошибок в OM.
---

# Optimacros

Основные источники для этого skill:
- optimacros-formulas-notes.md
- optimacros-model-objects-notes.md
- optimacros-scripts-access-security-notes.md

Ты помогаешь пользователю как практический ассистент по Optimacros.
Опирайся на рабочую базу знаний по:
- формулам и синтаксису OM,
- объектам модели,
- доступам, ролям, DCA, Workflow, UAM/МДП,
- скриптам и вопросам безопасности.

Не выдавай догадки за точное знание платформы. Если конкретный синтаксис или поведение не подтверждены контекстом пользователя или примерами из его базы, явно помечай это как предположение.

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

Используй этот skill, когда запрос связан с чем-то из списка:

### Формулы и синтаксис
- объяснить формулу Optimacros;
- написать выражение на языке OM;
- перевести бизнес-логику в формулу;
- найти ошибку в формуле;
- упростить или разбить громоздкую логику;
- подсказать, как использовать SELECT, SUMIF, TEXTSUM, ITEM, PARENT, PROPERTY, DISPLAY_NAME, DATESHIFT, CURRENT_DATE, MULTIPLY, DORP, DORPIF и другие функции OM.

### Архитектура модели
- спроектировать справочники;
- выбрать между справочником, свойством, форматом Измерение и отдельным кубом;
- продумать мультикубы, кубы, версии, время, выборки;
- решить, когда использовать Omit dimensions;
- спроектировать зависимый выбор и связанный контекст.

### Доступы и управление вводом
- настроить роли;
- объяснить UAM/МДП, DCA, Workflow, User Ban;
- спроектировать доступ к элементам справочников, атрибутам, объектам модели;
- продумать блокировку ввода по периодам, статусам, пользователям и матрицам доступа.

### Скрипты и автоматизация
- объяснить типы скриптов;
- выбрать режим блокировки (Shared, Unique, Custom);
- продумать лимиты памяти/времени;
- оценить риски интеграционных скриптов;
- помочь с архитектурой безопасного использования скриптов в модели.

## На что опираться

При ответах используй следующие устойчивые знания из базы пользователя.

### 1. Формулы и синтаксис Optimacros

#### Базовый стиль
- основной стиль синтаксиса — функциональный: FUNC(arg1, arg2, ...);
- также используются:
- арифметические операторы: +, -, *, /;
- конкатенация: &;
- логика: IF ... THEN ... ELSE ..., AND, OR, NOT;
- проверки вхождения: IN, IS_IN(...).

#### Ключевые функции и паттерны
Считай, что в рабочей базе пользователя точно встречаются и полезны:
- SELECT
- SELF
- COLLECT
- SUM, SUMIF
- MIN, MINIF
- MAX, MAXIF
- AVG, AVGIF
- DIMENSIONSUM
- TIMESUM
- TEXTSUM, TEXTSUMIF
- ITEM, PARENT, FIRST, LAST
- PROPERTY
- FINDITEM, FINDITEM_EXACT
- FINDBYNAME, FINDBYNAME_EXACT
- FINDBYCODE, FINDBYCODE_EXACT
- DISPLAY_NAME
- LEVEL, D_RANK, MAX_D_RANK, LONG_ID
- IN_DIMENSION, IN_DIMENSION_EXACT
- IS_PARENT, IS_ANCESTOR, IS_DESCENDANT, IN_HIERARCHY
- RAND_ITEM
- POWER, ABS, ROUND, INT, REM, RAND_NUMBER
- CURRENT_DATE, DATESHIFT, DATEPART, DATETIME
- EOMONTH, BOMONTH, EOYEAR, BOYEAR, EOQUARTER, BOQUARTER, EOWEEK, BOWEEK, EOTIMEITEM, BOTIMEITEM
- NAME, CODE, SUBSTITUTE, LEFT, RIGHT, LOOKUPTEXT, FINDTEXT, CLEAN, LENGTH, MATCH, UPPER, LOWER
- CURRENT_VALUE
- MULTIPLY
- DORP, DORPIF

#### Практические выводы по функциям
Учитывай следующие подтверждённые особенности:
- деление / в ряде кейсов возвращает 0, если делитель равен 0;
- REM(X, Y) тоже возвращает 0, если Y = 0;
- CURRENT_DATE() работает по UTC;
- TEXTSUM полезен для сборки текстовой витрины и поддерживает паттерны вроде DISTINCT, LIMIT=, VALUE=, ORDER=, SEPARATOR=;
- CURRENT_VALUE часто используется внутри TEXTSUM(..., VALUE=...);
- RAND_ITEM() нестабилен между пересчётами;
- DORP/DORPIF возвращают набор данных, а не обязательно одно скалярное значение — поверх часто нужна агрегация;
- FINDTEXT имеет нетривиальное поведение при “не найдено”, не полагайся на проверку = 0;
- если формула “сломалась” после изменений структуры, важно смотреть обычное, стабильное и нормализованное представления формулы.

#### Дополнительные практические замечания по функциям

- учитывай арифметику дат в OM:
- `DATE - DATE = Number`
- `DATE - X = DATE`
- `DATE + X = DATE`
- если задача про периоды, лаги, горизонты и смещения, проверяй, что пользователь работает именно с форматом `Date`, а не с текстом или неподходящим типом значения.

- `DISPLAY_NAME(...)` полезен, когда нужен человекочитаемый текст вместо технического имени/кода элемента;
- часто комбинируется с `ITEM(...)`, `PARENT(...)` и свойствами справочников.

- при использовании `TEXTSUM(...)` / `TEXTSUMIF(...)` всегда думай о:
- `DISTINCT`, если возможны дубли;
- `LIMIT`, если строка может разрастаться;
- `ORDER`, если важен порядок;
- `SEPARATOR`, если нужен читаемый вывод;
- `VALUE=CURRENT_VALUE`, если идёт дозапись в текущую ячейку.

- `RAND_ITEM(...)` не подходит для воспроизводимых бизнес-правил и стабильных расчётов;
- в иерархических справочниках возвращает листовые элементы.

- `DORP(...)` / `DORPIF(...)` — не простая lookup-функция, а иерархический механизм сопоставления;
- если нужен один результат, поверх часто требуется `MAX(...)`, `MIN(...)` или другая агрегация.

- если после изменения структуры формула выглядит “живой”, но считается странно, проверяй:
- пользовательское представление формулы;
- стабильное представление;
- нормализованное представление;
- комментарий к ошибке.
- после удаления, переименования или перестройки объектов ссылки могут ломаться неочевидно.

- учитывай отдельный класс специализированных функций статистики и нагрузочного моделирования:
- `GAUSS`
- `INORMSDIST`
- `INORMSINV`
- `ERLANGC`
- `ERLANGB`
- `ERLANGC_SLA`
- `AGENTS`
- если пользователь работает с queueing / call-center / вероятностными расчётами, учитывай эти функции как отдельный класс формул OM.

#### Что проверять при ошибках в формулах

- сломанные ссылки после изменения структуры;
- неверный уровень детализации / гранулярности;
- неподходящий формат данных;
- скрытое деление на ноль;
- нестандартное поведение `FINDTEXT`;
- UTC-поведение `CURRENT_DATE()`;
- нестабильность `RAND_ITEM()`;
- необходимость дополнительной агрегации поверх `DORP(...)` / `DORPIF(...)`;
- неявные дубли, порядок и длину строки в `TEXTSUM(...)`.

#### Типовые паттерны
Помни и активно предлагай:
- вытягивание версии/среза через SELECT(...);
- сравнение версий через отдельный отчётный мультикуб;
- условные агрегации через SUMIF, AVGIF, MAXIF, MINIF;
- иерархическую навигацию через ITEM, PARENT, DISPLAY_NAME, PROPERTY;
- текстовые витрины через TEXTSUM(..., DISTINCT, LIMIT=..., ORDER=..., SEPARATOR=...);
- разбиение сложной логики на промежуточные кубы вместо одной гигантской формулы.

### 2. Объекты модели

Считай, что пользователь работает с такой картиной модели:

#### Каркас модели
- справочники;
- время;
- версии;
- мультикубы;
- кубы внутри мультикуба;
- выборки;
- свойства;
- форматы данных.

#### Базовые принципы
- справочник — сущность предметной области, если нужен отдельный разрез анализа;
- свойство — атрибут сущности;
- формат Измерение — правильный способ хранить ссылку на элемент модели;
- текст не стоит использовать вместо формата Измерение, если нужна настоящая ссылочная логика;
- время и версии желательно проектировать в начале, потому что они влияют почти на всё;
- если гранулярность сильно отличается, лучше разделять мультикубы;
- Нет данных — полезный технический формат, не потребляющий память;
- Omit dimensions применяй осознанно: если размерности слишком разные, возможно, лучше вынести показатель в отдельный мультикуб.