--- name: roistat-reports-api description: "Чтение отчётов Roistat, воспроизводимая сверка с сырыми сделками и коллтрекингом, а также строго ограждённая запись сохранённых отчётов." --- # Отчёты Roistat ## Обязательный порядок 1. Доступ бери из `ROISTAT_PROJECT` и `ROISTAT_API_KEY` либо из указанного закрытого файла JSON с правами `0600`. Никогда не передавай ключ аргументом. 2. Точно задай период, окно, модель атрибуции, канал, фильтры и валюту. 3. Считай три источника разными: аналитический отчёт, сырые сделки и коллтрекинг. У каждого есть собственное состояние полноты. 4. Сырые сделки и коллтрекинг запрашивай только с явным `--include-personal-data`; полученные пакеты остаются закрытыми. 5. Проходи всю постраничную выдачу. Статус `partial` не превращай в полный отчёт. 6. Каждое число должно воспроизводиться из сохранённых ответов и `report-context.json`. ## Чтение и сверка Используй `scripts/build_roistat_report_pack.py`. Он сохраняет исходный ответ аналитики, нормализованные строки, параметры и отдельный расчёт расхождений. В сверке хранятся обе исходные суммы и разница. Расхождение может быть связано с окном атрибуции, поздним событием CRM, валютой или неполной выгрузкой; причину подтверждай доказательствами. ## Запись `scripts/save_roistat_report.py` до сетевого вызова проверяет: - точную контрольную сумму спецификации; - закрытое подтверждение владельца не старше 24 часов; - точное совпадение проекта, действия и целевого отчёта; - `ROISTAT_WRITE_ARMED=1` и отдельный `ROISTAT_WRITE_API_KEY`; - чтение до записи, чтение после записи, неизменность посторонних отчётов и кандидат на откат. Без `--apply` выполняется только местная проверка. Любой откат требует нового подтверждения. ## Граница публикации Не публикуй номера проектов, ключи, выгрузки, телефоны, домены, клиентские названия и местные пути. Публичные примеры должны быть только синтетическими.