{
  "$schema" : "https://json-schema.org/draft/2019-09/schema#",
  "$id" : "https://purl.imsglobal.org/spec/eduapiGradebook/v1p0/schema/json/eduapiGradebook_v1p0_learningobjectivescoreset-jsonschema1.json",
  "title" : "JSON Schema for the LearningObjectiveScoreSet class.",
  "description" : "Represents the set of mastery scores for learning objectives, from a single source.",
  "type" : "object",
  "properties" : {
    "sourcedId" : {
      "description" : "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment" : "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type" : "string"
    },
    "recordLanguage" : {
      "description" : "The primary language used in the described entity.",
      "$comment" : "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type" : "string",
      "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "recordStatus" : {
      "description" : "The status of this record. The record has been, or will immediately be, removed from the upstream system; downstream systems can also remove this record as it won't be used again.",
      "$comment" : "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type" : "string",
      "enum" : [ "active", "deleted", "inactive" ]
    },
    "dateLastModified" : {
      "description" : "A timestamp describing when this record was last modified.",
      "$comment" : "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type" : "string",
      "format" : "date-time"
    },
    "extensions" : {
      "$ref" : "#/$defs/learningObjectiveScoreSetExtensions"
    },
    "source" : {
      "description" : "The source responsible for creating the learning objective identifiers. The permitted values are from an extensible vocabulary.",
      "$comment" : "Origin: SourceExtEnum (EnumExt); The predefined vocabulary for the source that was responsible for creating the learning objective identifiers.",
      "oneOf" : [ {
        "type" : "string",
        "enum" : [ "case", "unknown", "CTDL-ASN" ]
      }, {
        "type" : "string",
        "pattern" : "(ext:)[a-z|A-Z|0-9|.|-|_]+"
      } ]
    },
    "learningObjectiveResults" : {
      "type" : "array",
      "minItems" : 1,
      "items" : {
        "$ref" : "#/$defs/LearningObjectiveResults"
      }
    }
  },
  "required" : [ "sourcedId", "recordLanguage", "recordStatus", "source", "learningObjectiveResults" ],
  "additionalProperties" : false,
  "$defs" : {
    "LearningObjectiveResults" : {
      "description" : "Represents the mastery score for a learning objective.",
      "type" : "object",
      "properties" : {
        "sourcedId" : {
          "description" : "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
          "$comment" : "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
          "type" : "string"
        },
        "recordLanguage" : {
          "description" : "The primary language used in the described entity.",
          "$comment" : "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type" : "string",
          "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "recordStatus" : {
          "description" : "The status of this record. The record has been, or will immediately be, removed from the upstream system; downstream systems can also remove this record as it won't be used again.",
          "$comment" : "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
          "type" : "string",
          "enum" : [ "active", "deleted", "inactive" ]
        },
        "dateLastModified" : {
          "description" : "A timestamp describing when this record was last modified.",
          "$comment" : "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
          "type" : "string",
          "format" : "date-time"
        },
        "extensions" : {
          "$ref" : "#/$defs/learningObjectiveResultsExtensions"
        },
        "learningObjectiveId" : {
          "description" : "The unique identifier for the associated learning objective. If this is a CASE identifier it MUST be a valid UUID.",
          "$comment" : "Origin: NormalizedString (PrimitiveType); A `String` conforming to the `normalizedString` definition in [[XMLSCHEMA11-2]].",
          "type" : "string"
        },
        "score" : {
          "description" : "The optional mastery score supplied as a numeric value.",
          "$comment" : "Origin: Float (PrimitiveType)",
          "type" : "number"
        },
        "textScore" : {
          "description" : "The optional mastery score supplied in a non-numeric form.",
          "$comment" : "Origin: NormalizedString (PrimitiveType); A `String` conforming to the `normalizedString` definition in [[XMLSCHEMA11-2]].",
          "type" : "string"
        }
      },
      "required" : [ "sourcedId", "recordLanguage", "recordStatus", "learningObjectiveId" ],
      "additionalProperties" : false
    },
    "learningObjectiveResultsExtensions" : {
      "description" : "Extension properties related to learning objective results",
      "type" : "object",
      "properties" : { },
      "required" : [ ],
      "additionalProperties" : true
    },
    "learningObjectiveScoreSetExtensions" : {
      "description" : "Extension properties related to learning objective score sets",
      "type" : "object",
      "properties" : { },
      "required" : [ ],
      "additionalProperties" : true
    }
  }
}