{
  "id": "FIVE-NODES-ONE-EVENT",
  "version": "1.2.0",
  "status": "synthetic_learning_case",
  "title": "Пять объектов, одно обязательство",
  "boundary": "Одна условная электрическая линия. Базовые мощности уже включают относимые к объектам потери.",
  "eventHours": 1,
  "commitmentKW": 80,
  "defaultFeederLimitKW": 350,
  "defaultRecoveryHours": 2,
  "scenarios": {
    "normal": {"label": "Все данные приняты", "excluded": []},
    "water": {"label": "Нет свежих данных насосной", "excluded": ["WATER-A"]},
    "gateway": {"label": "Недоступен общий шлюз трёх объектов", "excluded": ["FOOD-A", "WATER-A", "HEAT-A"]}
  },
  "nodes": [
    {"id": "FOOD-A", "name": "Магазин", "baselineKW": 120, "reliefKW": 20, "recoveryKWh": 18, "maxRecoveryKW": 18, "recoveryDeadlineH": 2, "service": "Сохранность продуктов", "limit": "Подтверждённый температурный запас; восстановление за 2 часа"},
    {"id": "WATER-A", "name": "Насосная", "baselineKW": 40, "reliefKW": 15, "recoveryKWh": 15, "maxRecoveryKW": 15, "recoveryDeadlineH": 2, "service": "Подача воды", "limit": "Допустимый уровень и давление; восполнение за 2 часа"},
    {"id": "HEAT-A", "name": "Тепловой узел", "baselineKW": 60, "reliefKW": 15, "recoveryKWh": 12, "maxRecoveryKW": 12, "recoveryDeadlineH": 3, "service": "Тепловой режим", "limit": "Подготовленный запас тепла; восстановление за 3 часа"},
    {"id": "TRANSPORT-A", "name": "Зарядный парк", "baselineKW": 70, "reliefKW": 30, "recoveryKWh": 30, "maxRecoveryKW": 30, "recoveryDeadlineH": 3, "service": "Готовность к рейсам", "limit": "Согласованное задание заряда; выполнение за 3 часа"},
    {"id": "COMMS-A", "name": "Узел связи", "baselineKW": 10, "reliefKW": 0, "recoveryKWh": 0, "maxRecoveryKW": 0, "recoveryDeadlineH": 0, "service": "Обмен данными", "limit": "Аварийный запас остаётся за основной функцией"}
  ],
  "assumptions": [
    "Базовая мощность постоянна в каждом часовом интервале.",
    "Все активные объекты заранее подтвердили допустимость часовой разгрузки и указанные границы восстановления.",
    "В расчётном событии используется весь доступный ресурс. Замещающий резерв не предусмотрен.",
    "Исключённый до события объект в сценарии остаётся на базовом потреблении. Это условие модели, его фактическую нагрузку при потере данных требуется отдельно подтвердить.",
    "Дополнительная энергия восстановления задана независимо от выбранной длительности; в реальном процессе эта зависимость требует измерения.",
    "Сравниваются восстановление за первый час и равномерное восстановление за H часов. Другие допустимые расписания могут существовать.",
    "Калькулятор проверяет часовую мощность, заданные пределы восстановления и достаточность ресурса. Температурная динамика, напряжение, пуски, защиты и реальные договоры не моделируются."
  ],
  "expectedDefault": {"baselineKW": 300, "reliefKW": 80, "eventKW": 220, "recoveryKWh": 75, "naivePeakKW": 375, "coordinatedPeakKW": 337.5, "baselineEnergyKWh": 900, "actualEnergyKWh": 895, "netSavedKWh": 5, "naivePass": false, "coordinatedPass": true},
  "economicsExample": {"status": "conditional_synthetic_terms", "energyRubPerKWh": 8, "serviceRubPerEventKWh": 5, "serviceKWh": 80, "serviceRub": 400, "avoidedPurchaseRub": 640, "recoveryPurchaseRub": 600, "effectBeforeOtherCostsRub": 440, "conditions": ["Приняты измерения и соблюдены все условия учебной услуги.", "Учебные условия допускают оплату разгрузки вместе с изменением стоимости покупки энергии.", "Из результата вычитаются эксплуатация, капитал, верификация и другие относимые затраты.", "Расчёт не означает применимость указанных условий к действующему рынку."]}
}
