Cas {{ loop.index }}
{{ uca.topic }}
{% set score_pct = (uca.auto_score / uca.max_score * 100)|int if uca.max_score > 0 else 0 %}
{{ "%.2f"|format(uca.auto_score) }}/{{ uca.max_score|int }}
Réponses cochées vs attendues
{% if uca.propositions %}
{% for item in uca.propositions %}
{% if item.result == 'tp' %}
{# True positive: checked AND correct → green #}
✓
{{ item.text }}
✓ Correct coché
{% elif item.result == 'fp' %}
{# False positive: checked but NOT correct → red (penalty) #}
✗
{{ item.text }}
✗ Faux coché (−pénalité)
{% elif item.result == 'fn' %}
{# False negative: NOT checked but WAS correct → orange (missed) #}
○
{{ item.text }}
⚠ Oublié (attendu)
{% else %}
{# True negative: NOT checked AND NOT correct → neutral/slate #}
○
{{ item.text }}
Correct ignoré
{% endif %}
{% endfor %}
{% set tp_count = uca.propositions | selectattr('result', 'equalto', 'tp') | list | length %}
{% set fp_count = uca.propositions | selectattr('result', 'equalto', 'fp') | list | length %}
{% set fn_count = uca.propositions | selectattr('result', 'equalto', 'fn') | list | length %}
{% set correct_count = uca.propositions | selectattr('correct', 'equalto', true) | list | length %}
✓ {{ tp_count }}/{{ correct_count }} corrects cochés
{% if fp_count > 0 %}
✗ {{ fp_count }} faux positif{% if fp_count > 1 %}s{% endif %}
{% endif %}
{% if fn_count > 0 %}
⚠ {{ fn_count }} oublié{% if fn_count > 1 %}s{% endif %}
{% endif %}
{% else %}
(Aucune réponse fournie)
{% endif %}