| name | oge-tasks |
| description | Use when working with OGE task data — creating/editing JSON task files, working with TaskDataService, adding new topics, or debugging task display. Covers OGE task architecture, JSON structure, and task types. |
OGE Task Architecture
Единый источник данных (Single Source of Truth)
Все задания хранятся в JSON-файлах и управляются через TaskDataService.
storage/app/tasks/
├── topic_06.json # Дроби и степени
├── topic_07.json # Числа, координатная прямая
├── topic_08.json # Квадратные корни
├── ...
└── topic_19.json # Геом. высказывания
TaskDataService — Центральный сервис
Файл: app/Services/TaskDataService.php
$service = app(TaskDataService::class);
$blocks = $service->getBlocks('06');
$meta = $service->getTopicMeta('06');
$stats = $service->getTopicStats('06');
$tasks = $service->getRandomTasks('06', count: 3);
$service->saveTopicData('06', $data);
$service->clearCache();
Структура JSON-файла темы
{
"topic_id": "06",
"blocks": [{
"number": 1,
"title": "ФИПИ",
"zadaniya": [{
"number": 1,
"instruction": "Найдите значение выражения",
"type": "expression",
"tasks": [{
"id": 1,
"expression": "\\frac{3}{4} \\cdot \\frac{6}{5}",
"answer": "0.9"
}]
}]
}]
}
Типы заданий (type)
| Тип | Описание | Темы |
|---|
expression | Вычисление выражения | 06, 08 |
choice | Выбор из вариантов | 07 |
simple_choice | Простой выбор | 07 |
fraction_choice | Выбор дроби | 07 |
interval_choice | Выбор интервала | 07 |
matching | Соответствие графиков | 11 |
matching_signs | Соответствие знаков | 11 |
word_problem | Текстовая задача | 10, 14 |
geometry | Геометрия | 15, 16, 17 |
grid | Клетчатая бумага | 18 |
statements | Анализ утверждений | 19 |
Статус базы заданий
| Тема | Готово? | Примечание |
|---|
| 06 Дроби и степени | ✅ | |
| 07 Числа, координатная прямая | ✅ | |
| 08 Квадратные корни | ✅ | |
| 09 Уравнения | ✅ | |
| 10 Теория вероятностей | ✅ | |
| 11 Графики функций | ✅ | SVG графики |
| 12 Расчёты по формулам | ✅ | |
| 13 Неравенства | ✅ | |
| 14 Прогрессии | ✅ | |
| 15 Треугольники | ✅ | Static SVG |
| 16 Окружность | ✅ | Static SVG |
| 17 Четырёхугольники | ✅ | |
| 18 Фигуры на клетчатой бумаге | ✅ | |
| 19 Анализ геом. высказываний | ✅ | |
| 01-05 Комплексные | ⏳ | |
| 20-23 | ⏳ | |
| 24 Геом. задача на доказательство | 🟡 | Блок 1 ФИПИ, 15 серий = 50 задач, draft. Доказательства — answer пустой. У каждой серии teacher-only solution (SVG-чертёж + разбор, прототипы Школково). Подключено в Part 2 (chip 24, allow-list, ShortLabels). Генератор — build_topic24.py. Блок 2 «Расширенная версия» убран по требованию |
| 25 Геом. задача повыш. сложности | 🟡 | Блок 1 ФИПИ (90 задач, draft). Ответы — compute_topic25_answers.py. Без SVG, Блок 2 не внесён |
Роуты
Route::get('/topics', [TopicController::class, 'index']);
Route::get('/topics/{id}', [TopicController::class, 'show']);
Route::get('/test', [TestPdfController::class, 'index']);
Route::get('/test/{id}', [TestPdfController::class, 'topic']);
Route::get('/oge', [TestPdfController::class, 'ogeGenerator']);
Route::get('/oge/{hash}', [TestPdfController::class, 'showOgeVariant']);
Генератор вариантов ОГЭ
/oge — страница генератора
/oge/{hash} — вариант (10-символьный хэш, детерминированный через mt_srand(crc32(hash)))
Views
resources/views/
├── topics/show.blade.php # Унифицированная страница темы
├── layouts/topic.blade.php # Layout для страниц тем
├── components/task-review-tool.blade.php # Инструмент проверки
└── test/oge-variant.blade.php # Вариант ОГЭ
KaTeX: Отображение формул
Все дроби автоматически получают \displaystyle для крупного отображения.
Как добавить новые задания
- Создать/отредактировать
storage/app/tasks/topic_{id}.json
- Следовать структуре данных (см. выше)
- Очистить кэш:
php artisan cache:clear
- Для изображений —
public/images/tasks/{topic_id}/
ВАЖНОЕ ПРАВИЛО: Соответствие PDF-источникам
- Номера заданий ТОЧНО соответствуют PDF — нельзя менять для "красоты"
- Текст заданий = текст из PDF — формулировки, числа, ответы
- Порядок разделов по номерам заданий — разделы по возрастанию, но номера не менять
PDF-источники
Директория: pdf-sources/oge-trainer/ (в .gitignore)
Референсные изображения: docs/oge_data/images/
Формат имён: oge{номер_темы}_p{страница}_img{номер}.png