{
  "schemaVersion": 1,
  "id": "P08-C03",
  "title": "Комплект белья: предмет, размер и количество",
  "author": {
    "id": "P08",
    "name": "Софья Климова"
  },
  "specialty": "Наполнение больших товарных каталогов",
  "projectStatus": "concept",
  "source": {
    "document": "catalogue_60_personas.md",
    "briefId": "P08-C03",
    "title": "Каталог постельного белья",
    "kind": "editorial_concept",
    "data": "synthetic"
  },
  "context": "Размер без имени предмета не позволяет понять, о простыне речь или о пододеяльнике. Комплектность терялась при сведении к одному размеру.",
  "decision": "Каждый предмет получает отдельную запись. Неизвестный предмет не угадывается по популярному размеру; признак резинки хранится отдельно от названия.",
  "constraint": "Использован собственный ограниченный набор строк и явно заданные справочники. Преобразователь не угадывает отсутствующие свойства; до импорта реального каталога правила нужно согласовать с его схемой.",
  "steps": [
    "Нормализованные поля",
    "Исключения не потеряны"
  ],
  "inspection": [
    "4 записи, 2 исключения. В B-103 count=2; B-105 elastic=true.",
    "Изменить один входной объект и проверить, что результат пересчитался.",
    "Проверить, что неверный JSON даёт сообщение об ошибке, не стирая поле."
  ],
  "sample": {
    "headers": [
      "id",
      "item",
      "widthCm",
      "lengthCm",
      "count",
      "elastic"
    ],
    "rows": [
      [
        "B-101",
        "пододеяльник",
        "180",
        "210",
        "1",
        "false"
      ],
      [
        "B-102",
        "простыня",
        "220",
        "240",
        "1",
        "false"
      ],
      [
        "B-103",
        "наволочка",
        "50",
        "70",
        "2",
        "false"
      ],
      [
        "B-105",
        "простыня",
        "160",
        "200",
        "1",
        "true"
      ]
    ]
  },
  "sampleNote": "Самостоятельный редакционный проект. Данные и конструкция заданы автором для этой работы; не являются характеристиками товара действующего производителя.",
  "caseStudy": {
    "role": "Проектирование правил, реализация преобразователя и проверка исключений",
    "contribution": "Рабочий преобразователь JavaScript, входной набор, результат, журнал исключений и страница для повторного запуска.",
    "objective": "Получить воспроизводимое преобразование товарных строк с сохранением исходных данных.",
    "problem": "Размер без имени предмета не позволяет понять, о простыне речь или о пододеяльнике. Комплектность терялась при сведении к одному размеру.",
    "result": "Рабочий преобразователь обработал 6 строк: 4 записи разнесены по полям, 2 отправлены в журнал исключений. Исходные значения сохранены; результат можно пересчитать на странице и сопоставить с JSON.",
    "deliverables": [
      "Спецификация проекта",
      "Таблица исходных условий",
      "Нормализованные поля · SVG",
      "Нормализованные поля · PNG",
      "Исключения не потеряны · SVG",
      "Исключения не потеряны · PNG",
      "Исходник преобразования",
      "Исходные записи",
      "Результат и исключения",
      "Протокол проверок"
    ],
    "blocks": [
      {
        "type": "table",
        "title": "Что можно проверить",
        "table": {
          "headers": [
            "id",
            "item",
            "widthCm",
            "lengthCm",
            "count",
            "elastic"
          ],
          "rows": [
            [
              "B-101",
              "пододеяльник",
              "180",
              "210",
              "1",
              "false"
            ],
            [
              "B-102",
              "простыня",
              "220",
              "240",
              "1",
              "false"
            ],
            [
              "B-103",
              "наволочка",
              "50",
              "70",
              "2",
              "false"
            ],
            [
              "B-105",
              "простыня",
              "160",
              "200",
              "1",
              "true"
            ]
          ]
        }
      }
    ]
  },
  "deliverable": {
    "type": "document",
    "entry": "/catalogue/deliverables/p08-c03/index.html",
    "label": "Открыть готовый материал",
    "files": [
      {
        "path": "/catalogue/deliverables/p08-c03/specification.json",
        "name": "Спецификация проекта",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p08-c03/specification.csv",
        "name": "Таблица исходных условий",
        "mimeType": "text/csv"
      },
      {
        "path": "/catalogue/deliverables/p08-c03/sheet-1.svg",
        "name": "Нормализованные поля · SVG",
        "mimeType": "image/svg+xml"
      },
      {
        "path": "/catalogue/deliverables/p08-c03/sheet-1.png",
        "name": "Нормализованные поля · PNG",
        "mimeType": "image/png"
      },
      {
        "path": "/catalogue/deliverables/p08-c03/sheet-2.svg",
        "name": "Исключения не потеряны · SVG",
        "mimeType": "image/svg+xml"
      },
      {
        "path": "/catalogue/deliverables/p08-c03/sheet-2.png",
        "name": "Исключения не потеряны · PNG",
        "mimeType": "image/png"
      },
      {
        "path": "/catalogue/deliverables/p08-c03/normalizer.js",
        "name": "Исходник преобразования",
        "mimeType": "text/javascript"
      },
      {
        "path": "/catalogue/deliverables/p08-c03/input.json",
        "name": "Исходные записи",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p08-c03/output.json",
        "name": "Результат и исключения",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p08-c03/test-report.json",
        "name": "Протокол проверок",
        "mimeType": "application/json"
      }
    ],
    "summary": "Рабочий преобразователь обработал 6 строк: 4 записи разнесены по полям, 2 отправлены в журнал исключений. Исходные значения сохранены; результат можно пересчитать на странице и сопоставить с JSON."
  },
  "takeaway": "Рабочий преобразователь обработал 6 строк: 4 записи разнесены по полям, 2 отправлены в журнал исключений. Исходные значения сохранены; результат можно пересчитать на странице и сопоставить с JSON.",
  "capabilities": [
    "completed_document"
  ],
  "externalConnections": []
}
