code: public function parsesItemResponse(RunnerServiceContext $context, $itemRef, $response)
      {
          if ($context instanceof QtiRunnerServiceContext) {
  
              /** @var TestSession $session */
              $session = $context->getTestSession();
              $currentItem  = $context->getCurrentAssessmentItemRef();
              $responses = new State();
  
              if ($currentItem === false) {
                  $msg = "Trying to store item variables but the state of the test session is INITIAL or CLOSED.\n";
                  $msg .= "Session state value: " . $session->getState() . "\n";
                  $msg .= "Session ID: " . $session->getSessionId() . "\n";
                  $msg .= "JSON Payload: " . mb_substr(json_encode($response), 0, 1000);
                  \common_Logger::e($msg);
              }
  
              $filler = new \taoQtiCommon_helpers_PciVariableFiller(
                  $currentItem,
                  $this->getServiceManager()->get(QtiFlysystemFileManager::SERVICE_ID)
              );
  
              if (is_array($response)) {
                  foreach ($response as $id => $responseData) {
                      try {
                          $var = $filler->fill($id, $responseData);
                          // Do not take into account QTI File placeholders.
                          if (\taoQtiCommon_helpers_Utils::isQtiFilePlaceHolder($var) === false) {
                              $responses->setVariable($var);
                          }
                      } catch (\OutOfRangeException $e) {
                          \common_Logger::d("Could not convert client-side value for variable '${id}'.");
                      } catch (\OutOfBoundsException $e) {
                          \common_Logger::d("Could not find variable with identifier '${id}' in current item.");
                      }
                  }
              } else {
                  \common_Logger::e('Invalid json payload');
              }
  
              return $responses;
          } else {
              throw new \common_exception_InvalidArgumentType(
                  'QtiRunnerService',
                  'storeItemResponse',
                  0,
                  'oat\taoQtiTest\models\runner\QtiRunnerServiceContext',
                  $context
              );
          }
      }
docs: Parses the responses provided for a particular item
  @param RunnerServiceContext $context
  @param $itemRef
  @param $response
  @return mixed
  @throws \common_Exception