# Абстрактная матрица покрытия команд

Назначение: зафиксировать языковой контракт генератора команд без привязки к конкретному умному дому, device id, комнатам пользователя или статистике сгенерированных команд.

Документ отвечает на вопрос: какие абстрактные формы русских команд должны пониматься системой, какие есть синонимы действий, какие слоты подставляются и где требуется контекст.

## Слоты и обозначения

| Слот | Значение | Примеры формы |
|---|---|---|
| `<object>` | Устройство, alias устройства или generic concept | `***`, `свет`, `шторы`, `телевизор` |
| `<object_acc>` | Объект в винительном падеже | `***`, `шторы`, `лампу` |
| `<object_gen>` | Объект в родительном падеже | `***`, `света`, `телевизора` |
| `<room>` | Комната или зона | `***` |
| `<room_ref>` | Комната с предлогом или bare-форма | `в ***`, `на ***`, `***` |
| `<percent>` | Процент яркости/громкости текстом | `ноль процентов`, `пятьдесят процентов`, `сто процентов` |
| `<number>` | Число текстом | `десять`, `пятьдесят`, `сто` |
| `<channel>` | Номер канала текстом | `первый`, `второй`, `пятый`, `десятый` |
| `<temperature>` | Температура текстом | `восемнадцать`, `двадцать два`, `двадцать четыре` |
| `<item>` | Товар или alias товара | `***` |
| `<playlist>` | Плейлист или alias плейлиста | `***` |
| `<suffix>` | Эмоциональный/срочный хвост | `срочно`, `быстро`, `блять` |

## Общие варианты

| ID | Шаблон | Слоты | Контекст | Ограничения |
|---|---|---|---|---|
| common.object.room.suffix | `<command> <room_ref>` | `room` | Нет | Для шаблонов с `RoomRule != none`; комната фильтрует цель. |
| common.object.room.prefix | `<room_ref> <command>` | `room` | Нет | Только для шаблонов с prefix/both placement. |
| common.direct.alias.on | `<custom_on_phrase>` | Нет | Нет | Пользовательский alias из `ON:...`; исполняет конкретный on intent. |
| common.direct.alias.off | `<custom_off_phrase>` | Нет | Нет | Пользовательский alias из `OFF:...`; исполняет конкретный off intent. |
| common.frustrated | `<command> <suffix>` | `suffix` | Нет | Добавляется к многим smart-home фразам; noise-варианты не должны быть train/Vosk subset. |
| common.context.short | `<short_command>` | `last_devices` | Да | Исполняется только через сохраненный контекст, не расширяется на всю комнату. |

## Включение

| ID | Шаблон | Синонимы | Слоты | Контекст | Ограничения |
|---|---|---|---|---|---|
| on.object | `<on_verb> <object_acc>` | `включи`, `включить`, `вруби`, `врубай` | `object` | Нет | `<object>` должен поддерживать `on_off`; шторы используют отдельный open-блок. |
| on.object.room | `<on_verb> <object_acc> <room_ref>` | `включи`, `включить`, `вруби`, `врубай` | `object`, `room` | Нет | Комната уточняет область поиска. |
| on.room.only.light | `<on_verb> <room_ref>` | `включи` | `room` | Нет | Только для light-like объектов; команда без имени объекта. |
| on.short | `<on_verb>` | `включи`, `включить`, `вруби`, `врубай` | `last_devices` | Да | Только после контекста. |
| on.state.light | `<light_on_state> [<room_ref>]` | `темно`, `темновато`, `ничего не видно` | `room` | Нет | Только для light-like объектов. |
| on.state.heat | `<heat_on_state> [<room_ref>]` | `холодно`, `холодновато`, `прохладно` | `room` | Нет | Для heating/thermostat-like объектов. |
| on.state.cool | `<cool_on_state> [<room_ref>]` | `жарко`, `жарковато`, `душно` | `room` | Нет | Для AC/cooling-like объектов. |

## Выключение

| ID | Шаблон | Синонимы | Слоты | Контекст | Ограничения |
|---|---|---|---|---|---|
| off.object | `<off_verb> <object_acc>` | `выключи`, `выключить`, `отключи`, `выруби`, `вырубай` | `object` | Нет | `<object>` должен поддерживать `on_off`; шторы используют отдельный close-блок. |
| off.object.room | `<off_verb> <object_acc> <room_ref>` | `выключи`, `выключить`, `отключи`, `выруби`, `вырубай` | `object`, `room` | Нет | Комната уточняет область поиска. |
| off.room.only.light | `<off_verb> <room_ref>` | `выключи` | `room` | Нет | Только для light-like объектов; команда без имени объекта. |
| off.short | `<off_verb>` | `выключи`, `выключить`, `отключи`, `выруби`, `вырубай` | `last_devices` | Да | Только после контекста; может конфликтовать с `music_stop`. |
| off.state.cool | `<cool_off_state> [<room_ref>]` | `холодно`, `холодновато`, `прохладно` | `room` | Нет | Для AC/cooling-like объектов: выключить охлаждение. |

## Открытие и закрытие

| ID | Шаблон | Синонимы | Слоты | Контекст | Ограничения |
|---|---|---|---|---|---|
| open.object | `<open_verb> <object_acc>` | `открой` | `object` | Нет | Только openable-объекты, сейчас curtains/blinds-like. |
| open.generic | `<open_verb> шторы [<room_ref>]` | `открой` | `room` | Нет | Generic concept для штор. |
| open.blinds.up | `подними <object_acc> [<room_ref>]` | `подними` | `object`, `room` | Нет | Только blinds/roller-shutter-like имена. |
| close.object | `<close_verb> <object_acc>` | `закрой` | `object` | Нет | Только openable-объекты, сейчас curtains/blinds-like. |
| close.generic | `<close_verb> шторы [<room_ref>]` | `закрой` | `room` | Нет | Generic concept для штор. |
| close.blinds.down | `опусти <object_acc> [<room_ref>]` | `опусти` | `object`, `room` | Нет | Только blinds/roller-shutter-like имена. |

## Яркость

| ID | Шаблон | Синонимы | Значение | Контекст | Ограничения |
|---|---|---|---|---|---|
| brightness.set.object | `<brightness_set> яркость <object_acc> на <percent>` | `установи`, `сделай`, `включи` | `0..100%` | Нет | Объект должен поддерживать brightness. |
| brightness.set.genitive | `<brightness_set> яркость <object_gen> на <percent>` | `установи`, `сделай`, `включи` | `0..100%` | Нет | Альтернативная падежная форма объекта. |
| brightness.statement | `яркость <object_acc|object_gen> <percent>` | Нет явного глагола | `0..100%` | Нет | Объект должен поддерживать brightness. |
| brightness.object.max | `<object_acc> на максимум` | `на максимум`, `на полную` | `100%` | Нет | Объект должен поддерживать brightness. |
| brightness.group.max | `свет на максимум` | `на максимум`, `на полную`, `яркость света на максимум` | `100%` | Нет | Light-like concept. |
| brightness.group.medium | `свет на среднюю яркость` | `на среднюю яркость`, `на половину` | `50%` | Нет | Light-like concept. |
| brightness.group.min | `свет на минимум` | `на минимум`, `яркость света на минимум` | `10%` | Нет | Light-like concept. |
| brightness.up.object | `<brightness_up> <object_acc|object_gen>` | `сделай ярче`, `прибавь яркость`, `увеличь яркость` | `+10` | Нет | Объект должен поддерживать brightness. |
| brightness.up.generic | `сделай свет ярче [<room_ref>]` | `ярче`, `поярче`, `сделай ярче` | `+10` | Нет | Light-like concept; комната может уточнять цель. |
| brightness.down.object | `<brightness_down> <object_acc|object_gen>` | `сделай тусклее`, `убавь яркость`, `уменьши яркость`, `приглуши` | `-10` | Нет | Объект должен поддерживать brightness. |
| brightness.down.generic | `приглуши свет [<room_ref>]` | `темнее`, `тусклее`, `потусклее`, `приглуши свет` | `-10` | Нет | Light-like concept; комната может уточнять цель. |
| brightness.short.up | `<brightness_up_short>` | `сделай ярче`, `прибавь яркость`, `ярче`, `прибавь`, `увеличь яркость` | `+10` | Да | Только после контекста. |
| brightness.short.down | `<brightness_down_short>` | `сделай тусклее`, `убавь яркость`, `тусклее`, `убавь`, `уменьши яркость`, `темнее`, `приглуши`, `приглуши свет` | `-10` | Да | Только после контекста. |
| brightness.short.max | `<brightness_max_short>` | `на максимум`, `на полную`, `максимальная яркость` | `100%` | Да | Только после контекста. |
| brightness.short.min | `<brightness_min_short>` | `на минимум`, `минимальная яркость` | Минимум | Да | Только после контекста. |

## Громкость

| ID | Шаблон | Синонимы | Значение | Контекст | Ограничения |
|---|---|---|---|---|---|
| volume.set.object | `громкость <object_acc|object_gen> <number>` | `громкость` | `0..100` | Нет | Объект должен поддерживать volume. |
| volume.set.verb | `поставь громкость <object_acc|object_gen> на <number>` | `поставь` | `0..100` | Нет | Только если capability поддерживает random access. |
| volume.up.object | `<volume_up> <object_acc|object_gen>` | `сделай громче`, `прибавь громкость`, `увеличь громкость` | Шаг вверх | Нет | Объект должен поддерживать volume. |
| volume.up.telegraph | `<object_acc> громче` | `громче`, `погромче` | Шаг вверх | Нет | Telegraph/STT-friendly форма. |
| volume.down.object | `<volume_down> <object_acc|object_gen>` | `сделай тише`, `убавь громкость`, `уменьши громкость` | Шаг вниз | Нет | Объект должен поддерживать volume. |
| volume.down.telegraph | `<object_acc> тише` | `тише`, `потише` | Шаг вниз | Нет | Telegraph/STT-friendly форма. |
| volume.short.up | `<volume_up_short>` | `сделай громче`, `прибавь звук`, `громче`, `увеличь громкость` | Шаг вверх | Да | Только после контекста или music-context. |
| volume.short.down | `<volume_down_short>` | `сделай тише`, `убавь звук`, `тише`, `уменьши громкость` | Шаг вниз | Да | Только после контекста или music-context. |
| volume.short.max | `<volume_max_short>` | `на максимум`, `максимальная громкость` | `100` | Да | Только после контекста. |
| volume.short.min | `<volume_min_short>` | `выключи звук`, `без звука` | `0` | Да | Может пересекаться с mute. |

## Каналы

| ID | Шаблон | Синонимы | Значение | Контекст | Ограничения |
|---|---|---|---|---|---|
| channel.set.on | `включи <channel> канал на <object>` | `включи` | `1`, `2`, `5`, `10` | Нет | Объект должен поддерживать channel. |
| channel.set.switch | `переключи <object> на <channel> канал` | `переключи` | `1`, `2`, `5`, `10` | Нет | Объект должен поддерживать channel. |
| channel.statement | `<channel> канал на <object>` | Нет явного глагола | `1`, `2`, `5`, `10` | Нет | Объект должен поддерживать channel. |
| channel.next.object | `переключи <object> на следующий канал` | `следующий` | `+1` | Нет | Объект должен поддерживать channel. |
| channel.prev.object | `переключи <object> на предыдущий канал` | `предыдущий` | `-1` | Нет | Объект должен поддерживать channel. |
| channel.short.next | `<channel_next_short>` | `следующий канал`, `переключи канал`, `дальше` | `+1` | Да | Только после контекста; `дальше` может пересекаться с music next. |
| channel.short.prev | `<channel_prev_short>` | `предыдущий канал`, `назад` | `-1` | Да | Только после контекста; `назад` может пересекаться с music prev. |

## Температура

| ID | Шаблон | Синонимы | Значение | Контекст | Ограничения |
|---|---|---|---|---|---|
| temperature.set.object | `установи температуру <object_acc|object_gen> на <temperature> градусов` | `установи` | `18`, `20`, `22`, `24` | Нет | Объект должен поддерживать range temperature. |
| temperature.statement | `температура <object_acc|object_gen> <temperature>` | Нет явного глагола | `18`, `20`, `22`, `24` | Нет | Не путать с property-запросом температуры. |
| temperature.up.object | `<temperature_up> <object_acc>` | `сделай теплее`, `прибавь температуру` | `+2` | Нет | Объект должен поддерживать range temperature. |
| temperature.down.object | `<temperature_down> <object_acc>` | `сделай холоднее`, `убавь температуру` | `-2` | Нет | Объект должен поддерживать range temperature. |
| temperature.short.up | `<temperature_up_short>` | `сделай теплее`, `теплее`, `прибавь температуру` | `+2` | Да | Только после контекста. |
| temperature.short.down | `<temperature_down_short>` | `сделай холоднее`, `холоднее`, `убавь температуру` | `-2` | Да | Только после контекста. |

## Цветовая температура света

| ID | Шаблон | Синонимы | Значение | Контекст | Ограничения |
|---|---|---|---|---|---|
| color_temperature.up.object | `сделай <object_acc> теплее` | `теплее`, `более теплый свет` | `+500K` | Нет | Объект должен поддерживать `color_temperature` или `temperature_k`. |
| color_temperature.up.generic | `сделай свет теплее [<room_ref>]` | `свет теплее`, `теплее свет` | `+500K` | Нет | Light-like concept. |
| color_temperature.down.object | `сделай <object_acc> холоднее` | `холоднее`, `более холодный свет` | `-500K` | Нет | Объект должен поддерживать `color_temperature` или `temperature_k`. |
| color_temperature.down.generic | `сделай свет холоднее [<room_ref>]` | `свет холоднее`, `холоднее свет` | `-500K` | Нет | Light-like concept. |
| color_temperature.short.up | `<warm_light_short>` | `свет теплее`, `теплее свет`, `сделай свет теплее` | `+500K` | Да | Только после контекста. |
| color_temperature.short.down | `<cold_light_short>` | `свет холоднее`, `холоднее свет`, `сделай свет холоднее` | `-500K` | Да | Только после контекста. |

## Режимы, toggle и RGB

| ID | Шаблон | Синонимы | Слоты | Контекст | Ограничения |
|---|---|---|---|---|---|
| mode.fan.high | `<fan_high_phrase> <object>` | `включи высокую скорость`, `максимальная скорость`, `на максимум` | `object` | Нет | `mode.fan_speed=high`. |
| mode.fan.medium | `<fan_medium_phrase> <object>` | `включи среднюю скорость`, `средняя скорость`, `на средней` | `object` | Нет | `mode.fan_speed=medium`. |
| mode.fan.low | `<fan_low_phrase> <object>` | `включи низкую скорость`, `минимальная скорость`, `на минимум` | `object` | Нет | `mode.fan_speed=low`. |
| toggle.mute.object | `<mute_phrase> <object>` | `выключи звук`, `включи звук`, `без звука`, `отключи звук` | `object` | Нет | `toggle.mute`. |
| toggle.mute.short | `<mute_short>` | `переключи звук`, `звук`, `выключи звук`, `включи звук` | `last_devices` | Да | Только после контекста. |
| toggle.default.short | `<toggle_short>` | `переключи`, `переключить` | `last_devices` | Да | Для toggle без специализированного шаблона. |
| color.rgb.named | `сделай <object> <color>` | `красным`, `синим`, `зеленым` | `object`, `color` | Нет | `color_setting.rgb`. |
| color.rgb.white | `поставь белый цвет <object>` | `белый цвет` | `object` | Нет | `color_setting.rgb`. |
| color.rgb.change | `измени цвет <object>` | `измени цвет` | `object` | Нет | `color_setting.rgb`; без явного значения цвета. |

## Показания датчиков

| ID | Шаблон | Синонимы | Слоты | Контекст | Ограничения |
|---|---|---|---|---|---|
| property.temperature | `<temperature_query> [<room_ref>] [у <object>]` | `какая температура`, `сколько градусов`, `температура`, `что с температурой`, `покажи температуру` | `room`, `object` | Нет | Property query, не range set. |
| property.humidity | `<humidity_query> [<room_ref>] [у <object>]` | `какая влажность`, `влажность`, `что с влажностью`, `покажи влажность`, `сколько процентов влажности` | `room`, `object` | Нет | Float property humidity. |
| property.co2 | `<co2_query> [<room_ref>] [у <object>]` | `какой уровень co2`, `уровень углекислого газа`, `что с co2`, `покажи уровень co2`, `co2`, `со2` | `room`, `object` | Нет | Однословные `co2/со2` только с комнатным вариантом. |
| property.pressure | `<pressure_query> [<room_ref>] [у <object>]` | `какое давление`, `давление`, `что с давлением`, `покажи давление` | `room`, `object` | Нет | Float property pressure. |
| property.pm25 | `<pm25_query> [<room_ref>] [у <object>]` | `какой уровень PM2.5`, `PM2.5`, `загрязнение воздуха`, `что с PM2.5` | `room`, `object` | Нет | Float property PM2.5. |
| property.battery | `<battery_query> [<room_ref>] [у <object>]` | `какой заряд батареи`, `уровень заряда`, `батарея`, `заряд` | `room`, `object` | Нет | Battery property. |
| property.illumination | `<illumination_query> [<room_ref>] [у <object>]` | `какая освещенность`, `освещенность`, `уровень света` | `room`, `object` | Нет | Illumination property. |
| property.water | `<water_query> [<room_ref>] [у <object>]` | `какой уровень воды`, `уровень воды`, `что с водой` | `room`, `object` | Нет | Water level property. |

## Покупки

| ID | Шаблон | Синонимы | Слоты | Контекст | Ограничения |
|---|---|---|---|---|---|
| shopping.add.catalog | `<shopping_add_verb> <item> <shopping_context>` | `добавь`, `добавьте`, `занеси`, `внеси`, `запиши`, `положи` | `item` | Нет | Только при активной shopping-list интеграции и наличии товара/alias. |
| shopping.add.catalog.polite | `<shopping_add_verb> <item> <shopping_context> пожалуйста` | Те же | `item` | Нет | Вежливый вариант catalog-команды. |
| shopping.add.custom | `<shopping_custom_phrase>` | `добавь что-нибудь`, `добавь товар`, `занеси продукт`, `запиши новый продукт` | Нет | Нет | Для свободной позиции без конкретного catalog item. |
| shopping.detect.input | `<shopping_add_keyword> ... <shopping_context_keyword>` | `добавить`, `запишите`, `добавляй`, `список покуп`, `покупки` | `item` | Нет | Pre-router detection, шире генераторных фраз. |

`<shopping_context>`: `в список покупок`, `в покупки`, `к покупкам`, `для покупок`.

## Музыка

| ID | Шаблон | Синонимы | Слоты | Контекст | Ограничения |
|---|---|---|---|---|---|
| music.play | `<music_play_phrase>` | `включи музыку`, `вруби музыку`, `поставь музыку`, `включай музыку` | Нет | Нет | Исполняется music executor, не Yandex Smart Home API. |
| music.pause | `<music_pause_phrase>` | `пауза`, `поставь на паузу`, `поставь музыку на паузу`, `поставь на паузу музыку` | Нет | Нет | Music domain. |
| music.resume | `<music_resume_phrase>` | `продолжай`, `сними с паузы`, `продолжи`, `продолжи музыку`, `включи музыку обратно` | Нет | Нет | Music domain. |
| music.next | `<music_next_phrase>` | `дальше`, `следующий`, `следующую`, `следующий трек`, `следующая песня` | Нет | Music context желателен | Конфликтует с channel next. |
| music.prev | `<music_prev_phrase>` | `назад`, `предыдущий`, `предыдущую`, `прошлый`, `прошлую`, `предыдущий трек`, `прошлый трек` | Нет | Music context желателен | Конфликтует с channel prev. |
| music.volume.up | `<music_volume_up_phrase>` | `громче`, `сделай громче`, `прибавь звук`, `увеличь громкость` | Нет | Music context желателен | Конфликтует с smart-home volume. |
| music.volume.down | `<music_volume_down_phrase>` | `тише`, `сделай тише`, `убавь звук`, `уменьши громкость` | Нет | Music context желателен | Конфликтует с smart-home volume. |
| music.stop | `<music_stop_phrase>` | `выключи музыку`, `останови музыку`, `выруби музыку`, `стоп`, `останови`, `хватит`, грубые stop-формы | Нет | Music context желателен | Короткое `выключи` конфликтует с smart-home off. |
| music.playlist | `<playlist_play_verb> [плейлист] <playlist>` | `включи`, `поставь` | `playlist` | Нет | Плейлист берется из catalog title/alias. |
| music.playlist.direct | `<custom_playlist_on_phrase>` | Пользовательские `ON:` aliases | Нет | Нет | Direct phrase для конкретного playlist id. |

## Диалоговый режим

| ID | Шаблон | Синонимы | Слоты | Контекст | Ограничения |
|---|---|---|---|---|---|
| dialog.on | `<dialog_on_phrase>` | `поболтаем`, `давай поговорим`, `давай поболтаем` | Нет | Нет | Переключает voice session в dialog mode. |
[command-coverage-matrix.md](command-coverage-matrix.md)| dialog.off | `<dialog_off_phrase>` | `давай закончим`, `закончим`, `закончим разговор`, `хватит`, `хватит болтать`, `стоп диалог`, `заткнись`, `заткнись нахуй`, `заткнись блять`, `выключи диалог` | Нет | Dialog mode желателен | В активном диалоге должен иметь приоритет над другими доменами. |

## Чек-лист покрытия

| Семейство | Абсолютное значение | Относительное значение | Комната | Short/context | Статус |
|---|---|---|---|---|---|
| `on/off` | Не нужно | Не нужно | Да | Да | Покрыто |
| `open/close` | Не нужно | Не нужно | Да | Нет | Покрыто для openable curtains/blinds-like |
| `brightness` | Да | Да | Да | Да | Покрыто |
| `volume` | Да | Да | Да | Да | Покрыто |
| `channel` | Да | Да | Да | Да | Покрыто |
| `temperature` | Да | Да | Да | Да | Покрыто |
| `color_temperature` | Нет | Да | Да | Да | Покрыто для relative warm/cold |
| `mode.fan_speed` | Да через mode value | Нет | Да | Нет | Частично, только high/medium/low |
| `toggle.mute` | Toggle | Не нужно | Да | Да | Покрыто |
| `color.rgb` | Частично | Нет | Да | Нет | Покрыто базовыми цветами |
| `properties` | Query | Не нужно | Да | Нет | Покрыто для перечисленных float properties |
| `shopping` | Не применимо | Не применимо | Нет | Нет | Покрыто при активной интеграции |
| `music` | Не применимо | Да для next/prev/volume | Нет | Через music context | Покрыто словарем music-фраз |
| `dialog` | Не применимо | Не применимо | Нет | Через активный dialog mode | Покрыто |

## Неоднозначности

| Фраза/класс | Возможные домены | Правило ожидания |
|---|---|---|
| `выключи` | smart-home off, music stop | Без smart-home context нельзя расширять на все устройства; при music context может быть stop. |
| `громче` / `тише` | smart-home volume, music volume | Music context должен приоритизировать music; smart-home context - last_devices. |
| `дальше` / `назад` | music next/prev, channel next/prev | Music context против device/channel context. |
| `теплее` / `холоднее` | temperature range, color temperature | Контекст объекта определяет: климат или свет. |
| `температура` | property query, temperature range | Без числового значения это query; с `<temperature>` и объектом - set/range. |
| `на максимум` | brightness, volume, fan_speed | Требует контекста объекта/capability. |
