{
 "schema": "adfactory.container-gate-report/v1",
 "version": 1,
 "sourceId": "targ",
 "adaptationId": "film",
 "gates": [
  {
   "id": "B01",
   "label": "Спетые слоги",
   "path": "song.syllables",
   "sourceValue": 645,
   "adaptedValue": 762,
   "ratio": 1.181,
   "direction": "max",
   "threshold": 1.05,
   "basis": "original",
   "verdict": "fail",
   "derivation": "Плотность пения одинакова, поэтому лишние слоги = лишние секунды 1:1."
  },
  {
   "id": "B02",
   "label": "Длительность вокала",
   "path": "song.sungSeconds",
   "sourceValue": 188.56,
   "adaptedValue": 239.4,
   "ratio": 1.27,
   "direction": "max",
   "threshold": 1.05,
   "basis": "original",
   "verdict": "fail",
   "derivation": "Держит фильм в длительности оригинала."
  },
  {
   "id": "B03",
   "label": "Число спетых фраз",
   "path": "song.phrases",
   "sourceValue": 75,
   "adaptedValue": 70,
   "ratio": 0.933,
   "direction": "max",
   "threshold": 1.1,
   "basis": "original",
   "verdict": "pass",
   "derivation": "Фразы должны идти по музыке, а не по карточкам титров."
  },
  {
   "id": "B04",
   "label": "Паузы ≥ 1 с внутри песни",
   "path": "song.restsCount",
   "sourceValue": 1,
   "adaptedValue": 0,
   "ratio": null,
   "direction": "floor",
   "threshold": 3,
   "basis": "preference",
   "verdict": "fail",
   "derivation": "Воздух в вокале — места, где играет картинка. Оригинал поёт без пауз, поэтому порог взят не из него, а из предпочтения владельца: 5 пауз у CustomTarasFinal."
  },
  {
   "id": "B05",
   "label": "Самый длинный кусок без паузы",
   "path": "song.longestUnbrokenVocalSeconds",
   "sourceValue": 95.66,
   "adaptedValue": 239.4,
   "ratio": null,
   "direction": "ceiling",
   "threshold": 100.0,
   "basis": "preference",
   "verdict": "fail",
   "derivation": "Длинный поток без вдоха звучит как проза; порог не выводится из оригинала (он сам поёт сплошняком), взят по предпочтению."
  },
  {
   "id": "B06",
   "label": "Медиана длины плана",
   "path": "picture.shotSecondsMedian",
   "sourceValue": 4.3,
   "adaptedValue": 4.83,
   "ratio": 1.123,
   "direction": "max",
   "threshold": 1.15,
   "basis": "original",
   "verdict": "pass",
   "derivation": "Темп монтажа наследуется от оригинала."
  },
  {
   "id": "B07",
   "label": "Планов длиннее 8 с",
   "path": "picture.shotsOver8s",
   "sourceValue": 5,
   "adaptedValue": 8,
   "ratio": 1.6,
   "direction": "max",
   "threshold": 1.25,
   "basis": "original",
   "verdict": "fail",
   "derivation": "Растянутые планы — прямое следствие длинной песни."
  },
  {
   "id": "B08",
   "label": "Доля крупных планов (ECU/CU/MCU)",
   "path": "picture.tightShotShare",
   "sourceValue": 0.234,
   "adaptedValue": 0.326,
   "ratio": null,
   "direction": "floor",
   "threshold": 0.35,
   "basis": "preference",
   "verdict": "fail",
   "derivation": "На крупных планах видно и эмоцию, и проблему. Оригинал держит 23 %, предпочтённый ролик — 63 %: порог взят из предпочтения, а не из оригинала."
  },
  {
   "id": "B09",
   "label": "Вставки без лиц",
   "path": "picture.inserts",
   "sourceValue": 2,
   "adaptedValue": 1,
   "ratio": 0.5,
   "direction": "min",
   "threshold": 0.75,
   "basis": "original",
   "verdict": "fail",
   "derivation": "Вставки несут смысл без диалога и держат ритм."
  },
  {
   "id": "B10",
   "label": "Доля планов с движением камеры",
   "path": "picture.cameraMoveShare",
   "sourceValue": 0.213,
   "adaptedValue": 0.261,
   "ratio": null,
   "direction": "floor",
   "threshold": 0.35,
   "basis": "preference",
   "verdict": "fail",
   "derivation": "Движение внутри длинного плана не даёт ему замереть. Порог из предпочтения: у оригинала 21 %, у CustomTarasFinal 51 %."
  },
  {
   "id": "B11",
   "label": "Доля времени, где видна проблема (состояние «до»)",
   "path": "problem.beforeStateVisibleShare",
   "sourceValue": 0.872,
   "adaptedValue": 0.654,
   "ratio": 0.75,
   "direction": "min",
   "threshold": 0.85,
   "basis": "original",
   "verdict": "fail",
   "derivation": "Продавать можно только ту проблему, которую видно."
  },
  {
   "id": "B12",
   "label": "Первый кадр, где проблема читается (доля хронометража)",
   "path": "problem.firstLegibleShareOfRuntime",
   "sourceValue": 0.0,
   "adaptedValue": 0.1126,
   "ratio": 0.1126,
   "direction": "delta",
   "threshold": 0.05,
   "basis": "original",
   "verdict": "fail",
   "derivation": "Проблему показывают в начале, а не к середине: допуск +5 % хронометража к моменту оригинала."
  },
  {
   "id": "B13",
   "label": "Слоги CTA",
   "path": "product.ctaSyllables",
   "sourceValue": 15,
   "adaptedValue": 40,
   "ratio": 2.667,
   "direction": "max",
   "threshold": 1.1,
   "basis": "original",
   "verdict": "fail",
   "derivation": "Финал оригинала — одна фраза на одном дыхании."
  },
  {
   "id": "B14",
   "label": "Секунды CTA",
   "path": "product.ctaSeconds",
   "sourceValue": 7.0,
   "adaptedValue": 12.68,
   "ratio": 1.811,
   "direction": "max",
   "threshold": 1.15,
   "basis": "original",
   "verdict": "fail",
   "derivation": "Длинный призыв превращает историю в рекламу."
  },
  {
   "id": "B15",
   "label": "Сколько раз бренд спет",
   "path": "product.brandSungCount",
   "sourceValue": 1,
   "adaptedValue": 2,
   "ratio": 2.0,
   "direction": "max",
   "threshold": 1.0,
   "basis": "original",
   "verdict": "fail",
   "derivation": "Бренд называют один раз, последней мыслью."
  },
  {
   "id": "B16",
   "label": "Момент показа продукта, доля хронометража",
   "path": "product.firstProductOnScreenShareOfRuntime",
   "sourceValue": 0.563,
   "adaptedValue": 0.575,
   "ratio": 1.021,
   "direction": "max",
   "threshold": 1.15,
   "basis": "original",
   "verdict": "pass",
   "derivation": "Ранний показ продукта убивает интригу предмета."
  },
  {
   "id": "B17",
   "label": "Длительность финальной карточки",
   "path": "picture.endCardSeconds",
   "sourceValue": 5.87,
   "adaptedValue": 4.5,
   "ratio": 0.767,
   "direction": "min",
   "threshold": 0.85,
   "basis": "original",
   "verdict": "fail",
   "derivation": "Карточка должна дочитываться."
  }
 ],
 "summary": {
  "pass": 3,
  "fail": 14,
  "unknown": 0
 },
 "basisNote": "basis=original — порог выведен из оригинала как отношение; basis=preference — оригинал так не делает вовсе, порог взят из ролика, который предпочёл владелец, и является предметом его решения, а не выводом из источника.",
 "note": "Пороги — отношения к своему оригиналу, а не абсолютные числа: те же ворота применимы к любому следующему референсу. Провал не запрещает решение режиссёра, он требует версионного обоснования до покупки."
}