{
  "_export": {
    "what": "Public export of the frozen reference corpus behind TypelessForm’s published extraction-accuracy figure.",
    "method_page": "https://typelessform.com/blog/how-accurate-is-voice-form-filling-2026/",
    "license": {
      "name": "CC BY 4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/",
      "attribution": "TypelessForm / Webappski. Reuse and quote freely with attribution and a link to the method page."
    },
    "exported_on": "2026-09-21",
    "curation": [
      "Removed: the internal session name that authored the corpus.",
      "Rewritten: `purpose`, which pointed at an internal design document that is not published.",
      "Annotated: `expected_observation_counts.ci_half_width_at_p090`, which is a pre-measurement planning estimate at an assumed p=0.90 — not the observed interval. The observed interval is in the run summary.",
      "Everything else is unchanged, including every utterance and every expected value."
    ],
    "language_note": "The prose fields are Russian because the corpus was authored in Russian and is published as it is used. The utterances themselves are English, Russian and German; the field names and expected values are language-independent.",
    "privacy_note": "Every person, address, phone number and email in this corpus is invented. No real personal data is present."
  },
  "corpus_version": "2.0",
  "created": "2026-09-20",
  "purpose": "Эталонный корпус для замера точности TypelessForm. Нога A (текст -> поля) исполняется прямо с этого файла. Ноги B (синтез) и C (живой голос) используют его же разметку полей. Метод и его границы описаны на странице метода (см. _export.method_page).",
  "single_source_of_truth": "Реплики и эталон живут ТОЛЬКО здесь. Человекочитаемых дублей нет намеренно — два описания одного корпуса разъезжаются, и разъехавшийся эталон тихо ломает замер.",
  "frozen_context": {
    "userTodayLocal": "2026-10-05",
    "userTodayWeekday": "Monday",
    "userTimeZone": "Europe/Warsaw",
    "why": "Относительные даты ('в эту пятницу', 'через две недели во вторник') без замороженного 'сегодня' меняют эталон сами собой при повторе через месяц — это выглядело бы регрессией, не будучи ею. Передаётся в запрос ЯВНО (handler.ts читает userTodayLocal/userTimeZone из тела)."
  },
  "resolution_table": {
    "this Friday": "2026-10-09",
    "the following Monday": "2026-10-12",
    "Tuesday (this week)": "2026-10-06",
    "Wednesday (this week)": "2026-10-07",
    "two weeks from today, Tuesday": "2026-10-20"
  },
  "forms": {
    "contact": {
      "fields": [
        {
          "name": "firstName",
          "id": "c-firstName",
          "type": "text",
          "class": "discrete"
        },
        {
          "name": "lastName",
          "id": "c-lastName",
          "type": "text",
          "class": "discrete"
        },
        {
          "name": "email",
          "id": "c-email",
          "type": "email",
          "class": "discrete"
        },
        {
          "name": "phone",
          "id": "c-phone",
          "type": "tel",
          "class": "discrete"
        },
        {
          "name": "subject",
          "id": "c-subject",
          "type": "text",
          "class": "freetext"
        },
        {
          "name": "message",
          "id": "c-message",
          "type": "textarea",
          "class": "freetext"
        }
      ],
      "discrete_count": 4,
      "freetext_count": 2
    },
    "hotel": {
      "fields": [
        {
          "name": "firstName",
          "id": "b-firstName",
          "type": "text",
          "class": "discrete"
        },
        {
          "name": "lastName",
          "id": "b-lastName",
          "type": "text",
          "class": "discrete"
        },
        {
          "name": "email",
          "id": "b-email",
          "type": "email",
          "class": "discrete"
        },
        {
          "name": "phone",
          "id": "b-phone",
          "type": "tel",
          "class": "discrete"
        },
        {
          "name": "checkIn",
          "id": "b-checkIn",
          "type": "date",
          "class": "discrete"
        },
        {
          "name": "checkOut",
          "id": "b-checkOut",
          "type": "date",
          "class": "discrete"
        },
        {
          "name": "adults",
          "id": "b-adults",
          "type": "number",
          "class": "discrete"
        },
        {
          "name": "children",
          "id": "b-children",
          "type": "number",
          "class": "discrete"
        },
        {
          "name": "rooms",
          "id": "b-rooms",
          "type": "number",
          "class": "discrete"
        },
        {
          "name": "roomType",
          "id": "b-roomType",
          "type": "select",
          "class": "discrete",
          "options": [
            "single",
            "double",
            "twin",
            "suite",
            "family"
          ]
        },
        {
          "name": "budget",
          "id": "b-budget",
          "type": "number",
          "class": "discrete",
          "unit": "USD per night"
        },
        {
          "name": "breakfast",
          "type": "checkbox",
          "class": "discrete",
          "note": "нет атрибута id в разметке — блок Preferences"
        },
        {
          "name": "wifi",
          "type": "checkbox",
          "class": "discrete",
          "note": "нет атрибута id"
        },
        {
          "name": "parking",
          "type": "checkbox",
          "class": "discrete",
          "note": "нет атрибута id"
        },
        {
          "name": "pool",
          "type": "checkbox",
          "class": "discrete",
          "note": "нет атрибута id"
        },
        {
          "name": "comments",
          "id": "b-comments",
          "type": "textarea",
          "class": "freetext"
        }
      ],
      "discrete_count": 15,
      "freetext_count": 1
    },
    "dental": {
      "fields": [
        {
          "name": "fullName",
          "id": "d-fullName",
          "type": "text",
          "class": "discrete"
        },
        {
          "name": "dateOfBirth",
          "id": "d-dob",
          "type": "date",
          "class": "discrete"
        },
        {
          "name": "phone",
          "id": "d-phone",
          "type": "tel",
          "class": "discrete"
        },
        {
          "name": "email",
          "id": "d-email",
          "type": "email",
          "class": "discrete"
        },
        {
          "name": "visitType",
          "id": "d-visitType",
          "type": "select",
          "class": "discrete",
          "options": [
            "checkup",
            "toothpain",
            "cleaning",
            "emergency"
          ]
        },
        {
          "name": "painPattern",
          "id": "d-painPattern",
          "type": "select",
          "class": "discrete",
          "options": [
            "constant",
            "periodic",
            "occasional"
          ]
        },
        {
          "name": "preferredDate",
          "id": "d-prefDate",
          "type": "date",
          "class": "discrete"
        },
        {
          "name": "preferredTime",
          "id": "d-prefTime",
          "type": "time",
          "class": "discrete"
        },
        {
          "name": "mainComplaint",
          "id": "d-complaint",
          "type": "textarea",
          "class": "freetext"
        },
        {
          "name": "allergies",
          "id": "d-allergies",
          "type": "text",
          "class": "freetext"
        },
        {
          "name": "currentMedications",
          "id": "d-medications",
          "type": "textarea",
          "class": "freetext"
        }
      ],
      "discrete_count": 8,
      "freetext_count": 3
    }
  },
  "variant_contract": {
    "v1": "сжато — одна плотная фраза, названы ВСЕ поля",
    "v2": "подробно — свободный рассказ с лишними словами, названы ВСЕ поля; в этом варианте email диктуется ПО БУКВАМ (проверка того самого пути)",
    "v3": "вразнобой с самопоправкой — порядок нарушен, ровно одна самопоправка на реплику, часть полей СОЗНАТЕЛЬНО не названа (знаменатель для выдумок)",
    "matched_difficulty": "Данные локализованы (немецкое имя для de, русское для ru), но сложность одинакова во всех трёх языках: те же поля названы/не названы, та же самопоправка, та же относительная дата, тот же диктуемый по буквам email. Иначе межъязыковая разница поедет от данных, а не от языка.",
    "checkbox_design": "В v1/v2 все 4 чекбокса запрошены положительно (эталон = отмечен), поэтому неотмеченный = ошибка E1 с чистым сигналом. В v3 ни один не упомянут (эталон = не отмечен), поэтому любая галочка = выдумка E5. Сознательно не используется форма 'бассейн не нужен': явный отказ и умолчание дают одинаковый результат и сигнал размывается."
  },
  "normalization": {
    "text": "регистронезависимо, trim, схлопывание пробелов",
    "email": "регистронезависимо; диктовка по буквам должна собраться в тот же адрес",
    "phone": "сравниваются только цифры, символ + сохраняется; пробелы/дефисы/скобки игнорируются",
    "date": "сравнение в ISO YYYY-MM-DD после разрешения относительных выражений против frozen_context.userTodayLocal",
    "time": "24-часовой HH:MM",
    "number": "численное равенство ('двое' = 2)",
    "select": "точное совпадение со значением из options",
    "checkbox": "булево",
    "freetext": "ПО СМЫСЛУ, не дословно, против поля criterion; идёт в M3, никогда в M1"
  },
  "scoring": {
    "M1": "верно / названо, только class=discrete — главное число, всегда с подписью ноги",
    "M2": "заполнено / не названо, только class=discrete — доля выдумок, при малом знаменателе публикуется СЧЁТОМ",
    "M3": "свободный текст: захвачено / частично / потеряно",
    "M4": "формы без единой ошибки / всего",
    "M5": "одинаковых ячеек между 3 проходами / всего — стабильность, НЕ доверительный интервал",
    "errors": {
      "E1": "пусто, хотя названо",
      "E2": "неверное значение",
      "E3": "значение попало в другое поле (ошибка на обоих, событие пишется как один swap)",
      "E4": "смысл верен, формат нет (дата не ISO, select вне options)",
      "E5": "выдумка — заполнено поле, о котором не говорили, включая поставленную галочку"
    }
  },
  "expected_observation_counts": {
    "discrete_spoken": {
      "per_language": 65,
      "total": 195,
      "derivation": "v1 27 + v2 27 + v3 11"
    },
    "discrete_not_spoken": {
      "per_language": 16,
      "total": 48,
      "derivation": "v3: contact 2 + hotel 10 + dental 4"
    },
    "freetext_spoken": {
      "per_language": 15,
      "total": 45
    },
    "ci_half_width_at_p090": "Планировочная оценка ДО замера: ±4,21 п.п. при допущении p=0,90 и n=195. Это НЕ результат. Наблюдённый интервал считается на фактической доле и лежит в сводке прогона."
  },
  "offline_contract": {
    "rule": "Раннер обязан подниматься ОФЛАЙН от этого файла: всё, что нужно для повтора, лежит здесь. Ни один вход не добывается заново — ни расшифровкой, ни перезаписью, ни повторным выводом эталона.",
    "why": "Повтор через месяц должен стоить только вызовов модели. Любой шаг 'сначала получить X откуда-то' делает повтор дорогим, а через полгода — невозможным (источник исчезнет, человек не вспомнит).",
    "consequences": [
      "Реплики хранятся текстом здесь, а не выводятся из аудио.",
      "Эталон хранится здесь, а не пересчитывается из ответа модели.",
      "frozen_context НЕ МЕНЯТЬ никогда: на плавающем 'сегодня' эталон дат поедет сам и выдаст себя за регрессию.",
      "Ноги B и C добавляют аудио, но НЕ становятся источником эталона — он остаётся здесь."
    ]
  },
  "run_manifest_required": {
    "rule": "Каждый результат прогона ОБЯЗАН нести перечисленное. Результат без этих полей к сравнению не допускается — сравнивать будет не с чем.",
    "fields": {
      "transcription_model": "ОБЯЗАТЕЛЬНО, даже для ноги A, где распознавание не вызывалось — тогда значение 'none (text leg)'. Для ног B и C — имя модели как её вернул провайдер, не как мы её задумали.",
      "extraction_model": "имя модели извлечения + resolvedModel из ответа",
      "tts_model": "для ноги B; для A — 'none'",
      "complete_version": "значение константы COMPLETE_VERSION",
      "prompt_file_sha256": "sha256 четырёх файлов: extraction-prompt.ts, extraction-examples.ts, extraction-field-rules.ts, extraction-datetime-rules.ts",
      "cache_decision": "холодный или тёплый init-analyze/cache.ts",
      "normalization_version": "версия правил из normalization",
      "corpus_version": "версия этого файла",
      "run_date": "дата прогона",
      "leg": "A | B | C"
    },
    "why_transcription_model_is_mandatory": {
      "fact": "gpt-4o-mini-transcribe ДЕПРЕКИРОВАН с 2026-08-26, shutdown 2027-02-26. Замена — gpt-transcribe или gpt-live-transcribe. Проверено на developers.openai.com/api/docs/deprecations 2026-09-20. Те же даты у whisper-1, gpt-4o-transcribe, gpt-4o-transcribe-diarize.",
      "consequence": "Замер на текущей модели — это БАЗОВАЯ ЛИНИЯ, снятая до её отключения. Без записанного имени модели сравнение со сменщиком превратится в 'число изменилось, причина неизвестна' — то есть в ровно ту неопределённость, ради устранения которой всё и делается.",
      "deadline": "Базовую линию на gpt-4o-mini-transcribe снять ДО 2027-02-26. После отключения снять её будет невозможно — модели не будет."
    }
  },
  "scripts": [
    {
      "id": "en-contact-v1",
      "lang": "en",
      "form": "contact",
      "variant": "v1",
      "utterance": "Hi — Daniel Ashcroft, email d.ashcroft@northgate-labs.com, phone plus forty four twenty, seven nine four six, oh nine five eight. I'm writing about a partnership: we run intake forms for about forty clinics and I want to know whether your widget can be white-labelled.",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Daniel"
        },
        "lastName": {
          "spoken": true,
          "value": "Ashcroft"
        },
        "email": {
          "spoken": true,
          "value": "d.ashcroft@northgate-labs.com"
        },
        "phone": {
          "spoken": true,
          "value": "+44 20 7946 0958"
        },
        "subject": {
          "spoken": true,
          "criterion": "партнёрство / partnership"
        },
        "message": {
          "spoken": true,
          "criterion": "белый лейбл для ~40 клиник"
        }
      }
    },
    {
      "id": "en-contact-v2",
      "lang": "en",
      "form": "contact",
      "variant": "v2",
      "utterance": "Good morning. My name is Daniel Ashcroft — Ashcroft, that's A-S-H-C-R-O-F-T. The best email for me is d dot ashcroft at northgate dash labs dot com. You can also call, it's plus forty four, twenty, seven nine four six, oh nine five eight, though email is easier. What this is really about is a partnership. We've been looking at voice input for a while and we already run the intake forms for around forty clinics, so what I need to understand before I take it further is whether the widget can be white-labelled under our own brand.",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Daniel"
        },
        "lastName": {
          "spoken": true,
          "value": "Ashcroft"
        },
        "email": {
          "spoken": true,
          "value": "d.ashcroft@northgate-labs.com",
          "note": "диктуется по буквам и словами dash/dot"
        },
        "phone": {
          "spoken": true,
          "value": "+44 20 7946 0958"
        },
        "subject": {
          "spoken": true,
          "criterion": "партнёрство / partnership"
        },
        "message": {
          "spoken": true,
          "criterion": "белый лейбл под свой бренд, ~40 клиник"
        }
      }
    },
    {
      "id": "en-contact-v3",
      "lang": "en",
      "form": "contact",
      "variant": "v3",
      "utterance": "So what I actually need to know is whether this works inside an iframe — we embed our intake form on partner sites and that has broken two widgets already. Oh, I should say who I am: Daniel Ashwell — sorry, Ashcroft. Daniel Ashcroft.",
      "self_correction": "lastName: Ashwell -> Ashcroft",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Daniel"
        },
        "lastName": {
          "spoken": true,
          "value": "Ashcroft"
        },
        "email": {
          "spoken": false
        },
        "phone": {
          "spoken": false
        },
        "subject": {
          "spoken": false,
          "derivable": true,
          "criterion": "тема, правомерно выведенная из текста сообщения"
        },
        "message": {
          "spoken": true,
          "criterion": "работает ли внутри iframe, встраивание на сайты партнёров"
        }
      }
    },
    {
      "id": "en-hotel-v1",
      "lang": "en",
      "form": "hotel",
      "variant": "v1",
      "utterance": "Daniel Ashcroft, d.ashcroft@northgate-labs.com, plus forty four twenty, seven nine four six, oh nine five eight. Checking in this Friday, out the following Monday, two adults and one child, one room, family room, budget about a hundred and eighty a night. We'd like breakfast, wifi, parking and pool access — all four. And please put a cot in the room.",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Daniel"
        },
        "lastName": {
          "spoken": true,
          "value": "Ashcroft"
        },
        "email": {
          "spoken": true,
          "value": "d.ashcroft@northgate-labs.com"
        },
        "phone": {
          "spoken": true,
          "value": "+44 20 7946 0958"
        },
        "checkIn": {
          "spoken": true,
          "value": "2026-10-09"
        },
        "checkOut": {
          "spoken": true,
          "value": "2026-10-12"
        },
        "adults": {
          "spoken": true,
          "value": 2
        },
        "children": {
          "spoken": true,
          "value": 1
        },
        "rooms": {
          "spoken": true,
          "value": 1
        },
        "roomType": {
          "spoken": true,
          "value": "family"
        },
        "budget": {
          "spoken": true,
          "value": 180
        },
        "breakfast": {
          "spoken": true,
          "value": true
        },
        "wifi": {
          "spoken": true,
          "value": true
        },
        "parking": {
          "spoken": true,
          "value": true
        },
        "pool": {
          "spoken": true,
          "value": true
        },
        "comments": {
          "spoken": true,
          "criterion": "детская кроватка в номер"
        }
      }
    },
    {
      "id": "en-hotel-v2",
      "lang": "en",
      "form": "hotel",
      "variant": "v2",
      "utterance": "Right, so this is Daniel Ashcroft — A-S-H-C-R-O-F-T. Write me at d dot ashcroft at northgate dash labs dot com, and the mobile is plus forty four, twenty, seven nine four six, oh nine five eight. We're arriving this Friday and heading home the Monday after, so that's the weekend. There'll be two of us plus our daughter, she's four, so two adults and one child, and we only need the one room — a family room if you have it. We're trying to stay around a hundred and eighty dollars a night. Breakfast yes please, wifi yes, we're bringing the car so parking, and the little one will want the pool, so pool access too — all four of those. One more thing, could you put a cot in the room.",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Daniel"
        },
        "lastName": {
          "spoken": true,
          "value": "Ashcroft"
        },
        "email": {
          "spoken": true,
          "value": "d.ashcroft@northgate-labs.com",
          "note": "диктуется по буквам"
        },
        "phone": {
          "spoken": true,
          "value": "+44 20 7946 0958"
        },
        "checkIn": {
          "spoken": true,
          "value": "2026-10-09"
        },
        "checkOut": {
          "spoken": true,
          "value": "2026-10-12"
        },
        "adults": {
          "spoken": true,
          "value": 2
        },
        "children": {
          "spoken": true,
          "value": 1,
          "trap": "названо число 'ей четыре' — возраст, не количество детей"
        },
        "rooms": {
          "spoken": true,
          "value": 1
        },
        "roomType": {
          "spoken": true,
          "value": "family"
        },
        "budget": {
          "spoken": true,
          "value": 180
        },
        "breakfast": {
          "spoken": true,
          "value": true
        },
        "wifi": {
          "spoken": true,
          "value": true
        },
        "parking": {
          "spoken": true,
          "value": true
        },
        "pool": {
          "spoken": true,
          "value": true
        },
        "comments": {
          "spoken": true,
          "criterion": "детская кроватка в номер"
        }
      }
    },
    {
      "id": "en-hotel-v3",
      "lang": "en",
      "form": "hotel",
      "variant": "v3",
      "utterance": "It's Daniel. We're coming in on Tuesday — no, hang on, Wednesday, Tuesday I'm still travelling — and leaving the Monday. Two of us. A twin would be fine. If the room is above the bar we'd rather not, last time it was loud all night.",
      "self_correction": "checkIn: Tuesday 2026-10-06 -> Wednesday 2026-10-07",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Daniel"
        },
        "lastName": {
          "spoken": false
        },
        "email": {
          "spoken": false
        },
        "phone": {
          "spoken": false
        },
        "checkIn": {
          "spoken": true,
          "value": "2026-10-07"
        },
        "checkOut": {
          "spoken": true,
          "value": "2026-10-12"
        },
        "adults": {
          "spoken": true,
          "value": 2
        },
        "children": {
          "spoken": false
        },
        "rooms": {
          "spoken": false
        },
        "roomType": {
          "spoken": true,
          "value": "twin"
        },
        "budget": {
          "spoken": false
        },
        "breakfast": {
          "spoken": false
        },
        "wifi": {
          "spoken": false
        },
        "parking": {
          "spoken": false
        },
        "pool": {
          "spoken": false
        },
        "comments": {
          "spoken": true,
          "criterion": "не номер над баром, шумно"
        }
      }
    },
    {
      "id": "en-dental-v1",
      "lang": "en",
      "form": "dental",
      "variant": "v1",
      "utterance": "Claire Duval, born the fourteenth of March nineteen eighty seven, phone plus forty four twenty, seven nine four six, one one two two, email c.duval@brightline.co.uk. It's tooth pain — it comes and goes, mostly at night, upper right. Two weeks from today on the Tuesday, half past nine in the morning. I'm allergic to penicillin and I take ibuprofen four hundred when it's bad.",
      "gold": {
        "fullName": {
          "spoken": true,
          "value": "Claire Duval"
        },
        "dateOfBirth": {
          "spoken": true,
          "value": "1987-03-14"
        },
        "phone": {
          "spoken": true,
          "value": "+44 20 7946 1122"
        },
        "email": {
          "spoken": true,
          "value": "c.duval@brightline.co.uk"
        },
        "visitType": {
          "spoken": true,
          "value": "toothpain"
        },
        "painPattern": {
          "spoken": true,
          "value": "periodic",
          "note": "'comes and goes' -> periodic, не occasional"
        },
        "preferredDate": {
          "spoken": true,
          "value": "2026-10-20"
        },
        "preferredTime": {
          "spoken": true,
          "value": "09:30"
        },
        "mainComplaint": {
          "spoken": true,
          "criterion": "боль справа сверху, усиливается ночью"
        },
        "allergies": {
          "spoken": true,
          "criterion": "пенициллин"
        },
        "currentMedications": {
          "spoken": true,
          "criterion": "ибупрофен 400 по потребности"
        }
      }
    },
    {
      "id": "en-dental-v2",
      "lang": "en",
      "form": "dental",
      "variant": "v2",
      "utterance": "Hello, I'd like an appointment. The name is Claire Duval — D-U-V-A-L. My date of birth is the fourteenth of March, nineteen eighty seven. Number to call is plus forty four, twenty, seven nine four six, one one two two, and the email is c dot duval at brightline dot co dot uk. The reason I'm calling is tooth pain, it's been going on about a week now. It isn't constant — it comes and goes, and it's nearly always worse at night, upper right side, and it wakes me up. Could I come in two weeks from today, that's the Tuesday, at half past nine in the morning. I should mention I'm allergic to penicillin, that's important, and at the moment I'm taking ibuprofen four hundred when it gets bad.",
      "gold": {
        "fullName": {
          "spoken": true,
          "value": "Claire Duval"
        },
        "dateOfBirth": {
          "spoken": true,
          "value": "1987-03-14"
        },
        "phone": {
          "spoken": true,
          "value": "+44 20 7946 1122"
        },
        "email": {
          "spoken": true,
          "value": "c.duval@brightline.co.uk",
          "note": "диктуется словами dot"
        },
        "visitType": {
          "spoken": true,
          "value": "toothpain"
        },
        "painPattern": {
          "spoken": true,
          "value": "periodic",
          "note": "сказано отрицание 'isn't constant' — ловушка на constant"
        },
        "preferredDate": {
          "spoken": true,
          "value": "2026-10-20"
        },
        "preferredTime": {
          "spoken": true,
          "value": "09:30"
        },
        "mainComplaint": {
          "spoken": true,
          "criterion": "боль справа сверху около недели, хуже ночью, будит"
        },
        "allergies": {
          "spoken": true,
          "criterion": "пенициллин"
        },
        "currentMedications": {
          "spoken": true,
          "criterion": "ибупрофен 400 по потребности"
        }
      }
    },
    {
      "id": "en-dental-v3",
      "lang": "en",
      "form": "dental",
      "variant": "v3",
      "utterance": "Claire Duval. It's an emergency actually — a crown came off this morning and the edge is cutting my tongue. Could I come two weeks from today on the Tuesday at half nine — no, make it ten, I can't do half nine.",
      "self_correction": "preferredTime: 09:30 -> 10:00",
      "gold": {
        "fullName": {
          "spoken": true,
          "value": "Claire Duval"
        },
        "dateOfBirth": {
          "spoken": false
        },
        "phone": {
          "spoken": false
        },
        "email": {
          "spoken": false
        },
        "visitType": {
          "spoken": true,
          "value": "emergency"
        },
        "painPattern": {
          "spoken": false
        },
        "preferredDate": {
          "spoken": true,
          "value": "2026-10-20"
        },
        "preferredTime": {
          "spoken": true,
          "value": "10:00"
        },
        "mainComplaint": {
          "spoken": true,
          "criterion": "отвалилась коронка, край режет язык"
        },
        "allergies": {
          "spoken": false
        },
        "currentMedications": {
          "spoken": false
        }
      }
    },
    {
      "id": "ru-contact-v1",
      "lang": "ru",
      "form": "contact",
      "variant": "v1",
      "utterance": "Здравствуйте, Виктор Петров, почта v.petrov@nevalin.ru, телефон плюс семь девятьсот двадцать один, триста сорок пять, шестьдесят семь, восемьдесят девять. Пишу по партнёрству: мы ведём формы записи примерно для сорока клиник, хочу понять, можно ли поставить ваш виджет под нашим брендом.",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Виктор"
        },
        "lastName": {
          "spoken": true,
          "value": "Петров"
        },
        "email": {
          "spoken": true,
          "value": "v.petrov@nevalin.ru"
        },
        "phone": {
          "spoken": true,
          "value": "+7 921 345-67-89"
        },
        "subject": {
          "spoken": true,
          "criterion": "партнёрство"
        },
        "message": {
          "spoken": true,
          "criterion": "виджет под своим брендом для ~40 клиник"
        }
      }
    },
    {
      "id": "ru-contact-v2",
      "lang": "ru",
      "form": "contact",
      "variant": "v2",
      "utterance": "Доброе утро. Меня зовут Виктор Петров — Петров, П-Е-Т-Р-О-В. Лучше всего писать на в точка петров собака невалин точка ру. Телефон тоже дам, плюс семь, девятьсот двадцать один, триста сорок пять, шестьдесят семь, восемьдесят девять, но почтой удобнее. Дело вот в чём: мы присматриваемся к голосовому вводу уже давно, у нас на обслуживании формы записи примерно сорока клиник, и прежде чем идти дальше, мне нужно понять, можно ли выпустить виджет под нашим собственным брендом.",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Виктор"
        },
        "lastName": {
          "spoken": true,
          "value": "Петров"
        },
        "email": {
          "spoken": true,
          "value": "v.petrov@nevalin.ru",
          "note": "диктуется по буквам и словами точка/собака"
        },
        "phone": {
          "spoken": true,
          "value": "+7 921 345-67-89"
        },
        "subject": {
          "spoken": true,
          "criterion": "партнёрство"
        },
        "message": {
          "spoken": true,
          "criterion": "свой бренд, ~40 клиник"
        }
      }
    },
    {
      "id": "ru-contact-v3",
      "lang": "ru",
      "form": "contact",
      "variant": "v3",
      "utterance": "Мне вообще-то нужно понять другое — работает ли это внутри айфрейма, мы встраиваем свою форму на сайты партнёров, и на этом уже два виджета сломались. А, надо же сказать, кто я: Виктор Петренко — простите, Петров. Виктор Петров.",
      "self_correction": "lastName: Петренко -> Петров",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Виктор"
        },
        "lastName": {
          "spoken": true,
          "value": "Петров"
        },
        "email": {
          "spoken": false
        },
        "phone": {
          "spoken": false
        },
        "subject": {
          "spoken": false,
          "derivable": true,
          "criterion": "тема, правомерно выведенная из текста сообщения"
        },
        "message": {
          "spoken": true,
          "criterion": "работает ли внутри iframe, встраивание на сайты партнёров"
        }
      }
    },
    {
      "id": "ru-hotel-v1",
      "lang": "ru",
      "form": "hotel",
      "variant": "v1",
      "utterance": "Виктор Петров, v.petrov@nevalin.ru, плюс семь девятьсот двадцать один, триста сорок пять, шестьдесят семь, восемьдесят девять. Заезд в эту пятницу, выезд в следующий понедельник, двое взрослых и один ребёнок, один номер, семейный, бюджет около ста восьмидесяти за ночь. Нужны завтрак, вайфай, парковка и бассейн — все четыре. И поставьте, пожалуйста, детскую кроватку.",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Виктор"
        },
        "lastName": {
          "spoken": true,
          "value": "Петров"
        },
        "email": {
          "spoken": true,
          "value": "v.petrov@nevalin.ru"
        },
        "phone": {
          "spoken": true,
          "value": "+7 921 345-67-89"
        },
        "checkIn": {
          "spoken": true,
          "value": "2026-10-09"
        },
        "checkOut": {
          "spoken": true,
          "value": "2026-10-12"
        },
        "adults": {
          "spoken": true,
          "value": 2
        },
        "children": {
          "spoken": true,
          "value": 1
        },
        "rooms": {
          "spoken": true,
          "value": 1
        },
        "roomType": {
          "spoken": true,
          "value": "family"
        },
        "budget": {
          "spoken": true,
          "value": 180
        },
        "breakfast": {
          "spoken": true,
          "value": true
        },
        "wifi": {
          "spoken": true,
          "value": true
        },
        "parking": {
          "spoken": true,
          "value": true
        },
        "pool": {
          "spoken": true,
          "value": true
        },
        "comments": {
          "spoken": true,
          "criterion": "детская кроватка в номер"
        }
      }
    },
    {
      "id": "ru-hotel-v2",
      "lang": "ru",
      "form": "hotel",
      "variant": "v2",
      "utterance": "Так, это Виктор Петров — П-Е-Т-Р-О-В. Пишите на в точка петров собака невалин точка ру, мобильный плюс семь, девятьсот двадцать один, триста сорок пять, шестьдесят семь, восемьдесят девять. Приезжаем в эту пятницу, уезжаем в понедельник после неё, то есть на выходные. Нас будет двое плюс дочка, ей четыре, то есть двое взрослых и один ребёнок, и номер нужен только один — семейный, если есть. Стараемся уложиться в сто восемьдесят долларов за ночь. Завтрак да, вайфай да, едем на машине, значит парковка, и малая захочет бассейн, так что бассейн тоже — все четыре. И ещё: поставьте в номер детскую кроватку.",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Виктор"
        },
        "lastName": {
          "spoken": true,
          "value": "Петров"
        },
        "email": {
          "spoken": true,
          "value": "v.petrov@nevalin.ru",
          "note": "диктуется по буквам"
        },
        "phone": {
          "spoken": true,
          "value": "+7 921 345-67-89"
        },
        "checkIn": {
          "spoken": true,
          "value": "2026-10-09"
        },
        "checkOut": {
          "spoken": true,
          "value": "2026-10-12"
        },
        "adults": {
          "spoken": true,
          "value": 2
        },
        "children": {
          "spoken": true,
          "value": 1,
          "trap": "названо 'ей четыре' — возраст, не количество"
        },
        "rooms": {
          "spoken": true,
          "value": 1
        },
        "roomType": {
          "spoken": true,
          "value": "family"
        },
        "budget": {
          "spoken": true,
          "value": 180
        },
        "breakfast": {
          "spoken": true,
          "value": true
        },
        "wifi": {
          "spoken": true,
          "value": true
        },
        "parking": {
          "spoken": true,
          "value": true
        },
        "pool": {
          "spoken": true,
          "value": true
        },
        "comments": {
          "spoken": true,
          "criterion": "детская кроватка в номер"
        }
      }
    },
    {
      "id": "ru-hotel-v3",
      "lang": "ru",
      "form": "hotel",
      "variant": "v3",
      "utterance": "Это Виктор. Приезжаем во вторник — нет, погодите, в среду, во вторник я ещё в дороге — а уезжаем в понедельник. Нас двое. Твин подойдёт. Если номер над баром, то лучше не надо, в прошлый раз всю ночь было шумно.",
      "self_correction": "checkIn: вторник 2026-10-06 -> среда 2026-10-07",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Виктор"
        },
        "lastName": {
          "spoken": false
        },
        "email": {
          "spoken": false
        },
        "phone": {
          "spoken": false
        },
        "checkIn": {
          "spoken": true,
          "value": "2026-10-07"
        },
        "checkOut": {
          "spoken": true,
          "value": "2026-10-12"
        },
        "adults": {
          "spoken": true,
          "value": 2
        },
        "children": {
          "spoken": false
        },
        "rooms": {
          "spoken": false
        },
        "roomType": {
          "spoken": true,
          "value": "twin"
        },
        "budget": {
          "spoken": false
        },
        "breakfast": {
          "spoken": false
        },
        "wifi": {
          "spoken": false
        },
        "parking": {
          "spoken": false
        },
        "pool": {
          "spoken": false
        },
        "comments": {
          "spoken": true,
          "criterion": "не номер над баром, шумно"
        }
      }
    },
    {
      "id": "ru-dental-v1",
      "lang": "ru",
      "form": "dental",
      "variant": "v1",
      "utterance": "Ирина Соколова, родилась четырнадцатого марта тысяча девятьсот восемьдесят седьмого, телефон плюс семь девятьсот двадцать один, триста сорок пять, одиннадцать, двадцать два, почта i.sokolova@nevalin.ru. Болит зуб — то болит, то отпускает, в основном ночью, справа сверху. Хочу через две недели во вторник, в половине десятого утра. У меня аллергия на пенициллин, и я принимаю ибупрофен четыреста, когда совсем плохо.",
      "gold": {
        "fullName": {
          "spoken": true,
          "value": "Ирина Соколова"
        },
        "dateOfBirth": {
          "spoken": true,
          "value": "1987-03-14"
        },
        "phone": {
          "spoken": true,
          "value": "+7 921 345-11-22"
        },
        "email": {
          "spoken": true,
          "value": "i.sokolova@nevalin.ru"
        },
        "visitType": {
          "spoken": true,
          "value": "toothpain"
        },
        "painPattern": {
          "spoken": true,
          "value": "periodic"
        },
        "preferredDate": {
          "spoken": true,
          "value": "2026-10-20"
        },
        "preferredTime": {
          "spoken": true,
          "value": "09:30"
        },
        "mainComplaint": {
          "spoken": true,
          "criterion": "боль справа сверху, усиливается ночью"
        },
        "allergies": {
          "spoken": true,
          "criterion": "пенициллин"
        },
        "currentMedications": {
          "spoken": true,
          "criterion": "ибупрофен 400 по потребности"
        }
      }
    },
    {
      "id": "ru-dental-v2",
      "lang": "ru",
      "form": "dental",
      "variant": "v2",
      "utterance": "Здравствуйте, хочу записаться. Фамилия Соколова — С-О-К-О-Л-О-В-А, имя Ирина. Дата рождения четырнадцатое марта тысяча девятьсот восемьдесят седьмого года. Звонить на плюс семь, девятьсот двадцать один, триста сорок пять, одиннадцать, двадцать два, почта и точка соколова собака невалин точка ру. Обращаюсь из-за зубной боли, тянется уже около недели. Постоянной её не назову — то болит, то отпускает, и почти всегда хуже ночью, справа сверху, будит меня. Можно через две недели во вторник, в половине десятого утра? И сразу скажу: у меня аллергия на пенициллин, это важно, а сейчас принимаю ибупрофен четыреста, когда становится совсем плохо.",
      "gold": {
        "fullName": {
          "spoken": true,
          "value": "Ирина Соколова"
        },
        "dateOfBirth": {
          "spoken": true,
          "value": "1987-03-14"
        },
        "phone": {
          "spoken": true,
          "value": "+7 921 345-11-22"
        },
        "email": {
          "spoken": true,
          "value": "i.sokolova@nevalin.ru",
          "note": "диктуется по буквам"
        },
        "visitType": {
          "spoken": true,
          "value": "toothpain"
        },
        "painPattern": {
          "spoken": true,
          "value": "periodic",
          "note": "сказано отрицание 'постоянной не назову' — ловушка на constant"
        },
        "preferredDate": {
          "spoken": true,
          "value": "2026-10-20"
        },
        "preferredTime": {
          "spoken": true,
          "value": "09:30"
        },
        "mainComplaint": {
          "spoken": true,
          "criterion": "боль справа сверху около недели, хуже ночью, будит"
        },
        "allergies": {
          "spoken": true,
          "criterion": "пенициллин"
        },
        "currentMedications": {
          "spoken": true,
          "criterion": "ибупрофен 400 по потребности"
        }
      }
    },
    {
      "id": "ru-dental-v3",
      "lang": "ru",
      "form": "dental",
      "variant": "v3",
      "utterance": "Ирина Соколова. У меня вообще-то срочно — утром отвалилась коронка, и край режет язык. Можно через две недели во вторник в половине десятого — нет, давайте в десять, в половине десятого не успею.",
      "self_correction": "preferredTime: 09:30 -> 10:00",
      "gold": {
        "fullName": {
          "spoken": true,
          "value": "Ирина Соколова"
        },
        "dateOfBirth": {
          "spoken": false
        },
        "phone": {
          "spoken": false
        },
        "email": {
          "spoken": false
        },
        "visitType": {
          "spoken": true,
          "value": "emergency"
        },
        "painPattern": {
          "spoken": false
        },
        "preferredDate": {
          "spoken": true,
          "value": "2026-10-20"
        },
        "preferredTime": {
          "spoken": true,
          "value": "10:00"
        },
        "mainComplaint": {
          "spoken": true,
          "criterion": "отвалилась коронка, край режет язык"
        },
        "allergies": {
          "spoken": false
        },
        "currentMedications": {
          "spoken": false
        }
      }
    },
    {
      "id": "de-contact-v1",
      "lang": "de",
      "form": "contact",
      "variant": "v1",
      "utterance": "Guten Tag, Jonas Brandtner, E-Mail j.brandtner@hellwig-tech.de, Telefon plus neunundvierzig dreißig, fünf sechs sieben acht, eins zwei drei vier. Ich schreibe wegen einer Partnerschaft: wir betreiben die Aufnahmeformulare für etwa vierzig Kliniken und möchten wissen, ob Ihr Widget unter unserer eigenen Marke läuft.",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Jonas"
        },
        "lastName": {
          "spoken": true,
          "value": "Brandtner"
        },
        "email": {
          "spoken": true,
          "value": "j.brandtner@hellwig-tech.de"
        },
        "phone": {
          "spoken": true,
          "value": "+49 30 5678 1234"
        },
        "subject": {
          "spoken": true,
          "criterion": "партнёрство / Partnerschaft"
        },
        "message": {
          "spoken": true,
          "criterion": "своя марка (White-Label) для ~40 клиник"
        }
      }
    },
    {
      "id": "de-contact-v2",
      "lang": "de",
      "form": "contact",
      "variant": "v2",
      "utterance": "Guten Morgen. Mein Name ist Jonas Brandtner — Brandtner, B-R-A-N-D-T-N-E-R. Am besten erreichen Sie mich unter j Punkt brandtner at hellwig Bindestrich tech Punkt de. Die Nummer gebe ich auch dazu, plus neunundvierzig, dreißig, fünf sechs sieben acht, eins zwei drei vier, aber per E-Mail ist es einfacher. Worum es eigentlich geht, ist eine Partnerschaft. Wir schauen uns Spracheingabe schon länger an, wir betreuen die Aufnahmeformulare von rund vierzig Kliniken, und bevor ich das weiterverfolge, muss ich verstehen, ob sich das Widget unter unserer eigenen Marke ausliefern lässt.",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Jonas"
        },
        "lastName": {
          "spoken": true,
          "value": "Brandtner"
        },
        "email": {
          "spoken": true,
          "value": "j.brandtner@hellwig-tech.de",
          "note": "диктуется по буквам, Punkt/Bindestrich"
        },
        "phone": {
          "spoken": true,
          "value": "+49 30 5678 1234"
        },
        "subject": {
          "spoken": true,
          "criterion": "партнёрство / Partnerschaft"
        },
        "message": {
          "spoken": true,
          "criterion": "своя марка, ~40 клиник"
        }
      }
    },
    {
      "id": "de-contact-v3",
      "lang": "de",
      "form": "contact",
      "variant": "v3",
      "utterance": "Was ich eigentlich wissen muss, ist, ob das im iframe funktioniert — wir binden unser Formular auf Partnerseiten ein, daran sind schon zwei Widgets gescheitert. Ach, ich sollte sagen, wer ich bin: Jonas Brandner — Entschuldigung, Brandtner. Jonas Brandtner.",
      "self_correction": "lastName: Brandner -> Brandtner",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Jonas"
        },
        "lastName": {
          "spoken": true,
          "value": "Brandtner"
        },
        "email": {
          "spoken": false
        },
        "phone": {
          "spoken": false
        },
        "subject": {
          "spoken": false,
          "derivable": true,
          "criterion": "тема, правомерно выведенная из текста сообщения"
        },
        "message": {
          "spoken": true,
          "criterion": "работает ли внутри iframe, встраивание на сайты партнёров"
        }
      }
    },
    {
      "id": "de-hotel-v1",
      "lang": "de",
      "form": "hotel",
      "variant": "v1",
      "utterance": "Jonas Brandtner, j.brandtner@hellwig-tech.de, plus neunundvierzig dreißig, fünf sechs sieben acht, eins zwei drei vier. Anreise diesen Freitag, Abreise am Montag danach, zwei Erwachsene und ein Kind, ein Zimmer, Familienzimmer, Budget etwa hundertachtzig pro Nacht. Wir möchten Frühstück, WLAN, Parkplatz und Poolzugang — alle vier. Und stellen Sie bitte ein Kinderbett ins Zimmer.",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Jonas"
        },
        "lastName": {
          "spoken": true,
          "value": "Brandtner"
        },
        "email": {
          "spoken": true,
          "value": "j.brandtner@hellwig-tech.de"
        },
        "phone": {
          "spoken": true,
          "value": "+49 30 5678 1234"
        },
        "checkIn": {
          "spoken": true,
          "value": "2026-10-09"
        },
        "checkOut": {
          "spoken": true,
          "value": "2026-10-12"
        },
        "adults": {
          "spoken": true,
          "value": 2
        },
        "children": {
          "spoken": true,
          "value": 1
        },
        "rooms": {
          "spoken": true,
          "value": 1
        },
        "roomType": {
          "spoken": true,
          "value": "family"
        },
        "budget": {
          "spoken": true,
          "value": 180
        },
        "breakfast": {
          "spoken": true,
          "value": true
        },
        "wifi": {
          "spoken": true,
          "value": true
        },
        "parking": {
          "spoken": true,
          "value": true
        },
        "pool": {
          "spoken": true,
          "value": true
        },
        "comments": {
          "spoken": true,
          "criterion": "детская кроватка в номер"
        }
      }
    },
    {
      "id": "de-hotel-v2",
      "lang": "de",
      "form": "hotel",
      "variant": "v2",
      "utterance": "Also, hier ist Jonas Brandtner — B-R-A-N-D-T-N-E-R. Schreiben Sie mir an j Punkt brandtner at hellwig Bindestrich tech Punkt de, das Handy ist plus neunundvierzig, dreißig, fünf sechs sieben acht, eins zwei drei vier. Wir kommen diesen Freitag an und fahren am Montag danach wieder heim, also über das Wochenende. Wir sind zwei plus unsere Tochter, sie ist vier, also zwei Erwachsene und ein Kind, und wir brauchen nur das eine Zimmer — ein Familienzimmer, wenn Sie eins haben. Wir wollen bei etwa hundertachtzig Dollar pro Nacht bleiben. Frühstück gern, WLAN ja, wir kommen mit dem Auto, also Parkplatz, und die Kleine will in den Pool, also auch Poolzugang — alle vier. Und noch etwas: bitte ein Kinderbett ins Zimmer.",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Jonas"
        },
        "lastName": {
          "spoken": true,
          "value": "Brandtner"
        },
        "email": {
          "spoken": true,
          "value": "j.brandtner@hellwig-tech.de",
          "note": "диктуется по буквам"
        },
        "phone": {
          "spoken": true,
          "value": "+49 30 5678 1234"
        },
        "checkIn": {
          "spoken": true,
          "value": "2026-10-09"
        },
        "checkOut": {
          "spoken": true,
          "value": "2026-10-12"
        },
        "adults": {
          "spoken": true,
          "value": 2
        },
        "children": {
          "spoken": true,
          "value": 1,
          "trap": "названо 'sie ist vier' — возраст, не количество"
        },
        "rooms": {
          "spoken": true,
          "value": 1
        },
        "roomType": {
          "spoken": true,
          "value": "family"
        },
        "budget": {
          "spoken": true,
          "value": 180
        },
        "breakfast": {
          "spoken": true,
          "value": true
        },
        "wifi": {
          "spoken": true,
          "value": true
        },
        "parking": {
          "spoken": true,
          "value": true
        },
        "pool": {
          "spoken": true,
          "value": true
        },
        "comments": {
          "spoken": true,
          "criterion": "детская кроватка в номер"
        }
      }
    },
    {
      "id": "de-hotel-v3",
      "lang": "de",
      "form": "hotel",
      "variant": "v3",
      "utterance": "Hier ist Jonas. Wir kommen am Dienstag — nein, warten Sie, am Mittwoch, Dienstag bin ich noch unterwegs — und fahren am Montag. Wir sind zwei. Ein Twin wäre in Ordnung. Wenn das Zimmer über der Bar liegt, dann lieber nicht, letztes Mal war es die ganze Nacht laut.",
      "self_correction": "checkIn: Dienstag 2026-10-06 -> Mittwoch 2026-10-07",
      "gold": {
        "firstName": {
          "spoken": true,
          "value": "Jonas"
        },
        "lastName": {
          "spoken": false
        },
        "email": {
          "spoken": false
        },
        "phone": {
          "spoken": false
        },
        "checkIn": {
          "spoken": true,
          "value": "2026-10-07"
        },
        "checkOut": {
          "spoken": true,
          "value": "2026-10-12"
        },
        "adults": {
          "spoken": true,
          "value": 2
        },
        "children": {
          "spoken": false
        },
        "rooms": {
          "spoken": false
        },
        "roomType": {
          "spoken": true,
          "value": "twin"
        },
        "budget": {
          "spoken": false
        },
        "breakfast": {
          "spoken": false
        },
        "wifi": {
          "spoken": false
        },
        "parking": {
          "spoken": false
        },
        "pool": {
          "spoken": false
        },
        "comments": {
          "spoken": true,
          "criterion": "не номер над баром, шумно"
        }
      }
    },
    {
      "id": "de-dental-v1",
      "lang": "de",
      "form": "dental",
      "variant": "v1",
      "utterance": "Katrin Hoffmann, geboren am vierzehnten März neunzehnhundertsiebenundachtzig, Telefon plus neunundvierzig dreißig, fünf sechs sieben acht, neun neun eins eins, E-Mail k.hoffmann@brightline.de. Es sind Zahnschmerzen — sie kommen und gehen, meist nachts, oben rechts. Ich möchte in zwei Wochen am Dienstag, halb zehn morgens. Ich habe eine Penicillinallergie und nehme Ibuprofen vierhundert, wenn es schlimm wird.",
      "gold": {
        "fullName": {
          "spoken": true,
          "value": "Katrin Hoffmann"
        },
        "dateOfBirth": {
          "spoken": true,
          "value": "1987-03-14"
        },
        "phone": {
          "spoken": true,
          "value": "+49 30 5678 9911"
        },
        "email": {
          "spoken": true,
          "value": "k.hoffmann@brightline.de"
        },
        "visitType": {
          "spoken": true,
          "value": "toothpain"
        },
        "painPattern": {
          "spoken": true,
          "value": "periodic"
        },
        "preferredDate": {
          "spoken": true,
          "value": "2026-10-20"
        },
        "preferredTime": {
          "spoken": true,
          "value": "09:30",
          "trap": "'halb zehn' по-немецки = 09:30, НЕ 10:30 — типовая ошибка переноса"
        },
        "mainComplaint": {
          "spoken": true,
          "criterion": "боль справа сверху, усиливается ночью"
        },
        "allergies": {
          "spoken": true,
          "criterion": "пенициллин"
        },
        "currentMedications": {
          "spoken": true,
          "criterion": "ибупрофен 400 по потребности"
        }
      }
    },
    {
      "id": "de-dental-v2",
      "lang": "de",
      "form": "dental",
      "variant": "v2",
      "utterance": "Guten Tag, ich möchte einen Termin. Der Name ist Katrin Hoffmann — H-O-F-F-M-A-N-N. Mein Geburtsdatum ist der vierzehnte März neunzehnhundertsiebenundachtzig. Anrufen können Sie unter plus neunundvierzig, dreißig, fünf sechs sieben acht, neun neun eins eins, die E-Mail ist k Punkt hoffmann at brightline Punkt de. Der Grund ist Zahnschmerz, das geht jetzt seit etwa einer Woche. Dauerhaft ist er nicht — er kommt und geht, und nachts ist es fast immer schlimmer, oben rechts, es weckt mich auf. Könnte ich in zwei Wochen am Dienstag um halb zehn morgens kommen? Ich sollte erwähnen, dass ich eine Penicillinallergie habe, das ist wichtig, und im Moment nehme ich Ibuprofen vierhundert, wenn es schlimm wird.",
      "gold": {
        "fullName": {
          "spoken": true,
          "value": "Katrin Hoffmann"
        },
        "dateOfBirth": {
          "spoken": true,
          "value": "1987-03-14"
        },
        "phone": {
          "spoken": true,
          "value": "+49 30 5678 9911"
        },
        "email": {
          "spoken": true,
          "value": "k.hoffmann@brightline.de",
          "note": "диктуется по буквам"
        },
        "visitType": {
          "spoken": true,
          "value": "toothpain"
        },
        "painPattern": {
          "spoken": true,
          "value": "periodic",
          "note": "сказано отрицание 'dauerhaft ist er nicht' — ловушка на constant"
        },
        "preferredDate": {
          "spoken": true,
          "value": "2026-10-20"
        },
        "preferredTime": {
          "spoken": true,
          "value": "09:30",
          "trap": "'halb zehn' = 09:30"
        },
        "mainComplaint": {
          "spoken": true,
          "criterion": "боль справа сверху около недели, хуже ночью, будит"
        },
        "allergies": {
          "spoken": true,
          "criterion": "пенициллин"
        },
        "currentMedications": {
          "spoken": true,
          "criterion": "ибупрофен 400 по потребности"
        }
      }
    },
    {
      "id": "de-dental-v3",
      "lang": "de",
      "form": "dental",
      "variant": "v3",
      "utterance": "Katrin Hoffmann. Es ist eigentlich ein Notfall — heute Morgen ist eine Krone abgefallen, und die Kante schneidet mir in die Zunge. Könnte ich in zwei Wochen am Dienstag um halb zehn — nein, machen wir zehn, halb zehn schaffe ich nicht.",
      "self_correction": "preferredTime: 09:30 -> 10:00",
      "gold": {
        "fullName": {
          "spoken": true,
          "value": "Katrin Hoffmann"
        },
        "dateOfBirth": {
          "spoken": false
        },
        "phone": {
          "spoken": false
        },
        "email": {
          "spoken": false
        },
        "visitType": {
          "spoken": true,
          "value": "emergency"
        },
        "painPattern": {
          "spoken": false
        },
        "preferredDate": {
          "spoken": true,
          "value": "2026-10-20"
        },
        "preferredTime": {
          "spoken": true,
          "value": "10:00"
        },
        "mainComplaint": {
          "spoken": true,
          "criterion": "отвалилась коронка, край режет язык"
        },
        "allergies": {
          "spoken": false
        },
        "currentMedications": {
          "spoken": false
        }
      }
    }
  ],
  "changelog": [
    {
      "version": "2.0",
      "date": "2026-09-21",
      "changes": [
        "RU-персонажи: домен nevaline.ru -> nevalin.ru и диктовка «невалайн» -> «невалин». В v1/v3 домен стоял литералом, а в v2 диктовался по-русски так, что давал ДРУГОЕ слово (nevalain) — корпус был внутренне несвязным, и три отказа v1 объяснялись этим, а не продуктом. Эталон под вывод модели НЕ правился: изменена реплика, поэтому прогоны v1 для 9 русских скриптов недействительны.",
        "Введён статус ячейки `derivable`: не названо прямо, но правомерно выводится из сказанного (subject в contact/v3). Заполнение — не выдумка, пустота — не ошибка. В M1 не входит ни числителем, ни знаменателем, чтобы число не выросло от переразметки; считается отдельной строкой."
      ]
    }
  ],
  "cell_status": {
    "spoken: true": "значение названо — идёт в M1",
    "spoken: false": "не названо, заполнять нельзя — знаменатель выдумок M2",
    "spoken: false + derivable: true": "правомерно выводится из сказанного — вне M1 и вне M2, отдельная строка отчёта"
  }
}
