# Роль SMALUM — IDEF
<!-- smalum-role-version: 1.14.0 -->

Узкая шпаргалка нотации для внешней LLM (ENH-1624). Склейка: [role-core.md](https://docs.smalum.io/role-core.md) + этот файл.
Полный каталог: https://docs.smalum.io/role.md · страница: https://docs.smalum.io/ai · эталоны: https://docs.smalum.io/role-examples.md

Файл: https://docs.smalum.io/role-idef.md

# Часть F — IDEF (функциональные модели)

Канон: `doc/Синтаксис-IDEF.md` · docs: https://docs.smalum.io/idef. Эпик SM-1555. Универсального `//smalum/idef` **нет**.

## F1. Когда выбирать IDEF

| Рассказ | Нотация |
|---------|---------|
| Функции системы, входы/управление/выходы/механизмы, декомпозиция листов | **`//smalum/idef0`** |
| Сущности, ключи, связи данных (IDEF1X) | **`//smalum/idef1x`** |
| Сценарий / упорядоченность единиц поведения | **`//smalum/idef3/pfdd`** или **`idef3/ostn`** |
| Роли, задачи, шлюзы, сообщения | BPMN |
| Потоки данных Gane–Sarson | DFD |
| Дерево модулей / штат | Struct |

**IDEF0 ≠ BPMN.** Нет пулов и xor: блоки функций и стрелки ICOM по сторонам.

## F2. Канон IDEF0 (выдавать так)

```
//smalum/[каталог/]idef0 A1 Сборка изделия
1 = Принять комплектующие
2 = Собрать узел
3 = Проверить узел
I1 - 1 Комплект
C1 - 2 Спецификация
M1 - 2 Сборщик
1.O - 2.I Комплект
2.O - 3.I Собранный узел
3 - O1 Годный узел
2 @ A12
```

- Один файл = один заголовок = один лист. Комплекс — несколько файлов + `@` / `call`.
- **ICOM на границе:** `I1 - id` (вход слева), `C1 - id` (управление сверху), `M1 - id` (механизм снизу), `id - O1` (выход справа). Подпись — хвост строки (`I1 - 1 Комплект`). I/C/M только **в** бокс; O только **из** бокса. Не `I1 - O1`.
- **Между боксами:** `1 - 2` или `1.O - 2.I` (= O→I); `1 > 2` / `1.O - 2.C` (= O→C); `1 * 2` / `1.O - 2.M` (= O→M).
- DRE: `2 @ A12`. Call: `2 call A12`. Туннель: `(I3) - 2`. Model note: `2 ? текст`.
- **Не** пишите `//smalum/idef` без суффикса; для IDEF3 обязателен `/pfdd` или `/ostn`. Не `box` / `<- вход` — только формы выше.

## F3. Канон IDEF1X (`//smalum/idef1x`)

```
//smalum/idef1x Заказы
independent entity Client = Клиент
  client_id PK
  name

dependent entity Order = Заказ
  order_id PK
  client_id FK

entity Line = Позиция
  line_id PK
  order_id FK

independent entity Party = Сторона
independent entity Person = Физлицо
independent entity Org = Организация

Client -> Order identifying P оформляет
Order -- Line non-identifying Z содержит
Party isa incomplete Person Org
```

- Сущность: `[independent|dependent|entity] Id = Подпись`. Атрибуты — строки с отступом ≥ 2 пробела; `PK` / `FK` — просто текст строки.
- Связь: `-` / `->` = identifying (сплошная), `--` = non-identifying (пунктир); слова `identifying` / `non-identifying` можно писать явно. Карточка (`P` / `Z` / `N` / `N..M`) — на конце ребёнка, затем подпись.
- Категоризация: только `Parent isa complete|incomplete Child1 Child2`; родитель и дети должны быть объявлены.

## F4. Канон IDEF3 (`idef3/pfdd`, `idef3/ostn`)

PFDD — сценарий: единицы поведения (UOB) и перекрёстки.

```
//smalum/idef3/pfdd Сварка
1 = Резать заготовку
2 = Выставить детали
3 = Варить шов
4 = Контроль шва

junction J1 and async fan-out
junction J2 and sync fan-in

1 - J1
J1 - 2
J1 - 3
2 - J2
3 - J2
J2 - 4
1 -- 4 object
4 @ A14
```

OSTN — состояния одного объекта и переходы:

```
//smalum/idef3/ostn Жизнь детали
state Raw = Сырьё
state Cut = Заготовка
state Scrapped = Брак

Raw -> Cut станок
Cut -- Scrapped отбраковка
```

- PFDD: `id = Подпись` (или `uob id = …`); `junction Id and|or|xor [sync|async] [fan-in|fan-out]`; `-` — precedence, `--` + `object` — object-flow; `@ Лист` только на объявленный UOB.
- OSTN: только `state` и переходы (`->` сплошной, `--` пунктир, подпись после). `state` в PFDD, `uob` и `junction` в OSTN — **ошибка**.

## F5. Оверлей и брак

Оверлей — `// SM:` в конце (Часть D), только по просьбе про лейаут. Новую схему без `SM:`.

Брак: `//smalum/idef` без метода; голый `idef3` без pfdd/ostn; BPMN-пулы в IDEF0; смешение `idef0`+`idef1x` в одном файле; `isa` без детей; карточка у родителя вместо ребёнка в IDEF1X.
