Methodology: mapping FIPI bank items to official EGE task numbers
Question this answers: the open FIPI task bank tags every question with a КЭС (content codifier, e.g. 7.1 Фигуры на плоскости) and an answer type (Краткий ответ / Развёрнутый ответ) — but it does not tag items with the official exam task number (№1 through №20). Ivan needs a "Номер задания ЕГЭ" filter in the dashboard, so this document derives that mapping from FIPI's own official specification and codifier documents, and is honest about where the derivation is exact vs. where it's a best-effort grouping.
This is the 2027-methodology version. FIPI's 2027 profile-level math exam restructures the task list from 19 to 20 tasks (13 short-answer + 7 long-answer, vs. 2026's 12 + 7) — see "What changed vs. 2026" below. The prior 19-task mapping is preserved in git history (the version of this file and scraper/assign_task_numbers.py before this rewrite).
Sources (official, 2027 profile-level math — "ПРОЕКТ" draft documents published by Rosobrnadzor), re-hosted so you can open them directly — also see the "Методология" page on the dashboard, which links every one of these plus the same set for 2026 and for biology:
- «Спецификация КИМ ЕГЭ 2027 г. МАТЕМАТИКА, 11 класс. Профильный уровень» (2027 PDF, 2026 PDF) — has the "Обобщённый план варианта КИМ ЕГЭ 2027 года" table (Приложение), which lists, for each of the 20 task numbers: the checked requirement codes, the content-element code(s) (one or more digits 1–7, matching the top-level codifier sections below), difficulty level (Б/П/В), max score, and part of the exam (part 1 = tasks 1–13 = Краткий ответ; part 2 = tasks 14–20 = Развёрнутый ответ).
- «Кодификатор ЕГЭ 2027 г. МАТЕМАТИКА, 11 класс» (2027 PDF, 2026 PDF) — Раздел 2 lists every codifier subtopic (e.g. 7.1, 7.2, ... 6.1, 6.2, 6.3) with its full name. This is what the live bank filter's theme values (and our scraped codifiers column) actually are.
- Демонстрационный вариант (2027 PDF, 2026 PDF) — a full real example exam with answer key, profile level only (базовый uровень demo was fetched too but isn't relevant to math_ege_profil and wasn't kept).
- Cross-checked against the current DB's real codifiers distributions (see queries below) — used to confirm which subtopic combinations actually occur in scraped items, not just what the spec theoretically allows.
- Supplementary (third-party, not FIPI, useful for worked solutions/answer keys on the 2027 profile demo): math100.ru's 2027 demo variant with scoring criteria and answers (Ivan, 2026-09-15).
What changed vs. 2026
The 2027 spec adds a genuinely new content area and reshuffles the task order — this is not a uniform "+1 shift":
- New task 6: "случайная величина, распределение вероятностей, математическое ожидание, дисперсия" (random variables / distributions / expectation / variance) — a brand-new probability-and-statistics topic, inserted after tasks 4/5 (classic probability). Codifier-wise this belongs under 6.1 Описательная статистика, distinct from 6.2 Вероятность (tasks 4/5).
- New task 13: "personal/family finance and modeling" word problems with content spanning sections 1–3, moved to the short-answer part. In 2026 this exact content combination ({1,2,3}, part 2) was long-answer task 16.
- The old content-4-only short-answer task (2026's task 12) no longer exists as its own number — 2027's task 9 absorbs both {3,4} combined and bare {4} content under one number.
- Everything else in the develop (long-answer) part shifted by a uniform +1 (old 13→14, 14→15, 15→16, 16→17, 17→18, 18→19, 19→20) since task 13 pushed the short-answer part from 12 to 13 tasks.
The core limitation, stated upfront
The specification's task table only records the content-element code(s) at the section level (a bare 7 for any geometry task, 2 for any equations/inequalities task, etc.) — never the specific subtopic (7.1 vs 7.2), and never a difficulty level in a form the open bank exposes per item. The open bank's own per-question info panel only ever shows two things: КЭС (which can go down to subtopic level, e.g. 7.1) and Тип ответа. It has no "level" or "task number" field at all.
This means:
- Where a task's qualitative description in the spec clearly points at one specific subtopic (e.g. task 1's description says "теоремы планиметрии", which is unambiguously subtopic 7.1, not 7.2–7.4 which are 3D), we can assign that task number with high confidence.
- Where several task numbers share the exact same content-section code(s) and the exact same answer type (the only two things the bank tells us), they are not distinguishable from bank metadata alone — no amount of clever parsing recovers information FIPI didn't record. We group these task numbers together rather than pretend to split them.
Geometry (content-element code 7) — the exact, high-confidence part
| Task № | Answer type | Spec description (quoted) | Codifier subtopic(s) | Confidence |
|---|---|---|---|---|
| 1 | Краткий ответ | "плоский угол, площадь фигуры, подобные фигуры... факты и теоремы планиметрии" | 7.1 Фигуры на плоскости |
Exact |
| 2 | Краткий ответ | "вектор, координаты вектора, сумма векторов, произведение вектора на число, скалярное произведение, угол между векторами" | 7.5 Координаты и векторы |
Exact — vectors are the only content of 7.5. |
| 3 | Краткий ответ | "точка, прямая, плоскость... двугранный угол... расстояние между плоскостями... объём" | 7.2 Прямые и плоскости в пространстве, 7.3 Многогранники, 7.4 Тела и поверхности вращения (any of these three) |
Exact as a group — "basic stereometry" spans all three 3D subtopics; the spec doesn't further split them, and neither does the bank. |
| 15 | Развёрнутый ответ | Same content code (7) and same requirement codes as task 3, but part 2 (proof-style, П level, score 3) | Same as task 3: 7.2/7.3/7.4 |
Exact — separable from task 3 purely by answer_type = Развёрнутый ответ. |
| 18 | Развёрнутый ответ | "точка, прямая, отрезок, луч, величина угла... факты и теоремы планиметрии" | 7.1 Фигуры на плоскости |
Exact — separable from task 1 purely by answer_type = Развёрнутый ответ. |
Everything else — best-effort grouping, documented per bucket
For content sections 1–6, multiple task numbers frequently share identical (content-code, answer-type) pairs. Where that happens, we cannot split them further, so the filter groups them and labels the group honestly (e.g. "Задания 7, 10, 11") rather than guessing.
| Task number(s) | Content section | Answer type | Why grouped (or not) |
|---|---|---|---|
| 8 | 1 (Числа и вычисления) | Краткий | Only task using content 1 alone — no grouping needed. |
| 7, 10, 11 | 2 (Уравнения и неравенства) | Краткий | All three are content-code 2, part 1 (краткий). Task 7 is "solve an equation" (Б level), 10/11 are "word problem → equation" (П level) — a real pedagogical difference, but not one the codifier or answer-type records. |
| 14, 16 | 2 | Развёрнутый | Both content-code 2, part 2, both П level, both worth 2 points — identical on every field the bank exposes. |
| 12 | 3 (Функции и графики) | Краткий | Pure-content-3 краткий task (task 9 also touches content 3, but combined with 4 — see below). Real bank items whose codifier spans more than one of {1,2,3} without matching a single-section rule are folded into the extended "7,10,11,13" bucket rather than left unclassified, since they clearly live in the same part-1 algebra/functions territory. |
| 9 | 3, 4 (combined, or 4 alone) | Краткий | Task 9's own spec description spans both sections (tangent line = 3, derivative/extrema/integral = 4). 2027 dropped 2026's separate content-4-only task (old 12) — a real item tagged only 4.x has nowhere else to go, so it's folded into 9 as the sole plausible destination, even though the spec's own literal declaration for 9 is the joint pair {3,4}, not bare {4}. |
| 4, 5 | 6 (Вероятность и статистика) | Краткий | Same content code (6.2 Вероятность), same answer type; differ only by Б vs П level, which isn't recorded. Task 6 is deliberately excluded from this group — see "Task 6 gap" below. |
| 13 | 1, 2, 3 (combined) | Краткий | New in 2027: personal-finance/modeling word problems, moved here from 2026's long-answer task 16. Exact — no other short-answer task claims this exact triple. |
| 17 | 1, 2, 3, 4 (combined) | Развёрнутый | Modeling problems using algebra and calculus together, incl. cross-subject word problems; broader than 2026's task-16 content (which was {1,2,3} only, now task 13's short-answer domain). |
| 19 | 2, 3, 4 (combined) | Развёрнутый | Parameter problems draw on equations + functions + calculus together. |
| 20 | 1, 2, 5 (combined) | Развёрнутый | Number theory / proof problems; spans arithmetic, equations, and logic content codes. |
| 17 (residual) | any subset of {1,2,3} not equal to the full triple, Развёрнутый | Same "modeling word problem" territory as task 17, just a partial codifier combo not matching any of the exact rules above — grouped under 17 rather than left unclassified. |
Task 6 gap: a genuinely new content area with zero matching items today
Task 6 ("случайная величина, распределение вероятностей, математическое ожидание, дисперсия") is entirely new to the 2027 spec. Its natural codifier home is 6.1 Описательная статистика (or, less likely, 6.3 Комбинаторика), distinct from 6.2 Вероятность where tasks 4/5 live.
Checked directly against the database: every single probability-content item currently in the bank (110 of them) is tagged 6.2 Вероятность — zero items carry 6.1 or 6.3 tags, and a text search for математическое ожидание / дисперси / стандартное отклонение among 6.2-tagged items returns zero matches. This confirms FIPI's open item bank simply hasn't published any items covering this new 2027 content yet (unsurprising — it's a forward-looking draft spec for an exam that hasn't happened). assign_task_numbers.py reflects this honestly: it groups only 4 and 5 under ege_task_group='4,5', leaving task 6 with no items rather than diluting the group with a guess. Re-run the classifier once FIPI publishes bank items with 6.1/6.3 tags (they'll likely need their own dedicated exact-match rule at that point, not a group).
Implementation
scraper/assign_task_numbers.py applies this table as a rule engine over the codifiers + answer_type columns already in the database (no re-scraping needed — this is a pure derived classification), writing:
- questions.ege_task_number — a single int when the mapping is exact (1, 2, 3, 8, 9, 12, 13, 15, 17, 18, 19, 20), NULL when it's a group
- questions.ege_task_group — e.g. '7,10,11' when the item falls into a grouped bucket, NULL when exact
- questions.ege_task_confidence — 'exact' or 'grouped'
The dashboard's "Номер задания ЕГЭ" filter shows all 20 numbers; picking a grouped one (e.g. "10") filters by ege_task_group containing that number and the UI shows a note that this bucket is shared with the other numbers listed. Picking an exact one filters by ege_task_number = N and shows no caveat. Task 6 shows up with zero items until FIPI publishes matching bank content.
Re-run assign_task_numbers.py any time the mapping table above is revised (e.g. if FIPI finalizes the 2027 spec with changes from this draft) — it's idempotent, just re-derives and overwrites these three columns for every row.