{
  "proof": {
    "id": 59,
    "buyerLabel": "Транспортным компаниям — разработка калькулятора перевозки",
    "deliverableTitle": "Предварительный расчёт с исключениями",
    "deliverableDescription": "Километровая часть, доплаты и основания ручного согласования.",
    "pilotInputs": [
      "Правила тарификации по типу перевозки",
      "Пример заявки с параметрами груза",
      "Перечень доплат и нестандартных условий"
    ],
    "pilotAcceptance": "Итог раскрывает все учтённые статьи; нестандартный груз направляется на оценку.",
    "scenario": {
      "title": "Расстояние меняет итог",
      "before": "ПЕР-059: 300 км ×50 ₽/км +2000 ₽ доплата =17000 ₽; ориентир 18000 ₽.",
      "conflict": "При 400 км сумма 22000 ₽: превышение ориентира 4000 ₽.",
      "decision": "Показать километровую часть 20000 ₽ и доплату 2000 ₽; запросить согласование.",
      "after": "Предварительная сумма 22000 ₽ раскрыта; окончательная стоимость не подтверждена."
    }
  },
  "version": "0.4",
  "status": "Проект для согласования",
  "solutionId": 59,
  "slug": "freight-calculator",
  "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": "number",
      "unit": "км",
      "example": "300",
      "rule": "Правило и обязательность подтверждаются на ваших исходниках."
    },
    {
      "field": "Учебный тариф",
      "type": "number",
      "unit": "₽/км",
      "example": "50",
      "rule": "Правило и обязательность подтверждаются на ваших исходниках."
    },
    {
      "field": "Доплата",
      "type": "number",
      "unit": "₽",
      "example": "2000",
      "rule": "Правило и обязательность подтверждаются на ваших исходниках."
    },
    {
      "field": "Учебный ориентир",
      "type": "number",
      "unit": "₽",
      "example": "18000",
      "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": "Возможна разработка отдельного решения под уникальный процесс, собственные правила, интерфейсы и инфраструктуру компании."
}