{
   "$schema":"http://json-schema.org/draft-07/schema#",
   "$id":"https://franzplan.de/timetable4Classes.json",
   "title":"Timetable for all classes",
   "type":"object",
   "required":[
      "headData"
   ],
   "properties":{
      "headData":{
         "$id":"#root/headData",
         "title":"Head data",
         "type":"object",
         "required":[
            "version",
            "creationDate",
            "returnCode",
            "errorMessage"
         ],
         "properties":{
            "version":{
               "$id":"#root/headData/version",
               "title":"version of the interface",
               "type":"string",
               "default":"",
               "examples":[
                  "1.2.0"
               ],
               "pattern":"^.*$"
            },
            "creationDate":{
               "$id":"#root/headData/creationDate",
               "title":"creation date of this information regarding ISO8601",
               "type":"string",
               "format":"date-time",
               "default":"",
               "examples":[
                  "2022-05-16T22:35:11+02:00"
               ],
               "pattern":"^.*$"
            },
            "returnCode":{
               "$id":"#root/headData/returnCode",
               "title":"Return code",
               "type":"integer",
               "examples":[
                  200
               ],
               "default":0
            },
            "errorMessage":{
               "$id":"#root/headData/errorMessage",
               "title":"Error message",
               "type":"string",
               "default":"",
               "examples":[
                  "OK"
               ],
               "pattern":"^.*$"
            }
         }
      },
      "timeTable4Classes":{
         "$id":"#root/timeTable4Classes",
         "title":"Timetable information for a certain timetable version within a period and all classes",
         "type":"object",
         "required":[
            "timetablePeriod",
            "timetableVersion",
            "classDataList"
         ],
         "properties":{
            "timetablePeriod":{
               "$id":"#root/timeTable4Classes/timetablePeriod",
               "title":"Period of the timetable",
               "type":"string",
               "default":"",
               "examples":[
                  "2022/23"
               ],
               "pattern":"^.*$"
            },
            "timetableVersion":{
               "$id":"#root/timeTable4Classes/timetableVersion",
               "title":"Version of the timetable",
               "type":"string",
               "default":"",
               "examples":[
                  "1.HJ 2022/23"
               ],
               "pattern":"^.*$"
            },
            "classDataList":{
               "$id":"#root/timeTable4Classes/classDataList",
               "title":"List of all classes",
               "type":"array",
               "default":[
                  
               ],
               "items":{
                  "$id":"#root/timeTable4Classes/classDataList/items",
                  "title":"A certain class and its timetable information",
                  "type":"object",
                  "required":[
                     "number",
                     "timetable"
                  ],
                  "properties":{
                     "number":{
                        "$id":"#root/timeTable4Classes/classDataList/items/number",
                        "title":"Number or shortage of the class",
                        "type":"string",
                        "default":"",
                        "examples":[
                           "1a"
                        ],
                        "pattern":"^.*$"
                     },
                     "timetable":{
                        "$id":"#root/timeTable4Classes/classDataList/items/timetable",
                        "title":"The timetable for a certain class",
                        "type":"array",
                        "default":[
                           
                        ],
                        "items":{
                           "$id":"#root/timeTable4Classes/classDataList/items/timetable/items",
                           "title":"A certain timetable entry",
                           "type":"object",
                           "required":[
                              "timeEntry",
                              "type",
                              "subject"
                           ],
                           "properties":{
                              "timeEntry":{
                                 "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/timeEntry",
                                 "title":"All attributes related to the time entry out of the weekly time schedule",
                                 "type":"object",
                                 "required":[
                                    "day",
                                    "from",
                                    "to"
                                 ],
                                 "properties":{
                                    "day":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/timeEntry/day",
                                       "title":"day of the week",
                                       "type":"string",
                                       "enum":[
                                          "Mo",
                                          "Di",
                                          "Mi",
                                          "Do",
                                          "Fr",
                                          "Sa",
                                          "So"
                                       ]
                                    },
                                    "from":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/timeEntry/from",
                                       "title":"Start time",
                                       "type":"string",
                                       "examples":[
                                          "08:15"
                                       ],
                                       "pattern":"^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$"
                                    },
                                    "to":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/timeEntry/to",
                                       "title":"End time",
                                       "type":"string",
                                       "examples":[
                                          "14:57"
                                       ],
                                       "pattern":"^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$"
                                    },
                                    "wzplanShortage":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/timeEntry/wzplanShortage",
                                       "title":"Optional shortage of the weekly schedule since more than one schedule could be used by different years, e.g. for the secundary level and high school part",
                                       "type":"string",
                                       "examples":[
                                          "SEK1"
                                       ],
                                       "pattern":"^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$"
                                    },
                                    "wzplanSequence":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/timeEntry/wzplanSequence",
                                       "title":"Optional sequence of the weekly schedule entry, since every time entry has got a sequence which allows the order",
                                       "type":"number",
                                       "examples":[
                                          5
                                       ]
                                    },
                                    "isBreak":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/timeEntry/isBreak",
                                       "title":"Indicates if the entry is a break",
                                       "type":"boolean",
                                       "default":false,
                                       "examples":[
                                          false
                                       ]
                                    }
                                 }
                              },
                              "type":{
                                 "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/type",
                                 "title":"type of the entry: S - subject, C - coupling",
                                 "type":"string",
                                 "enum":[
                                    "S",
                                    "C"
                                 ],
                                 "default":"S"
                              },
                              "subject":{
                                 "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/subject",
                                 "title":"Subject or coupling with shortage and additional attributes, e.g. color",
                                 "type":"object",
                                 "required":[
                                    "shortage"
                                 ],
                                 "properties":{
                                    "shortage":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/subject/shortage",
                                       "title":"Shortage of the subject or coupling. It should be displayed in the timetable if no displayName is given.",
                                       "type":"string",
                                       "examples":[
                                          "Ma"
                                       ],
                                       "pattern":"^.*$"
                                    },
                                    "displayName":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/subject/displayName",
                                       "title":"Optional name which should be displayed in timetable instead of the shortage.",
                                       "type":"string",
                                       "examples":[
                                          "Mathe"
                                       ],
                                       "pattern":"^.*$"
                                    },
                                    "color":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/subject/color",
                                       "title":"Color of the subject or coupling",
                                       "type":"string",
                                       "examples":[
                                          "50ba12"
                                       ],
                                       "pattern":"^#?([a-f\\d]{3,4}|[a-f\\d]{6}|[a-f\\d]{8})$"
                                    }
                                 }
                              },
                              "teachers":{
                                 "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/teachers",
                                 "title":"List of teachers",
                                 "type":"array",
                                 "default":[
                                    
                                 ],
                                 "items":{
                                    "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/teachers/items",
                                    "title":"A certain teacher entry",
                                    "type":"object",
                                    "required":[
                                       "shortage"
                                    ],
                                    "properties":{
                                       "shortage":{
                                          "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/teachers/items/shortage",
                                          "title":"Shortage of the teacher",
                                          "type":"string",
                                          "examples":[
                                             "Msp"
                                          ],
                                          "pattern":"^.*$"
                                       },
                                       "color":{
                                          "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/teachers/items/color",
                                          "title":"Color of the teacher",
                                          "type":"string",
                                          "examples":[
                                             "50ba12"
                                          ],
                                          "pattern":"^#?([a-f\\d]{3,4}|[a-f\\d]{6}|[a-f\\d]{8})$"
                                       }
                                    }
                                 }
                              },
                              "rooms":{
                                 "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/rooms",
                                 "title":"List of rooms",
                                 "type":"array",
                                 "default":[
                                    
                                 ],
                                 "items":{
                                    "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/rooms/items",
                                    "title":"A certain room entry",
                                    "type":"object",
                                    "required":[
                                       "shortage"
                                    ],
                                    "properties":{
                                       "shortage":{
                                          "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/rooms/items/shortage",
                                          "title":"Shortage or number of the room",
                                          "type":"string",
                                          "examples":[
                                             "101"
                                          ],
                                          "pattern":"^.*$"
                                       }
                                    }
                                 }
                              },
                              "week":{
                                 "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/week",
                                 "title":"The week name if we have a week model, e.g. different timetable entries for even or uneven weeks",
                                 "type":"string",
                                 "examples":[
                                    "A"
                                 ],
                                 "pattern":"^.*$"
                              },
                              "info":{
                                 "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/info",
                                 "title":"Additional information for the timetable entry",
                                 "type":"string",
                                 "examples":[
                                    "Anmerkung"
                                 ],
                                 "pattern":"^.*$"
                              },
                              "fnote":{
                                 "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/fnote",
                                 "title":"Optional footnote",
                                 "type":"object",
                                 "required":[
                                    "content"
                                 ],
                                 "properties":{
                                    "content":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/fnote/content",
                                       "title":"Footnote content",
                                       "type":"string",
                                       "examples":[
                                          "Manchmal findet der Unterricht in der Cafeteria statt"
                                       ],
                                       "pattern":"^.*$"
                                    },
                                    "listfnj":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/fnote/listfnj",
                                       "title":"Indicates if the footnote should be displayed in timetable of the related year",
                                       "type":"boolean",
                                       "default":false,
                                       "examples":[
                                          false
                                       ],
                                       "listfnk":{
                                          "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/fnote/listfnk",
                                          "title":"Indicates if the footnote should be displayed in timetable of the class",
                                          "type":"boolean",
                                          "default":false,
                                          "examples":[
                                             false
                                          ]
                                       },
                                       "listfnl":{
                                          "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/fnote/listfnl",
                                          "title":"Indicates if the footnote should be displayed in timetable of the teachers",
                                          "type":"boolean",
                                          "default":false,
                                          "examples":[
                                             false
                                          ]
                                       },
                                       "listfnr":{
                                          "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/fnote/listfnr",
                                          "title":"Indicates if the footnote should be displayed in timetable of the rooms",
                                          "type":"boolean",
                                          "default":false,
                                          "examples":[
                                             false
                                          ]
                                       }
                                    }
                                 }
                              },
                              "teacher_subject_room":{
                                 "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/teacher_subject_room",
                                 "title":"Optional assignement of subject and room to a teacher, used if more than one room or subject is part of a coupling",
                                 "type":"object",
                                 "required":[
                                    "teacher"
                                 ],
                                 "properties":{
                                    "teacher":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/teacher_subject_room/teacher",
                                       "title":"Shortage of the teacher",
                                       "type":"string",
                                       "examples":[
                                          "Msp"
                                       ],
                                       "pattern":"^.*$"
                                    },
                                    "subject":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/teacher_subject_room/subject",
                                       "title":"Shortage of the subject",
                                       "type":"string",
                                       "examples":[
                                          "Ma"
                                       ],
                                       "pattern":"^.*$"
                                    },
                                    "room":{
                                       "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/teacher_subject_room/room",
                                       "title":"Shortage of the room",
                                       "type":"string",
                                       "examples":[
                                          "101"
                                       ],
                                       "pattern":"^.*$"
                                    }
                                 }
                              },
                              "textColor":{
                                 "$id":"#root/timeTable4Classes/classDataList/items/timetable/items/textColor",
                                 "title":"Optional text color for the timetable entry",
                                 "type":"string",
                                 "examples":[
                                    "ffffff"
                                 ],
                                 "pattern":"^#?([a-f\\d]{3,4}|[a-f\\d]{6}|[a-f\\d]{8})$"
                              }
                           }
                        }
                     },
                     "info":{
                        "$id":"#root/timeTable4Classes/classDataList/items/info",
                        "title":"Additional information for the timetable",
                        "type":"string",
                        "examples":[
                           "Mittwochs gibt es Süßigkeiten"
                        ],
                        "pattern":"^.*$"
                     }
                  }
               }
            }
         }
      }
   }
}