Авторский курс Елизаровой НаталииAuthor's course by Nataliia Elizarova
Модуль 15 · Урок 15-37Module 15 · Lesson 15-37

Практикум. Планирование: от выгрузки до дашбордаWorkshop. Planning: from export to dashboard

Каждый месяц планер сравнивает прогноз с фактом. Обычно это полдня в Excel. В этом практикуме мы пройдём настоящий путь: две выгрузки → скрипт → сверка с эталоном → дашборд в одном HTML-файле → кнопка, которая пересобирает всё заново. Главное, чему учит урок: сначала сходятся цифры, потом рисуем красоту.

Every month a planner compares the forecast with actuals. Usually that is half a day in Excel. In this workshop we walk the real path: two exports → a script → reconciliation with the reference → a dashboard in one HTML file → a button that rebuilds everything. The main lesson: first the numbers reconcile, then we make it pretty.

⏱ 25 минут⏱ 25 minutes 📥 2 учебных файла📥 2 training files 🎮 Тренажёр «Что пошло не так?»🎮 Drill: "What went wrong?" ✅ Тест из 5 вопросов✅ A 5-question quiz 🔎 Проверено: ноябрь 2026🔎 Checked: November 2026

После урока вы сможетеAfter this lesson you will be able to

  • провести Claude Code по шагам от выгрузки до дашборда;
  • поймать две типичные ловушки склейки: код города и смену кода SKU;
  • посчитать отклонение и точность прогноза и объяснить их коллеге;
  • сделать отчёт, который пересобирается одной кнопкой.
  • walk Claude Code step by step from export to dashboard;
  • catch two typical join traps: a city code and an SKU code switch;
  • calculate forecast deviation and accuracy and explain them to a colleague;
  • build a report that rebuilds with one click.
1

Словарик из пяти словA five-word glossary

ВыгрузкаExportфайл из учётной системы: продажи, прогноз, остаткиa file from the accounting system: sales, forecast, stock
ЭталонReferenceцифра, которой все доверяют: лист «Итого» в отчёте, итог в системеa number everyone trusts: the "Total" sheet in a report, a system total
СклейкаJoinсоединение двух таблиц по общим колонкам: город + код SKUmatching two tables on shared columns: city + SKU code
Точность прогнозаForecast accuracyнасколько прогноз близок к факту по каждой строке, в процентахhow close the forecast is to actuals row by row, in percent
ДашбордDashboardстраница с итогами, графиками и фильтрами; у нас — один HTML-файлa page with totals, charts and filters; here — a single HTML file
2

На пальцах: сначала касса, потом витринаIn plain words: first the till, then the shop window

Продавец вечером сначала пересчитывает кассу и сверяет с чеками. Только когда сошлось, он пишет красивый отчёт хозяину. Если начать с отчёта, ошибка в кассе уедет в красивую таблицу — и её никто не заметит.

In the evening a shop assistant first counts the till and checks it against receipts. Only when it reconciles do they write a neat report for the owner. Start with the report, and a till error ends up in a neat table — where nobody notices it.

Главная мысльKey idea Итог факта после склейки должен совпасть с эталоном до того, как вы попросите Claude рисовать дашборд. Красивый дашборд с неверной цифрой хуже, чем его отсутствие. The actuals total after the join must match the reference before you ask Claude to draw a dashboard. A pretty dashboard with a wrong number is worse than none.
3

Задача и почему Claude CodeThe task and why Claude Code

Задача: каждый месяц сравнивать прогноз с фактом по городам и SKU «Долины напитков» и показывать коллегам итог, отклонение и точность.

Task: every month compare forecast with actuals by city and SKU at "Valley Beverages" and show colleagues the total, deviation and accuracy.

Признак задачиTask traitЧто это значитWhat it means
Повторяется каждый месяцRepeats every monthНужен скрипт, который запускается одной кнопкой, а не разговор зановоYou need a script run with one click, not a new conversation each time
Несколько файлов и справочникSeveral files and a lookupСклейку и соответствия кодов удобно держать в папке рядом со скриптомThe join and code mappings are best kept in the folder next to the script
Смотрят коллегиColleagues view itОдин HTML-файл в общей папке открывается двойным щелчком, без установкиOne HTML file in a shared folder opens with a double click, nothing to install

Поэтому инструмент — Claude Code (уроки 15-24…15-27). Путь, по которому мы пройдём:

So the tool is Claude Code (lessons 15-24…15-27). The path we will walk:

1. Понять1. Understandчто в файлахwhat is in the files
2. Сверить2. Reconcileитог с эталономtotal vs reference
3. Извлечь3. Extractскрипт данныхdata script
4. Собрать4. BuildHTML-дашбордHTML dashboard
5. Кнопка5. Button.bat и пересборка.bat and rebuild
6. Описать6. DocumentREADME для коллегREADME for colleagues
4

Учебные данные: два файла и эталонTraining data: two files and a reference

Октябрь, 4 города × 5 SKU, тысячи литров. Файл продаж выгружен из учётной системы, файл прогноза — из файла планера. Эталон: в отчёте продаж на листе «Итого» стоит 1 287 тыс. л. В файлах спрятаны две ловушки — как в настоящих выгрузках.

October, 4 cities × 5 SKUs, thousand litres. The sales file is exported from the accounting system, the forecast file from the planner's workbook. Reference: the "Total" sheet of the sales report says 1,287 k L. Two traps are hidden in the files — as in real exports.

Файл 1. Продажи (факт), 20 строкFile 1. Sales (actuals), 20 rows
CSV с разделителем «;» — открывается в ExcelCSV with ";" separator — opens in Excel
Файл 2. Прогноз, 20 строкFile 2. Forecast, 20 rows
Положите оба файла в папку inputPut both files in an input folder

Выше — первые строки обоих файлов рядом. Присмотритесь к колонке «Город» и к коду сока.

Above are the first rows of both files side by side. Look closely at the "City" column and the juice code.

5

Шесть запросов — в том порядке, как это былоSix requests — in the order it really went

Создайте папку Plan_Fact, внутри — input с двумя файлами. Откройте Claude Code в папке Plan_Fact, режим — план (урок 15-25). Отправляйте запросы по одному и читайте ответ, прежде чем идти дальше.

Create a Plan_Fact folder with an input folder holding both files. Open Claude Code in Plan_Fact, plan mode (lesson 15-25). Send the requests one at a time and read each answer before moving on.

Шаг 1. Понять источникStep 1. Understand the source

В папке input два файла: продажи и прогноз за октябрь. Опиши каждый: колонки, единицы, период, сколько городов и SKU. Найди значения города и кода SKU, которые есть только в одном из файлов. Ничего не считай и не меняй. Если что-то непонятно — спроси меня.

The input folder has two files: October sales and forecast. Describe each: columns, units, period, how many cities and SKUs. Find city and SKU code values that appear in only one of the files. Don't calculate or change anything. If anything is unclear, ask me.

Шаг 2. Сверка до всякой красотыStep 2. Reconcile before anything pretty

Посчитай итог факта и итог прогноза. Факт сверь с эталоном: 1 287 тыс. л. Затем склей файлы по городу и коду SKU и покажи: сколько строк склеилось, сколько осталось без пары и итог факта после склейки. Если он не равен 1 287 — остановись и покажи строки без пары.

Calculate the actuals total and the forecast total. Check actuals against the reference: 1,287 k L. Then join the files on city and SKU code and show: how many rows matched, how many have no pair, and the actuals total after the join. If it isn't 1,287, stop and show the unmatched rows.

Шаг 3. Скрипт извлеченияStep 3. Extraction script

Создай справочник mapping.csv: код города → название (VTR → Ветровск) и старый код SKU → новый (3001 → 3101). Напиши скрипт extract.py: читает файлы из input (исходники не меняет), применяет справочник, склеивает, считает отклонение и точность, пишет data.json и печатает в консоль итог факта, прогноза и число строк без пары. Пути — относительно папки скрипта.

Create a lookup mapping.csv: city code → name (VTR → Vetrovsk) and old SKU code → new (3001 → 3101). Write extract.py: reads files from input (never changes the sources), applies the lookup, joins, calculates deviation and accuracy, writes data.json and prints the actuals total, forecast total and number of unmatched rows. Paths relative to the script folder.

Шаг 4. Сборка дашбордаStep 4. Build the dashboard

Напиши build_dashboard.py: берёт data.json и собирает один файл Dashboard_plan_fakt_2026-10.html. Вверху три плитки: факт, прогноз, точность. Ниже — таблица город × SKU: прогноз, факт, отклонение в %, большие отклонения выделить. Фильтр по городу. Всё внутри одного файла, без интернета. Единицы — тысячи литров.

Write build_dashboard.py: takes data.json and builds one file Dashboard_plan_actual_2026-10.html. At the top three tiles: actuals, forecast, accuracy. Below — a city × SKU table: forecast, actuals, deviation in %, large deviations highlighted. A city filter. Everything inside one file, no internet. Units — thousand litres.

Шаг 5. Кнопка и пересборкаStep 5. The button and rebuilding

Сделай RUN_dashboard.bat: только латиница, переходит в свою папку (cd /d "%~dp0"), запускает extract.py, потом build_dashboard.py, в конце pause. Запусти его и покажи, что напечаталось. С этого момента после любой правки скриптов запускай .bat заново и проверяй HTML, а не только data.json.

Make RUN_dashboard.bat: Latin characters only, changes to its own folder (cd /d "%~dp0"), runs extract.py then build_dashboard.py, ends with pause. Run it and show the output. From now on, after any script change, run the .bat again and check the HTML, not just data.json.

Шаг 6. Документация для коллегStep 6. Documentation for colleagues

Напиши README.md: что делает отчёт, куда класть выгрузки, как запустить, что проверить после запуска (итог факта = эталону). Добавь DATA_DICTIONARY.md: колонки, единицы, справочник кодов. И CHANGELOG.md с сегодняшней записью. Простым языком, для коллеги, который видит папку впервые.

Write README.md: what the report does, where to put exports, how to run it, what to check afterwards (actuals total = reference). Add DATA_DICTIONARY.md: columns, units, the code lookup. And CHANGELOG.md with today's entry. Plain language, for a colleague seeing the folder for the first time.

Ловушка, на которую наступают всеThe trap everyone falls into Поправили скрипт извлечения, проверили data.json — «всё верно». А дашборд показывает старое: его не пересобрали. Правка не видна в HTML, пока не запущен build. Поэтому всегда запускайте .bat целиком. You fixed the extraction script, checked data.json — "all correct". But the dashboard shows old numbers: it wasn't rebuilt. A change doesn't reach the HTML until build runs. So always run the whole .bat.
6

Контрольные точки и ключCheckpoints and the key

Как считать. Отклонение = (факт − прогноз) ÷ прогноз. Точность = 1 − (сумма |факт − прогноз| по всем строкам город × SKU) ÷ (сумма факта). Это одно из распространённых определений: ошибки в разные стороны не гасят друг друга, а крупные строки весят больше мелких.

How to calculate. Deviation = (actual − forecast) ÷ forecast. Accuracy = 1 − (sum of |actual − forecast| over all city × SKU rows) ÷ (sum of actuals). This is one common definition: errors in opposite directions don't cancel out, and large rows weigh more than small ones.

Пример на одной строке: прогноз 120, факт 132 → ошибка 12. Если бы это была вся компания, точность = 1 − 12 ÷ 132 = 90,9 %.

One-row example: forecast 120, actual 132 → error 12. If that were the whole company, accuracy = 1 − 12 ÷ 132 = 90.9%.

1 287факт, тыс. л = эталонactuals, k L = reference
1 280прогноз, тыс. л; отклонение +0,5 %forecast, k L; deviation +0.5%
91,2 %точность (сумма ошибок 113)accuracy (sum of errors 113)
🔑 Ключ: города, SKU и две ловушки🔑 Key: cities, SKUs and two traps
ГородCityПрогнозForecastФактActualОткл.Dev.ТочностьAccuracy
ВетровскVetrovsk520515−1,0 %91,7 %
БереговойBeregovoy340352+3,5 %91,5 %
КаменскKamensk250245−2,0 %89,8 %
ГорныйGorny170175+2,9 %91,4 %
ИтогоTotal1 2801 287+0,5 %91,2 %
SKUПрогнозForecastФактActualОткл.Dev.
Вода 0,5Water 0.5300309+3,0 %
Вода 1,5Water 1.5440439−0,2 %
Лимонад 0,5Lemonade 0.5220218−0,9 %
Кола 1,0Cola 1.0170177+4,1 %
Сок яблочный 1,0 (3001 → 3101)Apple juice 1.0 (3001 → 3101)150144−4,0 %

Ловушка 1 — код города. В продажах Ветровск записан как «VTR», в прогнозе — «Ветровск». Склейка по городу его не находит.

Trap 1 — city code. Sales list Vetrovsk as "VTR", the forecast as "Vetrovsk". A join on city doesn't find it.

Ловушка 2 — смена кода SKU. Сок в прогнозе под старым кодом 3001, в продажах — под новым 3101. Товар тот же, код другой.

Trap 2 — SKU code switch. Juice is under the old code 3001 in the forecast and the new code 3101 in sales. Same product, different code.

Что будет, если не поймать: склеятся только 12 строк из 20, итог факта после склейки — 682 вместо 1 287 (сверка на шаге 2 это ловит). А если оставить строки без пары с нулями, точность выйдет 1,1 % вместо 91,2 % — «прогноз ужасный», хотя ошибка в кодах.

What happens if you miss them: only 12 of 20 rows match, the actuals total after the join is 682 instead of 1,287 (the step-2 check catches this). And if you keep unmatched rows with zeros, accuracy comes out at 1.1% instead of 91.2% — "the forecast is terrible", although the error is in the codes.

7

Тренажёр: что пошло не так?Drill: what went wrong?

Для каждого симптома выберите вероятную причину.

For each symptom choose the likely cause.

8

Результат: что получают коллегиThe result: what colleagues get

ФайлFileДля чегоPurpose
input/сюда каждый месяц кладут новые выгрузкиnew exports go here every month
mapping.csvсправочник кодов; новую смену кода дописывают сюда, а не в скриптthe code lookup; a new code switch is added here, not in the script
RUN_dashboard.batдвойной щелчок — данные и дашборд пересобраныdouble click — data and dashboard rebuilt
Dashboard_…htmlоткрывается в браузере у любого коллеги из общей папкиopens in any colleague's browser from the shared folder
README.mdкак запустить и что проверить — чтобы отчёт жил без автораhow to run and what to check — so the report lives without its author
Как это было в жизниHow it went in real life Первый такой дашборд занимает день-два разговоров с Claude: большая часть времени уходит на шаги 1–2 — понять файлы и найти, почему не сходится. Каждый следующий месяц — двойной щелчок и пять минут на сверку итога. The first dashboard like this takes a day or two of conversation with Claude: most of the time goes on steps 1–2 — understanding the files and finding why totals don't match. Every following month — a double click and five minutes to check the total.
9

Уровень 2: ночная пересборка и уведомлениеLevel 2: nightly rebuild and a notification

Когда отчёт стабилен, его можно пересобирать ночью и получать короткое сообщение утром. Схема:

Once the report is stable, it can rebuild overnight and send you a short message in the morning. The pattern:

  1. Планировщик заданий Windows запускает RUN_dashboard.bat ночью (компьютер должен быть включён).
  2. В конце скрипт отправляет сообщение в Telegram-бот или письмо: «Пересборка ОК: факт 1 287, точность 91,2 %» — или «Упал шаг 2: строки без пары».
  3. Токен бота или пароль почты хранится в отдельном файле настроек вне общей папки, не в скрипте.
  4. Канал односторонний: отвечать в Telegram бесполезно — правки вы делаете в Claude.
  1. Windows Task Scheduler runs RUN_dashboard.bat at night (the computer must be on).
  2. At the end the script sends a Telegram bot message or an email: "Rebuild OK: actuals 1,287, accuracy 91.2%" — or "Step 2 failed: unmatched rows".
  3. The bot token or mail password lives in a separate settings file outside the shared folder, not in the script.
  4. The channel is one-way: replying in Telegram does nothing — you make changes in Claude.
Запрос для уровня 2Level 2 request

Добавь в конец пересборки уведомление: при успехе — итог факта, прогноза и точность; при ошибке — номер шага и текст ошибки. Настройки (токен, адрес) читай из файла в моей личной папке, путь не зашивай в скрипт. Покажи, как поставить .bat в Планировщик заданий на 06:00.

Add a notification at the end of the rebuild: on success — actuals, forecast and accuracy; on failure — the step number and error text. Read settings (token, address) from a file in my personal folder, don't hard-code the path. Show how to schedule the .bat in Task Scheduler at 06:00.

10

Частые ошибкиCommon mistakes

ОшибкаMistakeКак правильноDo this instead
Сразу просить «сделай дашборд»Asking "make a dashboard" straight awayСначала шаги 1–2: файлы поняты, итог сошёлся с эталономSteps 1–2 first: files understood, total matches the reference
Верить низкой точности без проверкиTrusting low accuracy without checkingПосмотреть строки без пары — часто это коды, а не прогнозLook at unmatched rows — often it's codes, not the forecast
Зашить соответствие кодов в скриптHard-coding code mappings in the scriptДержать в mapping.csv — его поправит любой коллегаKeep them in mapping.csv — any colleague can edit it
Проверять data.json вместо дашбордаChecking data.json instead of the dashboardПосле правки — весь .bat и открыть HTMLAfter a fix — run the whole .bat and open the HTML
Путь вида C:\Users\Имя\… в скриптеA path like C:\Users\Name\… in the scriptПути от папки скрипта — тогда работает с любого ноутбукаPaths relative to the script folder — then it works on any laptop
11

Что запомнить: отметьте галочкойWhat to remember: tick it off

12

Проверьте себяCheck yourself

13

ШпаргалкаCheat sheet

ПорядокOrderпонять → сверить → извлечь → собрать → кнопка → описатьunderstand → reconcile → extract → build → button → document
Стоп-сигналStop signalитог факта после склейки ≠ эталонуactuals total after the join ≠ reference
ОтклонениеDeviation(факт − прогноз) ÷ прогноз(actual − forecast) ÷ forecast
ТочностьAccuracy1 − Σ|факт − прогноз| ÷ Σ факта, по строкам город × SKU1 − Σ|actual − forecast| ÷ Σ actuals, over city × SKU rows
Две ловушкиTwo trapsкод города вместо названия; смена кода SKUa city code instead of a name; an SKU code switch
ПересборкаRebuildпосле любой правки — весь .bat и открыть HTMLafter any fix — the whole .bat and open the HTML
Итог урокаLesson summary Дашборд план-факт с Claude Code строится в шесть шагов, и самые важные — первые два: понять файлы и сверить итог с эталоном до всякой красоты. Ловушки склейки — коды городов и смены кодов SKU — держите в справочнике, а не в голове. После каждой правки пересобирайте всё одной кнопкой и описывайте отчёт так, чтобы его запустил любой коллега. A plan-vs-actual dashboard with Claude Code takes six steps, and the first two matter most: understand the files and reconcile the total with the reference before anything pretty. Keep join traps — city codes and SKU code switches — in a lookup, not in your head. After every fix rebuild everything with one click, and document the report so any colleague can run it.
Made on
Tilda