feat(ct-math): каркас курса ЦЭ/ЦТ на банке questions (темы + draft-курс + секции)

- backend/scripts/seed_ctmath_course.js — идемпотентный аддитивный seed:
  +6 тем (Преобразование выражений/Модуль/Иррациональные ур./Показательные ур./
  Производная/Параметры), DRAFT-курс «ЦЭ/ЦТ — Математика» + 9 секций.
  Применён на живой БД: course id=13 (is_published=0), topics 72-77, sections 27-35.
  Существующие данные не тронуты; повторный запуск ничего не дублирует.
- BUILD_ON_QUESTIONS.md: уточнения инспекции банка (year=2025 = «Экзамен 9»,
  без тем; реальный ЦТ-11 = ~733 размеч., Часть B = fill-blank → гоча mode='ct')
  + блок «Состояние реализации».
- README: статус каркаса.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-14 22:10:22 +03:00
parent 055a6cd1a4
commit c3816baf99
3 changed files with 121 additions and 9 deletions
+18 -1
View File
@@ -13,6 +13,17 @@
---
## 0. Состояние реализации
**Сделано (скрипт `backend/scripts/seed_ctmath_course.js`, идемпотентный, применён на живой БД 2026-06-14):**
- ✅ Добавлены 6 тем (`topics`, subject_id=3): Преобразование выражений (72), Модуль (73), Иррациональные уравнения (74), Показательные уравнения (75), Производная (76), Параметры (77).
- ✅ Создан **DRAFT-курс** «ЦЭ/ЦТ — Математика» (`courses.id=13`, `is_published=0`, created_by=2) — ученикам НЕ виден до публикации.
- ✅ 9 секций (`course_sections.id=27..35`) = блоки IIX.
**Дальше (не сделано):** уроки (`lesson_blocks`) по пилотам; диагностический `test`; assignment-практика `mode='topic'`; колоды формул; публикация курса. См. §8.
---
## 1. Что уже есть (проверено чтением БД)
| Таблица | Роль | Факт |
@@ -26,6 +37,12 @@
| `courses`/`course_sections`/`lessons`/`lesson_blocks` | теория | общий слой контента |
| `flashcard_*` | карточки + SR | для формул |
### 1.1. Уточнение по инспекции (2026-06-14) — ВАЖНО
Из 1753 матем. заданий:
- **~733 — реальный банк ЦЭ/ЦТ-11** (20112024), **размечены по темам**. Часть A = `single`, **Часть B = `fill-blank`** (198 шт.), `short_answer` у них НЕТ. **Это база курса.**
- **1020 — набор `year=2025`, `source_type='экзамен 9'` = «Экзамен 9 класс», БЕЗ тем** (`topic_id` пустой), все `difficulty=1`, типы `single`+`short_answer`. Это контент 9-класса (из него собраны тесты «Экзамен 9 — Вариант N»). **Для курса ЦЭ/ЦТ-11 — НЕ основа** (другой экзамен/класс; не размечен).
**Типы заданий (`questions.type`)**: `single`, `multi`, `true_false`, `short_answer`, `matching`, `fill-blank`.
**Сложность**: `difficulty` 13 (CHECK), 1=базовый/2=средний/3=продвинутый. (В [PLAN.md](PLAN.md) шкала 1–5 — привести к 1–3: А-часть и лёгкая В = 1, средняя В = 2, сложная В14–В20 = 3.)
**Год**: `year` (2011…2025) — фильтр по году/варианту.
@@ -39,7 +56,7 @@
Логика `assignmentController.startAssignment` (подтверждено по коду):
- **`mode='ct'`** — собирает ЦТ-вариант: ~половина из `type IN ('single','true_false')` (Часть A) + остаток из `type IN ('multi','short_answer')` (Часть B), добор при нехватке. **Это готовый «пробник» формата ЦТ.** Можно ограничить `topic_id`.
- **`mode='ct'`** — собирает ЦТ-вариант: ~половина из `type IN ('single','true_false')` (Часть A) + остаток из `type IN ('multi','short_answer')` (Часть B), добор при нехватке. ⚠️ **Гоча:** реальный банк ЦТ-11 имеет Часть B типа **`fill-blank`**, который `mode='ct'` НЕ выбирает (он ждёт `short_answer`) → для ЦТ-11 Часть B соберётся только «добором». `mode='ct'` хорошо ложится на набор «Экзамен 9» (там Часть B = `short_answer`). **Для ЦТ-11 надёжнее `mode='topic'` или ручная сборка `test` (single + fill-blank).**
- **`mode='topic'`** — `SELECT id FROM questions WHERE subject_id=3 AND topic_id=? ORDER BY RANDOM() LIMIT count`. **Тренажёр по теме модуля.**
- **`mode='exam'|'practice'|'repeat'`** — случайные `count` по предмету (или теме).
- **`test_id` задан** — берутся ИМЕННО вопросы теста в его порядке (перекрывает режим). **Так делается фиксированная диагностика.**
+10 -8
View File
@@ -40,12 +40,14 @@
## Статус
ПЛАН переориентирован на банк `questions` (пивот). Закоммичено в master (`7eb6cb2`): PLAN, TOPICS_SEED,
два пилота, DIGITIZATION_SPEC, RESOURCES, миграция 077. Добавлен BUILD_ON_QUESTIONS.md + примечания-пивот
(этот коммит). Миграция 077 в БД **не применялась**; ничего в живой БД не менялось.
ПЛАН на банке `questions` (пивот). **Каркас курса создан в живой БД** (скрипт
`backend/scripts/seed_ctmath_course.js`, идемпотентный): 6 новых тем (id 7277), DRAFT-курс
«ЦЭ/ЦТ — Математика» (`courses.id=13`, не опубликован) + 9 секций (id 27–35). Существующие данные
не тронуты. Миграция 077 (exam-prep) в БД не применялась.
Следующий конкретный шаг на выбор:
- добавить недостающие `topics` (миграция/скрипт) и собрать каркас курса;
- собрать диагностический `test` из реальных вопросов банка;
- детализировать ещё блок теории (уравнения/неравенства или функции+производная);
- закоммитить изменения этого захода.
Реализация (BUILD_ON_QUESTIONS §8): ✅1 темы · ✅2 каркас курса · ⬜3 диагностика · ⬜4 уроки · ⬜5 пробники · ⬜6 карточки/публикация.
Следующий шаг на выбор:
- собрать диагностический `test` из реальных вопросов банка (по 1 на тему);
- наполнить уроки первого блока (стерео/тригонометрия) по пилотам;
- настроить практику `mode='topic'` по темам.