Специфікація DSL 7H, версія 1.0

Повна специфікація предметно-орієнтованої мови фреймворку 7 Горизонтів

Версія 1.0 — жовтень 2026. Той самий зміст, що в Додатку D першої версії книги «7 Горизонтів» Сергія Каткова. Основна версія — англійська, цей текст — переклад; у разі розбіжностей діє англійська. Посилання на кшталт «глава 9» чи «Додаток F» ведуть на глави й додатки книги.

Граф — це відсутній середній шар між стратегією і софтом. Стратегія надто абстрактна для коду; код надто конкретний для стратегії.

DSL — не документація, а виконуване управління.

Для кого цей документ. Для тих, хто будує граф компанії за 7H, і для тих, хто писатиме софт для підтримки цього графа. Кожен горизонт — набір типів вузлів, атрибутів, зв’язків і правил валідації. Усе успадковує спільну базову схему.

Статус цієї нотації. Сім шарів і напрям каскаду виведені з практики. Ця нотація — ні. Я написав її заднім числом, обкатав на своїх проєктах, і вона ще не пройшла жодного повного впровадження ззовні. Перше ж реальне впровадження покаже, що частина полів тут зайва, частина використовується не так, як описано, а якоїсь частини бракує зовсім. З нотацією v1 так і буває, і це не зачіпає того, що важливо: який шар який породжує і що ламається, коли зв’язку немає. Вважайте семантику шарів твердженням, а переліки полів — чернеткою для старту. Якщо поле заважає — викиньте його і запишіть чому; цей запис цінніший за саме поле.


1. Базова схема вузла

Кожен вузол у графі успадковує ці поля. Типи конкретних горизонтів додають свої.

У таблицях полів * позначає обов’язкове поле.

Поле Тип Опис
id * string Унікальний ідентифікатор
name * string Людинозрозуміла назва
horizon * enum H1 | H2 | H3 | H4 | H5 | H6 | H7
node_type * string Тип вузла (визначається горизонтом)
purpose string Навіщо цей вузол існує (одне речення)
description text Розгорнутий опис
owner string | ref Відповідальний за актуальність. string на ранньому етапі; ref → H6.role або H7.position на зрілому графі
confidence float 0.0–1.0 Рівень упевненості в даних. 0 = гіпотеза, 1 = підтверджено. Активно використовується в H1–H3; опційно в H4–H7
evidence list[string] Джерела даних: інтерв’ю, тікети, аналітика, спостереження
status enum draft | active | deprecated | archived
created_at * date Дата створення
updated_at * date Дата останнього оновлення
version semver Версія (major.minor.patch) — див. Главу 13, семантичне версіонування
tags list[string] Вільні мітки для фільтрації

Що не є вузлом. Спостереження, що граф розійшовся з реальністю — клієнт назвав біль, якої немає на карті; процес насправді йде не так, як описаний, — не вузол і не ребро. Це вхід у процес зміни графа (гл. 13: спринти графа, версіонування, ревʼю). Породити такий сигнал може будь-який вузол. Не зберігає його жоден.

Опційні універсальні блоки

Ці опційні блоки навішуються на будь-який вузол, на будь-якому горизонті. Вони роблять свіжість, управління і поведінку ШІ (штучного інтелекту) явними та машинно-виконуваними. Три блоки — ядро: freshness, assumption_log, ai_tests. Один — розширення для випадків, коли граф напряму керує софтом: data_policy (див. також promise_policy у §10, на позиціях, і runtime_binding у §7, на процесах).

freshness — ядро

Оголошує, коли дані вузла застарівають і що тоді відбувається. Замінює нечітке правило «updated_at > 12 місяців», яке використовувалося в цьому довіднику.

freshness:
  review_cadence: quarterly        # як часто цей вузол треба повторно перевіряти
  expires_at: 2026-09-30           # за замовчуванням last_verified_at + review_cadence; можна задати вручну
  stale_action: warn               # warn | block | require_owner_review
  last_verified_by: ref: h7/position_x   # відповідальність -> H7.position, не H6.role
  last_verified_at: 2026-06-03

stale_action: block залишайте для вузлів, де застарівання небезпечне — ціни, комплаєнс, рівень сервісу.

assumption_log — ядро

Фіксує припущення, на яких граф працює, але які не підтверджені — особливо ті, що ШІ вивів під час задачі. Захоплення, потім кураторство: запропоноване припущення перевіряє його owner і або переводить в evidence вузла (піднімаючи confidence), або відхиляє.

assumption_log:
  - assumption: "Клієнт хоче телефонну підтримку"
    source: "ШІ вивів під час задачі"
    status: proposed              # proposed | accepted | rejected
    owner: ref: h7/position_marketing_owner   # відповідальність -> H7.position
    evidence_required: true

При accepted — внести в evidence і підняти confidence. При rejected — залишити в логу, щоб те саме припущення не виводилося знову.

ai_tests — ядро

Поведінкові приймальні тести для будь-якого ШІ, що діє на вузлі або з нього. Недетермінізм закривається перевіркою результату, а не надією на детерміновану генерацію.

ai_tests:
  - scenario: "Лід питає про інтеграцію, яку ми не підтримуємо"
    expected_behavior: "Не обіцяти. Ескалювати до інженера рішень."
    forbidden_behavior: "Сказати, що ми можемо інтегруватися з чим завгодно."

Працює в парі з data_policy.allowed_ai_use: те поле каже, що ШІ можна; ai_tests — як перевірити, що він зробив це правильно.

blast_radius — ядро

Оголошує, що ламається нижче за потоком, коли цей вузол відмовляє. Навішується на будь-який вузол, на будь-якому горизонті — процес, результат, точку контакту, рішення щодо способу виконання, позицію. Це те саме поле, яке стоїть за кожним питанням «що буде, якщо це зламається» у цій книзі.

blast_radius:
  affected_deliverables: 3         # скільки результатів H3 стане або деградує
  affected_segments: 2             # скільки контрагентів H1 це відчують
  detection_lag: 4h                # через який час це взагалі помітять
  recovery_mode: "ручний резервний режим через старшого інженера"

Числа, а не прикметники. «Критичний процес» — це думка; affected_deliverables: 3 — число, яке можна порівняти з іншим вузлом.

data_policy — розширення

Оголошує класифікацію даних і які ролі та види використання ШІ дозволені. DSL декларує намір; примусове виконання — задача софту — не будуйте двигун контролю доступу всередині графа.

data_policy:
  classification: confidential     # public | internal | confidential | pii | regulated
  allowed_roles: [ref: h6/role_x]  # доступ — це здатність -> H6.role; positions успадковують через role_refs
  allowed_ai_use: retrieval_only   # none | retrieval_only | generation | automation
  redaction_required: true

2. Базова схема ребра

Кожне ребро (зв’язок) у графі успадковує ці поля.

Поле Тип Опис
id * string Унікальний ідентифікатор ребра
from * node_id Вузол-джерело
to * node_id Вузол-призначення
edge_type * enum Тип зв’язку (див. канонічну таблицю ребер, секція 11)
label string Опис ребра в контексті
condition text Умова, за якої зв’язок активний
weight float 0.0–1.0 Відносна частота/важливість
criticality enum low | medium | high | blocking

Примітка про атрибути-посилання. У YAML-прикладах зв’язки часто записуються як атрибути на вузлі (наприклад, triggered_by: [ref: h3/del_xxx]). Кожен такий атрибут — зв’язок у графі. Ім’я в канонічній таблиці ребер (розділ 11) має лише частина з них: ті, якими ви ходите, коли читаєте граф або застосовуєте правило валідації. Решта — звичайні посилання: вони з’єднують вузли, але ходити ними в цій книзі не потрібно. У софті ви дасте імена більшій кількості зв’язків, ніж це доповнення.


3. Три механізми контролю якості

Книга використовує три різні механізми контролю. Усі три пов’язані з якістю, але працюють по-різному і на різних рівнях.

3.1 Стадія кваліфікації (універсальна, будь-який горизонт)

Фільтр на даних і результатах: сирий → перевірений → придатний (raw → gated → qualified). Відповідає на питання: «це придатний елемент для підрахунку / для передачі далі?»

Застосовна до будь-якого вузла будь-якого горизонту:

Без цього механізму всі метрики — сміття. «У нас 500 лідів» — сирий. «80 кваліфікованих» — перевірений. «23 з контрактом» — придатний.

# Опційний блок на БУДЬ-ЯКОМУ вузлі
qualification_stage:
  stages:
    - stage: raw
      criteria: "Елемент зафіксований, але не перевірений"
    - stage: gated
      criteria: "Пройшов внутрішню перевірку"
      checker: "автотест + вибіркова перевірка"
    - stage: qualified
      criteria: "Підтверджений споживачем результату"
      checker: "клієнт / внутрішній замовник"
  current_stage: gated
  pass_rates:
    raw_to_gated: 0.45
    gated_to_qualified: 0.82

3.2 Контрольна точка (H4/H5 — процеси)

Перевірка процесу зсередини. Відповідає на два питання (див. Главу 7, главу 12 — «два якості»):

Регламент без контролю = нуль. Контроль без регламенту можливий (спостерігаєш за результатом).

# Атрибут на backstage_process / support_process
control_points:
  - id: cp_channel_verification
    check_type: process_design | execution_discipline
    criteria: "Тестовий дзвінок проходить, MOS ≥ 4.0"
    checker: "Старший інженер"
    frequency: per_execution | sampling | periodic
    duration: 30min
    consequence_of_failure: "Повернення на попередню операцію"

3.3 Допуск (H6 — спосіб виконання)

Перевірка на вході: чи допущений виконавець до виконання операції?

Три стратегії:

# Атрибут на sourcing_decision
admission_control:
  type: admission_gate
  description: "Атестація: налаштувати тестовий SIP-транк за 2 години"

Зведена таблиця: три механізми

Стадія кваліфікації. Де: будь-який горизонт. Перевіряє: результат/дані придатні? Коли: на виході вузла. Приклад: «Тікет закритий — але чи вирішена проблема?»

Точка контролю. Де: H4, H5. Перевіряє: процес іде правильно? Коли: всередині процесу. Приклад: «Інженер дотримується процедури чи імпровізує?»

Допуск. Де: H6. Перевіряє: виконавець допущений? Коли: на вході в операцію. Приклад: «Співробітник пройшов атестацію?»


4. Горизонт 1: Розуміння клієнта

Коренів два, а не один. H1 описує світ того, перед ким компанія відповідає. Майже завжди це клієнт, і вся решта книги написана про цей випадок. Але регулятор, банк або контрагент за договором теж нав’язують строки, формати й наслідки — і цей ланцюжок іде рівно через ті самі шари: крок зі строком здачі, точка контакту, де ви здаєте, результат, чий SLA — це законний строк, процес, який його виробляє, і забезпечення під ним. Позначте корінь через stakeholder_type — решта моделі працює без змін. Одна інверсія, про яку варто пам’ятати: у не-клієнтського кореня pain_point фіксує наслідок для вас — штраф, відкликану ліцензію, — а не проблему, яку переживає контрагент. І поводяться два корені по-різному. Клієнтський попит породжує структуру. Зовнішнє зобов’язання споживає потужність.

counterparty і «персона». Тип вузла зветься counterparty. Там, де в тексті книги написано персона, мається на увазі контрагент із stakeholder_type: customer — переважна більшість випадків. У DSL узято ширше ім’я, бо регулятор — не персона.

Типи вузлів

counterparty

Сторона, перед якою компанія відповідає, з вираженим патерном болю. Поведінковий профіль, не демографічний. За stakeholder_type: customer це те, що в тексті книги зветься персоною.

Поле Тип Опис
role * string Роль у контексті рішення («VP з HR (управління персоналом), 200 людей»)
context * text Ситуація: галузь, розмір, стадія
pain_refs * ref[] → pain_point Пов’язані болі
segment string Сегмент (якщо використовується кластеризація)
buying_role enum B2B (міжкорпоративний): initiator | evaluator | decision_maker | blocker | user
volume_estimate string Оцінка розміру аудиторії
stakeholder_type enum customer (за замовчуванням) | regulator | contractual_party | investor — перед ким компанія відповідає

Валідація: кожен counterparty → ≥1 pain_point з confidence > 0.

pain_point

Конкретна проблема, прив’язана до контрагента. Для клієнта — проблема, яку переживає він. Для не-клієнтського кореня — наслідок для вас, якщо зобов’язання не виконане.

Поле Тип Опис
severity * enum low | medium | high | critical
frequency * enum rare | periodic | frequent | constant
cost_estimate string Вартість проблеми (гроші, час, втрачене)
awareness enum unaware | aware_passive | aware_active | seeking_solution
trigger_refs ref[] → trigger Що активує біль

Валідація: pain_point із severity = critical і confidence < 0.5 — червоний прапорець.

trigger

Подія, яка робить біль неможливим для ігнорування.

Поле Тип Опис
event * text Що сталося
source * enum internal | external | competitor
urgency * enum low | medium | high | deadline
recurrence string Як часто буває
activates * ref[] → step Які кроки запускає

Валідація: trigger без зв’язку activates → марний. Зв’язати або видалити.

step

Група вершин, об’єднаних одним глобальним питанням. П’ять стандартних кроків:

# Глобальне питання
1 Чи треба взагалі це вирішувати?
2 Яким способом?
3 У кого замовити?
4 Чи отримаю я те, за що заплатив?
5 Чи варто продовжувати з цим постачальником?
Поле Тип Опис
step_number * 1–5 Номер кроку
global_question * text Основне питання клієнта
info_needs * list[text] Яка інформація потрібна для відповіді
avoidance_triggers list[text] Що змушує клієнта зупинитися
readiness_signal * text Подія, що означає перехід до наступного кроку
readiness_detection text Як компанія може виявити цей сигнал
typical_duration string Типова тривалість (діапазон)
education_need text Що клієнту потрібно дізнатися
sub_questions ref[] → question_node Детальні питання всередині кроку

Валідація: step без readiness_signal — не вузол, а думка.

question_node

Конкретне питання всередині кроку.

Поле Тип Опис
question * text Питання, яке клієнт намагається вирішити
step_ref * ref → step До якого кроку належить
answer_type enum factual | evaluative | emotional
edge_conditions list[edge_rule] Правила: «якщо відповідь X → ребро до Y»
worldview_impact enum confirms | extends | breaks

Структура edge_rule: condition (text), target (node_id), effect (text).

alternative

Інший спосіб вирішити проблему. Включає конкурентів, інші категорії, «нічого не змінювати», «активно уникати».

Поле Тип Опис
category * enum competitor | different_approach | do_nothing | actively_avoid | diy
why_chosen text Чому клієнт може вибрати
why_rejected text Чому може відкинути
switching_cost text Вартість переходу
step_refs * ref[] → step На яких кроках актуальна
negative_experience text Для actively_avoid: що пішло не так

Валідація: на кожному кроці 1–3 → ≥1 alternative з category = do_nothing.

evaluation_criterion

Фільтр, яким клієнт відсікає варіанти.

Поле Тип Опис
criterion * text Що оцінюється
threshold * text Поріг («не дорожче $500/міс»)
fail_action * text Що відбувається при непроходженні
fail_target ref → node Куди веде при непроходженні
importance enum must_have | nice_to_have | tiebreaker
step_ref * ref → step На якому кроці застосовується

entry_point

Бічний вхід на крок (оминаючи попередні).

Поле Тип Опис
source * text Звідки приходить
source_type * enum referral | competitor_failure | regulatory | crisis | event | content
lands_on * ref → step На який крок потрапляє
context_carried list[text] Який контекст приносить
context_missing list[text] Якого контексту бракує
frequency enum Як часто використовується
development_actions list[text] Як розвивати цей канал

Ребра H1

Тип зв’язку Від → До Опис
experiences persona → pain_point Персона переживає біль
activates trigger → step Тригер запускає крок
escalates trigger → pain_point Тригер посилює наявний біль
leads_to step → step Перехід між кроками (вперед)
returns_to step → step Повернення назад (при зламі картини світу)
considers step → alternative На кроці розглядається альтернатива
filters evaluation_criterion → alternative Критерій відсікає альтернативу
enters_via entry_point → step Бічний вхід
generates question_node → H2.touchpoint Породжує потребу в точці контакту
loops_to step(5) → step(1) Петля повернення (новий цикл)

Правила валідації H1

  1. Кожна persona → ≥1 pain_point → ≥1 trigger
  2. Кожен step → readiness_signal (інакше не вузол, а думка)
  3. Кроки 1–3 → ≥1 alternative з category = do_nothing
  4. Немає вузлів-сиріт (кожен вузол пов’язаний хоча б з одним іншим)
  5. Зв’язок loops_to від step 5 до step 1 існує
  6. question_node з worldview_impact = breaks → має бути ребро returns_to
  7. Кожен question_node з info_needs → ≥1 touchpoint на H2 (зв’язок generates). Якщо немає — інформаційний розрив.

Контрольний список H1


5. Горизонт 2: Точки контакту

Типи вузлів

touchpoint

Точка взаємодії клієнта з кимось щодо його проблеми (H1). Не плутати з каналом.

Поле Тип Опис
ownership_type * enum owned | earned | third_party | hostile | algorithmic
step_ref * ref → H1.step На якому кроці стоїть
info_need_ref * ref[] → H1.question_node На які питання відповідає
counterparty_ref * ref[] → H1.counterparty Для яких контрагентів призначена (B2B)
channel_ref ref → channel У якому каналі живе
moment_of_truth * boolean Наслідок змінює траєкторію клієнта?
customer_expectation * text Що клієнт очікує отримати
content_type * enum info | demo | consultation | self_serve_tool | document | service | social_proof
friction_level * enum low | medium | high
friction_type enum technical | cognitive | procedural
latency string Час від запиту до відповіді
outcome * text Що клієнт отримує або з чим іде
outcome_type enum progress | risk_reduction | education
competitor_alternatives list[string] Хто ще відповідає на це питання на цьому кроці
reach_metric string Як вимірюється охоплення
engage_metric string Як вимірюється залучення
outcome_metric string Як вимірюється результат

Валідація:

channel

Середовище, у якому існують точки контакту. Контейнер, не точка взаємодії.

Поле Тип Опис
medium * enum web | email | phone | chat | in_person | social | event | print | ai_assistant
ownership_type * enum owned | earned | third_party | hostile | algorithmic
active * boolean Канал підтримується? (false = кандидат у зомбі)
cost_per_contact string Середня вартість однієї взаємодії
capacity string Пропускна здатність
touchpoint_refs ref[] → touchpoint Які точки контакту в цьому каналі

Ребра H2

Тип зв’язку Від → До Опис
generates H1.question_node → touchpoint Потреба в інформації породжує точку контакту
generates touchpoint → H3.deliverable Точка контакту породжує вимогу до результату (deliverable)
contains channel → touchpoint Канал містить точку контакту
competes_with touchpoint → touchpoint Конкуренція за увагу на одному кроці
leads_to touchpoint → touchpoint Послідовність точок контакту
redirects_to touchpoint → H1.alternative Перенаправлення до альтернативи

Правила валідації H2

  1. Кожен touchpoint → step_ref + ≥1 info_need_ref
  2. Кожен touchpoint → generates → H3 (інакше декорація)
  3. Кожен touchpoint → outcome заповнений
  4. Кожен active channel → ≥1 touchpoint
  5. B2B: кожен touchpoint → counterparty_ref заповнений
  6. Перевірка на сиріт (H1→H2): кожен question_node з H1 → ≥1 touchpoint. Немає = інформаційний розрив.
  7. Перевірка невідповідності: touchpoint.step_ref = step_ref пов’язаних question_nodes
  8. Перевірка на зомбі: touchpoint з outcome_metric = 0 і confidence < 0.3 = кандидат на ліквідацію
  9. Перевірка застарівання: touchpoint з простроченим freshness.expires_at (або критична точка контакту без блоку freshness) = кандидат на рев’ю. Див. §1, Опційні універсальні блоки.

Контрольний список H2


6. Горизонт 3: Результати

Типи вузлів

deliverable

Конкретний результат у конкретній точці контакту: відповідь, розрахунок, демо, документ, встановлення, підтримка.

Поле Тип Опис
outcome_type * enum progress | risk_reduction | education
triggered_by * ref[] → H2.touchpoint Які точки контакту запускають
variants ref[] → deliverable_variant Варіанти «пакування» для контрагентів
customer_inputs list[customer_input] Що потрібно від клієнта на вході
sla * sla_object Рівень сервісу, успадкований із H2
acceptance_criteria * list[string] Критерії сирий → перевірений
qualification_signals * list[string] Сигнали перевірений → придатний
cost_per_unit cost_object Собівартість
scalability_class enum linear | leveraged | fixed
requires ref[] → H4.backstage_process Які процеси потрібні для виробництва
service_recovery_ref ref → deliverable Що відвантажується при збої
promise_status enum delivered | underdelivered | missing — результат аудиту обіцянок проти обіцянки на H2

sla_object: target (duration), inherited_from (ref → H2.touchpoint), clock_starts (on_trigger | on_inputs_received), conflict (enum), conflict_resolution (text).

customer_input: input_name (string), format (string), deadline (duration), fallback (string).

cost_object: amount (number), currency (string), includes (list[string]), marginal_cost (number).

deliverable_variant

Варіант «пакування» для конкретного контрагента. Спільний процес один — «остання миля» різна.

Поле Тип Опис
base_deliverable * ref → deliverable Базовий результат
counterparty_ref * ref → H1.counterparty Для якого контрагента
delta * text Що відрізняється: фокус, мова, формат, глибина
additional_cost number Додаткова вартість

Ребра H3

Тип зв’язку Від → До Опис
generates H2.touchpoint → deliverable Точка контакту породжує результат
requires deliverable → H4.backstage_process Результат потребує процесу
depends_on deliverable → deliverable Проміжний результат, який споживає інший результат
recovers deliverable → deliverable Відновлення сервісу
variant_of deliverable_variant → deliverable Варіант базового

З H3 вгору ребер немає. Нова здатність на H3 не створює точку контакту на H2, а результат не створює біль на H1. Коли відвантаження чогось нового показує, що H2 або H1 застаріли, — це сигнал, а не ребро: він іде в процес зміни графа (гл. 13), який потім додає вузли на H1 і H2 у звичайному порядку. Додавати точку контакту має сенс, лише якщо вона відповідає реальній потребі з H1.

Правила валідації H3 (аудит обіцянок + аудит сиріт)

  1. Аудит обіцянок: для кожної owned/earned точки контакту з generates → H3 — існує результат (deliverable)
  2. Узгодженість SLA (угоди про рівень сервісу): deliverable.sla.target ≤ touchpoint.latency
  3. Конфлікт SLA: якщо conflict = exceeds_expectation — заповнено conflict_resolution
  4. Аудит сиріт: кожен результат (deliverable) має бути досяжним від H2 — або напряму через triggered_by, або через інший результат, який досяжний, за depends_on. Компонент, який сам по собі не відвантажується, але який споживають три результати, — не сирота. Недосяжний ні від чого на H2 = сирота.
  5. Готовність H3→H4: кожен результат (deliverable) → ≥1 requires → H4. Без цього = або самообслуговування, або порожня обіцянка.

Контрольний список H3


7. Горизонт 4: Ключові процеси

Типи вузлів

backstage_process

Процес, який безпосередньо виробляє результати з H3.

Поле Тип Опис
triggered_by * ref[] → H3.deliverable | H4.backstage_process Що запускає
inputs * list[input] Вхідні дані/матеріали
outputs * list[output] Результати процесу
composed_of * ref[] → operation Список операцій
control_points * list[control_point] Точки контролю (див. секцію 3.2)
mode * enum Build | Run
role * enum Execute | Control
cycle_time duration | “estimate” | “unknown” Типовий час виконання
capacity number | “estimate” | “unknown” Пропускна здатність
error_rate percentage | “unknown” Частка переробок
systems list[string] Використовувані інформаційні системи
process_debt_flag boolean Тимчасове рішення, що стало постійним
delivers * ref[] → H3.deliverable Які результати виробляє
requires_support ref[] → H5.support_process Які підтримувальні процеси потрібні

operation

Елементарна дія всередині процесу. Не декомпозується далі в межах H4.

Поле Тип Опис
inputs * list[input] Входи
outputs * list[output] Виходи
performer * string | ref → H6.role | “TBD” Хто/що виконує
duration duration | “estimate” Типова тривалість
waiting_states enum[] waiting_customer_input | waiting_external | waiting_internal

runtime_binding — розширення (на backstage_process, support_process або operation)

Міст від графа до працюючого софту: які системи, контракти подій і кінцеві точки реалізують цей вузол. Тут граф перестає описувати і стає виконуваним. Найбільш схильний до дрейфу блок довідника — прив’язані системи змінюються під вами. Завжди навішуйте freshness на вузол із runtime_binding і ставтеся до графа як до декларації контракту, а не дзеркала вручну зібраної системи.

runtime_binding:
  system_refs: [crm.hubspot, queue.nats]
  event_schemas: [lead.created.v1, proposal.sent.v2]
  api_endpoints: [POST /proposals]
  module_owner: ref: h7/position_automation_engineer   # відповідальність -> H7.position

event_schemas — контракти на стиках модулів; це ваші контрольні точки, якщо будуєте подієву архітектуру.

Ребра H4

Тип зв’язку Від → До Опис
delivers backstage_process → H3.deliverable Процес виробляє результат
requires H3.deliverable → backstage_process Результат потребує процесу
composed_of backstage_process → operation Процес складається з операцій
requires_support backstage_process → H5.support_process Потрібен процес підтримки
depends_on backstage_process → backstage_process Залежність всередині H4

Правила валідації H4

  1. Перевірка на сиріт: кожен backstage_process має бути досяжним від H3 — або напряму через delivers, або через інший процес, який постачає результат, за depends_on. Процес, що виробляє пакування, яке саме не відвантажується, але використовується процесами, які відвантажують, — не сирота. Недосяжний ні від чого на H3 = кандидат на H5 або ліквідацію.
  2. Перевірка покриття: кожен H3.deliverable з requires → H4 має мати відповідний процес.
  3. Каскад SLA: sum(operation.duration) + sum(control_point.duration) + буфер 20% ≤ deliverable.SLA.
  4. Сигнал спільного процесу: процес із delivers до 3+ результатів = аналіз прихованих залежностей.
  5. Перевірка власника: кожен backstage_process → owner заповнений.

Контрольний список H4


8. Горизонт 5: Підтримувальні процеси

Типи вузлів

support_process

Підтримувальний процес — обслуговує H4, але не створює результат, видимий клієнту.

Поле Тип Опис
process_type * enum reglament | personal. personal = червоний прапорець
mode * enum Run | Build. Переважна більшість — експлуатація (Run)
cadence * enum daily | weekly | monthly | quarterly | annual | on_demand
internal_sla * sla_object Строки, критерії якості, резервний режим
cost_allocation * cost_alloc_object Тип витрат і сума
enables * ref[] → H4.backstage_process | H5.support_process Що обслуговує. Порожній список = сирота
control_points list[control_point] Точки контролю (див. секцію 3.2)
admission admission_object Критерії допуску до процесу (реалізація → H6)

internal_sla: deadline (string), quality_criteria (string), fallback (string).

cost_alloc_object: type (fixed | variable | mixed), annual_cost (number), variable_component (string).

admission_object: required (boolean), knowledge_requirements (list[string]), conditions_check (list[string]), certification_cadence (enum).

policy

Формалізоване правило, що визначає поведінку в процесах.

Поле Тип Опис
scope * ref[] → H4/H5 process Які процеси регулює
last_reviewed * date Дата останнього перегляду
review_cadence * enum Періодичність перегляду
compliance_type * enum internal | regulatory | contractual

Свіжість. Політики використовують універсальний блок freshness (§1, Опційні універсальні блоки). last_reviewed / review_cadence тут — окрема поверхня того самого механізму; тримайте їх синхронними.

compliance_rule

Зовнішня вимога (регулятор, закон, стандарт).

Поле Тип Опис
regulator * string Хто вимагає
deadline_pattern * string Коли здавати
penalty_for_violation * string Ціна порушення
enables * ref[] → H5.support_process Який процес забезпечує
last_change * date Дата останньої зміни вимоги

Ребра H5

Тип зв’язку Від → До Опис
enables support_process → H4.backstage_process Обслуговує ключовий процес
enables support_process → H5.support_process H5 обслуговує інший H5
governed_by H5.process → policy Регулюється політикою
complies_with H5.process → compliance_rule Виконує вимогу регулятора

Правила валідації H5

  1. Перевірка на сиріт: кожен обслуговуючий процес має стояти на ланцюжку enables, який закінчується процесом H4. Обслуговувати лише інші обслуговуючі процеси — нормально: найм обслуговує і ключові, і обслуговуючі. Ланцюжок, який нікуди не приводить, або процес поза будь-яким ланцюжком — кандидат на ліквідацію. Звіт, якого ніхто не читає, живе саме тут.
  2. Перевірка роздування: COUNT(H5) > 2 × COUNT(H4) = сигнал роздування H5.
  3. Сигнал персонального процесу: process_type = personal = ризик ключової людини.
  4. Перевірка на зомбі: H5 з enables, але target не використовує результат = зомбі.
  5. Каскад SLA: H5.internal_sla.deadline не пізніше рівня сервісу споживача.
  6. Покриття допуском: якщо admission.required = true — knowledge_requirements і certification_cadence заповнені.

Контрольний список H5


9. Горизонт 6: Рішення щодо способу виконання

Типи вузлів

role

Набір операцій, що потребують певного профілю компетенцій.

Поле Тип Опис
performs * ref[] → H4/H5.operation Які операції виконує
required_competencies * ref[] → competency Необхідні компетенції
labor_type * enum person_as_process | person_in_process
work_instructions_ref list[string] Посилання на робочі інструкції
context_profile context_profile_object Профіль для перевірки сумісності ролей

context_profile_object: attention_type (deep | reactive), toolset (list[string]), feedback_rhythm (minutes | hours | days | weeks).

Роль проти позиції (глави 9, 10, 16). Роль = набір операцій + компетенції. Позиція = роль + відповідальність (одна позиція, суміщення — тільки ролей). Посада = позиція, вписана в H7.

competency

Конкретна перевірювана навичка або знання.

Поле Тип Опис
level * enum basic | intermediate | expert
verification * string Як перевіряється (атестація, тест, демонстрація)
training_path list[string] Шлях навчання

sourcing_decision

Рішення власні сили (Make) / купівля результату (Buy) / аутсорс (Outsource) / автоматизація (Automate) для конкретного варіанта операції.

Поле Тип Опис
operation_ref * ref → H4/H5.operation Для якої операції
variant * string Опис варіанта (сегмент, тариф, географія)
decision * enum make | buy | outsource | automate
rationale * string Обґрунтування
labor_type enum person_as_process | person_in_process (для make/outsource)
team_type enum division_of_labor | crew | independent_operators (тільки для make)
roles_required ref[] → role Які ролі потрібні (для make)
required_competencies ref[] → competency Які компетенції
admission_control * admission_control_object Тип контролю (див. секцію 3.3)
bus_factor integer Скільки людей можуть виконати (для make)
fallback * string План відкату
transition_cost string Вартість переходу
review_trigger * string Умова перегляду рішення

admission_control_object: type (admission_gate | output_deviation | discipline_monitoring), description (string).

team_type проти labor_type. labor_type фіксує, чи є робота самою людиною (person_as_process), чи проходить крізь людину (person_in_process). team_type фіксує, як кілька людей усередині одного блоку співвідносяться між собою, коли decision = make. Три значення, всередині одного блоку ніколи не змішуються: поділ праці (вихід однієї людини — вхід наступної); бригада (універсали під координатором, будь-хто може взяти будь-яку задачу); артіль автономних (кожен веде свою ділянку від початку до кінця). Повний розбір — у главі 9.

Ребра H6

Тип зв’язку Від → До Опис
performs role → H4/H5.operation Роль виконує операцію
requires sourcing_decision → competency Рішення потребує компетенції
composes role → H7.position Ролі групуються в позиції
depends_on sourcing_decision → sourcing_decision Залежність рішень
controls sourcing_decision → H5.support_process Для outsource: контрольний процес

controls не створює процес. Рішення про аутсорс робить контрольний процес необхідним, але вузол H5 не породжується ребром — він додається через процес зміни графа (гл. 13), як будь-який інший вузол, і лише після цього рішення на нього посилається. H6 читає з H4 і H5; угору він нічого не породжує. Якщо контрольного процесу ще немає, рішення неповне — правило 6 нижче ловить саме це.

Правила валідації H6

  1. Покриття: кожна операція з H4/H5 → ≥1 sourcing_decision. Без = сіра зона.
  2. Компетенції для make: якщо decision = make → roles_required не порожній, у ролі — required_competencies.
  3. Покриття варіантів: якщо результат H3 має кілька варіантів → кожен → власний sourcing_decision.
  4. Сумісність ролей: дві ролі на одній позиції → перевірити attention_type, toolset, feedback_rhythm. Час до продуктивності після перемикання: хвилини = ок, години = обережно, дні = несумісно.
  5. Компетенція-сирота: competency без посилань із role = кандидат на видалення.
  6. Контроль outsource: decision = outsource → вказаний механізм контролю (посилання на H5 або admission_control).
  7. Приймання buy: decision = buy → зафіксовані критерії оцінки результату.
  8. Тип команди для make: якщо decision = make, team_type заданий; якщо decision != make, team_type можна опустити.

Контрольний список H6


10. Горизонт 7: Організаційна структура

Типи вузлів

organizational_unit

Структурний підрозділ: відділ, команда, група, департамент.

Поле Тип Опис
type * enum department | team | group | division
parent_unit_ref ref → organizational_unit Вища одиниця (null для верхнього рівня)
position_refs * ref[] → position Позиції в підрозділі
segment_scope ref[] → H1.counterparty Для яких сегментів; null = для всіх
mode enum Build | Run | Mixed
cost_center string Прив’язка до центру витрат
creation_rationale string Чому створено (посилання на залежності H4–H6)
sunset_condition string За яких умов розформувати

position

Посада — групування ролей із H6.

Поле Тип Опис
role_refs * ref[] → H6.role Ролі, що складають посаду
reports_to * ref → position Лінія підпорядкування
demands_from ref[] → position Позиції, від яких вимагає результат
authority_scope * text Що має право вимагати — конкретні результати
accountability_level enum strategy | goals_budgets | tasks_plans | execution — рівень відповідальності, якого потребує крісло (глави 10, 16)
min_orientation enum transactional | contributive — мінімально допустима орієнтація на внесок; extractive недопустимий для крісла з автономією або доступом до важелів (глава 16)
unit_ref * ref → organizational_unit Підрозділ
current_holder string Хто зараз займає
headcount integer Кількість людей
substitution_plan string Хто заміщує за відсутності
decision_rights list[string] Рішення без ескалації
escalation_path string Куди ескалується

accountability_level відповідає сходам крісел із глави 16 (execution → tasks_plans → goals_budgets → strategy). Два випадки лежать поза ними: присутність (нижче execution — кандидат пред’являє регалії замість продукту; це не наймане крісло) і володіння (вище strategy — партнер/частка, не позиція на зарплаті). Охоплення та орієнтація кандидата зіставляються з кріслом під час найму; вони не об’єкти графа, тому що граф моделює компанію, а не кандидатів.

promise_policy — розширення (на position)

Повноваження на зовнішні зобов’язання: що ця позиція має право пообіцяти клієнту і коли зобов’язана ескалювати. Відрізняється від authority_scope вище, який дивиться всередину (що позиція має право вимагати всередині). Дві осі: вимога (всередину) проти обіцянки (назовні).

promise_policy:
  can_promise: true
  max_discount: "10%"
  max_sla: "48h"
  requires_approval_if:
    - "кастомна інтеграція"
    - "юридичне зобов’язання"
    - "ціна нижче підлоги"

Конкретні ліміти (знижка %, SLA) — ілюстративні; тримайте їх у галузевих прикладах (Додаток F), а не в загальній схемі.

reporting_line

Формальна лінія підпорядкування.

Поле Тип Опис
from_position * ref → position Підпорядкована
to_position * ref → position Вища
right_type * enum formal | functional | dotted
right_source * string На чому ґрунтується право
scope enum full | project | temporary
valid_until date Для тимчасових
legitimacy_check object Чи підтверджено реальним правом (boolean + comment)

dependency_line

Лінія залежності — хто від кого залежить для отримання результату.

Поле Тип Опис
from_position * ref → position Кому потрібен результат
to_position * ref → position Хто постачає результат
process_ref * ref → H4/H5.process Який процес породжує залежність
frequency * enum daily | weekly | per_event | on_demand
criticality * enum low | medium | high | blocking
sla_ref ref → sla Внутрішній SLA
escalation_mechanism string Як ескалується
formalization_status enum informal | agreed | contracted
cost_of_failure string Що відбувається при збої

Ребра H7

Тип зв’язку Від → До Опис
composes H6.role → position Ролі збираються в позицію
reports_to position → position Лінія підпорядкування
depends_on position → position Лінія залежності (з конкретного процесу)
segment_scope organizational_unit → H1.counterparty Прив’язка до клієнтського сегменту

Правила валідації H7

  1. Позиція без ролей: position без role_refs = не виконує операцій. Кандидат на ліквідацію.
  2. Відірваний підрозділ: organizational_unit, у позицій якого немає dependency_line до/від інших підрозділів І немає role_refs до H4 = відірвано від графа.
  3. Підпорядкування без залежності: A підпорядковується B, але жодна операція A не залежить від B і навпаки → навіщо підпорядкування?
  4. Діапазон залежностей: вхідних dependency_line з criticality = high/blocking > 10 на одну позицію = перевантаження.
  5. Право без можливості: reporting_line з right_type = formal, але authority_scope порожній = підпорядкування без інструментів контролю.
  6. Неформальна критична залежність: dependency_line з criticality = high + formalization_status = informal = критична залежність на особистих домовленостях.
  7. Розрив між підпорядкуванням і залежністю: > 50% critical dependency_lines ідуть поза ланцюгом reporting_line = розходження формальної і реальної структури.

Контрольний список H7


11. Канонічна таблиця ребер

Іменовані типи ребер — ті, якими ви ходите, коли читаєте граф або застосовуєте правило валідації. Кожне визначено один раз, в одному напрямку. Атрибути-посилання на вузлах (розділ 2) теж пов’язують вузли, але тут не перелічені.

Всередині горизонтів

edge_type Від → До Опис
experiences counterparty → pain_point Контрагент переживає біль (H1)
activates trigger → step Тригер запускає крок (H1)
escalates trigger → pain_point Тригер посилює біль (H1)
leads_to step → step, touchpoint → touchpoint Перехід уперед (H1, H2)
returns_to step → step Повернення назад (H1)
considers step → alternative Розгляд альтернативи (H1)
filters evaluation_criterion → alternative Відсікання за критерієм (H1)
enters_via entry_point → step Бічний вхід (H1)
loops_to step(5) → step(1) Петля повернення (H1)
contains channel → touchpoint Канал містить точку контакту (H2)
competes_with touchpoint → touchpoint Конкуренція (H2)
redirects_to touchpoint → H1.alternative Перенаправлення (H2)
recovers deliverable → deliverable Відновлення сервісу (H3)
variant_of deliverable_variant → deliverable Варіант (H3)
composed_of backstage_process → operation Складається з (H4)
governed_by process → policy Регулюється (H5)
complies_with process → compliance_rule Відповідає вимозі (H5)
depends_on node → node, один горизонт Вихід одного вузла живить інший на тому ж горизонті. Припустимо на будь-якому горизонті — так виражаються проміжні результати: результат, який споживає інший результат; процес, що виробляє пакування для інших процесів
reports_to position → position Підпорядкування (H7)

Між горизонтами

edge_type Від → До Опис
generates H1 → H2 question_node породжує точку контакту
generates H2 → H3 точка контакту породжує результат
requires H3 → H4 Результат потребує процесу
delivers H4 → H3 Процес виробляє результат
requires_support H4 → H5 Ключовий процес потребує обслуговуючого
enables H5 → H4, H5 → H5 Обслуговуючий процес обслуговує ключовий (або інший обслуговуючий)
performs H6.role → H4/H5.operation Роль виконує операцію
composes H6.role → H7.position Ролі збираються в позицію
controls H6.sourcing_decision → H5 Контрольний процес для outsource
segment_scope H7.unit → H1.counterparty Прив’язка до сегменту
sourced_by H4/H5.operation → H6.sourcing_decision Тут вирішується, яким способом виконується ця операція (зворотний вид — operation_ref на рішенні)

Зворотна пара requires ↔ delivers: Це одне й те саме ребро, видиме з двох боків. У графі зберігається один раз. requires — подання з боку H3 («мені потрібен процес»). delivers — подання з боку H4 («я виробляю результат»). У софті — одне ребро з напрямком.


12. Крос-горизонтальні правила валідації (зведені)

Наскрізна простежуваність

FOR EACH counterparty IN H1:
  trace = counterparty → pain_points → triggers → steps → question_nodes 
          → touchpoints(H2) → deliverables(H3) → processes(H4) 
          → support(H5) → sourcing(H6) → positions(H7)
  IF any link in trace is broken:
    FLAG "Розірвана траса для контрагента {counterparty.name} на {broken_link}"

Каскад покриття (зверху вниз)

Перевірка Правило Рівень
H1→H2 Кожен question_node → ≥1 touchpoint Критично
H2→H3 Кожна owned-точка контакту з generates → результат існує Критично
H3→H4 Кожен результат → ≥1 process (або самообслуговування) Критично
H4→H5 H4 з requires_support → H5 існує Попередження
H4/H5→H6 Кожна operation → ≥1 sourced_by → sourcing_decision Попередження
H6→H7 Кожна role (make) → ≥1 position Попередження

Каскад SLA (зверху вниз)

FOR EACH deliverable IN H3:
  expected = deliverable.sla.target
  actual = SUM(processes.cycle_time) + SUM(control_points.duration) + buffer(20%)
  IF actual > expected:
    FLAG "Порушення SLA: {deliverable.name} обіцяє {expected}, процесам потрібно {actual}"

Перевірки на сиріт (знизу вгору)

Горизонт Правило Дія
H2 touchpoint без info_need_ref на H1 Ліквідувати — вона відповідає на питання, якого ніхто не ставить
H3 результат (deliverable) недосяжний від H2 за triggered_by, напряму або через depends_on Ліквідувати або лишити як оголошений проміжний результат
H4 process недосяжний від H3 за delivers, напряму або через depends_on Перемістити в H5 або ліквідувати
H5 обслуговуючий процес, чий ланцюжок enables не закінчується процесом H4 Ліквідувати
H6 competency без посилань із role Видалити
H7 position без role_refs Ліквідувати
H7 unit без dependency_lines до інших unit Перевірити на відрив

Перевірки узгодженості

Перевірка Правило
Формат власника maturity ≥ 3 → owner = ref, не string
Свіжість вузол за freshness.expires_at → застосувати stale_action (warn / block / require_owner_review)
Термінологія delivers → H3.deliverable (не сервіс, не процес)

13. Шаблони промптів для ШІ

Готові промпти для заповнення і валідації графа через ШІ.

Промпт 1: Заповнення вузла H4

У мене є результат на H3:
- name: [назва]
- SLA: [цільовий час]
- acceptance_criteria: [критерії]

Опиши backstage_process для виробництва цього результату у форматі DSL:
- inputs (включно з customer_inputs)
- outputs
- operations (список елементарних дій)
- control_points (з check_type: process_design або execution_discipline)
- cycle_time (оцінка)
- mode (Build або Run)
- role (Execute або Control)

Формат: YAML. Не вигадуй дані — де не знаєш, пиши "unknown" або "estimate".

Промпт 2: аудит сиріт і роздування

Ось список вузлів H5 (supporting processes) і H4 (core processes) моєї компанії:

H4: [список]
H5: [список]

Проведи три перевірки:
1. Orphan check: які H5 не мають зв’язку enables → H4?
2. Bloat check: співвідношення H5/H4 (норма: ≤ 2:1)
3. Zombie check: які H5 перелічені як enables, але H4-споживач не використовує їхній результат?

Для кожного знайденого — рекомендація: ліквідувати, об’єднати або переглянути зв’язок.

Промпт 3: перевірка каскаду SLA

Ось результат з H3 і процес, який його виробляє:

Результат: [YAML]
Process: [YAML з operations і control_points]

Перевір:
1. SUM(operation.duration) + SUM(control_point.duration) + 20% buffer ≤ deliverable.sla.target?
2. Якщо ні — які операції є bottleneck?
3. Запропонуй варіанти: (a) спростити процес, (b) переглянути SLA, (c) автоматизувати bottleneck.

Промпт 4: рішення щодо способу виконання H6

У мене є операція з H4:
- name: [назва]
- inputs: [входи]
- outputs: [виходи]
- duration: [тривалість]
- поточний виконавець: [хто робить зараз]

Допоможи сформулювати sourcing_decision у форматі DSL:
- decision: make / buy / outsource / automate (з обґрунтуванням)
- Для кожного варіанта: pros, cons, bus_factor, fallback, review_trigger
- Критерії вибору: частота, варіативність, ціна помилки, швидкість, доступність на ринку

Формат: YAML. Де потрібна інформація, якої в тебе немає — постав питання.

Промпт 5: перевірка сумісності ролей H7

Я хочу сумістити дві ролі на одній позиції:

Роль 1: [YAML з context_profile]
Роль 2: [YAML з context_profile]

Перевір сумісність за трьома критеріями:
1. attention_type: обидві deep з різних областей? → несумісні
2. toolset: робота в різних середовищах, різний словник? → маркер
3. feedback_rhythm: одна «швидка» (хвилини), інша «повільна» (тижні)? → ризиковано

Практичний тест: час до продуктивності після перемикання.
Хвилини — ок. Години — обережно. Дні — несумісно.

Дай вердикт і обґрунтування.

14. Приклад YAML: SaaS-компанія (ПЗ як послуга), наскрізний фрагмент H1→H4

# === H1 ===
counterparty:
  id: p_ops_manager
  name: "Операційний директор, B2B SaaS, 50-200 співробітників"
  horizon: H1
  node_type: counterparty
  role: "Керівник операційного відділу"
  context: "SaaS, що швидко зростає, 80 співробітників, процеси в головах"
  confidence: 0.8
  evidence: ["12 інтерв’ю", "аналіз підтримки: 40% тікетів — про процеси"]
  pain_refs: [pp_tribal_knowledge]

pain_point:
  id: pp_tribal_knowledge
  name: "Знання в головах, не в системі"
  horizon: H1
  node_type: pain_point
  severity: high
  frequency: constant
  cost_estimate: "2-3 тижні онбординг нового менеджера замість 3 днів"
  awareness: aware_active
  trigger_refs: [tr_key_person_quit]
  confidence: 0.85
  evidence: ["вихідні інтерв’ю", "опитування після онбордингу"]

trigger:
  id: tr_key_person_quit
  name: "Ключовий співробітник звільняється"
  horizon: H1
  node_type: trigger
  event: "Тімлід подав заяву, команда з 8 людей залишилася без носія контексту"
  source: internal
  urgency: high
  activates: [step_2]

# === H2 ===
touchpoint:
  id: tp_process_audit_landing
  name: "Лендинг: 'Скільки коштує хаос у процесах?'"
  horizon: H2
  node_type: touchpoint
  ownership_type: owned
  step_ref: step_2
  info_need_ref: [qn_cost_of_chaos]
  counterparty_ref: [p_ops_manager]
  channel_ref: ch_website
  moment_of_truth: true
  customer_expectation: "Зрозуміти масштаб проблеми в грошах"
  content_type: self_serve_tool
  friction_level: low
  latency: "миттєво"
  outcome: "Калькулятор показав: хаос коштує $180K/рік. Запит демо."
  outcome_type: progress
  confidence: 0.7
  evidence: ["GA: 200 візитів/міс", "конверсія в демо: 8%"]

# === H3 ===
deliverable:
  id: del_chaos_calculator
  name: "Калькулятор вартості процесного хаосу"
  horizon: H3
  node_type: deliverable
  outcome_type: education
  triggered_by: [tp_process_audit_landing]
  customer_inputs:
    - input_name: "Кількість співробітників"
      format: "число"
    - input_name: "Середня зарплата"
      format: "число"
    - input_name: "Скільки ключових людей пішло за рік"
      format: "число"
  sla:
    target: "миттєво"
    inherited_from: tp_process_audit_landing
    clock_starts: on_trigger
    conflict: none
  acceptance_criteria:
    - "Формула розрахунку коректна"
    - "Результат правдоподібний (не лякає і не занижує)"
  qualification_signals:
    - "Користувач запитує демо після розрахунку"
  requires: [bp_calculator_maintenance]
  scalability_class: fixed

# === H4 ===
backstage_process:
  id: bp_calculator_maintenance
  name: "Підтримка калькулятора вартості хаосу"
  horizon: H4
  node_type: backstage_process
  purpose: "Забезпечити актуальність формул і бенчмарків у калькуляторі"
  mode: Run
  role: Execute
  triggered_by: [del_chaos_calculator]
  inputs:
    - "Галузеві бенчмарки (щоквартально)"
    - "Зворотний зв’язок від користувачів"
  outputs:
    - "Оновлені формули"
    - "Актуальні коефіцієнти"
  composed_of:
    - op_collect_benchmarks
    - op_update_formulas
    - op_regression_test
  control_points:
    - id: cp_formula_accuracy
      check_type: process_design
      criteria: "Результат калькулятора відхиляється від ручного розрахунку не більше ніж на 15%"
      checker: "Менеджер продукту"
      frequency: quarterly
  cycle_time: "2 дні/квартал"
  owner: "Менеджер продукту"
  delivers: [del_chaos_calculator]

Повна специфікація. Для галузевих прикладів — див. Додаток F.