{
  "schemaVersion": 1,
  "id": "P30-C02",
  "title": "Производственные интервалы без пересечения",
  "author": {
    "id": "P30",
    "name": "Андрей Лавров"
  },
  "specialty": "Внутренние приложения для небольших команд",
  "projectStatus": "concept",
  "source": {
    "document": "catalogue_60_personas.md",
    "briefId": "P30-C02",
    "title": "Планирование производства малой мастерской",
    "kind": "editorial_concept",
    "data": "synthetic"
  },
  "context": "Для станка A уже подготовлен интервал 10:00–12:00. Новая работа 11:00–13:00 не должна получить то же подтверждение.",
  "decision": "Проверяю пересечение перед переходом, отдельно по ресурсу и дате. Соседняя граница разрешена: начало ровно в 12:00 не пересекается с завершением первой работы.",
  "constraint": "Приложение работает с подготовленными данными одного браузера. Совместной серверной работы, отправки контрагентам и реальной системы прав нет.",
  "steps": [
    "Открыть исходное расписание и проверить ресурс, дату и интервал.",
    "Создать пересекающийся интервал для того же ресурса: подтверждение блокируется.",
    "Перенести интервал за границу занятости и повторить подтверждение: конфликт исчезает."
  ],
  "inspection": [
    "Открыть исходное расписание и проверить ресурс, дату и интервал.",
    "Создать пересекающийся интервал для того же ресурса: подтверждение блокируется.",
    "Перенести интервал за границу занятости и повторить подтверждение: конфликт исчезает.",
    "Перезагрузить страницу: измененное расписание и журнал сохраняются."
  ],
  "sample": {
    "headers": [
      "Действие",
      "Наблюдаемый результат"
    ],
    "rows": [
      [
        "1",
        "Открыть исходное расписание и проверить ресурс, дату и интервал."
      ],
      [
        "2",
        "Создать пересекающийся интервал для того же ресурса: подтверждение блокируется."
      ],
      [
        "3",
        "Перенести интервал за границу занятости и повторить подтверждение: конфликт исчезает."
      ],
      [
        "4",
        "Перезагрузить страницу: измененное расписание и журнал сохраняются."
      ]
    ]
  },
  "sampleNote": "Самостоятельный проект на подготовленных исходных данных. Действия выполняются локально.",
  "caseStudy": {
    "role": "Разработка локального приложения",
    "contribution": "Реализовал проверку пересечения производственных интервалов одного ресурса, редактирование карточек и журнал переходов.",
    "objective": "Один ресурс не подтверждает две работы в одно время.",
    "problem": "Для станка A уже подготовлен интервал 10:00–12:00. Новая работа 11:00–13:00 не должна получить то же подтверждение.",
    "result": "Конфликтующая работа остается черновиком с объяснением. После переноса на 12:00–13:00 ее можно подтвердить; другой станок не блокируется этим интервалом.",
    "deliverables": [
      "Рабочая область",
      "Сохраняемый результат взаимодействия",
      "Исходные данные и порядок самостоятельной проверки"
    ],
    "blocks": [
      {
        "type": "text",
        "title": "Соседние интервалы могут соприкасаться",
        "text": "Проверяю пересечение перед переходом, отдельно по ресурсу и дате. Соседняя граница разрешена: начало ровно в 12:00 не пересекается с завершением первой работы."
      },
      {
        "type": "text",
        "title": "Соприкосновение без пересечения",
        "text": "Если первая работа закончилась в 12:00, вторая может начаться в 12:00 на том же ресурсе. Начало в 11:59 уже пересекает занятый интервал и не проходит подтверждение."
      },
      {
        "type": "callout",
        "title": "Граница работы",
        "text": "Приложение работает с подготовленными данными одного браузера. Совместной серверной работы, отправки контрагентам и реальной системы прав нет."
      }
    ]
  },
  "deliverable": {
    "type": "app",
    "entry": "/catalogue/deliverables/p30-c02/index.html",
    "label": "Открыть работающий результат",
    "files": [
      {
        "path": "/catalogue/deliverables/p30-c02/index.html",
        "name": "Интерактивный результат",
        "mimeType": "text/html"
      },
      {
        "path": "/catalogue/deliverables/p30-c02/source.json",
        "name": "Исходные условия и модель",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p30-c02/README.html",
        "name": "Повторить проверку",
        "mimeType": "text/html"
      },
      {
        "path": "/catalogue/deliverables/p30-c02/starter-data.json",
        "name": "Исходный набор для повторного использования",
        "mimeType": "application/json"
      }
    ],
    "summary": "Конфликтующая работа остается черновиком с объяснением. После переноса на 12:00–13:00 ее можно подтвердить; другой станок не блокируется этим интервалом."
  },
  "takeaway": "Конфликтующая работа остается черновиком с объяснением. После переноса на 12:00–13:00 ее можно подтвердить; другой станок не блокируется этим интервалом.",
  "capabilities": [
    "completed_app"
  ],
  "externalConnections": []
}
