{
  "schemaVersion": 1,
  "id": "P60-C05",
  "title": "Перенос погрузки: запрос не меняет подтвержденную дату",
  "author": {
    "id": "P60",
    "name": "Герман Петров"
  },
  "specialty": "Заявки на перевозку и логистические документы",
  "projectStatus": "concept",
  "source": {
    "document": "catalogue_60_personas.md",
    "briefId": "P60-C05",
    "title": "Смена даты погрузки",
    "kind": "editorial_concept",
    "data": "synthetic"
  },
  "context": "Новое письмо просит перенести погрузку. Если сразу заменить дату, диспетчер увидит неподтвержденное изменение как действующее.",
  "decision": "Я разделил requested и approved, связал их одним ключом изменения и сохранил первоначальную дату. Повтор одобрения возвращает состояние без второго перехода; отклонение не переписывает подтвержденный план.",
  "constraint": "Это авторский журнал переходов. Реальный перевозчик и система бронирования не подключены.",
  "steps": [
    "Подготовить и зафиксировать исходный набор.",
    "Выполнить выбранное преобразование и сохранить результат.",
    "Проверить крайние случаи на измененных входах."
  ],
  "inspection": [
    "Запрос оставляет 6 ноября, одобрение меняет на 7, повтор не дублирует — проверено.",
    "Без одобрения действует исходная дата — проверено.",
    "Одобрение другой даты не совпадает с запросом — проверено.",
    "Одобрение другой заявки с тем же change ID не меняет TR18 — проверено.",
    "Отклонение удаляет pending; последующее одобрение не проходит — проверено.",
    "Тот же event ID с другой датой дает конфликт, не повтор — проверено.",
    "Невозможная дата не подтверждается — проверено."
  ],
  "sample": {
    "headers": [
      "Событие",
      "Заявка",
      "Запрошено",
      "Действует",
      "Решение"
    ],
    "rows": [
      [
        "E1",
        "TR18",
        "2026-11-07",
        "2026-11-06",
        "Запрошено, прежняя дата действует"
      ],
      [
        "E2",
        "TR18",
        "2026-11-07",
        "2026-11-07",
        "Изменение подтверждено"
      ],
      [
        "E2",
        "TR18",
        "2026-11-07",
        "2026-11-07",
        "Повтор события"
      ]
    ]
  },
  "sampleNote": "Авторский контрольный набор; не клиентские документы и не результаты внешней модели.",
  "caseStudy": {
    "role": "Разработчик обработки логистических заявок",
    "contribution": "Я реализовал согласование изменения даты по заявке и событию с проверкой отказа и повторов.",
    "objective": "TR18 остается на 6 ноября до подтверждения; одобренное изменение на 7 ноября сохраняет одну заявку и один переход.",
    "problem": "Новое письмо просит перенести погрузку. Если сразу заменить дату, диспетчер увидит неподтвержденное изменение как действующее.",
    "result": "TR18 сохраняет 6 ноября до подтверждения связанной пары TR18/CH1. Одобрение меняет дату один раз; повтор не создает переход. Чужая заявка, отклоненный запрос, невозможная дата и другой payload прежнего события не изменяют подтвержденное состояние.",
    "deliverables": [
      "index.html",
      "source.json",
      "source.csv",
      "result.json",
      "result.csv",
      "engine.js",
      "checks.json",
      "style.css"
    ],
    "blocks": [
      {
        "type": "text",
        "title": "Одного CH1 недостаточно для переноса TR18",
        "text": "Одобрение изменения CH1 от другой заявки не относится к TR18. Я связал ожидающее изменение с парой request/change, а отказ удаляет его из ожидания. После этого позднее одобрение не переносит дату. Повтор с изменёнными данными также рассматривается как конфликт, а не новая команда под старым ID."
      }
    ]
  },
  "deliverable": {
    "type": "app",
    "entry": "/catalogue/deliverables/p60-c05/index.html",
    "label": "Открыть работающий материал",
    "files": [
      {
        "path": "/catalogue/deliverables/p60-c05/index.html",
        "name": "index.html",
        "mimeType": "text/html"
      },
      {
        "path": "/catalogue/deliverables/p60-c05/source.json",
        "name": "source.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p60-c05/source.csv",
        "name": "source.csv",
        "mimeType": "text/csv"
      },
      {
        "path": "/catalogue/deliverables/p60-c05/result.json",
        "name": "result.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p60-c05/result.csv",
        "name": "result.csv",
        "mimeType": "text/csv"
      },
      {
        "path": "/catalogue/deliverables/p60-c05/engine.js",
        "name": "engine.js",
        "mimeType": "text/javascript"
      },
      {
        "path": "/catalogue/deliverables/p60-c05/verify.cjs",
        "name": "verify.cjs",
        "mimeType": "text/javascript"
      },
      {
        "path": "/catalogue/deliverables/p60-c05/checks.json",
        "name": "checks.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p60-c05/style.css",
        "name": "style.css",
        "mimeType": "text/css"
      }
    ],
    "summary": "TR18 сохраняет 6 ноября до подтверждения связанной пары TR18/CH1. Одобрение меняет дату один раз; повтор не создает переход. Чужая заявка, отклоненный запрос, невозможная дата и другой payload прежнего события не изменяют подтвержденное состояние."
  },
  "takeaway": "TR18 сохраняет 6 ноября до подтверждения связанной пары TR18/CH1. Одобрение меняет дату один раз; повтор не создает переход. Чужая заявка, отклоненный запрос, невозможная дата и другой payload прежнего события не изменяют подтвержденное состояние.",
  "capabilities": [
    "completed_app"
  ],
  "externalConnections": []
}
