{
  "id": "P40-C01",
  "mode": "workflow",
  "theme": "workflow",
  "brand": "РАЗБОР / P40-C01",
  "title": "Частичный возврат: обращение по одной строке заказа",
  "lead": "Рассчитать количество и сумму проверяемой позиции, сохранив остальные товары вне возврата.",
  "section": "Исходный материал → результат",
  "offer": "Рассчитать количество и сумму проверяемой позиции, сохранив остальные товары вне возврата.",
  "inputTitle": "Редактируемый исходный материал",
  "outputTitle": "Обращение по позиции",
  "source": "Обращение: RET-204-1\nЗаказ: O-204\nПозиция: футболка T-2\nКуплено: 2\nРанее возвращено: 0\nВозврат: 1\nЦена единицы: 1200\nПричина: не подошёл размер",
  "extract": [
    {
      "id": "request",
      "label": "Обращение",
      "pattern": "^Обращение:[ \\t]*(.+)$",
      "type": "text",
      "required": true
    },
    {
      "id": "order",
      "label": "Заказ",
      "pattern": "^Заказ:[ \\t]*(.+)$",
      "type": "text",
      "required": true
    },
    {
      "id": "item",
      "label": "Позиция",
      "pattern": "^Позиция:[ \\t]*(.+)$",
      "type": "text",
      "required": true
    },
    {
      "id": "bought",
      "label": "Куплено",
      "pattern": "^Куплено:[ \\t]*(.+)$",
      "type": "number",
      "required": true,
      "min": 1,
      "integer": true
    },
    {
      "id": "returned",
      "label": "Ранее возвращено",
      "pattern": "^Ранее возвращено:[ \\t]*(.+)$",
      "type": "number",
      "required": true,
      "min": 0,
      "integer": true
    },
    {
      "id": "quantity",
      "label": "Возврат",
      "pattern": "^Возврат:[ \\t]*(.+)$",
      "type": "number",
      "required": true,
      "min": 1,
      "integer": true
    },
    {
      "id": "price",
      "label": "Цена единицы",
      "pattern": "^Цена единицы:[ \\t]*(.+)$",
      "type": "number",
      "required": true,
      "min": 0,
      "exclusiveMin": true
    },
    {
      "id": "reason",
      "label": "Причина",
      "pattern": "^Причина:[ \\t]*(.+)$",
      "type": "text",
      "required": true
    }
  ],
  "processor": "extract",
  "rules": [
    {
      "field": "bought",
      "kind": "minimum",
      "value": 0,
      "message": "Отрицательное значение недопустимо: bought"
    },
    {
      "field": "returned",
      "kind": "minimum",
      "value": 0,
      "message": "Отрицательное значение недопустимо: returned"
    },
    {
      "field": "price",
      "kind": "minimum",
      "value": 0,
      "message": "Отрицательное значение недопустимо: price"
    }
  ],
  "examples": [
    {
      "label": "Исходный пример",
      "text": "Обращение: RET-204-1\nЗаказ: O-204\nПозиция: футболка T-2\nКуплено: 2\nРанее возвращено: 0\nВозврат: 1\nЦена единицы: 1200\nПричина: не подошёл размер"
    },
    {
      "label": "Неполные сведения",
      "text": "Требуется уточнение. Исходные параметры пока не переданы."
    }
  ],
  "derive": "return",
  "idempotencyField": "request",
  "renderTemplate": "Обращение {request}\nЗаказ {order}, позиция {item}, количество {quantity}.\nПричина: {reason}.\nЭтап: подготовлено к проверке. Возврат денег не выполнен."
}
