{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://api-evangelist.github.io/university-of-waterloo/json-schema/university-of-waterloo-course-schema.json",
  "title": "Course",
  "description": "An academic Course at Waterloo, a Course can be scheduled to become a Class",
  "type": "object",
  "properties": {
    "courseId": {
      "type": [
        "string",
        "null"
      ],
      "description": "Course Id that identifies this Course, not unique across terms"
    },
    "courseOfferNumber": {
      "type": "integer",
      "description": "Course Offer Number identifies cross-listed and similar Courses that shared a Course Id in a Term",
      "format": "int32"
    },
    "termCode": {
      "type": [
        "string",
        "null"
      ],
      "description": "Waterloo Term code for which this Course data applies"
    },
    "termName": {
      "type": [
        "string",
        "null"
      ],
      "description": "Waterloo Term name for which this Course data applies"
    },
    "associatedAcademicCareer": {
      "type": [
        "string",
        "null"
      ],
      "description": "Academic Career code associated with Course"
    },
    "associatedAcademicGroupCode": {
      "type": [
        "string",
        "null"
      ],
      "description": "The Academic Group code that is assocaited to this Course"
    },
    "associatedAcademicOrgCode": {
      "type": [
        "string",
        "null"
      ],
      "description": "The Academic Organization code that is associated to this Course"
    },
    "subjectCode": {
      "type": [
        "string",
        "null"
      ],
      "description": "The Subject code for this Course"
    },
    "catalogNumber": {
      "type": [
        "string",
        "null"
      ],
      "description": "The Catalog Number for this Course"
    },
    "title": {
      "type": [
        "string",
        "null"
      ],
      "description": "Course title, full name of course"
    },
    "descriptionAbbreviated": {
      "type": [
        "string",
        "null"
      ],
      "description": "Short description of the course, often an abbreviation of the title"
    },
    "description": {
      "type": [
        "string",
        "null"
      ],
      "description": "Description of the Course content and topics"
    },
    "gradingBasis": {
      "type": [
        "string",
        "null"
      ],
      "description": "Code to describe the grading basis for this course, can be overriden at Class level"
    },
    "courseComponentCode": {
      "type": [
        "string",
        "null"
      ],
      "description": "Course Component Code that describes if the course is a lecture, tutorial, etc."
    },
    "enrollConsentCode": {
      "type": [
        "string",
        "null"
      ],
      "description": "Code describing whether No, Instructor, or Department consent to enroll is required. Can be overwridden at Class level."
    },
    "enrollConsentDescription": {
      "type": [
        "string",
        "null"
      ],
      "description": "Description of the enroll requirement. Can be overwridden at Class level.",
      "readOnly": true
    },
    "dropConsentCode": {
      "type": [
        "string",
        "null"
      ],
      "description": "Code describing whether No, Instructor, or Department consent to drop is required. Can be overwridden at Class level."
    },
    "dropConsentDescription": {
      "type": [
        "string",
        "null"
      ],
      "description": "Description of the drop requirement. Can be overwridden at Class level.",
      "readOnly": true
    },
    "requirementsDescription": {
      "type": [
        "string",
        "null"
      ],
      "description": "Description of the Course requirements, such as pre-requisites, anti-requisites, and co-requisites"
    }
  },
  "additionalProperties": false
}