{w.listening.parts.length} part{w.listening.parts.length !== 1 ? "s" : ""} · {totalQ} total questions · Exam type: {w.exam_type}
{w.reading.passages.length} {passageLabel.toLowerCase()}{w.reading.passages.length !== 1 ? "s" : ""} · {totalQ} total questions · Exam type: {w.exam_type}
{w.writing.tasks.length} task{w.writing.tasks.length !== 1 ? "s" : ""} · Scored by rubric · Exam type: {w.exam_type}
{w.speaking.parts.length} part{w.speaking.parts.length !== 1 ? "s" : ""} · {totalMin}-{totalMax} minutes total
{total} total questions · {w.level.length} exercise type{w.level.length !== 1 ? "s" : ""}
{total} total questions · Difficulty: {w.industryModule.difficulty}
{w.listening.parts.length} parts · {listeningTotal} total questions
{w.listening.parts.map((p, i) => (P{i + 1}: {p.label} — {sumQTypes(p.question_types)} questions
))}{w.reading.passages.length} passages · {readingTotal} total questions
{w.reading.passages.map((p, i) => ({w.exam_type === "academic" ? "Passage" : "Section"} {i + 1}: {p.style} — {sumQTypes(p.question_types)} questions
))}{w.writing.tasks.length} task{w.writing.tasks.length !== 1 ? "s" : ""}
{w.writing.tasks.map((t, i) => ({t.label}: {lookupLabel(t.type, ALL_WRITING_TASK_TYPES)} (min {t.min_words} words)
))}{w.speaking.parts.length} parts · {speakMin}-{speakMax} minutes
{w.speaking.parts.map((p, i) => (Part {i + 1}: {p.label} ({p.duration_min}-{p.duration_max} min)
))}{levelTotal} total questions · {w.level.length} types
{w.level.map((e, i) => ({lookupLabel(e.type, LEVEL_EXERCISE_TYPE_POOL)}: {e.quantity}
))}{industryTotal} total questions · Difficulty: {w.industryModule.difficulty}
{w.industryModule.entries.map((e, i) => ({lookupLabel(e.type, INDUSTRY_EXERCISE_TYPE_POOL)}: {e.quantity}
))}Define exam structure templates by entity and industry.