From ddb186f841702bf12ba1111015b4b2108de9ec2a Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Tue, 22 Sep 2026 03:32:16 -0400 Subject: [PATCH] =?UTF-8?q?docs(labs):=20=D1=81=D0=BE=D0=B3=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D0=BE=D0=B2=D0=B0=D0=BD=D1=8B=20=D1=87=D0=B5=D1=82=D1=8B?= =?UTF-8?q?=D1=80=D0=B5=20=D1=80=D0=B0=D1=81=D1=81=D0=BB=D0=B5=D0=B4=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=8B=D1=80=D1=83=D1=87?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Зачем: превратить шесть идей факультативов в связный раздел из четырех работ. Что: определены результаты работ и наблюдение за заказами через Airflow. Проверка: git diff --check; порядок обновления данных сверен с кодом дагов. --- docs/specs/2026-09-01-labs-program.md | 57 +++++++++++++++++++-------- 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/docs/specs/2026-09-01-labs-program.md b/docs/specs/2026-09-01-labs-program.md index 87f2627..e90985c 100644 --- a/docs/specs/2026-09-01-labs-program.md +++ b/docs/specs/2026-09-01-labs-program.md @@ -149,28 +149,53 @@ ## 4. Факультативы — пять разделов -Ниже перечислены только названия сюжетов и их уроки. Материал, формы и способы -проверки остаются в [инвентаризации](../research/2026-08-31-labs-inventory.md). +Ниже перечислены сюжеты, их уроки и принятые решения по форме заданий. Исходный +материал и способы проверки — в +[инвентаризации](../research/2026-08-31-labs-inventory.md). ### Почему выручка не сходится -Этот раздел рекомендован первым из факультативов. Он открывается после ступени -1 основной программы: материал живет на стенде с этапа 6. +Этот раздел рекомендован первым из факультативов и открывается после ступени +1 основной программы. Шесть сюжетов собраны в четыре лабораторные: три +расследования готовых данных и одно наблюдение во времени. Опоздания, +изменение выручки и история отмен используют одну историю заказов, поэтому +для них выбрана общая работа вместо трех отдельных. -- **Почему трекер недосчитывает покупки (#186).** Разрыв воронки подтверждений - показывает потерянные события и границу доверия к двум источникам. +- **Куда пропали покупки (#186).** Учащийся сравнивает подтверждения и события + покупки, находит заказы без события и объясняет разрыв воронки конкретными + заказами. - **Почему повтор покупки завышает выручку (#187).** Движок убирает технический дубль строки, а повтор одной покупки приходится находить по деловому ключу. -- **Какая позиция объясняет разницу в сумме.** Расхождение суммы нужно - разложить до конкретной вычеркнутой позиции и объяснить до копейки. -- **Был ли отмененный заказ оплачен.** Текущее состояние не заменяет историю, а - некоторые различия после истечения срока хранения сырых данных уже не - восстановить. -- **Когда отчет за день можно считать окончательным (#188).** Отчет за день - становится окончательным лишь после того, как источник больше не может - изменить этот день. -- **Почему выручка за день еще меняется.** Внутри окна изменяемости выручка - движется, а после закрытия дня фиксируется. + Учащийся сравнивает сумму событий с суммой по уникальным покупкам и + подтверждает, что разница равна вкладу повторов. Другие причины расхождения + с выручкой магазина при этом остаются. +- **Какая позиция объясняет разницу в сумме.** Учащийся сопоставляет корзину + из сырого `ecommerce` с позициями заказа, находит удаленный товар и объясняет + разницу до копейки. Для точных цен нужен исходный JSON: в готовых массивах + событий цены округлены до рублей. +- **Почему вчерашняя выручка меняется сегодня (#188).** Учащийся наблюдает один + день по мере поступления слепков: появляются опоздавшие заказы, меняются + статусы и выручка. По сохраненным состояниям объясняет причины изменений, + определяет момент закрытия дня и отделяет доказанную оплату отмененного + заказа от случаев, в которых историю оплаты восстановить нельзя. + +В четвертой лабораторной учащийся сам собирает историю одного дня оформления +заказов. Перед наблюдением он ставит `world_live` на паузу и дожидается +завершения начатых прогонов. Затем продвигает +мир по одному модельному дню через `world_next_day` и после каждого запуска +выполняет `etl_pipeline`. Только после завершения конвейера сохраняет дату +слепка, состояния отдельных заказов и выручку выбранного дня. Эти результаты +позволяют сравнить наблюдения даже после удаления сырых слепков. Готовые +слепки и сочетание готового примера с собственным наблюдением отклонены: +учащийся может получить нужную историю на стенде и сам увидеть, как новые +данные меняют уже рассчитанный отчет. + +День считается закрытым после получения и обработки последнего слепка +семидневного окна изменяемости; этот слепок доставляется следующим модельным +днем. Одного совпадения сумм в соседних наблюдениях для такого вывода +недостаточно. История отмен тоже имеет границу: оплата и отмена между двумя +дневными слепками могут остаться невидимыми. Отсутствие наблюдаемой оплаты +не доказывает, что оплаты не было. ### Тонкий анализ данных