{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "schema:EducationalOccupationalProgram",
  "title": "EducationalOccupationalProgram",
  "description": "A program offered by an institution which determines the learning progress to achieve an outcome, usually a credential like a degree or certificate. This would define a discrete set of opportunities (e.g., job, courses) that together constitute a program with a clear start, end, set of requirements, and transition to a new occupational opportunity (e.g., a job), or sometimes a higher educational opportunity (e.g., an advanced degree).",
  "type": "object",
  "allOf": [
    {
      "description": "A utility class that serves as the umbrella for a number of 'intangible' things such as quantities, structured values, etc.",
      "$ref": "schema:Intangible"
    }
  ],
  "properties": {
    "applicationDeadline": {
      "description": "The date on which the program stops collecting applications for the next enrollment cycle. Flexible application deadlines (for example, a program with rolling admissions) can be described in a textual string, rather than as a DateTime.",
      "anyOf": [{ "type": "string", "format": "date" }, { "type": "string" }]
    },
    "applicationStartDate": {
      "description": "The date at which the program begins collecting applications for the next enrollment cycle.",
      "type": "string",
      "format": "date"
    },
    "dayOfWeek": {
      "description": "The day of the week for which these opening hours are valid.",
      "$ref": "schema:DayOfWeek"
    },
    "educationalCredentialAwarded": {
      "description": "A description of the qualification, award, certificate, diploma or other educational credential awarded as a consequence of successful completion of this course or program.",
      "oneOf": [
        {
          "anyOf": [
            { "type": "string", "format": "uri" },
            { "type": "string" },
            { "$ref": "schema:EducationalOccupationalCredential" }
          ]
        },
        {
          "type": "array",
          "items": {
            "anyOf": [
              { "type": "string", "format": "uri" },
              { "type": "string" },
              { "$ref": "schema:EducationalOccupationalCredential" }
            ]
          }
        }
      ]
    },
    "educationalProgramMode": {
      "description": "Similar to courseMode, the medium or means of delivery of the program as a whole. The value may either be a text label (e.g. \"online\", \"onsite\" or \"blended\"; \"synchronous\" or \"asynchronous\"; \"full-time\" or \"part-time\") or a URL reference to a term from a controlled vocabulary (e.g. https://ceds.ed.gov/element/001311#Asynchronous ).",
      "oneOf": [
        {
          "anyOf": [{ "type": "string", "format": "uri" }, { "type": "string" }]
        },
        {
          "type": "array",
          "items": {
            "anyOf": [
              { "type": "string", "format": "uri" },
              { "type": "string" }
            ]
          }
        }
      ]
    },
    "endDate": {
      "description": "The end date and time of the item (in [ISO 8601 date format](http://en.wikipedia.org/wiki/ISO_8601)).",
      "anyOf": [
        { "type": "string", "format": "date" },
        { "type": "string", "format": "date-time" }
      ]
    },
    "financialAidEligible": {
      "description": "A financial aid type or program which students may use to pay for tuition or fees associated with the program.",
      "oneOf": [
        { "anyOf": [{ "type": "string" }, { "$ref": "schema:DefinedTerm" }] },
        {
          "type": "array",
          "items": {
            "anyOf": [{ "type": "string" }, { "$ref": "schema:DefinedTerm" }]
          }
        }
      ]
    },
    "hasCourse": {
      "description": "A course or class that is one of the learning opportunities that constitute an educational / occupational program. No information is implied about whether the course is mandatory or optional; no guarantee is implied about whether the course will be available to everyone on the program.",
      "oneOf": [
        { "$ref": "schema:Course" },
        { "type": "array", "items": { "$ref": "schema:Course" } }
      ]
    },
    "maximumEnrollment": {
      "description": "The maximum number of students who may be enrolled in the program.",
      "type": "integer"
    },
    "numberOfCredits": {
      "description": "The number of credits or units awarded by a Course or required to complete an EducationalOccupationalProgram.",
      "anyOf": [{ "type": "integer" }, { "$ref": "schema:StructuredValue" }]
    },
    "occupationalCategory": {
      "description": "A category describing the job, preferably using a term from a taxonomy such as [BLS O*NET-SOC](http://www.onetcenter.org/taxonomy.html), [ISCO-08](https://www.ilo.org/public/english/bureau/stat/isco/isco08/) or similar, with the property repeated for each applicable value. Ideally the taxonomy should be identified, and both the textual label and formal code for the category should be provided.\\n\nNote: for historical reasons, any textual label and formal code provided as a literal may be assumed to be from O*NET-SOC.",
      "oneOf": [
        { "anyOf": [{ "type": "string" }, { "$ref": "schema:CategoryCode" }] },
        {
          "type": "array",
          "items": {
            "anyOf": [{ "type": "string" }, { "$ref": "schema:CategoryCode" }]
          }
        }
      ]
    },
    "occupationalCredentialAwarded": {
      "description": "A description of the qualification, award, certificate, diploma or other occupational credential awarded as a consequence of successful completion of this course or program.",
      "oneOf": [
        {
          "anyOf": [
            { "type": "string", "format": "uri" },
            { "type": "string" },
            { "$ref": "schema:EducationalOccupationalCredential" }
          ]
        },
        {
          "type": "array",
          "items": {
            "anyOf": [
              { "type": "string", "format": "uri" },
              { "type": "string" },
              { "$ref": "schema:EducationalOccupationalCredential" }
            ]
          }
        }
      ]
    },
    "offers": {
      "description": "An offer to provide this item—for example, an offer to sell a product, rent the DVD of a movie, perform a service, or give away tickets to an event. Use [[businessFunction]] to indicate the kind of transaction offered, i.e. sell, lease, etc. This property can also be used to describe a [[Demand]]. While this property is listed as expected on a number of common types, it can be used in others. In that case, using a second type, such as Product or a subtype of Product, can clarify the nature of the offer.\n      ",
      "oneOf": [
        { "anyOf": [{ "$ref": "schema:Demand" }, { "$ref": "schema:Offer" }] },
        {
          "type": "array",
          "items": {
            "anyOf": [{ "$ref": "schema:Demand" }, { "$ref": "schema:Offer" }]
          }
        }
      ]
    },
    "programPrerequisites": {
      "description": "Prerequisites for enrolling in the program.",
      "oneOf": [
        {
          "anyOf": [
            { "type": "string" },
            { "$ref": "schema:AlignmentObject" },
            { "$ref": "schema:Course" },
            { "$ref": "schema:EducationalOccupationalCredential" }
          ]
        },
        {
          "type": "array",
          "items": {
            "anyOf": [
              { "type": "string" },
              { "$ref": "schema:AlignmentObject" },
              { "$ref": "schema:Course" },
              { "$ref": "schema:EducationalOccupationalCredential" }
            ]
          }
        }
      ]
    },
    "programType": {
      "description": "The type of educational or occupational program. For example, classroom, internship, alternance, etc.",
      "anyOf": [{ "type": "string" }, { "$ref": "schema:DefinedTerm" }]
    },
    "provider": {
      "description": "The service provider, service operator, or service performer; the goods producer. Another party (a seller) may offer those services or goods on behalf of the provider. A provider may also serve as the seller.",
      "anyOf": [{ "$ref": "schema:Organization" }, { "$ref": "schema:Person" }]
    },
    "salaryUponCompletion": {
      "description": "The expected salary upon completing the training.",
      "$ref": "schema:MonetaryAmountDistribution"
    },
    "startDate": {
      "description": "The start date and time of the item (in [ISO 8601 date format](http://en.wikipedia.org/wiki/ISO_8601)).",
      "anyOf": [
        { "type": "string", "format": "date" },
        { "type": "string", "format": "date-time" }
      ]
    },
    "termDuration": {
      "description": "The amount of time in a term as defined by the institution. A term is a length of time where students take one or more classes. Semesters and quarters are common units for term.",
      "type": "string",
      "$comment": "https://schema.org/Duration"
    },
    "termsPerYear": {
      "description": "The number of times terms of study are offered per year. Semesters and quarters are common units for term. For example, if the student can only take 2 semesters for the program in one year, then termsPerYear should be 2.",
      "type": "number"
    },
    "timeOfDay": {
      "description": "The time of day the program normally runs. For example, \"evenings\".",
      "type": "string"
    },
    "timeToComplete": {
      "description": "The expected length of time to complete the program if attending full-time.",
      "type": "string",
      "$comment": "https://schema.org/Duration"
    },
    "trainingSalary": {
      "description": "The estimated salary earned while in the program.",
      "$ref": "schema:MonetaryAmountDistribution"
    },
    "typicalCreditsPerTerm": {
      "description": "The number of credits or units a full-time student would be expected to take in 1 term however 'term' is defined by the institution.",
      "anyOf": [{ "type": "integer" }, { "$ref": "schema:StructuredValue" }]
    }
  }
}
