Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r75568970e61df4a238f0ad03f66162dd99c8c730 -r6e66deb12354d9e1ff5b9824ed4219e7f7549b6a --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 75568970e61df4a238f0ad03f66162dd99c8c730) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 6e66deb12354d9e1ff5b9824ed4219e7f7549b6a) @@ -1095,10 +1095,25 @@ public static boolean isItemUnraveledByAnswers(ScratchieItem item, List userAnswers) { QbQuestion qbQuestion = item.getQbQuestion(); - QbOption correctAnswersGroup = qbQuestion.getQbOptions().get(0).isCorrect() ? qbQuestion.getQbOptions().get(0) - : qbQuestion.getQbOptions().get(1); + QbOption correctAnswersGroup = null; + // find which option is the correct one, in VSA terms + for (QbOption option : qbQuestion.getQbOptions()) { + if (option.isCorrect()) { + // if the options has 100%, it is obviously the correct one + correctAnswersGroup = option; + break; + } + // if the option has the highest grade, it is considered the correct one + if (correctAnswersGroup == null ? option.getMaxMark() > 0 : option.getMaxMark() > correctAnswersGroup.getMaxMark()) { + correctAnswersGroup = option; + } + } + if (correctAnswersGroup == null) { + return false; + } + + String name = correctAnswersGroup.getName(); - for (String userAnswer : userAnswers) { String normalisedQuestionAnswer = QbUtils.normaliseVSAnswer(userAnswer, qbQuestion.isExactMatch()); if (QbUtils.isVSAnswerAllocated(name, normalisedQuestionAnswer, qbQuestion.isCaseSensitive(),