1. User selects a SCO to launch from the LMS
    1. LMS loads the CMI Object
    2. LMS sets CMI data
    3. LMS exposes the CMI object
    4. Load the SCO
  2. SCO Start Up
    1. Locate API_1484_11
    2. Initialize
    3. GetValue('cmi.mode')
      1. returns "normal'
        1. GetValue("cmi.entry')
          1. returns "ab-initio"
          2. SetValue('cmi.completion_status', 'incomplete')
          3. SetValue('cmi.success_status', 'unknown')
          4. cmi.score
          5. setValue('cmi.score.min')
          6. setValue('cmi.score.raw')
          7. setValue('cmi.score.max')
          8. setValue('cmi.score.scaled')
          9. returns "resume"
          10. GetValue('cmi.location')
          11. GetValue('cmi.suspend_data')
        2. GetValue('cmi.completion_threshold')
        3. GetValue('cmi.scaled_passing_score')
        4. GetValue('cmi.max_time_allowed')
        5. GetValue('cmi.time_limit_action')
        6. cmi.learner_prefference
          1. GetValue('cmi.learner_preference.language')
          2. GetValue('cmi.learner_preference.audio_captioning')
          3. GetValue('cmi.learner_preference.audio_level')
          4. GetValue('cmi.learner_preference.delivery_speed')
        7. GetValue('cmi.credit')
          1. credit
          2. no_credit
      2. returns "browse"
      3. returns "review"
        1. GetValue('cmi.suspend_data')
        2. cmi.interactions
        3. cmi.objectives
        4. cmi.comments_from_learner
    4. cmi.comments_from_lms
  3. Student Work
    1. SetValue('cmi.location')
    2. setValue('cmi.progress_measure')
    3. cmi.score
      1. setValue('cmi.score.min')
      2. setValue('cmi.score.raw')
      3. setValue('cmi.score.max')
      4. setValue('cmi.score.scaled')
    4. cmi.interactions
    5. cmi.objectives
    6. cmi.comments_from_learner
  4. SCO Wrap Up
    1. SetValue('cmi.session_time', 'PT1M32S')
    2. setValue('cmi.progress_measure')
    3. cmi.score
      1. setValue('cmi.score.min')
      2. setValue('cmi.score.raw')
      3. setValue('cmi.score.max')
      4. setValue('cmi.score.scaled')
    4. SetValue('cmi.completion_status')
      1. incomplete
      2. completed
    5. SetValue('cmi.success_status')
      1. failed
      2. passed
    6. SetValue('cmi.exit')
      1. suspend
      2. normal
    7. Commit('')
    8. terminate
  5. User Closes the window or navigates away