# Запрос ведущего: источники → отчёт с проверяемыми числами Прочитай все входные файлы из input/. Только синтетические данные «Линии». Задача: сопоставить расходы, лиды, квалификацию и оплаты за сентябрь 2026, показать возврат и неизвестный канал, сохранить доказуемую арифметику. 1. До расчётов зафиксируй период, валюту, единицы и правила input/measurement-contract.json. 2. Лиды — distinct lead_id после тестов/периода. События формы не суммируй с лидами: у L003 два события, тест T001 не является реальным лидом даже в учебной воронке. 3. Заказы — distinct order_id. Деньги — distinct transaction_id со status=succeeded. Повтор PAY001 не прибавляет выручку; conflicting duplicate должен остановить расчёт. Возврат вычитай один раз. Ожидающий платёж и тестовый заказ не учитывай. 4. Свяжи оплату с order_id→lead_id→channel. Пустой channel сохраняй как unattributed. Не распределяй неизвестный источник по другим каналам. 5. Считай CPL=затраты/лиды, CPQL=затраты/квалификации, CAC=затраты/уникальные впервые оплатившие компании. Здесь 7 компаний и 7 заказов. Не усредняй CPL каналов. При нуле или неизвестном числителе возвращай null. 6. Gross revenue — успешные платежи; net revenue — платежи минус возвраты. Общие известные затраты — полный заданный pool300000 ₽. Расход неизвестного канала не выделен: его CPL/CPQL/CAC null. Себестоимость отсутствует: прибыль null. 7. Сохрани result/report.json и result/channel-report.csv. Добавь визуальный HTML с фильтром канала, одинаковым срезом KPI/графиков/таблиц и понятными источниками. 8. Воспроизведи расчёт stdlib Python calculate.py --check. Проверь независимые ожидания и мутации: повтор платежа, конфликт ID, сверхвозврат, нулевой знаменатель. Объясни ограничения и не рекомендуй бюджет по семи учебным заказам. Вывод: арифметика и следующий проверяемый шаг, без обещаний клиентского ROI.