openapi: 3.0.2
servers:
  - description: SS12000
    url: "http://some.server.se/v2.0"
info:
  description: >
    Detta är en implementationsspecifikation av SS12000:2020
    [TK450](https://www.sis.se/standardutveckling/tksidor/tk400499/sistk450/)
  version: 2.0.0
  title: SS12000
  termsOfService: "https://www.sis.se/standardutveckling/tksidor/tk400499/sistk450/"
  contact:
    email: tk450@sis.se
tags:
  - name: Organisation
    description: Skolans organisation och grundläggande administration.
  - name: Person
    description: Hanterar personer och personers relationer.
  - name: Grupper
    description: Grupper.
  - name: Studieinformation
    description: "Information om kurser, ämnen, program och studieplaner."
  - name: Aktiviteter
    description: Aktiviteter knyter ihop lärare och elever med ämne eller kurs.
  - name: Kalenderhändelser
    description: Kalenderposter kopplat till aktiviteter
  - name: Rum och resurser
    description: Salar och resurser som kan schemaläggas.
  - name: Närvaro
    description: Information runt en elevs närvaro.
  - name: Vistelseschema
    description: Schema för omsorgstider på förskola eller fritidshem.
  - name: Närvarohändelser
    description: >
      In- och utpassering. Används för närvarohantering i förskola och
      fritidshem (utan kopplingar till kalenderhändelser).
  - name: Borttag
    description: Metod för att följa borttag av entititer.
  - name: Prenumeration
    description: Webhook för att prenumerera på uppdateringar.
  - name: Loggning
    description: Ändpunkter för återrapportering av statistik och händelser.
paths:
  /organisations:
    get:
      tags:
        - Organisation
      summary: Hämta en lista med organisationer.
      parameters:
        - name: parent
          description: "Begränsa urvalet till utpekade organisations-ID:n."
          in: query
          schema:
            type: array
            items:
              type: string
              format: uuid
        - name: schoolUnitCode
          description: >
            Begränsa urvalet till de skolenheter som har den angivna
            Skolenhetskoden. En Identifierare för skolenheten enligt Skolverket.
          in: query
          schema:
            type: array
            items:
              type: string
        - name: organisationCode
          description: >
            Begränsa urvalet till de organisationselement som har den angivna
            koden.
          in: query
          schema:
            type: array
            items:
              type: string
        - name: municipalityCode
          description: >
            Begränsa urvalet till de organisationselement som har angiven
            kommunkod.
          in: query
          schema:
            type: string
        - name: type
          description: Begränsa urvalet till utpekade typ.
          in: query
          schema:
            type: array
            items:
              $ref: "#/components/schemas/Code_OrganisationType"
        - name: schoolTypes
          description: >
            Begränsa urvalet till de organisationselement som har den angivna
            skolformen.
          in: query
          schema:
            type: array
            items:
              $ref: "#/components/schemas/Code_SchoolType"
        - name: startDate.onOrBefore
          description: >
            Begränsa urvalet till organisationselement som har ett startDate
            värde innan eller på det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - name: startDate.onOrAfter
          description: >
            Begränsa urvalet till organisationselement som har ett startDate
            värde på eller efter det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - name: endDate.onOrBefore
          description: >
            Begränsa urvalet till organisationselement som har ett endDate värde
            innan eller på det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - name: endDate.onOrAfter
          description: >
            Begränsa urvalet till organisationselement som har ett endDate värde
            på eller efter det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - $ref: "#/components/parameters/Sortkey"
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Organisation"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /organisations/lookup:
    post:
      tags:
        - Organisation
      summary: "Hämta många organisationer baserat på en lista av ID:n."
      description: >
        Istället för att hämta organisationer en i taget med en loop av
        GET-anrop så finns det även möjlighet att hämta många organisationer på
        en gång genom att skicka ett anrop med en lista med önskade
        organisationer.
      parameters:
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Organisation"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                ids:
                  type: array
                  items:
                    type: string
                    format: uuid
                schoolUnitCodes:
                  type: array
                  items:
                    type: string
                organisationCodes:
                  type: array
                  items:
                    type: string
              example:
                ids:
                  - d544563a-747a-42d3-8d37-415a101537fa
                schoolUnitCodes:
                  - "55512387"
                organisationCodes:
                  - F2311
        required: true
  "/organisations/{id}":
    get:
      tags:
        - Organisation
      summary: Hämta en organisation baserat på ID
      parameters:
        - name: id
          in: path
          description: ID för organisationen som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Organisation"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /persons:
    get:
      tags:
        - Person
      summary: Hämta en lista med personer.
      parameters:
        - name: nameContains
          description: >
            Begränsa urvalet till de personer vars namn innehåller något av
            parameterns värden.

            Sökningen **ska** ske shiftlägesokänsligt och värdet kan förekomma
            var som helst i något av alla tre namnfälten. 

            Anges flera värden så måste samtliga värden matcha minst ett av
            namnfälten.


            Exempel: [ "Pa", "gens" ] kommer matcha Palle Girgensohn.
          in: query
          schema:
            type: array
            items:
              type: string
        - name: civicNo
          description: >-
            Begränsa urvalet till den person vars civicNo matchar parameterns
            värde.
          in: query
          schema:
            type: string
        - name: eduPersonPrincipalName
          description: >-
            Begränsa urvalet till den person vars eduPersonPrincipalNames
            matchar parameterns värde.
          in: query
          schema:
            type: string
        - name: identifier.value
          description: >-
            Begränsa urvalet till den person vilka har ett värde i
            `externalIdentifiers.value` som matchar parameterns värde. Kan
            kombineras med parametern `identifier.context` för att begränsa
            matchningen till en specifik typ av indentifierare.
          in: query
          schema:
            type: string
        - name: identifier.context
          description: >-
            Begränsa urvalet till den person vilka har ett värde i
            `externalIdentifiers.context` som matchar parameterns värde.
            Kombineras vanligtvis med `identifier.value` parametern.
          in: query
          schema:
            type: string
        - name: relationship.entity.type
          description: >
            Begränsa urvalet till de personer som har en denna typ av relation
            till andra entititeter. 

            Denna parameter styr vilket entitetstyp som övriga
            relationship-parametrar filterar på.

            Anges inga andra parametrar så returneras personer som har en
            relation av denna typ.


            Möjliga relationer:

            - _enrolment_ - filtrerar utifrån elever inskrivning.

            - _duty_ - filtrerar utifrån personer som har minst en tjänstgöring.

            - _placement.child_ - filtrerar utifrån barn som har minst en
            placering.

            - _placement.owner_ - filtrerar utifrån personer som satta som ägare
            av minst en placering.

            - _responsibleFor.enrolment_ - filterar utifrån personer som har en
            _"responsibleFor"_-relation, dvs är en vårdnadshavare eller annan
            ansvarig vuxen, till en elev med minst en inskrivning.

            - _responsibleFor.placement_ - filterar utifrån personer som har en
            _"responsibleFor"_-relation, dvs är en vårdnadshavare eller annan
            ansvarig vuxen, till ett barn med minst en placering.
              Notera att oftast är det bättre att använda _placement.owner_ än denna parameter.

            Detta kan kombineras med `relationship.startDate.onOrBefore` och
            `relationship.endDate.onOrAfter` för att begränsa till aktiva
            relationer.
          in: query
          schema:
            type: string
            enum:
              - enrolment
              - duty
              - placement.child
              - placement.owner
              - responsibleFor.enrolment
              - responsibleFor.placement
        - name: relationship.organisation
          description: >
            Begränsa urvalet till de personer som har en relation till angivet
            organisationselement (vanligtvis en skolenhet). 

            För att begränsa till en viss relationtyp används parametern
            `relationship.entity.type`.


            Följande fält/relationer används vid filtreringen:

            - _enrolment_ - poster matchandes `person.enrolment.enroledAt`

            - _duty_ - person poster matchandes `duty.person` i en lista
            filtrerad utifrån `duty.dutyAt`.

            - _placement.child_ - person poster matchandes `placement.child` i
            en lista filtrerad utifrån `placement.placedAt`.

            - _placement.owner_ - person poster matchandes `placement.owner` i
            en lista filtrerad utifrån `placement.placedAt`.

            - _responsibleFor.enrolment_ - person poster matchandes
            `person.responsibles` i en lista filtrerad utifrån
            `person.enrolment.enroledAt`.

            - _responsibleFor.placement_ - person poster matchandes
            `person.responsibles` i en lista med person poster som i sin tur
            matchar `placement.child` i en lista filtrerad utifrån
            `placement.placedAt`.
          in: query
          schema:
            type: string
            format: uuid
        - name: relationship.startDate.onOrBefore
          description: >
            Begränsa urvalet av personer till de som har relationer med
            startDate innan eller på det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15"). 

            Poster med ett startDate som ej är satt, tas alltid med. 

            För att begränsa till en viss relationtyp används parametern
            `relationship.entity.type`.


            Följande fält/relationer används vid filtreringen:

            - _enrolment_ - poster matchandes `person.enrolment.startDate`

            - _duty_ - person poster matchandes `duty.person` i en lista
            filtrerad utifrån `duty.startDate`.

            - _placement.child_ - person poster matchandes `placement.child` i
            en lista filtrerad utifrån `placement.startDate`.

            - _placement.owner_ - person poster matchandes `placement.owner` i
            en lista filtrerad utifrån `placement.startDate`.

            - _responsibleFor.enrolment_ - person poster matchandes
            `person.responsibles` i en lista filtrerad utifrån
            `person.enrolment.startDate`.

            - _responsibleFor.placement_ - person poster matchandes
            `person.responsibles` i en lista med person poster som i sin tur
            matchar `placement.child` i en lista filtrerad utifrån
            `placement.startDate`.
              
            Detta kan kombineras med _relationship.endDate.onOrAfter_ för att
            begränsa till aktiva relationer.
          in: query
          schema:
            type: string
            format: date
        - name: relationship.startDate.onOrAfter
          description: >
            Begränsa urvalet av personer till de som har relationer med
            startDate efter eller på det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15"). 

            Poster med ett startDate som ej är satt, tas alltid med. 

            För att begränsa till en viss relationtyp används parametern
            `relationship.entity.type`.


            Följande fält/relationer används vid filtreringen:

            - _enrolment_ - poster matchandes `person.enrolment.startDate`

            - _duty_ - person poster matchandes `duty.person` i en lista
            filtrerad utifrån `duty.startDate`.

            - _placement.child_ - person poster matchandes `placement.child` i
            en lista filtrerad utifrån `placement.startDate`.

            - _placement.owner_ - person poster matchandes `placement.owner` i
            en lista filtrerad utifrån `placement.startDate`.

            - _responsibleFor.enrolment_ - person poster matchandes
            `person.responsibles` i en lista filtrerad utifrån
            `person.enrolment.startDate`.

            - _responsibleFor.placement_ - person poster matchandes
            `person.responsibles` i en lista med person poster som i sin tur
            matchar `placement.child` i en lista filtrerad utifrån
            `placement.startDate`.
          in: query
          schema:
            type: string
            format: date
        - name: relationship.endDate.onOrBefore
          description: >
            Begränsa urvalet av personer till de som har relationer med endDate
            innan eller på det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.

            För att begränsa till en viss relationtyp används parametern
            `relationship.entity.type`.


            Följande fält/relationer används vid filtreringen:

            - _enrolment_ - poster matchandes `person.enrolment.endDate`

            - _duty_ - person poster matchandes `duty.person` i en lista
            filtrerad utifrån `duty.endDate`.

            - _placement.child_ - person poster matchandes `placement.child` i
            en lista filtrerad utifrån `placement.endDate`.

            - _placement.owner_ - person poster matchandes `placement.owner` i
            en lista filtrerad utifrån `placement.endDate`.

            - _responsibleFor.enrolment_ - person poster matchandes
            `person.responsibles` i en lista filtrerad utifrån
            `person.enrolment.endDate`.

            - _responsibleFor.placement_ - person poster matchandes
            `person.responsibles` i en lista med person poster som i sin tur
            matchar `placement.child` i en lista filtrerad utifrån
            `placement.endDate`.
          in: query
          schema:
            type: string
            format: date
        - name: relationship.endDate.onOrAfter
          description: >
            Begränsa urvalet av personer till de som har relationer med endDate
            efter eller på det angivna datumet (RFC 3339-format,t.ex.
            "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.

            För att begränsa till en viss relationtyp används parametern
            `relationship.entity.type`.


            Flöjande fält/relationer används vid filtreringen:
             - _enrolment_ - poster matchandes `person.enrolment.endDate`
             - _duty_ - person poster matchandes `duty.person` i en lista filtrerad utifrån `duty.endDate`.
             - _placement.child_ - person poster matchandes `placement.child` i en lista filtrerad utifrån `placement.endDate`.
             - _placement.owner_ - person poster matchandes `placement.owner` i en lista filtrerad utifrån `placement.endDate`.
             - _responsibleFor.enrolment_ - person poster matchandes `person.responsibles` i en lista filtrerad utifrån `person.enrolment.endDate`.
             - _responsibleFor.placement_ - person poster matchandes `person.responsibles` i en lista med person poster som i sin tur matchar `placement.child` i en lista filtrerad utifrån `placement.endDate`.

            Detta kan kombineras med _relationship.startDate.onOrBefore_ för att
            begränsa till aktiva relationer.
          in: query
          schema:
            type: string
            format: date
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/PersonsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - name: sortkey
          description: Anger hur resultatet ska sorteras.
          in: query
          schema:
            type: string
            enum:
              - DisplayNameAsc
              - GivenNameDesc
              - GivenNameAsc
              - FamilyNameDesc
              - FamilyNameAsc
              - CivicNoAsc
              - CivicNoDesc
              - ModifiedDesc
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/PersonExpanded"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /persons/lookup:
    post:
      tags:
        - Person
      summary: "Hämta många personer baserat på en lista av ID:n eller personnummer."
      description: >
        Istället för att hämta personer en i taget med en loop av GET-anrop så
        finns det även möjlighet att hämta många personer på en gång genom att
        skicka ett anrop med en lista med önskade personer.
      parameters:
        - $ref: "#/components/parameters/PersonsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/PersonExpanded"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        description: |
          En lista med personnummer och / eller uuid:n på personer.
        content:
          application/json:
            schema:
              type: object
              properties:
                ids:
                  type: array
                  items:
                    type: string
                    format: uuid
                civicNos:
                  type: array
                  items:
                    description: >
                      Personnummer, samordningsnummer eller tillfälliga
                      personnummer, och motsvarande för andra länder. För
                      svenska personnummner **ska** formatet 12 tecken utan
                      divis användas. Se exempel.
                    type: string
              example:
                ids:
                  - d544563a-747a-42d3-8d37-415a101537fa
                civicNos:
                  - "201002037271"
        required: true
  "/persons/{id}":
    get:
      tags:
        - Person
      summary: Get person by person id
      parameters:
        - name: id
          in: path
          description: ID för personen som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/PersonsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PersonExpanded"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /placements:
    get:
      tags:
        - Person
      summary: Hämta en lista med placeringar.
      parameters:
        - name: organisation
          description: >
            Begränsa urvalet till de barn som har en placering (placedAt) på
            angivet organisationselement.  Detta kan kombineras med
            startDate.onOrBefore och endDate.onOrAfter för att begränsa till
            aktiva placeringar.
          in: query
          schema:
            type: string
            format: uuid
        - name: group
          description: >
            Begränsa urvalet till de barn som har en placering på angiven grupp.
            Detta kan kombineras med startDate.onOrBefore och endDate.onOrAfter
            för att begränsa till aktiva placeringar.
          in: query
          schema:
            type: string
            format: uuid
        - name: startDate.onOrBefore
          description: >
            Begränsa urvalet till placeringar som har ett startDate värde innan
            eller på det angivna datumet (RFC 3339-format, t.ex. "2016-10-15").
          in: query
          schema:
            type: string
            format: date
        - name: startDate.onOrAfter
          description: >
            Begränsa urvalet till placeringar som har ett startDate värde på
            eller efter det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15").
          in: query
          schema:
            type: string
            format: date
        - name: endDate.onOrBefore
          description: >
            Begränsa urvalet till placeringar som har ett endDate värde innan
            eller på det angivna datumet (RFC 3339-format, t.ex. "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - name: endDate.onOrAfter
          description: >
            Begränsa urvalet till placeringar som har ett endDate värde på eller
            efter det angivna datumet (RFC 3339-format, t.ex. "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - name: child
          description: >
            Begränsa urvalet till ett barn. Detta kan kombineras med
            startDate.onOrBefore och endDate.onOrAfter för att begränsa till
            aktiva placeringar.
          in: query
          schema:
            type: string
            format: uuid
        - name: owner
          description: >
            Begränsa urvalet till placeringar med denna ägare. Detta kan
            kombineras med startDate.onOrAfter och endDate.onOrBefore för att
            begränsa till aktiva placeringar.
          in: query
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/PlacementsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - name: sortkey
          description: Anger hur resultatet ska sorteras.
          in: query
          schema:
            type: string
            enum:
              - StartDateAsc
              - StartDateDesc
              - EndDateAsc
              - EndDateDesc
              - ModifiedDesc
        - $ref: "#/components/parameters/PageToken"
        - $ref: "#/components/parameters/Limit"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/PlacementExpanded"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /placements/lookup:
    post:
      tags:
        - Person
      summary: >
        Hämta många placeringar baserat på en lista av ID:n eller av Id från
        personer.
      description: >
        Istället för att hämta placeringar en i taget med en loop av GET-anrop
        så finns det även möjlighet att hämta många placeringar på en gång genom
        att skicka ett anrop med en lista med önskade placeringar.
      parameters:
        - $ref: "#/components/parameters/PlacementsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/PlacementExpanded"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                ids:
                  type: array
                  items:
                    type: string
                    format: uuid
                personIds:
                  type: array
                  items:
                    type: string
                    format: uuid
        required: true
  "/placements/{id}":
    get:
      tags:
        - Person
      summary: Placering baserat på id
      parameters:
        - name: id
          in: path
          description: ID för placering som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/PlacementsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PlacementExpanded"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /duties:
    get:
      tags:
        - Person
      summary: Hämta en lista med tjänstgöringar.
      parameters:
        - name: organisation
          description: >
            Begränsa urvalet till de tjänstgöringar som är kopplade till ett
            organisationselement eller underliggande element.
          in: query
          schema:
            type: string
            format: uuid
        - name: dutyRole
          description: Begränsta urvalet till de tjänstgöringar som matchar roll
          in: query
          schema:
            $ref: "#/components/schemas/Code_DutyRole"
        - name: person
          description: >
            Begränsa urvalet till de tjänstgöringar som är kopplade till person
            ID
          in: query
          schema:
            type: string
            format: uuid
        - name: startDate.onOrBefore
          description: >
            Begränsa urvalet till tjänstgöringar som har ett startDate värde
            innan eller på det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15").
          in: query
          schema:
            type: string
            format: date
        - name: startDate.onOrAfter
          description: >
            Begränsa urvalet till tjänstgöringar som har ett startDate värde på
            eller efter det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15").
          in: query
          schema:
            type: string
            format: date
        - name: endDate.onOrBefore
          description: >
            Begränsa urvalet till tjänstgöringar som har ett endDate värde innan
            eller på det angivna datumet (RFC 3339-format, t.ex. "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - name: endDate.onOrAfter
          description: >
            Begränsa urvalet till tjänstgöringar som har ett endDate värde på
            eller efter det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/DutiesExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - name: sortkey
          description: Anger hur resultatet ska sorteras.
          in: query
          schema:
            type: string
            enum:
              - StartDateDesc
              - StartDateAsc
              - ModifiedDesc
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/DutyExpanded"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /duties/lookup:
    post:
      tags:
        - Person
      summary: "Hämta många tjänstgöringar baserat på en lista av ID:n."
      description: >
        Istället för att hämta tjänstgöringar en i taget med en loop av
        GET-anrop så finns det även möjlighet att hämta många tjänstgöringar på
        en gång genom att skicka ett anrop med en lista med önskade
        tjänstgöringar.
      parameters:
        - $ref: "#/components/parameters/DutiesExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/DutyExpanded"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IdLookup"
        required: true
  "/duties/{id}":
    get:
      tags:
        - Person
      summary: Hämta tjänstgöring baserat på tjänstgörings ID
      parameters:
        - name: id
          in: path
          description: ID för tjänstgöringen som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/DutiesExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Duty"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /groups:
    get:
      tags:
        - Grupper
      summary: Hämta en lista med grupper.
      parameters:
        - name: groupType
          description: |
            Begränsa urvalet till grupper av en eller flera type.
          in: query
          schema:
            type: array
            items:
              $ref: "#/components/schemas/Code_GroupType"
        - name: schoolTypes
          description: >
            Begränsa urvalet av grupper till de som är har en av de angivna
            skolformerna.
          in: query
          schema:
            type: array
            items:
              $ref: "#/components/schemas/Code_SchoolType"
        - name: organisation
          description: >
            Begränsa urvalet till de grupper som direkt kopplade till angivna
            organisationselement.
          in: query
          schema:
            type: array
            items:
              type: string
              format: uuid
        - name: startDate.onOrBefore
          description: >
            Begränsa urvalet till grupper som har ett startDate värde innan
            eller på det angivna datumet (RFC 3339-format, t.ex. "2016-10-15").
          in: query
          schema:
            type: string
            format: date
        - name: startDate.onOrAfter
          description: >
            Begränsa urvalet till grupper som har ett startDate värde på eller
            efter det angivna datumet (RFC 3339-format, t.ex. "2016-10-15").
          in: query
          schema:
            type: string
            format: date
        - name: endDate.onOrBefore
          description: >
            Begränsa urvalet till grupper som har ett endDate värde innan eller
            på det angivna datumet (RFC 3339-format, t.ex. "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - name: endDate.onOrAfter
          description: >
            Begränsa urvalet till grupper som har ett endDate värde på eller
            efter det angivna datumet (RFC 3339-format, t.ex. "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/GroupsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - name: sortkey
          description: Anger hur resultatet ska sorteras.
          in: query
          schema:
            type: string
            enum:
              - ModifiedDesc
              - DisplayNameAsc
              - StartDateAsc
              - StartDateDesc
              - EndDateAsc
              - EndDateDesc
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/GroupExpanded"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /groups/lookup:
    post:
      tags:
        - Grupper
      summary: "Hämta många grupper baserat på en lista av ID:n."
      description: >
        Istället för att hämta grupper en i taget med en loop av GET-anrop så
        finns det även möjlighet att hämta många grupper på en gång genom att
        skicka ett anrop med en lista med önskade grupper.
      parameters:
        - $ref: "#/components/parameters/GroupsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/GroupExpanded"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IdLookup"
        required: true
  "/groups/{id}":
    get:
      tags:
        - Grupper
      summary: Hämta grupper baserat på ID
      parameters:
        - name: id
          in: path
          description: ID för grupp som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/GroupsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GroupExpanded"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /programmes:
    get:
      tags:
        - Studieinformation
      summary: Hämta en lista av program.
      parameters:
        - name: schoolType
          description: Begränsa urvalet till de program som matchar skolformen.
          in: query
          schema:
            type: array
            items:
              $ref: "#/components/schemas/Code_SchoolType"
        - name: code
          description: Begränsta urvalet till de program som matchar programkod
          in: query
          schema:
            type: string
        - name: parentProgramme
          description: >
            Begränsta urvalet till de program som matchar angivet
            parentProgramme.
          in: query
          schema:
            type: string
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - name: sortkey
          description: Anger hur resultatet ska sorteras.
          in: query
          schema:
            type: string
            enum:
              - NameAsc
              - CodeAsc
              - ModifiedDesc
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Programme"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /programmes/lookup:
    post:
      tags:
        - Studieinformation
      summary: "Hämta många program baserat på en lista av ID:n."
      description: >
        Istället för att hämta program en i taget med en loop av GET-anrop så
        finns det även möjlighet att hämta många program på en gång genom att
        skicka ett anrop med en lista med önskade program.
      parameters:
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Programme"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IdLookup"
        required: true
  "/programmes/{id}":
    get:
      tags:
        - Studieinformation
      summary: Hämta program baserat på  ID
      parameters:
        - name: id
          in: path
          description: ID för program som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Programme"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /studyplans:
    get:
      tags:
        - Studieinformation
      summary: Hämta en lista med studieplaner.
      parameters:
        - name: student
          description: Begränsa urvalet till utpekade elever.
          in: query
          schema:
            type: array
            items:
              type: string
              format: uuid
        - name: startDate.onOrBefore
          description: >
            Begränsa urvalet till studieplaner som har ett startDate värde innan
            eller på det angivna datumet (RFC 3339-format, t.ex. "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - name: startDate.onOrAfter
          description: >
            Begränsa urvalet till studieplaner som har ett startDate värde på
            eller efter det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - name: endDate.onOrBefore
          description: >
            Begränsa urvalet till studieplaner som har ett endDate värde innan
            eller på det angivna datumet (RFC 3339-format, t.ex. "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - name: endDate.onOrAfter
          description: >
            Begränsa urvalet till studieplaner som har ett endDate värde på
            eller efter det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - name: sortkey
          description: Anger hur resultatet ska sorteras.
          in: query
          schema:
            type: string
            enum:
              - ModifiedDesc
              - StartDateAsc
              - StartDateDesc
              - EndDateAsc
              - EndDateDesc
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/StudyPlan"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  "/studyplans/{id}":
    get:
      tags:
        - Studieinformation
      summary: Hämta studieplan baserat på ID
      parameters:
        - name: id
          in: path
          description: ID för studieplan som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/StudyPlan"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /syllabuses:
    get:
      tags:
        - Studieinformation
      summary: Hämta en lista med syllabuses.
      parameters:
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - name: sortkey
          description: Anger hur resultatet ska sorteras.
          in: query
          schema:
            type: string
            enum:
              - ModifiedDesc
              - SubjectNameAsc
              - SubjectNameDesc
              - SubjectCodeAsc
              - SubjectCodeDesc
              - CourseNameAsc
              - CourseNameDesc
              - CourseCodeAsc
              - CourseCodeDesc
              - SubjectDesignationAsc
              - SubjectDesignationDesc
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Syllabus"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /syllabuses/lookup:
    post:
      tags:
        - Studieinformation
      summary: "Hämta många syllabuses baserat på en lista av ID:n."
      description: >
        Istället för att hämta syllabuses en i taget med en loop av GET-anrop så
        finns det även möjlighet att hämta många syllabuses på en gång genom att
        skicka ett anrop med en lista med önskade syllabuses.
      parameters:
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Syllabus"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IdLookup"
        required: true
  "/syllabuses/{id}":
    get:
      tags:
        - Studieinformation
      summary: Hämta syllabus baserat på ID
      parameters:
        - name: id
          in: path
          description: ID för syllabus som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Syllabus"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /schoolUnitOfferings:
    get:
      tags:
        - Studieinformation
      summary: Hämta en lista med skolenheters erbjudanden.
      parameters:
        - name: organisation
          description: Begränsa urvalet till ett visst organisationslement (offeredAt).
          in: query
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - name: sortkey
          in: query
          schema:
            type: string
            enum:
              - ModifiedDesc
              - StartDateAsc
              - StartDateDesc
              - EndDateAsc
              - EndDateDesc
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/SchoolUnitOffering"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /schoolUnitOfferings/lookup:
    post:
      tags:
        - Studieinformation
      summary: "Hämta många program baserat på en lista av ID:n."
      description: >
        Istället för att hämta program en i taget med en loop av GET-anrop så
        finns det även möjlighet att hämta många program på en gång genom att
        skicka ett anrop med en lista med önskade program.
      parameters:
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/SchoolUnitOffering"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IdLookup"
        required: true
  "/schoolUnitOfferings/{id}":
    get:
      tags:
        - Studieinformation
      summary: Hämta en resurs baserat på ID
      parameters:
        - name: id
          in: path
          description: ID för resursen som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SchoolUnitOffering"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /activities:
    get:
      tags:
        - Aktiviteter
      summary: Hämta en lista med aktiviteter baserat på ett antal sökparametrar.
      parameters:
        - name: member
          description: >-
            Begränsa urvalet till aktiviteter vars grupper `groups` inkluderar
            denna person. Tidsbegräninsgar (`startDate`, `endDate`) appliceras
            inte för detta filter.
          in: query
          schema:
            type: string
            format: uuid
        - name: teacher
          description: >-
            Begränsa urvalet till aktiviteter vars lärare `teachers` inkluderar
            detta id i attributet `duty.id`. Tidsbegräninsgar (`startDate`,
            `endDate`) appliceras inte för detta filter.
          in: query
          schema:
            type: string
            format: uuid
        - name: organisation
          description: >-
            Begränsa urvalet till utpekat organisationselement och dess
            underliggande element.
          in: query
          schema:
            type: string
            format: uuid
        - name: group
          description: Begränsa urvalet till utpekad grupp.
          in: query
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/ActivitiesExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - $ref: "#/components/parameters/Sortkey"
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/ActivityExpanded"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /activities/lookup:
    post:
      tags:
        - Aktiviteter
      summary: "Hämta en lista med aktiviteter baserat på motsvarande lista av ID:n."
      description: >
        Istället för att hämta aktiviteter en i taget med en loop av GET-anrop
        så finns det även möjlighet att hämta många aktiviteter på en gång genom
        att skicka ett anrop med en lista med önskade aktiviteter.
      parameters:
        - $ref: "#/components/parameters/ActivitiesExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ActivityExpanded"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                ids:
                  type: array
                  items:
                    type: string
                    format: uuid
                teachers:
                  type: array
                  description: >-
                    Hämta aktiviteter där attributet `teachers` inkluderar något
                    av de angivna idn i `duty.id`.
                  items:
                    type: string
                    format: uuid
                members:
                  type: array
                  description: >-
                    Hämta aktiviteter där attributet `groups` inkluderar en
                    grupp som matchar ett av angivna idn utifrån
                    `groupMemberships.person.id`.
                  items:
                    type: string
                    format: uuid
  "/activities/{id}":
    get:
      tags:
        - Aktiviteter
      summary: Hämta en aktivitet baserat på dess ID
      parameters:
        - name: id
          in: path
          description: ID för aktivitet som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/ActivitiesExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ActivityExpanded"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /calendarEvents:
    get:
      tags:
        - Kalenderhändelser
      summary: Returnerar kalenderhändelser utifrån en aktivitet eller student.
      parameters:
        - name: startTime.onOrAfter
          description: >
            Hämta kalenderhändelser från och med denna tidpunkt (RFC 3339
            format, t.ex. "2016-10-15T09:00:00+02:00").
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: startTime.onOrBefore
          description: >
            Hämta kalenderhändelser till och med denna tidpunkt (RFC 3339
            format, t.ex. "2016-10-15T09:00:00+02:00").
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: endTime.onOrBefore
          description: >
            Hämta kalenderhändelser till och med denna tidpunkt (RFC 3339
            format, t.ex. "2016-10-15T11:00:00+02:00").
          in: query
          schema:
            type: string
            format: date-time
        - name: endTime.onOrAfter
          description: >
            Hämta kalenderhändelser från och med denna tidpunkt (RFC 3339
            format, t.ex. "2016-10-15T11:00:00+02:00").
          in: query
          schema:
            type: string
            format: date-time
        - name: activity
          description: Begränsa urvalet till utpekad aktivitet.
          in: query
          schema:
            type: string
            format: uuid
        - name: student
          description: >-
            Begränsa urvalet till kalenderhändelser vars aktivitet
            `activity.group` => `group.groupMemberships.person.id` eller
            `studentExceptions.student.id` inkluderar denna person.
            Tidsbegräninsgar (`startDate`, `endDate`) appliceras inte för detta
            filter.
          in: query
          schema:
            type: string
            format: uuid
        - name: teacher
          description: >-
            Begränsa urvalet till kalenderhändelser vars aktiviteter
            `activity.teachers.duty.id` samt `teacherExceptions.duty.id`
            inkluderar denna tjänst `duty.id`. Tidsbegräninsgar (`startDate`,
            `endDate`) appliceras inte för detta filter.
          in: query
          schema:
            type: string
            format: uuid
        - name: organisation
          description: >-
            Begränsa urvalet till utpekat organisationselement och dess
            underliggande element.
          in: query
          schema:
            type: string
            format: uuid
        - name: group
          description: >-
            Begränsa urvalet till utpekad grupp relaterat genom kopplade
            aktiviteter.
          in: query
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/CalendarEventsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - name: sortkey
          description: Anger hur resultatet ska sorteras.
          in: query
          schema:
            type: string
            enum:
              - ModifiedDesc
              - StartTimeAsc
              - StartTimeDesc
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/CalendarEvent"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  "/calendarEvents/{id}":
    get:
      tags:
        - Kalenderhändelser
      summary: Returnerar en kalenderhändelse utifrån ID
      parameters:
        - name: id
          description: Hämta en kalenderhändelse.
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/CalendarEventsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CalendarEvent"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /calendarEvents/lookup:
    post:
      tags:
        - Kalenderhändelser
      summary: >
        Hämta kalenderhändelser baserat på en lista av ID:n eller av Id från
        aktiviteter eller av Id från personer.
      description: >
        Istället för att hämta kalenderhändelser en i taget med en loop av
        GET-anrop så finns det även möjlighet att hämta många kalenderhändelser
        på en gång genom att skicka ett anrop med en lista med önskade
        kalenderhändelser.
      parameters:
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Attendance"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                ids:
                  type: array
                  items:
                    type: string
                    format: uuid
                activities:
                  type: array
                  items:
                    type: string
                    format: uuid
                student:
                  type: array
                  items:
                    type: string
                    format: uuid
                teacher:
                  type: array
                  items:
                    type: string
                    format: uuid
  /attendances:
    get:
      tags:
        - Närvaro
      summary: Returnerar registrerad närvaro utifrån en aktivitet eller student.
      parameters:
        - name: student
          description: Begränsa urvalet till utpekad person.
          in: query
          schema:
            type: string
            format: uuid
        - name: organisation
          description: >-
            Begränsa urvalet till utpekat organisationselement och dess
            underliggande element.
          in: query
          schema:
            type: string
            format: uuid
        - name: calendarEvent
          description: Begränsa urvalet till utpekad kalenderpost.
          in: query
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Attendance"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
    post:
      tags:
        - Närvaro
      summary: Registrera en ny närvaro post.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Attendance"
      responses:
        "200":
          description: Post skapad.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Attendance"
        default:
          $ref: "#/components/responses/default_error"
  /attendances/lookup:
    post:
      tags:
        - Närvaro
      summary: >
        Hämta närvaro baserat på en lista av ID:n eller av Id från aktiviteter
        eller av Id från elever.
      description: >
        Istället för att hämta aktiviteter en i taget med en loop av GET-anrop
        så finns det även möjlighet att hämta många aktiviteter på en gång genom
        att skicka ett anrop med en lista med önskade aktiviteter.
      parameters:
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Attendance"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                ids:
                  type: array
                  items:
                    type: string
                    format: uuid
                activities:
                  type: array
                  items:
                    type: string
                    format: uuid
                students:
                  type: array
                  items:
                    type: string
                    format: uuid
                calendareEvents:
                  type: array
                  items:
                    type: string
                    format: uuid
  "/attendances/{id}":
    get:
      tags:
        - Närvaro
      summary: Hämta en närvaro post utifrån ID.
      parameters:
        - name: id
          description: Hämta en Attendance post.
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Attendance"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
    delete:
      tags:
        - Närvaro
      summary: Ta bort en närvaro post.
      parameters:
        - name: id
          in: path
          description: ID för närvaro posten som ska tas bort.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        "204":
          $ref: "#/components/responses/204_removed"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /attendanceEvents:
    get:
      tags:
        - Närvarohändelser
      summary: Returnerar registrerade in-/utcheckningar.
      parameters:
        - name: group
          description: Begränsa urvalet till utpekade gruppers ID.
          in: query
          schema:
            type: array
            items:
              type: string
              format: uuid
        - name: person
          description: Begränsa urvalet till utpekad person.
          in: query
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/AttendanceEventsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/AttendanceEvent"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
    post:
      tags:
        - Närvarohändelser
      summary: Registrera en ny närvarohändelse (in-/utcheckning).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AttendanceEvent"
      responses:
        "200":
          description: Post skapad.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AttendanceEvent"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  "/attendanceEvents/{id}":
    get:
      tags:
        - Närvarohändelser
      summary: Hämta en närvarohändelse utifrån ID.
      parameters:
        - name: id
          description: Hämta en närvarohändelse.
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/AttendanceEventsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AttendanceEvent"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
    delete:
      tags:
        - Närvarohändelser
      summary: Ta bort en närvarohändelse.
      parameters:
        - name: id
          in: path
          description: ID för närvaro posten som ska tas bort.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        "204":
          $ref: "#/components/responses/204_removed"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /attendanceEvents/lookup:
    post:
      tags:
        - Närvarohändelser
      summary: >-
        Hämta en lista med närvarohändelser baserat på motsvarande lista av
        ID:n.
      description: >
        Istället för att hämta närvarohändelse en i taget med en loop av
        GET-anrop så finns det även möjlighet att hämta många närvarohändelser
        på en gång genom att skicka ett anrop med en lista med önskade
        närvarohändelser.
      parameters:
        - $ref: "#/components/parameters/AttendanceEventsExpandParameter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/AttendanceEvent"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                ids:
                  type: array
                  items:
                    type: string
                    format: uuid
                person:
                  type: array
                  items:
                    type: string
                    format: uuid
                group:
                  type: array
                  items:
                    type: string
                    format: uuid
  /attendanceSchedule:
    get:
      tags:
        - Vistelseschema
      summary: Returnerar registrerade vistelsescheman.
      parameters:
        - name: placement
          description: Begränsa urvalet till scheman för utpekad placering.
          in: query
          schema:
            type: string
            format: uuid
        - name: group
          description: >-
            Begränsa urvalet till scheman vars placeringar är kopplad till
            utpekad grupp.
          in: query
          schema:
            type: string
            format: uuid
        - name: startDate.onOrBefore
          description: >
            Begränsa urvalet till vistelseschema som har ett startDate värde
            innan eller på det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15").
          in: query
          schema:
            type: string
            format: date
        - name: startDate.onOrAfter
          description: >
            Begränsa urvalet till vistelseschema som har ett startDate värde på
            eller efter det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15").
          in: query
          schema:
            type: string
            format: date
        - name: endDate.onOrBefore
          description: >
            Begränsa urvalet till vistelseschema som har ett endDate värde innan
            eller på det angivna datumet (RFC 3339-format, t.ex. "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - name: endDate.onOrAfter
          description: >
            Begränsa urvalet till vistelseschema som har ett endDate värde på
            eller efter det angivna datumet (RFC 3339-format, t.ex.
            "2016-10-15"). 

            Poster med ett endDate som ej är satt, tas alltid med.
          in: query
          schema:
            type: string
            format: date
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/AttendanceSchedule"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
    post:
      tags:
        - Vistelseschema
      summary: Registrera ett nytt vistelseschema.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AttendanceSchedule"
      responses:
        "200":
          description: Post skapad.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AttendanceSchedule"
        default:
          $ref: "#/components/responses/default_error"
  "/attendanceSchedule/{id}":
    get:
      tags:
        - Vistelseschema
      summary: Hämta ett vistelseschema utifrån ID.
      parameters:
        - name: id
          description: Id för vistelseschema att hämta.
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AttendanceSchedule"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
    delete:
      tags:
        - Vistelseschema
      summary: Ta bort ett vistelseschema.
      parameters:
        - name: id
          in: path
          description: ID för vistelseschema som ska tas bort.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        "204":
          $ref: "#/components/responses/204_removed"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /attendanceSchedule/lookup:
    post:
      tags:
        - Vistelseschema
      summary: "Hämta många vistelsescheman baserat på en lista av ID:n."
      description: >
        Istället för att hämta vistelsescheman ett i taget med en loop av
        GET-anrop så finns det även möjlighet att hämta många vistelsescheman på
        en gång genom att skicka ett anrop med en lista med önskade
        vistelsescheman.
      parameters:
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ActivityExpanded"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                ids:
                  type: array
                  items:
                    type: string
                    format: uuid
                placement:
                  type: array
                  items:
                    type: string
                    format: uuid
  /grades:
    get:
      tags:
        - Betyg
      summary: Hämta en lista med betyg.
      parameters:
        - name: organisation
          description: Begränsa urvalet till de betyg som är kopplade till skolenhet.
          in: query
          schema:
            type: string
            format: uuid
        - name: student
          description: Begränsa urvalet till de betyg som tillhör eleven
          in: query
          schema:
            type: string
            format: uuid
        - name: registeredBy
          description: Begränsa urvalet till de betyg som är registrerade av personen
          in: query
          schema:
            type: string
            format: uuid
        - name: gradingTeacher
          description: Begränsa urvalet till de betyg som är utfärdade av ansvarig lärare
          in: query
          schema:
            type: string
            format: uuid
        - name: registeredDate.onOrAfter
          description: >
            Begränsa urvalet av betyg till de som är registerade inom det
            intervall som startar på angivet datum (RFC 3339-format, t.ex.
            "2016-10-15"). Inkluderande.
          in: query
          schema:
            type: string
            format: date
        - name: registeredDate.onOrBefore
          description: >
            Begränsa urvalet av betyg till de som är registerade inom det
            intervall som slutar på angivet datum (RFC 3339-format, t.ex.
            "2016-10-15"). Inkluderande.
          in: query
          schema:
            type: string
            format: date
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - name: sortkey
          description: Anger hur resultatet ska sorteras.
          in: query
          schema:
            type: string
            enum:
              - registeredDateAsc
              - registeredDateDesc
              - ModifiedDesc
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Grade"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /grades/lookup:
    post:
      tags:
        - Betyg
      summary: "Hämta många betyg baserat på en lista av ID:n."
      description: >
        Istället för att hämta betyg ett i taget med en loop a GET-anrop så
        finns det även möjlighet att hämta många betyg på en gång genom att
        skicka ett anrop med en lista med önskade objekt.
      parameters:
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Grade"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IdLookup"
        required: true
  "/grades/{id}":
    get:
      tags:
        - Betyg
      summary: Hämta betyg baserat på ID
      parameters:
        - name: id
          in: path
          description: ID för betyg som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Grade"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /absences:
    get:
      tags:
        - Närvaro
      summary: |
        Hämta en lista av beviljad ledighet och anmäld frånvaro.
      parameters:
        - name: organisation
          description: >
            Begränsa urvalet till den frånvaro/ledighet som är kopplad till
            organisationen.
          in: query
          schema:
            type: string
            format: uuid
        - name: student
          description: >
            Begränsa urvalet till den frånvaro/ledighet som är kopplad till
            eleven
          in: query
          schema:
            type: string
            format: uuid
        - name: registeredBy
          description: >
            Begränsa urvalet till den frånvaro/ledighet som är registrerad av
            personen
          in: query
          schema:
            type: string
            format: uuid
        - name: type
          description: Begränsa urvalet till den frånvaro/ledighet som är av angiven typ
          in: query
          schema:
            type: string
            $ref: "#/components/schemas/Code_AbsenceType"
        - name: startTime.onOrBefore
          description: >
            Endast anmälda frånvaro som startar innan eller på denna tidpunkt
            (RFC 3339 format, tex "2015-12-12T10:30:00+01:00"). Inkluderande.
          in: query
          schema:
            type: string
            format: date-time
        - name: startTime.onOrAfter
          description: >
            Endast anmälda frånvaro/ledighet som startar efter denna tidpunkt
            (RFC 3339 format, tex "2015-12-12T10:30:00+01:00"). Exkluderande.
          in: query
          schema:
            type: string
            format: date-time
        - name: endTime.onOrBefore
          description: >
            Endast anmälda frånvaro som slutar innan eller på denna tidpunkt
            (RFC 3339 format, tex "2015-12-12T10:30:00+01:00"). Inkluderande.
          in: query
          schema:
            type: string
            format: date-time
        - name: endTime.onOrAfter
          description: >
            Endast anmälda frånvaro/ledighet som slutar efter denna tidpunkt
            (RFC 3339 format, tex "2015-12-12T10:30:00+01:00"). Exkluderande.
          in: query
          schema:
            type: string
            format: date-time
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - name: sortkey
          description: Anger hur resultatet ska sorteras.
          in: query
          schema:
            type: string
            enum:
              - ModifiedDesc
              - StartTimeAsc
              - StartTimeDesc
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Absence"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
    post:
      tags:
        - Närvaro
      summary: Registrera en ny anmäld frånvaropost eller beviljad ledighet
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Absence"
      responses:
        "200":
          description: Post skapad.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Absence"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /absences/lookup:
    post:
      tags:
        - Närvaro
      summary: "Hämta många anmälda frånvaroposter baserat på en lista av ID:n."
      description: >
        Istället för att hämta anmälda frånvaro en i taget med en loop av
        GET-anrop så finns det även möjlighet att hämta många anmälda
        frånvaroposter på en gång genom att skicka ett anrop med en lista med
        önskade objekt.
      parameters:
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Absence"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IdLookup"
        required: true
  "/absences/{id}":
    get:
      tags:
        - Närvaro
      summary: Hämta anmäld frånvaro baserat på ID
      parameters:
        - name: id
          in: path
          description: ID för anmäld frånvaro som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Absence"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /aggregatedAttendance:
    get:
      tags:
        - Närvaro
      summary: |
        Returnerar summerad närvaro information utifrån angivet tidsintervall.
      parameters:
        - name: startDate
          description: >
            Hämta aggregerad närvaro från och med detta datum (RFC 3339-format,
            e.g. "2016-10-15")
          in: query
          required: true
          schema:
            type: string
            format: date
        - name: endDate
          description: >
            Hämta aggregerad närvaro till och med detta datum (RFC 3339-format,
            e.g. "2016-10-15")
          in: query
          required: true
          schema:
            type: string
            format: date
        - name: organisation
          description: >
            Inkludera endast närvaro från aktiviteter vilka ägs av angivet
            organisationselement.
          in: query
          schema:
            type: string
            format: uuid
        - name: schoolType
          description: >
            Hämta endast närvaro information från aktiviteter vilka är kopplade
            mot angiven skolform.
          in: query
          schema:
            type: array
            items:
              $ref: "#/components/schemas/Code_SchoolType"
        - name: student
          description: Filtrera på elev (person).
          in: query
          schema:
            type: array
            items:
              type: string
              format: uuid
        - name: expand
          description: >
            Beskriver om och vilken expanderade data som returneras i samband
            med närvaroinformationen.
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - activity
                - student
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/AggregatedAttendance"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /resources:
    get:
      tags:
        - Rum och resurser
      summary: Hämta en lista med resurser.
      parameters:
        - name: organisation
          description: Begränsa urvalet till ett visst organisationselemet (owner).
          in: query
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - $ref: "#/components/parameters/Sortkey"
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Resource"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /resources/lookup:
    post:
      tags:
        - Rum och resurser
      summary: "Hämta många resurser baserat på en lista av ID:n."
      description: >
        Istället för att hämta resurser en i taget med en loop av GET-anrop så
        finns det även möjlighet att hämta många resurser på en gång genom att
        skicka ett anrop med en lista med önskade resurser.
      parameters:
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Resource"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IdLookup"
        required: true
  "/resources/{id}":
    get:
      tags:
        - Rum och resurser
      summary: Hämta en resurs baserat på ID
      parameters:
        - name: id
          in: path
          description: ID för resursen som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Resource"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /rooms:
    get:
      tags:
        - Rum och resurser
      summary: Hämta en lista med salar.
      parameters:
        - name: organisation
          description: Begränsa urvalet till ett visst organisationselemet (owner).
          in: query
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/SearchCreatedBefore"
        - $ref: "#/components/parameters/SearchCreatedAfter"
        - $ref: "#/components/parameters/SearchModifiedBefore"
        - $ref: "#/components/parameters/SearchModifiedAfter"
        - $ref: "#/components/parameters/ExpandReferenceNames"
        - $ref: "#/components/parameters/Sortkey"
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Room"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /rooms/lookup:
    post:
      tags:
        - Rum och resurser
      summary: "Hämta många salar baserat på en lista av ID:n."
      description: >
        Istället för att hämta salar en i taget med en loop av GET-anrop så
        finns det även möjlighet att hämta många salar på en gång genom att
        skicka ett anrop med en lista med önskade salar.
      parameters:
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Room"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "503":
          $ref: "#/components/responses/503_overload"
        default:
          $ref: "#/components/responses/default_error"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IdLookup"
        required: true
  "/rooms/{id}":
    get:
      tags:
        - Rum och resurser
      summary: Hämta en sal baserat på ID
      parameters:
        - name: id
          in: path
          description: ID för salen som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
        - $ref: "#/components/parameters/ExpandReferenceNames"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Room"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /subscriptions:
    get:
      tags:
        - Prenumeration
      summary: Hämta en lista av prenumerationer.
      parameters:
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Subscription"
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
    post:
      tags:
        - Prenumeration
      summary: Skapa en prenumeration
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateSubscription"
            example:
              name: Nya
              target: "https://pastebin/788"
              resourceTypes:
                - Organsation
                - Person
                - Duty
      callbacks:
        subscriptionEvent:
          "{$request.body#/target}":
            post:
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      type: object
                      properties:
                        modifiedEntites:
                          type: array
                          items:
                            $ref: "#/components/schemas/Code_ObjectType"
                          description: >
                            En lista med datatyper där det finns uppdaterad
                            eller ny information att hämta på respektive
                            ändpunkt.
                        deletedEntities:
                          type: boolean
                          description: >
                            True indikerar att det finns information om
                            borttagna entiteter att hämta från ändpunkten
                            `deletedEntitites`.
              responses:
                "200":
                  description: Kod som returneras när anropet accepteras.
      responses:
        "201":
          description: Prenumeration skapad.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  "/subscriptions/{id}":
    delete:
      tags:
        - Prenumeration
      summary: Ta bort en prenumeration
      parameters:
        - name: id
          in: path
          description: ID för prenumerationen som ska tas bort
          required: true
          schema:
            type: string
            format: uuid
      responses:
        "204":
          description: Prenumeration borttagen.
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
    get:
      tags:
        - Prenumeration
      summary: Hämta prenumeration baserat på ID
      parameters:
        - name: id
          in: path
          description: ID för prenumerationen som ska hämtas
          required: true
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
    patch:
      tags:
        - Prenumeration
      summary: Uppdatera expire time på prenumerationen baserat på ID
      parameters:
        - name: id
          in: path
          description: ID för prenumerationen som ska uppdateras
          required: true
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
        "400":
          $ref: "#/components/responses/400_invalid_id"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        "404":
          $ref: "#/components/responses/404_not_found"
        default:
          $ref: "#/components/responses/default_error"
  /log/:
    post:
      tags:
        - Loggning
      summary: Logga en händelse
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LogEntry"
            example:
              message: courseCode "MAT101" kan inte mappas mot någon känd kurs.
              messageType: ValueMapping
              resourceType: Syllabus
              resourceId: 5e10f18c-6d0d-450b-a4b8-fa99e1053f78
              resourceUrl: >-
                https://service.example.se/ss12000/activities?organisation=1bf329c9-2f42-4c60-8e39-01cdbcc1704f&expand=syllabus
              severityLevel: Warning
      responses:
        "201":
          description: Loggpost skapad.
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /statistics/:
    post:
      tags:
        - Loggning
      summary: Logga statistik relaterat till överförda objekt
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StatisticsEntry"
            example:
              resourceType: Activity
              resourceUrl: >-
                https://service.example.se/ss12000/activities?organisation=1bf329c9-2f42-4c60-8e39-01cdbcc1704f
              newCount: 2
              updatedCount: 234
              deletedCount: 0
              timeOfOccurance: "2020-04-08T12:51:31.322Z"
      responses:
        "201":
          description: Statistikpost skapad.
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
  /deletedEntities:
    get:
      tags:
        - Borttag
      summary: Hämta en lista av entiteter som tagits bort av tjänsten.
      parameters:
        - name: after
          in: query
          description: >
            Hämta borttag som inträffat efter specificerad tidpunkt (RFC 3339
            format, tex "2015-12-12T10:30:00+01:00").
          schema:
            type: string
            format: date-time
        - name: entities
          in: query
          description: En lista med de entitetstyper vars borttag ska hämtas
          schema:
            type: array
            items:
              $ref: "#/components/schemas/Code_ObjectType"
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: Anropet lyckades.
          content:
            application/json:
              schema:
                type: object
                title: deletedEntities
                properties:
                  data:
                    type: object
                    properties:
                      absences:
                        type: array
                        items:
                          type: string
                          format: uuid
                      attendanceEvents:
                        type: array
                        items:
                          type: string
                          format: uuid
                      attendances:
                        type: array
                        items:
                          type: string
                          format: uuid
                      grades:
                        type: array
                        items:
                          type: string
                          format: uuid
                      calendarEvents:
                        type: array
                        items:
                          type: string
                          format: uuid
                      attendanceSchedules:
                        type: array
                        items:
                          type: string
                          format: uuid
                      resources:
                        type: array
                        items:
                          type: string
                          format: uuid
                      rooms:
                        type: array
                        items:
                          type: string
                          format: uuid
                      activitites:
                        type: array
                        items:
                          type: string
                          format: uuid
                      duties:
                        type: array
                        items:
                          type: string
                          format: uuid
                      placements:
                        type: array
                        items:
                          type: string
                          format: uuid
                      studyPlans:
                        type: array
                        items:
                          type: string
                          format: uuid
                      programmes:
                        type: array
                        items:
                          type: string
                          format: uuid
                      syllabuses:
                        type: array
                        items:
                          type: string
                          format: uuid
                      schoolUnitOfferings:
                        type: array
                        items:
                          type: string
                          format: uuid
                      groups:
                        type: array
                        items:
                          type: string
                          format: uuid
                      persons:
                        type: array
                        items:
                          type: string
                          format: uuid
                      organisations:
                        type: array
                        items:
                          type: string
                          format: uuid
                  pageToken:
                    type: string
                    nullable: true
                    description: >
                      Om värdet är null finns inget mer att hämta på det token
                      som skickades in som query parameter.
                required:
                  - data
        "400":
          $ref: "#/components/responses/400_invalid_filter"
        "403":
          $ref: "#/components/responses/403_not_authorised"
        default:
          $ref: "#/components/responses/default_error"
externalDocs:
  description: För mer information hämtas från SIS - TK450
  url: "https://sis.se/standardutveckling/tksidor/tk400499/sistk450/"
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
  schemas:
    Absence:
      title: Absence
      type: object
      description: >
        Absence ska användas för att beskriva anmäld frånvaro för en elev. Den
        anmälda frånvaron kan avse en av skolan beviljad ledighet eller en
        frånvaro av annan art som anmäls av eleven själv eller elevens
        vårdnadshavare.
      properties:
        id:
          type: string
          format: uuid
          description: Identifierare för den anmälda frånvaron.
          readOnly: true
        meta:
          $ref: "#/components/schemas/Meta"
          readOnly: true
        startTime:
          type: string
          format: date-time
          description: >
            Starttid för den anmälda frånvaron (RFC 3339 format, tex
            "2015-12-12T10:30:00+01:00").
        endTime:
          type: string
          format: date-time
          description: >
            Sluttid för den anmälda frånvaron (RFC 3339, format tex
            "2015-12-12T10:30:00+01:00").
        type:
          $ref: "#/components/schemas/Code_AbsenceType"
        student:
          allOf:
            - $ref: "#/components/schemas/PersonReference"
            - description: Referens till eleven.
        organisation:
          allOf:
            - $ref: "#/components/schemas/SchoolUnitReference"
            - description: Den skolenhet som den anmälda frånvaron avser.
        registeredBy:
          allOf:
            - $ref: "#/components/schemas/PersonReference"
            - description: |
                Referens till den person som registrerat den anmälda frånvaron.
      required:
        - id
        - meta
        - startTime
        - endTime
        - type
        - student
    Activity:
      title: Activity
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Identifierare för aktiviteten.
        meta:
          $ref: "#/components/schemas/Meta"
        displayName:
          type: string
          description: "Namn på aktiviteten, i presentationssyfte."
        calendarEventsRequired:
          type: boolean
          description: >
            Detta ska uttrycka huruvida aktiviteten ska vara underlag för
            generering av lektion eller inte.
        startDate:
          type: string
          format: date
          description: >
            Datum för när aktiviteten startar (RFC 3339-format, t.ex.
            "2016-10-15").
        endDate:
          type: string
          format: date
          description: >
            Datum för när aktiviteten slutar (RFC 3339-format, t.ex.
            "2016-10-15").
        activityType:
          type: string
          title: Code_ActivityType
          enum:
            - Undervisning
            - Elevaktivitet
            - Provaktivitet
            - Läraraktivitet
            - Övrigt
          description: >
            Beskriver vilken typ av aktivitet som avses.

            * _Undervisning_ - Schemalagd tid med koppling till timplan, som ska
            närvarorapporteras.

            * _Elevaktivitet_ - Schemalagd tid för elever som inte är
            undervisning enligt timplan, och som ska närvarorapporteras,
            exempelvis mentorstid, klassråd eller friluftsdag

            * _Provaktivitet_ - En aktivitet som är avsedd för att definiera ett
            eller flera provtillfällen

            * _Läraraktivitet_ - Tid för lärare som inte är undervisning och som
            ingår i lärarens arbetstid, kan vara schemalagd, men ska inte
            närvarorapporteras, exempelvis konferenstid.

            * _Övrigt_ - Läxhjälp, lunch, bokning och annat som finns på
            schemat, men inte är undervisning och inte ska närvarorapporteras
        comment:
          type: string
          description: En text med kompletterande information.
        minutesPlanned:
          type: integer
          description: Den totalt planerade tiden i minuter.
        groups:
          type: array
          minItems: 1
          items:
            $ref: "#/components/schemas/GroupReference"
          description: De grupper som är kopplade till aktiviteten.
        teachers:
          type: array
          items:
            type: object
            title: DutyAssignment
            properties:
              duty:
                $ref: "#/components/schemas/DutyReference"
                required: true
              startDate:
                type: string
                format: date
                description: >
                  Datum för när lärarens deltagande i aktiviteten startar (RFC
                  3339-format, t.ex. "2016-10-15").
              endDate:
                type: string
                format: date
                description: >
                  Datum för när lärarens deltagande i aktiviteten slutar (RFC
                  3339-format, t.ex. "2016-10-15").
              minutesPlanned:
                type: integer
                description: Det antal minuter läraren är kopplad till aktiviteten
              grader:
                type: boolean
                description: >-
                  Markerar att läraren har rollen som betygsättande lärare för
                  aktiviteten
          description: De lärare (Duty-objekt) som är kopplade till aktiviteten.
        syllabus:
          allOf:
            - $ref: "#/components/schemas/SyllabusReference"
            - description: Det kurs- eller ämnesplan som aktiviteten är knuten till.
        organisation:
          allOf:
            - $ref: "#/components/schemas/OrganisationReference"
            - description: Den skolenhet/skola som aktiviteten är knuten till.
        parentActivity:
          allOf:
            - $ref: "#/components/schemas/ActivityReference"
            - description: >
                Möjlighet att koppla aktiviteten till en eller flera
                ursprungliga “föräldraaktiviteter”.
      required:
        - id
        - displayName
        - organisation
        - calendarEventsRequired
        - startDate
        - groups
    ActivityExpanded:
      allOf:
        - $ref: "#/components/schemas/Activity"
        - type: object
          properties:
            _embedded:
              type: object
              properties:
                groups:
                  type: array
                  items:
                    $ref: "#/components/schemas/Group"
                syllabus:
                  $ref: "#/components/schemas/Syllabus"
                teachers:
                  type: array
                  items:
                    $ref: "#/components/schemas/Duty"
    ActivityReference:
      allOf:
        - $ref: "#/components/schemas/ObjectReference"
        - title: ActivityReference
          description: Referens till en aktivitet
    AggregatedAttendance:
      type: object
      title: AggregatedAttendance
      properties:
        activity:
          $ref: "#/components/schemas/ActivityReference"
        student:
          allOf:
            - $ref: "#/components/schemas/PersonReference"
            - description: Referens till eleven
        startDate:
          type: string
          format: date
          description: >
            Startdatum för den aggregerade närvaron (RFC 3339-format, t.ex.
            "2016-10-15"). Inkluderande.
        endDate:
          type: string
          format: date
          description: >
            Slutdatum för den aggregerade närvaron (RFC 3339-format, t.ex.
            "2016-10-15"). Inkluderande.
        attendanceSum:
          type: integer
          description: |
            Summerad tid i minuter för elevens närvaro på kalenderhändelser.
        validAbsenceSum:
          type: integer
          description: >
            Summerad tid i minuter för elevens giltiga frånvaro på
            kalenderhändelser.
        invalidAbsenceSum:
          type: integer
          description: >
            Summerad tid i minuter för elevens ogiltiga frånvaro på
            kalenderhändelser.
        otherAttendanceSum:
          type: integer
          description: >
            Summerad tid i minuter för elevens deltagande i annan skolaktivitet,
            såsom elevråd, i stället för deltagande på kalenderhändelser.
        reportedSum:
          type: integer
          description: >
            Summerad tid i minuter för alla elevens kalenderhändelser där
            läraren eller annan personal har markerat lektionen som
            färdigrapporterad.
        offeredSum:
          type: integer
          description: >
            Summerad tid i minuter för alla kalenderhändelser där eleven har
            erbjudits möjlighet att närvara.
        _embedded:
          type: object
          properties:
            activity:
              $ref: "#/components/schemas/Activity"
            student:
              $ref: "#/components/schemas/Person"
      required:
        - startDate
        - endDate
        - activity
        - student
        - attendanceSum
    Attendance:
      type: object
      title: Attendance
      properties:
        id:
          type: string
          format: uuid
          description: Identifierare för närvaroposten.
          readOnly: true
        meta:
          $ref: "#/components/schemas/Meta"
          readOnly: true
        calendarEvent:
          $ref: "#/components/schemas/CalendarEventReference"
        student:
          allOf:
            - $ref: "#/components/schemas/PersonReference"
            - description: Referens till eleven.
        reporter:
          allOf:
            - $ref: "#/components/schemas/PersonReference"
            - description: Person som rapporterat kalenderhändelsen.
        isReported:
          type: boolean
          description: Anger om lektionen är rapporterad.
        attendanceMinutes:
          type: integer
          description: Längd i minuter för elevens närvaro på kalenderhändelsen.
        validAbsenceMinutes:
          type: integer
          description: |
            Längd i minuter för elevens giltiga frånvaro på kalenderhändelsen.
        invalidAbsenceMinutes:
          type: integer
          description: |
            Längd i minuter för elevens ogiltiga frånvaro på kalenderhändelsen.
        otherAttendanceMinutes:
          type: integer
          description: >
            Tid i  minuter för elevens deltagande i annan skolaktivitet, såsom
            elevråd, i stället för deltagande på kalenderhändelsen.
        absenceReason:
          type: string
          description: Angiven anledning till frånvaro.
        reportedTimestamp:
          type: string
          format: date-time
          description: >
            Tidpunkt för rapportering av kalenderhändelsen (RFC 3339 format, tex
            "2015-12-12T10:30:00+01:00").
      required:
        - id
        - meta
        - student
        - calendarEvent
        - isReported
        - attendanceMinutes
    AttendanceEvent:
      type: object
      title: AttendanceEvent
      properties:
        id:
          type: string
          format: uuid
          description: Identifierare för den anmälda frånvaron.
          readOnly: true
        meta:
          $ref: "#/components/schemas/Meta"
          readOnly: true
        time:
          type: string
          format: date-time
        eventType:
          type: string
          title: Code_AttendanceEventType
          enum:
            - In
            - Ut
        person:
          allOf:
            - $ref: "#/components/schemas/PersonReference"
            - description: Referens till barnet eller eleven
        registeredBy:
          allOf:
            - $ref: "#/components/schemas/PersonReference"
            - description: Anger den person som registrat in- respektive utcheckning.
        group:
          allOf:
            - $ref: "#/components/schemas/GroupReference"
            - description: Den avdelning eller grupp på förskoleenheten som närvaron.
        _embedded:
          type: object
          readOnly: true
          properties:
            registeredBy:
              $ref: "#/components/schemas/Person"
            person:
              $ref: "#/components/schemas/Person"
            group:
              $ref: "#/components/schemas/GroupFragment"
      required:
        - id
        - meta
        - time
        - eventType
        - child
        - group
    AttendanceSchedule:
      type: object
      title: AttendanceSchedule
      properties:
        id:
          type: string
          format: uuid
          description: Identifierare för vistelseschemat.
          readOnly: true
        meta:
          $ref: "#/components/schemas/Meta"
          readOnly: true
        placement:
          allOf:
            - $ref: "#/components/schemas/PlacementReference"
            - description: Referens till en placeringen schemat avser.
        numberOfWeeks:
          type: integer
          description: Hur många veckor schemat gäller för innan det "börjar om".
        startDate:
          type: string
          format: date
          description: >
            Anger datum då schemat startar (RFC 3339-format, t.ex.
            "2016-10-15"). Inkluderande.
        endDate:
          type: string
          format: date
          description: >
            Anger datum då schemat slutar (RFC 3339-format, t.ex. "2016-10-15").
            Inkluderande.
        temporary:
          type: boolean
          description: >
            Anger om detta är ett undantag som gäller i stället för
            normalschemat under en begränsad tid. Slutdatum måste anges.
          default: false
        state:
          type: array
          items:
            type: object
            title: AttendanceScheduleState
            properties:
              state:
                type: string
                title: Code_AttendanceScheduleState
                enum:
                  - Godkänt
                  - Begärt
                  - Nekat
                description: Beskriver schemats tillstånd.
              registeredAt:
                type: string
                format: date-time
                description: >
                  Tid och datum för tillstånd (RFC 3339 format, tex
                  "2015-12-12T10:30:00+01:00").
              comment:
                type: string
                description: En kommentar angående tillståndet.
              registeredBy:
                allOf:
                  - $ref: "#/components/schemas/PersonReference"
                  - description: Referens till den person som registrerat tillståndet.
            required:
              - state
              - registeredAt
        scheduleEntries:
          type: array
          items:
            type: object
            title: AttendanceScheduleEntry
            properties:
              weekOffset:
                type: integer
                description: >
                  Anger vecka för alternerande schema, exempelvis 0, 1, eller 2
                  beroende på hur många olika veckor som är specificerade i
                  schemat.
              dayOfWeek:
                type: string
                enum:
                  - Måndag
                  - Tisdag
                  - Onsdag
                  - Torsdag
                  - Fredag
                  - Lördag
                  - Söndag
                description: |
                  Anger veckodag.
              startTime:
                type: string
                format: "^[0-9]{2}:[0-9]{2}$"
                description: 'Starttid på dagen för schemat (IS08601 format, t.ex. "08:30").'
              length:
                type: integer
                description: Längden på den tid efter starttid som barnet ska vara
      required:
        - id
        - meta
        - startDate
        - scheduleDays
        - placement
        - state
    CalendarEvent:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Identifierare för kalenderhändelsen.
        meta:
          $ref: "#/components/schemas/Meta"
        activity:
          allOf:
            - $ref: "#/components/schemas/ActivityReference"
            - description: Den aktivitet kalenderhändelsen är kopplad till
        startTime:
          type: string
          format: date-time
          description: >
            Kalenderhändelsens starttid med datum och tid (RFC 3339 format tex
            "2015-12-12T10:30:00+01:00").
        endTime:
          type: string
          format: date-time
          description: >
            Kalenderhändelsens sluttid med datum och tid (RFC 3339 format tex
            "2015-12-12T10:30:00+01:00").
        cancelled:
          type: boolean
          description: >
            Inställd används för att ange att en planerad kalenderhändelse inte
            ska äga rum till följd av en avbokning eller annan tillfällig
            avvikelse. Förvalt värde är False.
        teachingLengthTeacher:
          type: integer
          description: >
            Faktisk undervisningstid för lärare anges i minuter. Lärartiden kan
            vara kortare eller längre än tiden för kalenderhändelsen.
        teachingLengthStudent:
          type: integer
          description: >
            Faktisk undervisningstid för elever (och elever ingående i grupper).
            Anges i minuter. Tiden kan vara kortare eller längre än tiden för
            kalenderhändelsen, till exempel då en rast ingår i tiden.
        comment:
          type: string
          description: En text med kompletterande information.
        studentExceptions:
          type: array
          items:
            type: object
            title: StudentException
            description: >
              Anger avvikelser beträffande elevs deltagande, tid och längd för
              ett enstaka kalendertillfälle.
            properties:
              student:
                $ref: "#/components/schemas/PersonReference"
              participates:
                type: boolean
                description: >
                  Används för att ange om en elev deltar på ett visst
                  kalendertillfälle.
              startTime:
                type: string
                format: date-time
                description: >
                  Starttid för undantaget (RFC 3339 format tex
                  "2015-12-12T10:30:00+01:00").
              endTime:
                type: string
                format: date-time
                description: >
                  Sluttid för undantaget (RFC 3339 format tex
                  "2015-12-12T11:00:00+01:00").
              teachingLength:
                type: integer
                description: >
                  Undervisningstid i minuter för eleven. Om den ej anges så
                  gäller det som är angivet i, i första hand, CalendarEvent, och
                  annars i Activity.
            required:
              - student
              - participates
        teacherExceptions:
          type: array
          items:
            type: object
            title: TeacherException
            description: >
              Anger avvikelser beträffande lärares ansvar, tid och längd för ett
              enstaka kalendertillfälle.
            properties:
              duty:
                $ref: "#/components/schemas/DutyReference"
              participates:
                type: boolean
                description: >
                  Används för att ange om en lärare ska delta på ett visst
                  kalendertillfälle.
              startTime:
                type: string
                format: date-time
                description: >
                  Starttid för undantaget (RFC 3339 format tex
                  "2015-12-12T10:30:00+01:00").
              endTime:
                type: string
                format: date-time
                description: >
                  Sluttid för undantaget (RFC 3339 format tex
                  "2015-12-12T10:30:00+01:00").
              teachingLength:
                type: integer
                description: >
                  Undervisningstid i minuter för läraren. Om den ej anges så
                  gäller det som är angivet i, i första hand, CalendarEvent, och
                  annars i Activity.
            required:
              - duty
              - participates
        rooms:
          type: array
          items:
            allOf:
              - $ref: "#/components/schemas/ObjectReference"
              - title: RoomReference
                description: Den lokal eller plats som är bokad för kalenderhändelsen.
                required:
                  - id
        resources:
          type: array
          items:
            allOf:
              - $ref: "#/components/schemas/ObjectReference"
              - title: ResourceReference
                description: En bokningsbar resurs som inte är en lokal.
                required:
                  - id
        _embedded:
          type: object
          properties:
            activity:
              $ref: "#/components/schemas/Activity"
            attendance:
              type: array
              items:
                $ref: "#/components/schemas/Attendance"
      required:
        - id
        - startTime
        - endTime
        - meta
        - activity
    CalendarEventReference:
      allOf:
        - $ref: "#/components/schemas/ObjectReference"
        - title: CalendarEventReference
          description: Referens till en kalenderhändelse
    Code_AbsenceType:
      type: string
      title: Code_AbsenceType
      description: >-
        Anger om frånvaron är en beviljad ledighet eller en annan typ av anmäld
        frånvaro.
      enum:
        - Beviljad ledighet
        - Anmäld frånvaro
    Code_AssignmentRole:
      title: Code_AssignmentRole
      type: string
      enum:
        - Mentor
        - Förskollärare
        - Barnskötare
        - Fritidspedagog
        - Specialpedagog
        - Elevhälsopersonal
        - Pedagogisk ledare
        - Schemaläggare
    Code_Curriculum:
      type: string
      title: Code_Curriculum
      description: >-
        Anger vilken läroplan aktiviteten avser. För vissa skolformer saknas
        läroplan.
      enum:
        - Lgy70
        - Lgr80
        - Lpo94
        - Lpf94
        - Lpfö98
        - GR2000
        - GY2000
        - GYSÄR2000
        - GYVUX2000
        - GYVUX2001
        - GYVUX2002
        - GR2011
        - GRSÄR2011
        - SPEC2011
        - SAM2011
        - Lvux12
        - GY2011
        - GYSÄR2013
        - VU2013
    Code_DutyRole:
      type: string
      title: Code_DutyRole
      enum:
        - Rektor
        - Lärare
        - Förskollärare
        - Övrig pedagogisk personal
        - Förskolechef
        - Annan personal
    Code_GroupType:
      type: string
      title: Code_GroupType
      description: >
        Grupptyp anger vad en grupp ska användas till.

        Ett värdeförråd för att indikera anger vilka grupptyper som finns.

        * _Undervisning_ - Undervisningsgruppen är en grupp som har koppling
          till ett ämne eller en kurs, och som ska schemaläggas med undervisningstid
          ihop med en lärare.
        * _Klass_ - Klassen är en organisatorisk grupp med elever som är
        skolplacerade
          på en skola med skolform FSK, GR, GRS, SP, SAM, GY eller GYS.
          Varje elev ska vara placerad i endast en klass. Klassen kan schemaläggas
          med undervisning enligt timplan. "Klassföreståndare" kan beskrivas genom att
          koppla en _AssignmentRole_ av typen _Mentor_.
        * _Mentor_ - Grupp med elever vilka delar samma mentor/mentorer. 
          Mentor kopplas till gruppen genom en _AssignmentRole_.
        * _Provgrupp_ - Grupp med elever vilka ska genomföra ett eller flera
        prov. 

        * _Schema_ - Schemagrupper är grupper som utgör ett komplement till
          grupper av typen Undervisning. Schemagrupper ska schemaläggas för att
          åstadkomma anpassningar av schemat för enskilda elever eller grupper
          av elever. Exempel på schemagrupper är delgrupper och grupper som
          används för stödundervisning eller läxhjälp.
        * _Avdelning_ - Avdelningen är en grupp för placering inom skolformerna
          förskola eller fritidshem.
        * _Personalgrupp_ - En grupp vars medlemmar utgörs av personal.

        * _Övrigt_ - Övriga grupper är andra grupper som inte är något av
        ovanstående.
      enum:
        - Undervisning
        - Klass
        - Mentor
        - Provgrupp
        - Schema
        - Avdelning
        - Personalgrupp
        - Övrigt
    Code_ObjectType:
      title: Code_ObjectType
      type: string
      enum:
        - Absence
        - AttendanceEvent
        - Attendance
        - Grade
        - CalendarEvent
        - AttendanceSchedule
        - Resource
        - Room
        - Activity
        - Duty
        - Placement
        - StudyPlan
        - Programme
        - Syllabus
        - SchoolUnitOffering
        - Group
        - Person
        - Organisation
    Code_OrganisationType:
      type: string
      title: Code_OrganisationType
      description: |
        Typ av organisation
      enum:
        - Huvudman
        - Stadsdel
        - Rektorsområde
        - Skola
        - Skolenhet
        - Övrigt
    Code_RelationType:
      type: string
      title: Code_RelationType
      description: |
        Värdeförråd för olika typer av relationer till en elev.
      enum:
        - Vårdnadshavare
        - Annan ansvarig
        - God man
        - Utsedd behörig
    Code_SchoolType:
      title: Code_SchoolType
      description: |
        Följande värden används för att beskriva skolform:
          - _FS_ - Förskola 
          - _FKLASS_ - Förskoleklass 
          - _FTH_ - Fritidshem
          - _OPPFTH_ - Öppen fritidsverksamhet 
          - _GR_ - Grundskola 
          - _GRS_ - Grundsärskola 
          - _SP_ - Specialskola 
          - _SAM_ - Sameskola 
          - _GY_ - Gymnasieskola 
          - _GYS_ - Gymnasiesärskola 
          - _KOMVUX_ - Kommunal vuxenutbildning på grundläggande och gymnasial nivå 
          - _SARVUX_ - Särskild utbildning för vuxna 
          - _SFI_ - Kommunal vuxenutbildning i svenska för invandrare 
          - _KU_ - Kulturskola 
          - _YH_ - Yrkeshögskola 
          - _FHS_ - Folkhögskola 
          - _STF_ - Studieförbund 
          - _KKU_ - Konst- och kulturutbildning 
          - _HS_ - Högskola 
          - _ABU_ - Arbetsmarknadsutbildning 
          - _AU_ - Annan undervisning
      type: string
      enum:
        - FS
        - FKLASS
        - FTH
        - OPPFTH
        - GR
        - GRS
        - SP
        - SAM
        - GY
        - GYS
        - KOMVUX
        - SARVUX
        - SFI
        - KU
        - YH
        - FHS
        - STF
        - KKU
        - HS
        - ABU
        - AU
    CreateSubscription:
      type: object
      title: Subscription
      description: >
        Skapas en prenumeration på ändringar av angivna objekt. Vid ändringar i
        informationsmängden hos informationsägaren ska det konsumerande systemet
        notifieras via den URL som anges i `target`. Det konsumerande systemet
        gör därefter anrop för att inhämta ändrad eller borttagen information.
        Informationsägaren ska skicka en notis för varje registrerad
        prenumeration så fort en förändring identifieras. Informationsägaren kan
        välja att skicka en notis för multipla förändringar.
      properties:
        name:
          description: "Ett beskrivande namn på webhook:en."
          type: string
        target:
          description: |
            URL:en som webhook:en ska posta till.
          type: string
        resourceTypes:
          type: array
          items:
            type: object
            properties:
              resource:
                $ref: "#/components/schemas/Code_ObjectType"
      required:
        - name
        - target
        - resourceTypes
    Duty:
      type: object
      title: Duty
      description: referens till ett Dutyobjekt
      properties:
        id:
          type: string
          format: uuid
          description: Ett ID för tjänsten.
        meta:
          $ref: "#/components/schemas/Meta"
        person:
          allOf:
            - $ref: "#/components/schemas/PersonReference"
            - description: Identifierare av person som tjänsten är knuten till.
        assignmentRole:
          type: array
          description: >-
            Datatyp som ska användas för att beskriva arbetsuppgifter för en
            person i relation till elevgrupp. Lärares undervisning ska inte
            uttryckas som en arbetsuppgift, för detta syfte används i stället
            Aktivitet.
          items:
            type: object
            properties:
              group:
                $ref: "#/components/schemas/GroupReference"
              assignmentRoleType:
                $ref: "#/components/schemas/Code_AssignmentRole"
              startDate:
                description: >
                  Startdatum för tjänstens relation till gruppen (RFC
                  3339-format, t.ex. "2016-10-15"). Inkluderande.
                type: string
                format: date
              endDate:
                description: >
                  Slutdatum för tjänstens relation till gruppen (RFC
                  3339-format, t.ex. "2016-10-15"). Inkluderande.
                type: string
                format: date
            required:
              - group
              - assignmentRoleType
              - startDate
        dutyAt:
          $ref: "#/components/schemas/OrganisationReference"
        dutyRole:
          allOf:
            - $ref: "#/components/schemas/Code_DutyRole"
            - description: >
                Syfte med tjänsten, den roll tjänsen avser, till exempel lärare
                eller rektor.
        signature:
          type: string
          description: "En signatur för tjänstgöringen exempelvis NJN, JOAN."
        dutyPercent:
          type: integer
          description: Tjänstgöringsgrad i procent
        hoursPerYear:
          type: integer
          description: Antalet timmar tjänstgöringen omfattar under ett år.
        startDate:
          type: string
          format: date
          description: >
            Startdatum för personens anställning på en viss skolenhet eller
            skola (RFC 3339-format, t.ex. "2016-10-15"). Inkluderande.
        endDate:
          type: string
          format: date
          description: >
            Slutdatum för personens anställning på en viss skolenhet eller skola
            (RFC 3339-format, e.g. "2016-10-15"). Inkluderande.
      required:
        - id
        - dutyAt
        - dutyRole
        - startDate
    DutyExpanded:
      allOf:
        - $ref: "#/components/schemas/Duty"
        - type: object
          properties:
            _embedded:
              type: object
              properties:
                person:
                  $ref: "#/components/schemas/Person"
    DutyReference:
      allOf:
        - $ref: "#/components/schemas/ObjectReference"
        - title: DutyReference
          description: Referens till en Duty
    Enrolment:
      title: Enrolment
      type: object
      properties:
        enroledAt:
          $ref: "#/components/schemas/SchoolUnitReference"
        schoolYear:
          type: integer
          description: >
            Värdet årskurs anger det år efter skolstarten för vilket en student
            följer undervisningen.
          minimum: 0
          maximum: 10
        schoolType:
          $ref: "#/components/schemas/Code_SchoolType"
        startDate:
          type: string
          format: date
          description: >
            Startdatum för inskrivningen (RFC 3339-format, t.ex.
            "2016-10-15").Inkluderande.
        endDate:
          type: string
          format: date
          description: >
            Slutdatum för inskrivningen (RFC 3339-format, t.ex. "2016-10-15").
            Inkluderande.
        cancelled:
          type: boolean
          description: Inskrivningen har avbrutits i förväg.
        educationCode:
          type: string
          description: Studievägskod för den aktuella inskrivningen.
        programme:
          allOf:
            - $ref: "#/components/schemas/ProgrammeReference"
            - description: "Referens till inskrivningens program, inriktning eller utgång."
        specification:
          type: string
          description: >
            Kompletterande information angående innehåll i elevens utbildning,
            används som avgränsning av ett visst utbildningsalternativ för
            exempelvis lärlingsutbildning.
      required:
        - enroledAt
        - schoolType
        - startDate
    Error:
      type: object
      properties:
        code:
          description: >-
            Teknisk kod för att beskriva fel, varje källa bestämmer själv över
            möjliga felkoder.
          type: string
        message:
          description: Text för att beskriva felet.
          type: string
      required:
        - code
        - message
    Grade:
      type: object
      description: Avser ett registrerat betyg för en elev i ett ämne eller en kurs.
      properties:
        id:
          type: string
          format: uuid
          description: ID för betyget.
        meta:
          $ref: "#/components/schemas/Meta"
        student:
          allOf:
            - $ref: "#/components/schemas/PersonReference"
            - description: Referens till eleven.
        organisation:
          allOf:
            - $ref: "#/components/schemas/SchoolUnitReference"
            - description: Skolenheten där undervisningen genomförts.
        registeredBy:
          allOf:
            - $ref: "#/components/schemas/PersonReference"
            - description: Den person som registrerade betyget.
        gradingTeacher:
          allOf:
            - $ref: "#/components/schemas/PersonReference"
            - description: Den behöriga lärare som är ansvarig för betyget.
        group:
          allOf:
            - $ref: "#/components/schemas/GroupReference"
            - description: Anger vilken grupp eleven ingick i.
        registeredDate:
          type: string
          format: date
          description: >-
            Det datum då betyget registrerades (RFC 3339-format, t.ex.
            "2016-10-15").
        gradeValue:
          type: string
          description: Anger vilket betyg eleven har tilldelats.
        finalGrade:
          type: boolean
          description: >
            Anger om det registrerade betyget är ett slutbetyg för ämnet eller
            kursen.
        trial:
          type: boolean
          default: false
          description: Anger om betyget satts vid en prövning. Förvalt värde är "false".
        adaptedStudyPlan:
          type: string
          description: >
            Om en specialinriktad ämnesplan (GY) eller anpassad studiegång (GR)
            har använts för kursen så beskrivs här på vilket sätt studiegången
            anpassats.
        remark:
          type: string
          description: Andra anmärkningar för betygsraden.
        converted:
          type: boolean
          default: false
          description: Anger om betyget är omvandlat. Förvalt värde är "false".
        correctionType:
          type: string
          description: "Ändringstyp för betyget, om det är ändrat."
          title: Code_GradeCorrectionType
          enum:
            - Ändring
            - Rättelse
        semester:
          type: string
          description: Om betyget avser höst- eller vårtermin.
          title: Code_Semester
          enum:
            - HT
            - VT
        year:
          type: integer
          description: "Året som betyget gäller, exempelvis 2019."
        syllabus:
          $ref: "#/components/schemas/SyllabusReference"
        diplomaProject:
          type: object
          properties:
            title:
              type: string
              description: Titel på gymnasiearbete.
            description:
              type: string
              description: Beskrivning av gymnasiearbete.
            titleEngish:
              type: string
              description: Eventuell engelsk titel på gymnasiearbete.
            descriptionEnglish:
              type: string
              description: Eventuell engelsk beskrivning av gymnasiearbete.
          required:
            - title
            - description
      required:
        - id
        - student
        - registeredDate
        - gradeValue
        - syllabus
        - finalGrade
        - adaptedStudyPlan
    Group:
      allOf:
        - $ref: "#/components/schemas/GroupFragment"
        - type: object
          properties:
            groupMemberships:
              description: >
                Gruppmedlemskap anger att en person är medlem i en grupp och
                vilken tidsperiod medlemskapet omfattar.
              type: array
              items:
                type: object
                title: GroupMembership
                properties:
                  person:
                    $ref: "#/components/schemas/PersonReference"
                  startDate:
                    description: >
                      Startdatum för personens medlemskap i gruppen (RFC
                      3339-format, t.ex. "2016-10-15"). Inkluderande.
                    type: string
                    format: date
                  endDate:
                    description: >
                      Slutdatum för personens medlemskap i gruppen (RFC
                      3339-format, t.ex. "2016-10-15"). Inkluderande.
                    type: string
                    format: date
    GroupExpanded:
      allOf:
        - $ref: "#/components/schemas/Group"
        - type: object
          properties:
            _embedded:
              type: object
              properties:
                assignmentRoles:
                  type: array
                  items:
                    type: object
                    properties:
                      duty:
                        $ref: "#/components/schemas/DutyReference"
                      assignmentRoleType:
                        $ref: "#/components/schemas/Code_AssignmentRole"
                      startDate:
                        description: >
                          Startdatum för tjänstens relation till gruppen (RFC
                          3339-format, t.ex. "2016-10-15"). Inkluderande.
                        type: string
                        format: date
                      endDate:
                        description: >
                          Slutdatum för tjänstens relation till gruppen (RFC
                          3339-format, t.ex. "2016-10-15"). Inkluderande.
                        type: string
                        format: date
    GroupFragment:
      type: object
      title: Group
      description: >
        Group kan innehålla personer eller bara vara en tom "platshållare" utan
        medlemmar, som kan populeras vid ett senare tillfälle. Notera att
        gruppens koppling till ämnen/kurser och lärare görs via Aktivitet.
        Grupper har olika egenskaper baserat på grupptyp. Individer kan ha olika
        roller i relation till en viss grupp. Grupper har specifika egenskaper.
      properties:
        id:
          type: string
          format: uuid
          description: Identifierare för gruppen
        meta:
          $ref: "#/components/schemas/Meta"
        displayName:
          description: Gruppens benämning.
          type: string
        startDate:
          type: string
          format: date
          description: >
            Startdatum för gruppens giltighetstid (RFC 3339-format, t.ex.
            "2016-10-15"). Inkluderande.
        endDate:
          type: string
          format: date
          description: >
            Slutdatum för gruppens giltighetstid (RFC 3339-format, t.ex.
            "2016-10-15"). Inkluderande.
        groupType:
          $ref: "#/components/schemas/Code_GroupType"
        schoolType:
          $ref: "#/components/schemas/Code_SchoolType"
        organisation:
          $ref: "#/components/schemas/OrganisationReference"
      required:
        - id
        - displayName
        - groupType
        - startDate
        - organisation
    GroupReference:
      allOf:
        - $ref: "#/components/schemas/ObjectReference"
        - title: GroupReference
          description: Referens till en grupp
    IdLookup:
      type: object
      properties:
        ids:
          type: array
          items:
            type: string
            format: uuid
    LogEntry:
      type: object
      title: LogEntry
      description: >
        Information runt en händelse, används för att återsända information för
        att avhjälpa vid olika typer av felsökning.
      properties:
        message:
          description: Situationssepcifik text rörande loggad händelse.
          type: string
        messageType:
          type: string
          description: Hos klienten unikt ID på meddelandetypen
        resourceType:
          $ref: "#/components/schemas/Code_ObjectType"
        resourceId:
          type: string
          format: uuid
          description: Eventuellt id relaterat till loggad händelse.
        resourceUrl:
          type: string
          format: uri
          description: >-
            Eventuell url till relaterad fråga som låg till grund till loggad
            händelse.
        severityLevel:
          type: string
          description: >
            Loggad händelses allvarlighetsgrad.

            * _Info_ - Händelse som ej är ett problem men kan vara bra att veta
            vid felsökning.

            * _Warning_ - Behöver uppmärksammas, eventuellt problem.

            * _Error_ - Problem som kärver någon typ av åtgärd.
          enum:
            - Info
            - Warning
            - Error
        timeOfOccurance:
          type: string
          format: date-time
          description: Tidpunkt för loggad händelse.
      required:
        - message
        - severityLevel
    Meta:
      title: Meta
      type: object
      readOnly: true
      properties:
        created:
          type: string
          format: date-time
          description: >
            Datum och tid för när entiteten skapades (RFC 3339 format tex
            "2015-12-12T10:30:00+01:00").
        modified:
          type: string
          format: date-time
          description: >
            Datum och tid för när entiteten senast uppdaterades (RFC 3339 format
            tex "2015-12-12T10:30:00+01:00"). Tidpunkten avser den senaste
            tidpunkt när något av de attribut som direkt tillhör entiteten har
            ändrats. Attribut som kan tas fram med parametrarna expand eller
            expandReferenceNames räknas **inte** som ett attribut till
            entiteten, och ska således **inte** påverka detta värde.
    ObjectReference:
      title: ObjectReference
      type: object
      required:
        - id
      properties:
        id:
          type: string
          format: uuid
        displayName:
          type: string
          readOnly: true
          description: >
            Namn för visningsyfte för det refererade objektet. Skall endast
            returneras när query parametern `expandReferenceNames` är satt till
            "true".
    Organisation:
      type: object
      title: Organisation
      properties:
        id:
          type: string
          format: uuid
        meta:
          $ref: "#/components/schemas/Meta"
        displayName:
          type: string
          description: Namn på organisationen
        organisationCode:
          type: string
          description: >-
            En kod för att identifiera organisationselementet inom
            organisationen.
        organisationType:
          $ref: "#/components/schemas/Code_OrganisationType"
        organisationNumber:
          type: string
          description: |
            Identitetsbeteckning för juridiska personer såsom kommun eller bolag
        parentOrganisation:
          allOf:
            - $ref: "#/components/schemas/OrganisationReference"
            - description: >
                Identifierare för en eventellt överliggande organisation. Kan ej
                peka på organisationer av typen _Skolenhet_.
        schoolUnitCode:
          type: string
          description: >
            Skolenhetskod. Identifierare för skolenheten enligt Skolverket.
            Används för de skolformer där skolverket bestämmer en skolenhetskod
            för varje enhet.
        schoolTypes:
          type: array
          uniqueItems: true
          description: Anges endas för organisationselement typen Skolenhet.
          items:
            $ref: "#/components/schemas/Code_SchoolType"
        municipalityCode:
          type: string
          description: >
            Kommunkod. Län och kommunkod för den kommun där skolan är belägen,
            exempelvis 0180 där 01 anger länet och 80 anger kommunen.
        url:
          type: string
          format: uri
          description: >
            Länk till en websida med information om skolan eller
            organisationselementet.
        email:
          type: string
          format: email
          description: |
            Epost-adress till skolan eller organisationselementet.
        phoneNumber:
          type: string
          description: |
            Telefonnummer till en skolan eller organisationselementet.
        contactInfo:
          type: array
          items:
            type: object
            title: ContactInfo
            description: >
              Kontaktuppgifter till skolan eller organisationselementet. Kan
              användas för supportkontakt och andra publika kontaktuppgifter.
            properties:
              infoType:
                type: string
                title: Code_OrganisationContactInfoType
                description: >
                  Typ av kontaktuppgift. Publika uppgifter avser uppgifter som
                  kan visas för allmänheten, såsom adress och telefonnummer till
                  skolan.
                enum:
                  - Support
                  - Publik
              info:
                type: string
                description: >
                  Beskrivning i fritext av kontaktuppgifter till skolan eller
                  organisationsenheten.
        startDate:
          type: string
          format: date
          description: >
            Startdatum för organisationensdelens giltighetstid (RFC 3339-format,
            t.ex. "2016-10-15"). Gäller för alla underliggande element som inte
            har ett mer restrektivt värde. Inkluderande.
        endDate:
          type: string
          format: date
          description: >
            Slutdatum för organisationensdelens giltighetstid (RFC 3339-format,
            t.ex. "2016-10-15"). Gäller för alla underliggande element som inte
            har ett mer restrektivt värde. Inkluderande.
      required:
        - id
        - meta
        - displayName
        - organisationType
      description: En skolhuvudman eller annan slags organisatorisk enhet.
    OrganisationReference:
      allOf:
        - $ref: "#/components/schemas/ObjectReference"
        - title: OrganisationReference
          description: Referens till ett organisationselement.
    Person:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: >
            Ett objekt ska ha samma överförings-ID mellan samtliga ingående
            system och således är det ett enda namespace för de gemensamma
            ID:na. Objektidentifikatorn är den nyckel som skall vara persistent
            mellan olika processer (enl figur 1).
        meta:
          $ref: "#/components/schemas/Meta"
        givenName:
          type: string
          description: Förnamn.
        middleName:
          type: string
          description: Mellannamn.
        familyName:
          type: string
          description: Efternamn.
        eduPersonPrincipalNames:
          type: array
          description: >
            De identifierare som ska användas för att identifiera användaren
            i skilda e-tjänster. Identifieraren ska vara en spårbar,
            persistent och globalt unik sträng. Den ska bestå av en lokalt
            unik användaridentifierare, ett ’@’ och en domän. En domän är
            ofta, men inte nödvändigtvis, samma som organisationens
            internet-domännamn. _Exempel: kalko@edu.goteborg.se_
          uniqueItems: true
          items:
            type: string
        externalIdentifiers:
          type: array
          items:
            type: object
            title: externalIdentifier
            properties:
              value:
                type: string
                description: Identifierare för användaren.
              context:
                type: string
                description: >
                  Anger för vilket sammanhang användaridentifieraren ska
                  användas. Beskriv med en URI. Värdet kan överenskommas
                  bilateralt mellan två integrerande parter.
                example: "http://linkoping.se/AD"
              globallyUnique:
                type: boolean
                description: >
                  Anger om identifieraren är så utformad att den kan anses vara
                  globalt unik.
            required:
              - context
              - value
              - globallyUnique
        civicNo:
          type: object
          description: Personnummer.
          properties:
            value:
              type: string
              description: >
                Svenskt personnummer, tilldelat personnummer eller Skatteverkets

                samordningsnummer för personen. **Ska** anges med 12 siffror
                utan

                separatorer. _Exempel: 200112240123_


                Samordningsnummer ska anges med 12 siffror utan separator.

                Födelsedagen adderas med talet 60, det vill säga någon född
                den 24

                i en månad får talet 84 som dag. _Exempel: 200112840123_


                Saknas både personnummer och samordningsnummer så förekommer det
                att

                "tillfälligt personnummer" definieras i elevregistret. Dessa är
                möjliga

                att beskriva i detta fält och i så fall tillåts de två första
                positionerna

                efter datumdelen att vara bokstäver. _Exempel: 20130101TF01_
            nationality:
              type: string
              default: SE
              description: >
                Landskod för det land som personnumret härstammar från, enligt
                ISO 3166-1 alpha-2.
          required:
            - value
        birthDate:
          type: string
          format: date
          description: 'Födelsedatum (RFC 3339-format, t.ex. "2016-10-15")'
        sex:
          title: Code_Sex
          type: string
          enum:
            - Man
            - Kvinna
            - Okänt
          description: Biologiskt kön
        securityMarking:
          type: string
          title: Code_SecurityMarking
          description: |
            Återspeglar värdet från folkbokföringsregistret.
          enum:
            - Ingen
            - Sekretessmarkering
            - Skyddad folkbokföring
        personStatus:
          type: string
          description: >
            Anger ifall en person har en aktiv status eller en annan status,
            såsom utvandrad eller avliden.
          title: Code_PersonStatus
          enum:
            - Aktiv
            - Utvandrad
            - Avliden
          default: Aktiv
        emails:
          type: array
          description: En lista med personens epostadresser
          items:
            type: object
            title: Email
            properties:
              value:
                type: string
                format: email
              type:
                type: string
                title: Code_EmailType
                enum:
                  - Privat
                  - Skola elev
                  - Skola personal
                  - Arbete övrigt
            required:
              - value
        phoneNumbers:
          type: array
          description: En lista med telefonnummer till personen.
          items:
            required:
              - number
            type: object
            title: Phonenumber
            properties:
              value:
                type: string
                description: Telefonnumret.
              type:
                type: string
                title: Code_PhoneNumberType
                enum:
                  - Hem
                  - Arbete
              mobile:
                type: boolean
                default: true
        addresses:
          type: array
          description: En lista med personens postadresser
          items:
            type: object
            properties:
              type:
                type: string
                default: Folkbokföring
                title: Code_AddressType
                enum:
                  - Folkbokföring
                  - Särskildpostadress
                  - Tillfälligadress
                  - Postadress
              streetAddress:
                type: string
                description: Gatuadress.
              locality:
                type: string
                description: Postort.
              postalCode:
                type: string
                description: Postadress.
              countyCode:
                type: integer
                description: "Län, kod"
              municipalityCode:
                type: integer
                description: "Kommun, kod"
              realEstateDesignation:
                type: string
                description: Fastighetsbeteckning
              country:
                type: string
                description: Land.
        photo:
          type: string
          format: uri
          description: >
            Pekar ut en resurs med en bild på personen, specificeras som en URI
            enligt RFC 3986.
        enrolments:
          type: array
          description: En lista med inskrivningar för personen
          items:
            $ref: "#/components/schemas/Enrolment"
        responsibles:
          type: array
          description: >
            Personens vårdnadshavare eller motsvarande relationer så som
            familjehemsförälder. Denna relation beskriver ett officiellt
            ansvarsförhållande.
          items:
            type: object
            properties:
              person:
                $ref: "#/components/schemas/PersonReference"
              relationType:
                $ref: "#/components/schemas/Code_RelationType"
      required:
        - id
        - givenName
        - familyName
    PersonExpanded:
      allOf:
        - $ref: "#/components/schemas/Person"
        - type: object
          properties:
            _embedded:
              type: object
              properties:
                responsibleFor:
                  type: array
                  description: |
                    De barn/barnen vilka personen har ansvar för.
                  items:
                    type: object
                    properties:
                      person:
                        $ref: "#/components/schemas/PersonReference"
                      relationType:
                        $ref: "#/components/schemas/Code_RelationType"
                placements:
                  type: array
                  description: |
                    En lista med placeringar för personen.
                  items:
                    $ref: "#/components/schemas/Placement"
                ownedPlacements:
                  type: array
                  description: |
                    En lista med placeringar där personen är satt som ägare.
                  items:
                    $ref: "#/components/schemas/Placement"
                duties:
                  type: array
                  description: Personens aktuella tjänstgöring
                  items:
                    $ref: "#/components/schemas/Duty"
                groupMemberships:
                  type: array
                  description: |
                    En lista med grupper där personen är medlem i
                  items:
                    type: object
                    properties:
                      group:
                        $ref: "#/components/schemas/GroupFragment"
                      startDate:
                        description: >
                          Startdatum för personens medlemskap i gruppen (RFC
                          3339-format, t.ex. "2016-10-15"). Inkluderande.
                        type: string
                        format: date
                      endDate:
                        description: >
                          Slutdatum för personens medlemskap i gruppen (RFC
                          3339-format, t.ex. "2016-10-15"). Inkluderande.
                        type: string
                        format: date
    PersonReference:
      allOf:
        - $ref: "#/components/schemas/ObjectReference"
        - title: PersonReference
          description: Referens till en person
          properties:
            securityMarking:
              type: string
              title: Code_SecurityMarking
              description: |
                Återspeglar värdet från folkbokföringsregistret.
              enum:
                - Ingen
                - Sekretessmarkering
                - Skyddad folkbokföring
    Placement:
      type: object
      title: Placement
      properties:
        id:
          type: string
          format: uuid
        meta:
          $ref: "#/components/schemas/Meta"
        placedAt:
          allOf:
            - $ref: "#/components/schemas/SchoolUnitReference"
            - description: Skolenhet där barnet är placerat.
        group:
          allOf:
            - $ref: "#/components/schemas/GroupReference"
            - description: Barngrupp eller avdelning knutet till denna placering.
        child:
          allOf:
            - $ref: "#/components/schemas/PersonReference"
            - description: Identifierare av person som placeringen avser.
        owners:
          type: array
          description: >
            En lista med identifierare för de personer som äger placeringen.
            Används primärt för att styra vilka som skall kunna se och lägga
            schema.
          items:
            $ref: "#/components/schemas/PersonReference"
        schoolType:
          type: string
          title: Code_SchoolType
          description: "Skolform för placeringen, förskola eller fritidshem"
          enum:
            - FS
            - FTH
            - OPPFTH
        startDate:
          type: string
          format: date
          description: >
            Startdatum för placeringen (RFC 3339-format, t.ex. "2016-10-15").
            Inkluderande.
        endDate:
          type: string
          format: date
          description: >
            Slutdatum för placeringen (RFC 3339-format, t.ex. "2016-10-15").
            Inkluderande.
        reason:
          type: string
          title: Code_Reason
          description: En kod för att beskriva orsak för placeringen.
          enum:
            - Omsorg
            - Erbjuden tid
            - Eget behov
        maxWeeklyScheduleHours:
          type: integer
          description: Anger maximal schematid per vecka för barnets placering.
      required:
        - id
        - placedAt
        - child
        - startDate
    PlacementExpanded:
      allOf:
        - $ref: "#/components/schemas/Placement"
        - type: object
          properties:
            _embedded:
              type: object
              properties:
                child:
                  $ref: "#/components/schemas/Person"
                owners:
                  type: array
                  items:
                    $ref: "#/components/schemas/Person"
    PlacementReference:
      allOf:
        - $ref: "#/components/schemas/ObjectReference"
        - title: PlacementReference
          description: Referens till en placering
    Programme:
      type: object
      description: Ett program av kurser.
      properties:
        id:
          type: string
          format: uuid
          description: Identifierare för programmet.
        meta:
          $ref: "#/components/schemas/Meta"
        name:
          type: string
          description: Program-/inriktningens namn.
        type:
          type: string
          title: Code_ProgrammeType
          enum:
            - Yrkesprogram
            - Högskoleförberedande program
            - Intruduktionsprogram
            - Nationellt yrkespaket
            - Regionalt yrkespaket
            - Fjärde tekniskt år
            - Programinriktning
            - Utgång
          description: Typ av program.
        parentProgramme:
          allOf:
            - $ref: "#/components/schemas/ProgrammeReference"
            - description: >
                Referens till det program en programinriktning/utgång tillhör.

                Anges endast för typerna _Programinriktning_ och _Utgång_.

                Program av typen _Utgång_ pekar alltid ett program av typen
                _Programinriktning_.

                Program av typen _Programinriktning_ perkar alltid på ett
                program typen

                _Yrkesprogram_, _Högskoleförberedande program_,
                _Intruduktionsprogram_,

                _Nationellt yrkespaket_, _Regionalt yrkespaket_ eller _Fjärde
                tekniskt år_.

                För övriga programtyper skall värdet inte vara definierat.
        schoolType:
          $ref: "#/components/schemas/Code_SchoolType"
        code:
          type: string
          description: >
            Program-/inriktningskod(studievägskod). För gymnasieskolans
            program/inriktningar måste denna finnas och vara enligt Skolverkets
            definition.
        content:
          type: array
          description: Kurser/ämnen som ingår i utbildningen.
          items:
            type: object
            required:
              - type
              - content
            properties:
              type:
                type: string
                title: Code_ProgrammeContentType
                description: >
                  Anger ingående kursers relation till programmet, såsom
                  Programgemensamma. Typen _Inriktning_ kan endast anges för
                  program av typen _Programinriktning_.
                enum:
                  - Gymnasiegemensamma
                  - Programgemensamma
                  - Inriktning
                  - Programfördjupning
                  - Gymnasiearbete
                  - Individuellt val
              points:
                type: integer
                description: Poäng för innehållstypen i förekommande fall.
              content:
                type: array
                items:
                  allOf:
                    - $ref: "#/components/schemas/SyllabusReference"
                    - description: Lista av ingående kursers kursplaner.
      required:
        - name
        - schoolType
    ProgrammeReference:
      allOf:
        - $ref: "#/components/schemas/ObjectReference"
        - description: Identifierare för program (Programme)
          title: ProgrammeReference
    Resource:
      type: object
      title: Resource
      properties:
        id:
          type: string
          format: uuid
        meta:
          $ref: "#/components/schemas/Meta"
        displayName:
          type: string
          description: Namn på resursen.
        description:
          type: string
          description: Beskrivning av resursen.
        owner:
          $ref: "#/components/schemas/OrganisationReference"
      required:
        - id
        - meta
        - displayName
        - owner
    Room:
      type: object
      title: Room
      description: Ett rum eller en plats som kan bokas i ett skolschema.
      properties:
        id:
          type: string
          format: uuid
        meta:
          $ref: "#/components/schemas/Meta"
        displayName:
          type: string
          description: Namn på rum/lokal/plats.
        seats:
          type: integer
          description: Antal platser i lokalen.
        owner:
          $ref: "#/components/schemas/OrganisationReference"
      required:
        - id
        - meta
        - displayName
        - owner
    SchoolUnitOffering:
      type: object
      title: SchoolUnitOffering
      description: >
        Används för att beskriva vilka program, ämnen och kurser en skolenhet
        erbjuder under ett visst tidsintervall.
      properties:
        startDate:
          type: string
          format: date
          description: >
            Startdatum för när uppsättningen av program/kurser erbjuds vid
            skolan. (RFC 3339-format, t.ex. "2016-10-15"). Inkluderande.
        endDate:
          type: string
          format: date
          description: >
            Slutdatum för när uppsättningen av program/kurser erbjuds vid
            skolan. Ett angivet datum innebär att utbudet inte längre är giltigt
            efter angivet datum. (RFC 3339-format, t.ex. "2016-10-15").
        offeredAt:
          allOf:
            - $ref: "#/components/schemas/SchoolUnitReference"
            - description: Identifierare för skolenheten (SchoolUnit)
        offeredSyllabuses:
          type: array
          items:
            allOf:
              - $ref: "#/components/schemas/SyllabusReference"
              - description: >
                  Identifierare för kursplaner (Syllabus), innehåller alla
                  ämnen/kurser, även de som också beskrivs genom
                  offeredProgrammes.
        offeredProgrammes:
          type: array
          items:
            $ref: "#/components/schemas/ProgrammeReference"
      required:
        - offeredSyllabuses
        - offeredAt
    SchoolUnitReference:
      allOf:
        - $ref: "#/components/schemas/ObjectReference"
        - title: OrganisationReference
          description: Referens till ett organisationselement av typen skolenhet.
    StatisticsEntry:
      type: object
      title: statisticsEntry
      description: Statistik rörande objekt synkronisering.
      properties:
        resourceType:
          $ref: "#/components/schemas/Code_ObjectType"
        newCount:
          type: integer
          description: Antalet nya objekt skapade hos klienten.
        updatedCount:
          type: integer
          description: Antalet uppdaterade objekt hos klienten.
        deletedCount:
          type: integer
          description: Antalet raderade objekt hos klienten.
        resourceUrl:
          type: string
          format: uri
          description: >-
            Eventuell url för relaterad fråga som låg till grund för
            synkroniserade objekt.
        timeOfOccurance:
          type: string
          format: date-time
          description: Tidpunkt för loggad händelse.
      required:
        - resourceType
        - newCount
        - updatedCount
        - deletedCount
    StudyPlan:
      type: object
      title: StudyPlan
      description: En elevs studieplan
      properties:
        id:
          type: string
          format: uuid
        student:
          allOf:
            - $ref: "#/components/schemas/PersonReference"
            - description: Den elev som studieplanen gäller för.
        meta:
          $ref: "#/components/schemas/Meta"
        content:
          type: array
          items:
            type: object
            title: StudyPlanContent
            properties:
              title:
                type: string
                description: Anger rubriken i elevens studieplan
              type:
                type: string
                title: Code_StudyPlanContentType
                enum:
                  - Gymnasiegemensamma
                  - Programgemensamma
                  - Inriktning
                  - Programfördjupning
                  - Gymnasiearbete
                  - Individuellt val
                  - Borttagna
                  - Utökade
              points:
                type: integer
                description: Anger poängtalet för den aktuella kategorin av kurser
              syllabuses:
                type: array
                items:
                  type: object
                  title: StudyPlanSyllabus
                  properties:
                    syllabus:
                      $ref: "#/components/schemas/SyllabusReference"
                    note:
                      type: string
                      description: Notering angående kursens status i elevens studieplan
                    startDate:
                      type: string
                      format: date
                      description: >
                        Startdatum när eleven läser kursen (RFC 3339-format,
                        t.ex. "2016-10-15"). Inkluderande.
                    endDate:
                      type: string
                      format: date
                      description: >
                        Slutdatum för när eleven läser kursen (RFC 3339-format,
                        t.ex. "2016-10-15"). Inkluderande.
                    hours:
                      type: integer
                      description: >
                        Planlagda timmar för elevens deltagande i kursen. Främst
                        avsedd för studieplaner till vuxenutbildning.
                  required:
                    - syllabus
            required:
              - syllabuses
        notes:
          type: array
          items:
            type: object
            title: StudyPlanNotes
            properties:
              type:
                type: string
                title: Code_StudyPlanNoteType
                enum:
                  - Anteckningar
                  - >-
                    Andra insatser som är gynnsamma för elevens
                    kunskapsutveckling
                  - Elevens tidigare arbetslivserfarenhet och studier
                  - Validering av kunskaper och kompetenser
                  - Elevens mål med studierna
              note:
                type: string
        startDate:
          type: string
          format: date
          description: >
            Startdatum för studieplanen (RFC 3339-format, t.ex. "2016-10-15").
            Inkluderande.
        endDate:
          type: string
          format: date
          description: >
            Slutdatum för studieplanen  (RFC 3339-format, t.ex. "2016-10-15").
            Inkluderande.
      required:
        - id
        - student
        - startDate
    Subscription:
      allOf:
        - type: object
          properties:
            id:
              type: string
              format: uuid
            expires:
              type: string
              format: date-time
          required:
            - id
            - expires
        - $ref: "#/components/schemas/CreateSubscription"
    Syllabus:
      description: >
        Används för att referera till en specifik kurskod eller ett ämne med
        information om årskurs och skolform som avses med undervisningen. För
        officiella ämnen/kurser anges läroplan.
      type: object
      title: Syllabus
      properties:
        id:
          type: string
          format: uuid
        meta:
          $ref: "#/components/schemas/Meta"
        schoolType:
          $ref: "#/components/schemas/Code_SchoolType"
        subjectCode:
          type: string
          description: >
            En kod för ämnet som används bland annat i lärarlegitimation och i
            Skolverkets kurs- och läroplaner, till exempel GRGRMAT01. Notera att
            detta värde *ej* är den kortare ämndesbeteckningen, exempelvis _MA_,
            utan indikerar inte bara ämne utan även vilken läroplan som avses,
            såsom i exemplet ovan Grundskolan. För ämnen som inte definieras av
            Skolverket används valfri kod.
        subjectName:
          type: string
          description: "Ämnets namn, exempelvis Matematik."
        subjectDesignation:
          type: string
          description: "Ämnets beteckning, exempelvis MA, MLARA."
        courseCode:
          type: string
          description: >
            Kurskod enligt Skolverket, om det är en officiell kurs, eller annars
            efter eget val.
        courseName:
          type: string
          description: "Kursens namn, exempelvis Matematik 1a."
        startSchoolYear:
          type: integer
          description: Start för årskursintervall för undervisningens innehåll.
          maximum: 10
          minimum: 0
        endSchoolYear:
          type: integer
          description: Slut för årskursintervall för undervisningens innehåll.
          maximum: 10
          minimum: 0
        points:
          type: integer
          description: Antalet poäng för en specifik kurs. Exempelvis 100 poäng.
        curriculum:
          $ref: "#/components/schemas/Code_Curriculum"
        languageCode:
          type: string
          description: Språkkod för moderna språk och modersmål. Enligt ISO 639-3.
        specialisationCourseContent:
          type: object
          title: SpecialisationCourseContent
          description: Beskrivning av innehållet i en specialiseringskurs på gymnasiet.
          properties:
            title:
              type: string
              description: Titel på specialiseringskurs.
            description:
              type: string
              description: Beskrivning av specialiseringskurs.
            titleEngish:
              type: string
              description: Eventuell engelsk titel på specialiseringskurs.
            descriptionEnglish:
              type: string
              description: Eventuell engelsk beskrivning av specialiseringskurs.
          required:
            - title
            - description
        official:
          type: boolean
          description: >
            Attributet anger om ämnet är ett officiellt ämne från Skolverket
            eller annan myndighet. Icke officiella ämnen kan skapas för andra
            ändamål än undervisning.
      required:
        - id
        - schoolType
        - subjectCode
        - subjectName
        - official
    SyllabusReference:
      allOf:
        - $ref: "#/components/schemas/ObjectReference"
        - title: SyllabusReference
          description: Referens till en Syllabus
  responses:
    204_removed:
      description: Post borttagen.
    400_invalid_filter:
      description: >-
        Filter (ex `sortkey`, `meta.modified.after`, `meta.modified.before`,
        `meta.created.after`, `meta.created.before` etc.) kan inte kombineras
        med `pageToken`.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    400_invalid_id:
      description: Felaktigt id.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    403_not_authorised:
      description: Åtkomst nekad.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    404_not_found:
      description: Posten hittades inte.
    503_overload:
      description: Svaret är förstort för servern att hantera.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    default_error:
      description: Okänt fel.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
  parameters:
    ActivitiesExpandParameter:
      name: expand
      description: Beskriver om expanderade data ska hämtas
      in: query
      schema:
        type: array
        items:
          type: string
          enum:
            - groups
            - teachers
            - syllabus
    AttendanceEventsExpandParameter:
      name: expand
      description: Beskriver om expanderade data ska hämtas för aktiviteten.
      in: query
      schema:
        type: array
        items:
          type: string
          enum:
            - person
            - group
            - registeredBy
    CalendarEventsExpandParameter:
      name: expand
      description: Beskriver om expanderade data ska hämtas för aktiviteten.
      in: query
      schema:
        type: array
        items:
          type: string
          enum:
            - activity
            - attendance
    DutiesExpandParameter:
      name: expand
      description: Beskriver om expanderade data ska hämtas
      in: query
      schema:
        type: array
        items:
          type: string
          enum:
            - person
    ExpandReferenceNames:
      name: expandReferenceNames
      description: Returnera `displayName` för alla refererade objekt.
      in: query
      schema:
        type: boolean
    GroupsExpandParameter:
      name: expand
      description: Beskriver om expanderade data ska hämtas
      in: query
      schema:
        type: array
        items:
          type: string
          enum:
            - assignmentRoles
    Limit:
      in: query
      name: limit
      schema:
        type: integer
        minimum: 1
      required: false
      description: >
        Antal poster som ska visas i resultatet. Utelämnas det så returnas så
        många poster som möjligt av servern, se `pageToken`.
    PageToken:
      in: query
      name: pageToken
      schema:
        type: string
      description: >
        Ett opakt värde som servern givit som svar på en tidigare ställd fråga.
        Kan inte komibineras med andra filter men väl med `limit`.
    PersonsExpandParameter:
      name: expand
      description: Beskriver om expanderade data ska hämtas
      in: query
      schema:
        type: array
        items:
          type: string
          enum:
            - duties
            - responsibleFor
            - placements
            - ownedPlacements
            - groupMemberships
    PlacementsExpandParameter:
      name: expand
      description: Beskriver om expanderade data ska hämtas
      in: query
      schema:
        type: array
        items:
          type: string
          enum:
            - child
            - owners
    SearchCreatedAfter:
      name: meta.created.after
      description: >
        Endast poster skapade efter detta timestamp (RFC 3339 format, tex
        "2015-12-12T10:30:00+01:00"). Exkluderande.
      in: query
      schema:
        type: string
        format: date-time
    SearchCreatedBefore:
      name: meta.created.before
      description: >
        Endast poster skapade på eller före detta timestamp (RFC 3339 format,
        tex "2015-12-12T10:30:00+01:00"). Inkluderande.
      in: query
      schema:
        type: string
        format: date-time
    SearchModifiedAfter:
      name: meta.modified.after
      description: >
        Endast poster modifierade efter detta timestamp (RFC 3339 format, tex
        "2015-12-12T10:30:00+01:00"). Exkluderande.
      in: query
      schema:
        type: string
        format: date-time
    SearchModifiedBefore:
      name: meta.modified.before
      description: >
        Endast poster modifierade på eller före detta timestamp (RFC 3339
        format, tex "2015-12-12T10:30:00+01:00"). Inkluderande.
      in: query
      schema:
        type: string
        format: date-time
    Sortkey:
      in: query
      name: sortkey
      schema:
        type: string
        enum:
          - ModifiedDesc
          - DisplayNameAsc
security:
  - BearerAuth: []
