{
  "schemaVersion": 1,
  "id": "P59-C02",
  "title": "Заявки: извлечение даты с отказом при конфликте",
  "author": {
    "id": "P59",
    "name": "Владислав Савельев"
  },
  "specialty": "Данные и эталоны для проверки моделей",
  "projectStatus": "concept",
  "source": {
    "document": "catalogue_60_personas.md",
    "briefId": "P59-C02",
    "title": "Извлечение полей заявки",
    "kind": "editorial_concept",
    "data": "synthetic"
  },
  "context": "Заявки содержат ISO-дату, несколько дат, разговорное «завтра» и отсутствие срока. Без строгого правила парсер незаметно дополнял бы вход.",
  "decision": "Я определил узкую задачу: извлечь единственную ISO-дату. Повтор той же даты допустим, две разные даты дают конфликт. Разговорная дата остается неразрешенной без временного контекста.",
  "constraint": "Парсер работает с явным YYYY-MM-DD, не интерпретирует календарные выражения и не вызывает модель.",
  "steps": [
    "Подготовить и зафиксировать исходный набор.",
    "Выполнить выбранное преобразование и сохранить результат.",
    "Проверить крайние случаи на измененных входах."
  ],
  "inspection": [
    "Все шесть полных заявок совпадают с датой и статусом эталона — проверено.",
    "Невозможная дата не превращается в нормализованный следующий месяц — проверено.",
    "Вторая разная дата меняет одиночный результат на конфликт — проверено."
  ],
  "sample": {
    "headers": [
      "ID",
      "Текст",
      "Дата",
      "Статус",
      "Эталон",
      "Совпадение"
    ],
    "rows": [
      [
        "R1",
        "Подготовить макет к 2026-10-22.",
        "2026-10-22",
        "дата",
        "2026-10-22",
        "Да"
      ],
      [
        "R2",
        "Срок пока не определили.",
        "",
        "нет",
        "",
        "Да"
      ],
      [
        "R3",
        "Ждем 2026-10-22, возможно перенос на 2026-10-24.",
        "",
        "конфликт",
        "",
        "Да"
      ],
      [
        "R4",
        "Нужно завтра утром.",
        "",
        "нет",
        "",
        "Да"
      ],
      [
        "R5",
        "Срок 2026-11-01. Повторяю: 2026-11-01.",
        "2026-11-01",
        "дата",
        "2026-11-01",
        "Да"
      ],
      [
        "R6",
        "Срок 2026-13-40.",
        "",
        "ошибка формата",
        "",
        "Да"
      ]
    ]
  },
  "sampleNote": "Авторский контрольный набор; не клиентские документы и не результаты внешней модели.",
  "caseStudy": {
    "role": "Разработчик эталонных наборов данных",
    "contribution": "Я подготовил шесть текстов с датами и конфликтами и реализовал сравнение извлечения с эталоном.",
    "objective": "Полные тексты заявок дают точную дату, пустое значение или конфликт; неизвестное не превращается в сегодняшнее число.",
    "problem": "Заявки содержат ISO-дату, несколько дат, разговорное «завтра» и отсутствие срока. Без строгого правила парсер незаметно дополнял бы вход.",
    "result": "Шесть заявок разобраны с сохранением различий между датой, отсутствием, конфликтом и невозможным форматом. «Завтра» не получило выдуманную календарную дату; повтор 2026-11-01 не стал конфликтом.",
    "deliverables": [
      "index.html",
      "source.json",
      "source.csv",
      "result.json",
      "result.csv",
      "engine.js",
      "checks.json",
      "style.css"
    ],
    "blocks": [
      {
        "type": "text",
        "title": "Дата и конфликт дат — разные ответы",
        "text": "В R1 срок записан прямо: 2026-10-22. Этот простой пример служит точкой сравнения с текстами, где сроков несколько или они противоречат друг другу. Я сохранил статус рядом с датой, чтобы обработчик не мог получить правильный вид ответа простым выбором первой найденной последовательности цифр."
      }
    ]
  },
  "deliverable": {
    "type": "analysis",
    "entry": "/catalogue/deliverables/p59-c02/index.html",
    "label": "Открыть работающий материал",
    "files": [
      {
        "path": "/catalogue/deliverables/p59-c02/index.html",
        "name": "index.html",
        "mimeType": "text/html"
      },
      {
        "path": "/catalogue/deliverables/p59-c02/source.json",
        "name": "source.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p59-c02/source.csv",
        "name": "source.csv",
        "mimeType": "text/csv"
      },
      {
        "path": "/catalogue/deliverables/p59-c02/result.json",
        "name": "result.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p59-c02/result.csv",
        "name": "result.csv",
        "mimeType": "text/csv"
      },
      {
        "path": "/catalogue/deliverables/p59-c02/engine.js",
        "name": "engine.js",
        "mimeType": "text/javascript"
      },
      {
        "path": "/catalogue/deliverables/p59-c02/verify.cjs",
        "name": "verify.cjs",
        "mimeType": "text/javascript"
      },
      {
        "path": "/catalogue/deliverables/p59-c02/checks.json",
        "name": "checks.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p59-c02/style.css",
        "name": "style.css",
        "mimeType": "text/css"
      }
    ],
    "summary": "Шесть заявок разобраны с сохранением различий между датой, отсутствием, конфликтом и невозможным форматом. «Завтра» не получило выдуманную календарную дату; повтор 2026-11-01 не стал конфликтом."
  },
  "takeaway": "Шесть заявок разобраны с сохранением различий между датой, отсутствием, конфликтом и невозможным форматом. «Завтра» не получило выдуманную календарную дату; повтор 2026-11-01 не стал конфликтом.",
  "capabilities": [
    "completed_analysis"
  ],
  "externalConnections": []
}
