The numeric or alphanumeric value unequivocally identifying this program within the current orgUniId's offering.
One should not confuse this element with the courseId, available in the programRun and genericProgramRun context. The programId element identifies a program, describing the structure of an offering (name, prerequisites, subjects being covered, etcetera).
The actual execution of a program can consist of one or more modules. A module, in turn, can be described by one or more courses. Each of them is identified by its courseId and offers ample room for (textual) descriptions.
The following diagram shows the element's position in the program-programRun-module-course hierarchy:
Although course and courseDay can share the same hierarchy level, they target completely different properties of their module or genericModule. An indication is, e.g., that a courseDay can be found at two different levels, whereas the course only occurs as child of a module or genericModule.
The definition of the id is completely up to the Learning Provider - apart from datatype and multiplicity, no constraints are enforced. This implies that a provider is free to change an id at will. One should exercise this possibility with caution: it is considered bad practise to modify a previously published identifier: an LMS, e.g., will heavily rely on the consistency of such an element. A Provider should only change published ids after consulting all affected users.This element or attribute shall not be empty. If used, it should contain a text at least one character long.