{
  "standard": "FSP",
  "module": null,
  "version": null,
  "registry": "residual_gaps",
  "title": "Остаточные дыры после проверки прайсами",
  "description": "Открытые строки требуют подтверждения оператора, закрытые уже учтены в стандарте. Имена операторов обезличены.",
  "in_standard": false,
  "columns": [
    "severity",
    "code",
    "source",
    "issue",
    "proposed_fix",
    "status"
  ],
  "rows": [
    {
      "severity": "P0",
      "code": "SRC-CALC-001",
      "source": "калькулятор оператора",
      "issue": "Текст тарифов использует вес, но калькулятор оператора не содержит поля веса и классифицирует только по сумме сторон.",
      "proposed_fix": "Хранить отдельно CALCULATOR_V2_LABEL и CALCULATOR_V2_ACTUAL; запросить у оператора договорную логику.",
      "status": "open"
    },
    {
      "severity": "P0",
      "code": "SRC-PIK-001",
      "source": "оператор B",
      "issue": "Размерный профиль имеет непокрытый интервал веса >5 и <=7 кг и неоднозначные границы по стороне.",
      "proposed_fix": "Не публиковать автоматический расчёт для непокрытых комбинаций; запросить уточнение.",
      "status": "open"
    },
    {
      "severity": "P1",
      "code": "MODEL-STORAGE-001",
      "source": "оператор A",
      "issue": "Бесплатные первые 14 суток требуют контекста storage_age_days и ступенчатого правила по возрасту партии.",
      "proposed_fix": "Добавить storage_age_days в реестр условий и правило бесплатного периода.",
      "status": "resolved"
    },
    {
      "severity": "P1",
      "code": "MODEL-SCHEDULE-001",
      "source": "оператор A",
      "issue": "График доставок по дням недели не представлен сущностями route_schedules.",
      "proposed_fix": "Добавить маршруты и недельные окна доступности.",
      "status": "resolved"
    },
    {
      "severity": "P1",
      "code": "SRC-PIK-002",
      "source": "оператор B",
      "issue": "Часть доставок содержит пустую цену.",
      "proposed_fix": "Импортировать как manual_quote/missing_price и не трактовать как ноль.",
      "status": "open"
    },
    {
      "severity": "P1",
      "code": "SRC-ALL-001",
      "source": "операторы A и B",
      "issue": "Режим НДС и дата действия прайса явно не указаны.",
      "proposed_fix": "Статус источника draft до подтверждения vat_mode и effective_from.",
      "status": "open"
    },
    {
      "severity": "P2",
      "code": "CAT-REAL-001",
      "source": "Все источники",
      "issue": "Реальные прайсы требуют атомарных услуг photo_documentation, carton_sealing, document_printing, outer_packaging_removal и order_correction.",
      "proposed_fix": "Добавить услуги в каталог и связать с параметрами/метриками.",
      "status": "resolved"
    },
    {
      "severity": "P2",
      "code": "PARAM-REAL-001",
      "source": "операторы A и B",
      "issue": "Нужны параметры inventory_rotation_method и pickup_source.",
      "proposed_fix": "Добавить параметры и связи услуг.",
      "status": "resolved"
    },
    {
      "severity": "P0",
      "code": "SRC-NORM-001",
      "source": "нормализованный CSV",
      "issue": "В файле представлены 18 из 22 операторов; отсутствуют четыре оператора.",
      "proposed_fix": "Повторный импорт с OCR и обязательной трассировкой источника.",
      "status": "open"
    },
    {
      "severity": "P1",
      "code": "SRC-NORM-002",
      "source": "нормализованный CSV",
      "issue": "Есть пустые цены и нет ссылки на файл, страницу или ячейку источника.",
      "proposed_fix": "Хранить source_id, source_location и missing_price/manual_quote.",
      "status": "open"
    },
    {
      "severity": "P1",
      "code": "SRC-NORM-003",
      "source": "нормализованный CSV",
      "issue": "Не выделены service_code, billing_metric, метод цены, валюта, НДС и период действия.",
      "proposed_fix": "Мигрировать строки в структуру «Импорт прайсов» и версионированные price_rules.",
      "status": "open"
    },
    {
      "severity": "P1",
      "code": "MODEL-STORAGE-002",
      "source": "оператор A и его калькулятор",
      "issue": "Ступенчатая цена хранения по сроку не выражалась: у price_tiers не было ни режима применения, ни шкалы срока — бесплатный период приходилось кодировать одиночным условием.",
      "proposed_fix": "Добавить tier_mode/tier_variable/tier_scope, реестры переменных и областей диапазонов, storage_age_days и storage_stay_days как шкалы.",
      "status": "resolved"
    },
    {
      "severity": "P1",
      "code": "MODEL-TIER-001",
      "source": "Рынок ФФ",
      "issue": "Разная цена первой и последующих единиц одного товара не выражалась: не было ни порядкового номера единицы, ни области группировки по товару.",
      "proposed_fix": "Добавить unit_sequence, области order_sku/supply_sku/batch и режим progressive.",
      "status": "resolved"
    },
    {
      "severity": "P1",
      "code": "SRC-TIER-001",
      "source": "Все источники",
      "issue": "Ни один из 165 импортированных тарифных вариантов не размечен как tiered: ступени по сроку и по количеству свёрнуты в плоские ставки с условиями либо потеряны при разборе.",
      "proposed_fix": "Пере-разметить импорт: строки со ступенями перевести на calculation_method=tiered с заполненными tier_mode/tier_variable/tier_scope.",
      "status": "resolved"
    },
    {
      "severity": "P1",
      "code": "SRC-PIK-003",
      "source": "оператор B",
      "issue": "Матрица цены за заказ по числу хрупких товаров задаёт точки 1/2/4/6/8; цена для промежуточных количеств (3, 5, 7) в источнике отсутствует.",
      "proposed_fix": "Ступени размечены полуоткрытыми диапазонами [1;2), [2;4), [4;6), [6;8), [8;∞) — запросить у оператора подтверждение границ.",
      "status": "open"
    },
    {
      "severity": "P1",
      "code": "MODEL-ADJ-001",
      "source": "оператор B",
      "issue": "Строка «срочная сборка ×2» — это модификатор цены, а не метод расчёта: в импорте она была размечена calculation_method=adjustment, значения вне закрытого списка методов.",
      "proposed_fix": "Разделить цель нормализации: колонки target_entity (price_rule / price_adjustment) и adjustment_type; проверять метод расчёта только у строк-правил.",
      "status": "resolved"
    }
  ]
}