SCORM 2004 Completion

We spend a fair amount of time at Rustici Software looking at problems people encounter in our SCORM Test Track and our other LMS implementations. We want every piece of content to work the first time, and so we dig around for the real source of problems. In an effort to improve interoperability in general, we’re going to start posting some of these conversations on the blog so that others can link to them and avoid similar issues.

———- Forwarded message ———-
From: Mike Rustici
Date: Aug 13, 2007 5:15 PM
Subject: Re: TestTrack User Feedback
To: xxxx@xxxx.com

Hi xxxx,

We took a closer look at this course to figure out what is going on. What Trivantis says

Lectora 2007 is SCORM 2004 3rd Edition conformant. I have ran across this issue with the Rustici software before. Basically, is the LMS that is setting that status as soon as the course is launched for the first time. I have spoken with them about this and there may be a gray area in SCORM 2004 regarding this. Basically, the following is taken from the ADL SCORM 2004 3rd Edition documentation:

“Since the determination of cmi.completion_status is initially controlled and managed by the SCO, the LMS cannot imply any value for the cmi.completion_status in any way. There is no requirement in SCORM that mandates a SCO to set cmi.completion_status. If the SCO does not set the cmi.completion_status, then the LMS shall use the default value of “unknown” as the value for cmi.completion_status. However, if a cmi.completion_threshold is defined and a cmi.progress_measure is reported by the SCO, then the LMS must override the cmi.completion_status by adhering to the requirements defined in section 4.2.4.1.”

The part about the cmi.completion_status element is true, the LMS basically shouldn’t mess with it….and we don’t. If you take a close look at the debug logs when you launch the course for a second time, you’ll see that the cmi.completion_status value is still unknown. You can also see this by drilling down into the detailed report at the top of the SCORM Test Track screen.

The cmi.completion_status for the SCO however is not what provides the overall determination of a course’s completion status. This might be a bit confusing, but in SCORM 2004, there are two data models. The first is the simple CMI runtime data model that SCO’s read from and write to via the SCORM API. Every SCO has a set of CMI runtime data associated with it. The second data model is the sequencing data model. The sequencing data model is closely related to, but separate from the runtime data model. Every item in a SCORM 2004 course has a set of sequencing data associated with it (in other words, SCOs and aggregations both have sequencing data in contrast to CMI data which is only available on SCOs). It is the sequencing data of the root aggregation of the course that determines the course’s overall status. In this case, there is a single SCO wrapped in a single aggregation (every SCORM course always has an aggregation at the top level). The status you see in Test Track is the completion status of the root aggregation’s sequencing data….which is closely related to, but not exactly the same as the single SCO’s runtime data.

Now, why does the course show completion? For a detailed explanation, see section 3.13.2 of the SCORM 2004 3rd Edition Sequencing and Navigation spec. Basically, there is a sequencing rule that indicates whether or not the content is going to communicate any completion information via the SCORM API (“completion set by content”). If this setting is false (the default), then if the LMS doesn’t receive any completion status information from the content, it is supposed to automatically mark the content as completed. Since this course isn’t reporting any completion status information when it exits early on, the LMS is behaving correctly by automatically setting the sequencing completion status to completed.

There are two best practices that content vendors implement to avoid this behavior. The first is to override the default value in the manifest and set “completion set by content” to true. The second is to immediately set cmi.completion_status to incomplete upon launch of the content. This call tells the LMS that it should expect completion information to be explicitly recorded and should not auto-complete. This best practice dates back to SCORM 1.2.


  • Anonymous

    This entry just solved a puzzle that has been kicking my butt for 2 days. THANKS!!! john h.

  • santiago

    Esto está traducido con un traductor y no se entiende nada