{
  "id": "P40-C05",
  "mode": "workflow",
  "theme": "workflow",
  "brand": "РАЗБОР / P40-C05",
  "title": "Оптовый заказ: отправлено, готовится и остаток",
  "lead": "Посчитать непокрытое количество заказа, не считая подготовленную партию отправленной.",
  "section": "Исходный материал → результат",
  "offer": "Посчитать непокрытое количество заказа, не считая подготовленную партию отправленной.",
  "inputTitle": "Редактируемый исходный материал",
  "outputTitle": "Состав исполнения заказа",
  "source": "Заказ: W-100\nВсего: 100\nОтправлено: 60\nГотовится: 30\nТрек отправленного: A-601\nИсточник: события склада 2026-10-18T15:00:00+03:00",
  "extract": [
    {
      "id": "order",
      "label": "Заказ",
      "pattern": "^Заказ:[ \\t]*(.+)$",
      "type": "text",
      "required": true
    },
    {
      "id": "total",
      "label": "Всего",
      "pattern": "^Всего:[ \\t]*(.+)$",
      "type": "number",
      "required": true,
      "min": 1,
      "integer": true
    },
    {
      "id": "sent",
      "label": "Отправлено",
      "pattern": "^Отправлено:[ \\t]*(.+)$",
      "type": "number",
      "required": true,
      "min": 0,
      "integer": true
    },
    {
      "id": "ready",
      "label": "Готовится",
      "pattern": "^Готовится:[ \\t]*(.+)$",
      "type": "number",
      "required": true,
      "min": 0,
      "integer": true
    },
    {
      "id": "track",
      "label": "Трек отправленного",
      "pattern": "^Трек отправленного:[ \\t]*(.+)$",
      "type": "text",
      "required": true
    },
    {
      "id": "source",
      "label": "Источник",
      "pattern": "^Источник:[ \\t]*(.+)$",
      "type": "text",
      "required": true
    }
  ],
  "processor": "extract",
  "rules": [
    {
      "field": "total",
      "kind": "minimum",
      "value": 0,
      "message": "Количество total не может быть отрицательным."
    },
    {
      "field": "sent",
      "kind": "minimum",
      "value": 0,
      "message": "Количество sent не может быть отрицательным."
    },
    {
      "field": "ready",
      "kind": "minimum",
      "value": 0,
      "message": "Количество ready не может быть отрицательным."
    }
  ],
  "examples": [
    {
      "label": "Исходный пример",
      "text": "Заказ: W-100\nВсего: 100\nОтправлено: 60\nГотовится: 30\nТрек отправленного: A-601\nИсточник: события склада 2026-10-18T15:00:00+03:00"
    },
    {
      "label": "Неполные сведения",
      "text": "Требуется уточнение. Исходные параметры пока не переданы."
    }
  ],
  "derive": "shipment"
}
