Add help tags for enhanced user guidance in templates and improve feedback descriptions in models
This commit is contained in:
+3
-2
@@ -545,11 +545,12 @@ class UserAnswer(UserAnswerBase):
|
||||
|
||||
# If score is null then the answer is unmarked
|
||||
score = models.IntegerField(
|
||||
default=0, blank=True, validators=[MinValueValidator(0), MaxValueValidator(5)], null=True
|
||||
default=0, blank=True, validators=[MinValueValidator(0), MaxValueValidator(5)], null=True,
|
||||
help_text="Score for the answer. If null then the answer is unmarked. This should be number 0-5.",
|
||||
)
|
||||
|
||||
candidate_feedback = models.TextField(
|
||||
null=True, blank=True, help_text="Feedback for the candidate"
|
||||
null=True, blank=True, help_text="Feedback for the candidate, this is optional but WILL be shown to the candidate."
|
||||
)
|
||||
|
||||
class CallStateOptions(models.TextChoices):
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{% extends 'shorts/exams.html' %}
|
||||
{% load crispy_forms_tags %}
|
||||
{% load help_tags %}
|
||||
|
||||
{% block content %}
|
||||
<a href="{% url 'shorts:exam_question_detail' exam.id question_details.current|add:'-1' %}" title="View the Question">View</a>
|
||||
@@ -7,47 +8,153 @@
|
||||
{% if request.user.is_superuser %}
|
||||
<a href="{% url 'admin:shorts_question_change' question.id %}" title="Edit the Question using the admin interface">Admin
|
||||
Edit</a> <a href="{% url 'admin:shorts_useranswer_change' answer.id %}"
|
||||
title="Edit the user answer using the admin interface">Admin
|
||||
Edit (user answer)</a>
|
||||
title="Edit the user answer using the admin interface">Admin
|
||||
Edit (user answer)</a>
|
||||
{% endif %}
|
||||
<h2>Marking question <a href="{% url 'shorts:mark' exam.id question_details.current|add:'-1' %}"
|
||||
title="View question answers">{{question_details.current}}</a> of {{question_details.total}}</h2>
|
||||
title="View question answers">{{question_details.current}}</a> of {{question_details.total}}</h2>
|
||||
|
||||
{% if discrepancy_form %}
|
||||
<div class="alert alert-info sticky-alert" role="alert">
|
||||
<details open>
|
||||
<summary><h3>This answer has discrepant scores</h3></summary>
|
||||
You can set the overall score here.<br/>
|
||||
<details open>
|
||||
<summary><h3>This answer has discrepant scores</h3></summary>
|
||||
You can set the overall score here.<br/>
|
||||
|
||||
<form method="POST" class="post-form">{% csrf_token %}
|
||||
<input type="hidden" name="form_id" value="discrepancy_form">
|
||||
{{ discrepancy_form.as_p }}
|
||||
<button type="submit" name="save" class="" title="Save score">Save Score</button>
|
||||
</form>
|
||||
<form method="POST" class="post-form">{% csrf_token %}
|
||||
<input type="hidden" name="form_id" value="discrepancy_form">
|
||||
{{ discrepancy_form.as_p }}
|
||||
<button type="submit" name="save" class="" title="Save score">Save Score</button>
|
||||
</form>
|
||||
|
||||
<h4>Marker scores and reason</h4>
|
||||
<ul>
|
||||
{% for mark_object in answer.mark.all %}
|
||||
<li>{{mark_object.marker}}: {{mark_object.score}}<br/>
|
||||
{{mark_object.mark_reason}}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</details>
|
||||
<h4>Marker scores and reason</h4>
|
||||
<ul>
|
||||
{% for mark_object in answer.mark.all %}
|
||||
<li>{{mark_object.marker}}: {{mark_object.score}}<br/>
|
||||
{{mark_object.mark_reason}}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</details>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% help "Help" %}
|
||||
<p>Marking guidance for the 2B exam can be viewed on the RCR site at <a href="https://www.rcr.ac.uk/exams-training/rcr-exams/clinical-radiology-exams/frcr-part-2b-radiology-cr2b/frcr-part-2b-radiology-cr2b-scoring-system/" target="_blank">here</a></p>
|
||||
|
||||
<p>For convienience the info is also copied below:</p>
|
||||
<div class="alert alert-secondary" role="alert">
|
||||
<h3>FRCR Part 2B Short Cases Marking Guidance</h3>
|
||||
<p>
|
||||
Candidates report on <b>25 cases</b> and have the opportunity to attain <b>five marks per case</b>, so a maximum of <b>125 marks</b> across the exam. <b>No half marks</b> will be allocated. Candidate responses are independently double marked and the final score awarded will be the average of the two examiner marks. The marking framework permits a difference of up to one mark between the two examiners. Any score difference of two or above will be flagged for review and discussion.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="#">Click here for short case example questions.</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
All questions include question-specific marking guidance to indicate key findings, diagnosis and recommended onward management. Examiners will use the following mark scheme descriptors for examiners alongside the marking guidance to score candidates’ responses:
|
||||
</p>
|
||||
|
||||
<table class="table table-bordered table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Score</th>
|
||||
<th>Marking descriptors</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><b>5</b></td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>Detects all major findings and most minor observations.</li>
|
||||
<li>Makes correct diagnosis or differential diagnoses using clinical information provided.</li>
|
||||
<li>Makes safe further management plans with clear recommendations (including MDT or specialist referral if appropriate).</li>
|
||||
<li>Demonstrates a clear understanding of likely further management required by different MDTs.</li>
|
||||
<li>Report is clear, logical and concise.</li>
|
||||
<li>May demonstrate knowledge beyond the core curriculum.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>4</b></td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>Detects most major findings (including those marked essential) and most minor observations.</li>
|
||||
<li>Makes correct diagnosis or differential diagnoses using clinical information provided.</li>
|
||||
<li>Makes safe further management plans with clear recommendations (including MDT or specialist referral if appropriate).</li>
|
||||
<li>Report is clear, logical and concise.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>3</b></td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>Detects most major findings (including those marked essential) and some minor observations.</li>
|
||||
<li>May or may not reach the correct diagnosis but demonstrates sensible clinical reasoning.</li>
|
||||
<li>Safe differential diagnoses offered.</li>
|
||||
<li>May not know full management plan but demonstrates enough knowledge not to compromise patient safety.</li>
|
||||
<li>Report is clear although it may not be ideally structured.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>2</b></td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>Major/critical observations missed.</li>
|
||||
<li>Undue significance placed on irrelevant or minor findings.</li>
|
||||
<li>Limited understanding of pathology.</li>
|
||||
<li>Fails to make correct diagnosis or provide reasonable differential diagnoses.</li>
|
||||
<li>Failure to refer to appropriate MDT/clinical team or inappropriate over-investigation e.g. MRI and orthopaedic referral for benign bone lesions.</li>
|
||||
<li>Unstructured, scattergun report.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>1</b></td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>Major/critical observations missed.</li>
|
||||
<li>Undue significance placed on minor or incidental findings.</li>
|
||||
<li>Demonstrates no understanding of pathology.</li>
|
||||
<li>Inappropriate patient management (including over-investigation).</li>
|
||||
<li>Incoherent, rambling report.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>0</b></td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>No answer provided or answer is entirely incorrect or inappropriate/unsafe patient management.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>
|
||||
An Angoff standard setting process is used to set the pass mark for each sitting based on the content used.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p>Ideally each question will have individual marking guidance that will be shown below.</p>
|
||||
{% endhelp %}
|
||||
|
||||
{% if not next_unmarked_id and not unmarked %}
|
||||
<div class="alert alert-info sticky-alert" role="alert">Success! Marking question complete. <br />
|
||||
|
||||
|
||||
{% if exam.double_mark %}
|
||||
<a href="{% url 'shorts:mark_answer_override' exam_id=exam.pk question_number=question_details.current|add:'-1' answer_id=answer.id %}">Set final score</a><br/>
|
||||
{% endif %}
|
||||
|
||||
Return to <a class="marking-link" href="{% url 'shorts:mark' exam.id question_details.current|add:'-1' %}">question
|
||||
overview</a>, <a class="marking-link" href="{% url 'shorts:mark_overview' pk=exam.pk %}">marking
|
||||
overview</a><br />
|
||||
|
||||
{% if exam.double_mark %}
|
||||
<a href="{% url 'shorts:mark_answer_override' exam_id=exam.pk question_number=question_details.current|add:'-1' answer_id=answer.id %}">Set final score</a><br/>
|
||||
{% endif %}
|
||||
|
||||
Return to <a class="marking-link" href="{% url 'shorts:mark' exam.id question_details.current|add:'-1' %}">question
|
||||
overview</a>, <a class="marking-link" href="{% url 'shorts:mark_overview' pk=exam.pk %}">marking
|
||||
overview</a><br />
|
||||
{% if previous_answer_id %}
|
||||
<a href="{% url 'shorts:mark_answer' exam_id=exam.pk question_number=question_details.current|add:'-1' answer_id=previous_answer_id %}">Previous
|
||||
candidate</a>
|
||||
@@ -60,22 +167,23 @@
|
||||
{% endif %}
|
||||
|
||||
<span>Marking Candidate: {{answer.get_candidate_masked}} ({{unmarked|length}} answer(s) left to mark)</span>
|
||||
|
||||
<details closed>
|
||||
<summary title="click to view/hide the question details">Question Details</summary>
|
||||
<p class="pre-whitespace"><b>History:</b> {{ question.history }}</p>
|
||||
<p class="pre-whitespace"><b>Region:</b> {{ question.get_regions }}</p>
|
||||
<p class="pre-whitespace"><b>Examination:</b> {{ question.get_examinations }}</p>
|
||||
<p class="pre-whitespace"><b>Abnormality:</b> {{ question.get_abnormalities }}</p>
|
||||
<div class="pre-whitespace multi-image-block"><b>Images:</b>
|
||||
{% for image in question.images.all %}
|
||||
<span class="image-block">
|
||||
Image {{ forloop.counter }}{% if image.description %} ({{image.description}}){% endif %}{% if image.feedback_image %} [feedback image]{% endif %}:
|
||||
<div class="dicom-image shorts-img {% if image.feedback_image %}feedback-img{% endif %}"
|
||||
data-url="{{ remote_url }}{{ image.image.url}}"></div>
|
||||
</span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<p class="pre-whitespace"><b>Feedback:</b> {{ question.feedback }}</p>
|
||||
<p class="pre-whitespace"><b>History:</b> {{ question.history }}</p>
|
||||
<p class="pre-whitespace"><b>Region:</b> {{ question.get_regions }}</p>
|
||||
<p class="pre-whitespace"><b>Examination:</b> {{ question.get_examinations }}</p>
|
||||
<p class="pre-whitespace"><b>Abnormality:</b> {{ question.get_abnormalities }}</p>
|
||||
<div class="pre-whitespace multi-image-block"><b>Images:</b>
|
||||
{% for image in question.images.all %}
|
||||
<span class="image-block">
|
||||
Image {{ forloop.counter }}{% if image.description %} ({{image.description}}){% endif %}{% if image.feedback_image %} [feedback image]{% endif %}:
|
||||
<div class="dicom-image shorts-img {% if image.feedback_image %}feedback-img{% endif %}"
|
||||
data-url="{{ remote_url }}{{ image.image.url}}"></div>
|
||||
</span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<p class="pre-whitespace"><b>Feedback:</b> {{ question.feedback }}</p>
|
||||
</details>
|
||||
<div class="marking-block">
|
||||
<details open>
|
||||
@@ -98,7 +206,7 @@
|
||||
<button type="submit" name="save" class="save btn btn-default" title="Save answer">Save</button>
|
||||
{% if next_unmarked_id %}
|
||||
<button type="submit" name="next" class="save btn btn-default"
|
||||
title="Save answer and move to next question">Next answer</button>
|
||||
title="Save answer and move to next question">Next answer</button>
|
||||
<!-- <button type="submit" name="skip" class="save btn btn-default">Skip</button> -->
|
||||
{% else %}
|
||||
{% if not unmarked %}
|
||||
|
||||
Reference in New Issue
Block a user