{% set ns = namespace(last_pid=None) %}
{% for subject, groups in grouped.items()|sort %}
Subject: {{ subject }}
{% for group, qs in groups.items()|sort %}
Group: {{ group }}
{% for q in qs|sort(attribute='question_number') %}
{# ---------- Reading passage: print once when it changes ---------- #}
{% if q.passage_id and q.passage_id != ns.last_pid %}
{% set _p = get_passage(q.passage_id) %}
{% if _p and _p.content %}
{% if q.marks %}
{{ q.marks }} marks
{% endif %}
{% if q.paper %}
{{ q.paper }}
{% endif %}
{% if q.syllabus_code %}
{{ q.syllabus_code }}
{% endif %}
{% set _et = (q.exam_type or 'open')|lower %}
{% if _et != 'open' %}
{{ _et|capitalize }}
{% endif %}
{% if q.source %}
{% set _src_parts = [] %}
{% for _s in q.source.split('\n') %}
{% if _s.strip() and _s.strip() not in _src_parts %}
{% set _ = _src_parts.append(_s.strip()) %}
{% endif %}
{% endfor %}
{% if _src_parts %}
{% set seen_answers = [] %}
{% for pair in q.pairs %}
{% if pair.answer not in seen_answers %}
{% set _ = seen_answers.append(pair.answer) %}
{% endif %}
{% endfor %}
{% for ans in seen_answers|sort %}
{{ ans }}
{% endfor %}
{% for pair in q.pairs %}
{{ pair.subquestion }}
โ
{{ pair.answer }}
{% endfor %}
{% endif %}
{# ---------- General feedback (answer mode only) ---------- #}
{% if q.general_feedback %}