{
  "proof": {
    "id": 80,
    "buyerLabel": "Разработка для ветеринарных клиник",
    "deliverableTitle": "Остатки по партиям и срокам годности",
    "deliverableDescription": "Доступное количество отделено от просроченного; каждая строка имеет партию и место хранения.",
    "pilotInputs": [
      "Справочник одной группы материалов и единиц",
      "Остатки с партиями, сроками и местами хранения",
      "Правила карантина и ответственности за проверку"
    ],
    "pilotAcceptance": "Просроченная партия исключается из доступного; итог раскрывается до партии и места хранения.",
    "scenario": {
      "title": "Общий остаток скрывает просроченную партию",
      "before": "На 23.10.2026: ВК-018 — 5 уп., срок 20.10; ВК-019 — 8 уп., срок 30.11.",
      "conflict": "Всего 13 упаковок, но ВК-018 просрочена; показывать все 13 как доступные нельзя.",
      "decision": "Отделить 5 упаковок ВК-018 в статус «Требует решения ответственного»; считать доступное по ВК-019.",
      "after": "По календарному фильтру доступно 8 уп., исключено 5; пригодность и условия хранения проверяет специалист."
    }
  },
  "version": "0.4",
  "status": "Проект для согласования",
  "solutionId": 80,
  "slug": "veterinary-stock",
  "title": "Запасы ветеринарной клиники",
  "goal": "Проверяйте остатки и сроки материалов ветклиники",
  "buyer": "Управляющий ветеринарной клиникой",
  "system": "Расписание / кабинет организации",
  "reviewer": "Администратор и ответственный специалист",
  "entities": "Участник, услуга, ресурс",
  "phases": [
    {
      "title": "Разобрать ваш процесс",
      "description": "Материал найден на полке, но срок партии истёк; нужный расходник приходится заказывать срочно.",
      "work": "Сверяем исходные примеры, роли и исключения. Фиксируем один сценарий пилота.",
      "result": "Схема процесса и согласованный состав первой версии."
    },
    {
      "title": "Собрать рабочий прототип",
      "description": "Партионный реестр остатков",
      "work": "Показываем интерфейс и правила на согласованной выборке. Проверяем неоднозначные случаи с вашей командой.",
      "result": "Очередь проверки сроков"
    },
    {
      "title": "Подключить данные",
      "description": "Реестр номенклатуры и упаковок",
      "work": "Сначала проверяем доступные выгрузки и интерфейсы. Если обмен возможен, согласуем поля, направления и права записи.",
      "result": "Подтверждённый способ обмена либо согласованный импорт. Если интерфейса нет — зафиксированное ограничение и решение о следующем шаге."
    },
    {
      "title": "Проверить в работе",
      "description": "Просроченная партия не считается доступной",
      "work": "Проводим контрольные сценарии, обучаем ответственных, передаём документацию и порядок восстановления.",
      "result": "Заявки на пополнение"
    }
  ],
  "mapping": [
    {
      "field": "Номер партии",
      "type": "text",
      "unit": "",
      "example": "ВК-018",
      "rule": "Правило и обязательность подтверждаются на ваших исходниках."
    },
    {
      "field": "Дата проверки",
      "type": "date",
      "unit": "",
      "example": "2026-10-23",
      "rule": "Правило и обязательность подтверждаются на ваших исходниках."
    },
    {
      "field": "Окончание срока годности",
      "type": "date",
      "unit": "",
      "example": "2026-10-20",
      "rule": "Правило и обязательность подтверждаются на ваших исходниках."
    }
  ],
  "flow": [
    {
      "label": "Ваши исходники",
      "text": "Реестр номенклатуры и упаковок"
    },
    {
      "label": "Правила и интерфейс",
      "text": "Сроки и списания"
    },
    {
      "label": "Проверка сотрудником",
      "text": "Администратор и ответственный специалист"
    },
    {
      "label": "Результат в работе",
      "text": "Заявки на пополнение"
    }
  ],
  "scope": [
    "Партионный реестр остатков",
    "Очередь проверки сроков",
    "Заявки на пополнение"
  ],
  "inputs": [
    "Реестр номенклатуры и упаковок",
    "Начальные остатки по партиям",
    "Правила движения и допустимого хранения"
  ],
  "acceptance": [
    "Просроченная партия не считается доступной",
    "Пересчёт упаковки проверен на контрольных примерах",
    "Причина списания и история партии сохраняются"
  ],
  "boundary": "Пилот — административный учёт выбранной группы. Назначения, дозировки и выбор препаратов не входят; специальные регулируемые категории требуют отдельной проработки.",
  "budgets": [
    [
      50,
      100
    ],
    [
      160,
      350
    ],
    [
      350,
      700
    ]
  ],
  "group": "process",
  "openQuestions": [
    "Где фиксируются партии и сроки годности?",
    "Какие материалы чаще требуют срочной закупки?",
    "Какие системы, версии и способы выгрузки используются сейчас?",
    "Кто подтверждает результат и кому разрешено менять правила?"
  ],
  "failureCases": [
    "Неполные или некорректные вводные: показать конкретные поля, не выдавать успешный результат.",
    "Неоднозначное соответствие или редакция: передать ответственному на проверку.",
    "Повторная отправка: исключить повторное создание по согласованному идентификатору.",
    "Недоступный внешний источник: сохранить состояние, показать ошибку и согласованный повтор.",
    "Изменение подтверждённых вводных: новая редакция и повторное подтверждение."
  ],
  "rights": [
    "Просмотр — только разрешённые записи и результаты.",
    "Исполнение — ввод и исправление в пределах назначенных задач.",
    "Согласование — подтверждение результата и возврат с причиной.",
    "Администрирование — пользователи, справочники и версии правил."
  ],
  "custom": "Возможна разработка отдельного решения под уникальный процесс, собственные правила, интерфейсы и инфраструктуру компании."
}