openapi: 3.0.0
info:
  title: Description de l'API Rest PRONOTE Campus
  description: Description openAPI de l'API Rest de PRONOTE Campus.
  version: 1.0.0
servers:
  - url: 'http://localhost/hpsw/api/v1/'
tags:
  - name: Absences
    description: API relative aux absences des étudiants
  - name: Alternances
    description: API relative aux alternances
  - name: Appariteurs
    description: API relative aux appariteurs
  - name: Baccalaureats
    description: API relative aux baccalauréats
  - name: Baccalaureat_specialites
    description: API relative aux spécialités du baccalauréat
  - name: Calendriers_notation
    description: API relative aux calendriers de notation
  - name: Contacts
    description: API relative aux contacts
  - name: Couleurs
    description: API relative à la conversion des couleurs
  - name: Cours
    description: API relative aux cours
  - name: Cours_annules
    description: API relative aux cours annulés
  - name: Couts_horaires_enseignants
    description: API relative aux coûts horaires des enseignants
  - name: Couts_horaires_salles
    description: API relative aux coûts horaires des salles
  - name: Cursus
    description: API relative aux cursus
  - name: Decharges
    description: API relative aux décharges des enseignants
  - name: Departements
    description: API relative aux départements
  - name: Devoirs
    description: API relative aux devoirs
  - name: Dispenses
    description: API relative aux dispenses des étudiants
  - name: Durees
    description: API relative à la conversion des durées
  - name: Enseignants
    description: API relative aux enseignants
  - name: Entreprises
    description: API relative aux entreprises
  - name: Etablissement_origine
    description: API relative aux établissements d'origine
  - name: Etudiants
    description: API relative aux étudiants
  - name: Familles
    description: API relative aux familles
  - name: Icals
    description: API relative aux icals
  - name: Matieres
    description: API relative aux matières
  - name: Modules
    description: API relative aux modules
  - name: Modules_notation
    description: API relative aux modules de notation
  - name: Motifs_absence_retard
    description: API relative aux motifs d'absence et de retard
  - name: Motifs_annulation
    description: API relative aux motifs d'annulation
  - name: Motifs_decharge
    description: API relative aux motifs de decharge
  - name: Motifs_dispense
    description: API relative aux motifs de dispense
  - name: Notes
    description: API relative aux notes
  - name: Parametres_base
    description: API relative aux paramètres de la base
  - name: Parents
    description: API relative aux parents
  - name: Partitions
    description: API relative aux partitions
  - name: Periodes_hors_calendrier
    description: API relative aux périodes hors calendrier de notation
  - name: Periodes_notation
    description: API relative aux périodes de notation
  - name: Ponderations
    description: API relative aux pondérations de cours
  - name: Profils_utilisation
    description: API relative aux profils d'utilisation
  - name: Promotions
    description: API relative aux promotions
  - name: Regroupements
    description: API relative aux regroupements
  - name: Retards
    description: API relative aux retards des étudiants
  - name: Rubriques
    description: API relative aux rubriques des familles
  - name: Salles
    description: API relative aux salles et groupes de salles
  - name: Semaines
    description: API relative aux semaines
  - name: Services_notation
    description: API relative aux services de notation
  - name: Sites
    description: API relative aux sites
  - name: Stages
    description: API relative aux stages
  - name: TDOptions
    description: API relative aux TD et options
  - name: Type_dernier_diplome
    description: API relative aux types du dernier diplôme
  - name: Types
    description: API relative aux types de cours
  - name: Utilisateurs
    description: API relative aux utilisateurs
  - name: Version
    description: API relative à la version de l'application
paths:
    #### Absences ####
    /absences:
        get:
            tags:
                - Absences
            summary: Liste de toutes les absences entre 2 dates/heures
            description: Tableau contenant les json des absences de la base entre 2 dates/heures
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, libelle, code]   # ?select=cle,libelle,code
                - name: cle
                  in: query
                  description: retourne seulement les absences ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: etudiant
                  in: query
                  description: retourne seulement les absences ayant une de ces clés d'étudiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec un seul étudiant souhaité
                      value: [10]   # ?etudiant=10
                    multipleIds:
                      summary: Exemple avec plusieurs étudiants souhaités
                      value: [10, 12, 14]   # ?etudiant=10,12,14
                - name: date_debut
                  in: query
                  description: retourne seulement les absences étant aprés cette date/heure de début. Si cette date/heure de début n'est pas renseignée, on prendra celle du début de la base
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06T09:00"   # ?date_debut=2024-08-06T09:00
                - name: date_fin
                  in: query
                  description: retourne seulement les absences étant avant cette date/heure de fin. Si cette date/heure de fin n'est pas renseignée, on prendra celle de fin de la base
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06T19:00"   # ?date_fin=2024-08-06T19:00
            responses:
              '200':    # status code
                description: Tableau des JSON des absences
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Absences'
    /absences/{cle}:
        get:
            tags:
                - Absences
            summary: Json de l'absence de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'absence"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Absences'
              '404':    # status code
                description: "Paramètre invalide"
              '405':    # status code
                description: "Droits insuffisants"
    /absences/{cle}/heures_manquees:
        get:
            tags:
                - Absences
            summary: Heures manquées pour l'absence sur un domaine
            description: Heures manquées pour l'absence de clé {cle} sur un domaine. Si pas de paramètres, retourne les heures manquées sur tout le domaine de l'absence.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'absence"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_absence:
                          type: integer
                          example: 388
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        tous_les_cours:
                          type: number
                          example: 1.16666666666667
                        cours_obligatoires:
                          type: number
                          example: 0.833333333333333
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé de l'absence incorrecte"
              '405':    # status code
                description: "Droits insuffisants"
    /absences/ajouter:
        post:
            tags:
                - Absences
            summary: Ajoute une absence à l'étudiant entre deux dates/heures
            description: Ajoute une absence à l'étudiant entre une date/heure de début et une date/heure de fin, passées en paramètre. Si le motif n'est pas renseigné, on prend celui par defaut.
            requestBody:
              description: Champs du JSON utilisés pour l'ajout
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      etudiant:
                        type: integer
                        example: 388
                      date_heure_debut:
                        type: string
                        example: "2024-08-15T08:00"
                      date_heure_fin:
                        type: string
                        example: "2024-08-15T16:45"
                      est_justifie:
                        type: boolean
                        example: true
                      motif:
                        type: string
                        example: "RDV administratif"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Absences'
              '404':    # status code
                description: "Paramètre invalide : clé de l'étudiant incorrecte"
              '405':    # status code
                description: "Droits insuffisants"
    /absences/enlever:
        post:
            tags:
                - Absences
            summary: Enleve une absence de l'étudiant entre deux dates/heures
            description: Enleve une absence de l'étudiant entre une date/heure de début et une date/heure de fin, passées en paramètre.
            requestBody:
              description: Champs du JSON utilisés pour indiquer la partie d'absence à enlever
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      etudiant:
                        type: integer
                        example: 388
                      date_heure_debut:
                        type: string
                        example: "2024-08-15T08:00"
                      date_heure_fin:
                        type: string
                        example: "2024-08-15T16:45"
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Paramètre invalide : clé de l'étudiant incorrecte"
              '405':    # status code
                description: "Droits insuffisants"
    #### Retards ####
    /retards:
        get:
            tags:
                - Retards
            summary: Liste de tous les retards entre deux dates/heures
            description: Tableau contenant les json des retards de la base entre deux dates/heures
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, libelle, code]   # ?select=cle,libelle,code
                - name: cle
                  in: query
                  description: retourne seulement les retards ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: etudiant
                  in: query
                  description: retourne seulement les retards ayant un de ces clés d'étudiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec un seul étudiant souhaité
                      value: [10]   # ?etudiant=10
                    multipleIds:
                      summary: Exemple avec plusieurs étudiants souhaités
                      value: [10, 12, 14]   # ?etudiant=10,12,14
                - name: date_debut
                  in: query
                  description: retourne seulement les retards étant aprés cette date/heure de début. Si cette date/heure de début n'est pas renseignée, on prendra celle du début de la base
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06T09:00"   # ?date_debut=2024-08-06T09:00
                - name: date_fin
                  in: query
                  description: retourne seulement les retards étant avant cette date/heure de fin. Si cette date/heure de fin n'est pas renseignée, on prendra celle de fin de la base
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06T19:00"   # ?date_fin=2024-08-06T19:00
            responses:
              '200':    # status code
                description: Tableau des JSON des retards
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Retards'
        post:
            tags:
                - Retards
            summary: Création d'un nouveau retard
            description: Crée un nouveau retard dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      etudiant:
                        type: integer
                        example: 12
                      date_heure:
                        type: string
                        example: "2024-08-16T09:00"
                      duree:
                        type: number
                        example: 0.0104166666666667
                      est_justifie:
                        type: boolean
                        example: true
                      motif:
                        type: string
                        example: "Problème de transport"
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Retards'
              '400':    # status code
                description: "Paramètres non valides : clé de l'étudiant incorrecte, date ou durée obligatoire..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /retards/{cle}:
        get:
            tags:
                - Retards
            summary: Json du retard de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du retard"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Retards'
              '404':    # status code
                description: "Paramètre invalide"
              '405':    # status code
                description: "Droits insuffisants"
        delete:
            tags:
                - Retards
            summary: Suppression d'un retard
            description: Supprime définitivement le retard de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /retards/supprimer:
        post:
            tags:
                - Retards
            summary: Suppression de plusieurs retards
            description: Supprime les retards dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des retards à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    #### Dispenses ####
    /dispenses:
        get:
            tags:
                - Dispenses
            summary: Liste de toutes les dispenses
            description: Tableau contenant les json des dispenses de la base
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - etudiant
                      - matiere
                      - motif
                      - date_debut
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, etudiant, matiere]   # ?select=cle,etudiant,matiere
                - name: cle
                  in: query
                  description: retourne seulement les dispenses ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: etudiant
                  in: query
                  description: retourne seulement les dispenses ayant une de ces clés d'étudiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec un seul étudiant souhaité
                      value: [10]   # ?etudiant=10
                    multipleIds:
                      summary: Exemple avec plusieurs étudiants souhaités
                      value: [10, 12, 14]   # ?etudiant=10,12,14
                - name: matiere
                  in: query
                  description: retourne seulement les dispenses ayant une de ces clés de matières
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule matière souhaitée
                      value: [10]   # ?matiere=10
                    multipleIds:
                      summary: Exemple avec plusieurs matières souhaitées
                      value: [10, 12, 14]   # ?matiere=10,12,14
                - name: date_debut
                  in: query
                  description: retourne seulement les dispenses étant aprés cette date de début. Si cette date de début n'est pas renseignée, on prendra celle du début de la base
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: retourne seulement les dispenses étant avant cette date de fin. Si cette date de fin n'est pas renseignée, on prendra celle de fin de la base
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_fin=2024-08-06
            responses:
              '200':    # status code
                description: Tableau des JSON des dispenses
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Dispenses'
        post:
            tags:
                - Dispenses
            summary: Création d'une nouvelle dispense
            description: Crée une nouvelle dispense dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Dispenses'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Dispenses'
              '400':    # status code
                description: "Paramètres non valides : clé de l'étudiant incorrecte, date ou matière obligatoire..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /dispenses/{cle}:
        get:
            tags:
                - Dispenses
            summary: Json de la dispense de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de la dispense"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Dispenses'
              '400':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Dispenses
            summary: Mise à jour partielle d'une dispense
            description: Modifie les champs de la dispense de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la dispense que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Dispenses'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Dispenses'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Dispenses
            summary: Suppression d'une dispense
            description: Supprime définitivement la dispense de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /dispenses/supprimer:
        post:
            tags:
                - Dispenses
            summary: Suppression de plusieurs dispenses
            description: Supprime les dispenses dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des dispenses à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    #### Decharges ####
    /decharges:
        get:
            tags:
                - Decharges
            summary: Liste de toutes les décharges
            description: Tableau contenant les json des décharges de la base
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - enseignant
                      - promotion
                      - motif
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, etudiant, matiere]   # ?select=cle,etudiant,matiere
                - name: cle
                  in: query
                  description: retourne seulement les décharges ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: enseignant
                  in: query
                  description: retourne seulement les décharges ayant une de ces clés d'enseignants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec un seul enseignant souhaité
                      value: [10]   # ?enseignant=10
                    multipleIds:
                      summary: Exemple avec plusieurs enseignants souhaités
                      value: [10, 12, 14]   # ?enseignant=10,12,14
                - name: promotion
                  in: query
                  description: retourne seulement les décharges ayant une de ces clés de promotions
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule promotion souhaitée
                      value: [10]   # ?promotion=10
                    multipleIds:
                      summary: Exemple avec plusieurs promotions souhaitées
                      value: [10, 12, 14]   # ?promotion=10,12,14
                - name: motif
                  in: query
                  description: retourne seulement les décharges ayant une de ces motifs
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "Motif de la decharge"   # ?motif=Motif de la decharge
            responses:
              '200':    # status code
                description: Tableau des JSON des décharges
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Decharges'
        post:
            tags:
                - Decharges
            summary: Création d'une nouvelle décharge
            description: Crée une nouvelle décharge dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Decharges'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Decharges'
              '400':    # status code
                description: "Paramètres non valides : clé de l'enseignant ou de la promotion incorrecte..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /decharges/{cle}:
        get:
            tags:
                - Decharges
            summary: Json de la décharge de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de la décharge"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Decharges'
              '400':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Decharges
            summary: Mise à jour partielle d'une décharge
            description: Modifie les champs de la décharge de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la décharge que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Decharges'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Decharges'
              '400':    # status code
                description: "Paramètres non valides : enseignant obligatoire, problème de taille..."
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Decharges
            summary: Suppression d'une décharge
            description: Supprime définitivement la décharge de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /decharges/supprimer:
        post:
            tags:
                - Decharges
            summary: Suppression de plusieurs décharges
            description: Supprime les décharges dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des décharges à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    #### Appariteurs ####
    /appariteurs:
        get:
            tags:
                - Appariteurs
            summary: Liste de tous les appariteurs
            description: Tableau contenant les json des appariteurs de la base, par défaut trié par nom puis prénom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, prenom]   # ?select=cle,nom,prenom
                - name: cle
                  in: query
                  description: retourne seulement les appariteurs ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les appariteurs ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [Dupond]   # ?nom=Dupond
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [Dupond, Dupont, Martin]   # ?nom=Dupond,Dupont,Martin
                - name: prenom
                  in: query
                  description: retourne seulement les appariteurs ayant un de ces prénoms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul prénom souhaité
                      value: [Denis]   # ?prenom=Denis
                    multipleIds:
                      summary: Exemple avec plusieurs prénoms souhaités
                      value: [Denis, Dominique, Claude]   # ?prenom=Denis,Dominique,Claude
                - name: cas_identifiant
                  in: query
                  description: retourne seulement les appariteurs ayant un de ces cas_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul cas_identifiant souhaité
                      value: [ident1]   # ?cas_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs cas_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?cas_identifiant=ident1,ident2,ident3
                - name: adfs_identifiant
                  in: query
                  description: retourne seulement les appariteurs ayant un de ces adfs_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul adfs_identifiant souhaité
                      value: [ident1]   # ?adfs_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs adfs_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?adfs_identifiant=ident1,ident2,ident3
                - name: saml_identifiant
                  in: query
                  description: retourne seulement les appariteurs ayant un de ces saml_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul saml_identifiant souhaité
                      value: [ident1]   # ?saml_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs saml_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?saml_identifiant=ident1,ident2,ident3
            responses:
              '200':    # status code
                description: Tableau des JSON des appariteurs
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Appariteurs'
        post:
            tags:
                - Appariteurs
            summary: Création d'un nouvel appariteur
            description: Crée un nouvel appariteur dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Dupond"
                      prenom:
                        type: string
                        example: "Camille"
                      civilite:
                        type: string
                        example: "Mme"
                      cas_identifiant:
                        type: string
                        example: "Identifiant__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identifiant__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identifiant__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identifiant__connexion"
                      email:
                        type: string
                        example: "prenom.nom@email.fr"
                      adresse1:
                        type: string
                        example: "12 rue de la paix"
                      adresse2:
                        type: string
                        example: "12 rue de la paix"
                      adresse3:
                        type: string
                        example: "12 rue de la paix"
                      adresse4:
                        type: string
                        example: "12 rue de la paix"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Marseille"
                      pays:
                        type: string
                        example: "France"
                      province:
                        type: string
                        example: "Province"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      acces_espace_appariteurs:
                        type: boolean
                        example: true
                      salles:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Seulement pour la modification, pas de visualisation, doit respecter la politique de sécurité
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Appariteurs'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /appariteurs/{cle}:
        get:
            tags:
                - Appariteurs
            summary: Json de l'appariteur de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'appariteur"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Appariteurs'
              '400':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Appariteurs
            summary: Mise à jour partielle d'un appariteur
            description: Modifie les champs de l'appariteur de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'appariteur que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Dupond"
                      prenom:
                        type: string
                        example: "Camille"
                      civilite:
                        type: string
                        example: "Mme"
                      cas_identifiant:
                        type: string
                        example: "Identifiant__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identifiant__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identifiant__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identifiant__connexion"
                      email:
                        type: string
                        example: "prenom.nom@email.fr"
                      adresse1:
                        type: string
                        example: "12 rue de la paix"
                      adresse2:
                        type: string
                        example: "12 rue de la paix"
                      adresse3:
                        type: string
                        example: "12 rue de la paix"
                      adresse4:
                        type: string
                        example: "12 rue de la paix"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Marseille"
                      pays:
                        type: string
                        example: "France"
                      province:
                        type: string
                        example: "Province"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      acces_espace_appariteurs:
                        type: boolean
                        example: true
                      salles:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Seulement pour la modification, pas de visualisation, doit respecter la politique de sécurité
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Appariteurs'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Appariteurs
            summary: Suppression d'un appariteur
            description: Supprime définitivement l'appariteur de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /appariteurs/supprimer:
        post:
            tags:
                - Appariteurs
            summary: Suppression de plusieurs appariteurs
            description: Supprime les appariteurs dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des appariteurs à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /appariteurs/{cle_app}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Appariteurs
            summary: Rubriques affectées à l'appariteur pour la famille
            description: Rubriques affectées à l'appariteur de clé {cle_app} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_app
                  in: path
                  description: "clé de l'appariteur"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        appariteur:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Appariteurs
            summary: Modification des rubriques affectées à l'appariteur pour la famille
            description: Modifie les rubriques affectées à l'appariteur de clé {cle_app} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_app
                  in: path
                  description: "clé de l'appariteur"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        appariteur:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Contacts ####
    /contacts:
        get:
            tags:
                - Contacts
            summary: Liste de tous les contacts
            description: Tableau contenant les json des contacts de la base, par défaut trié par nom puis prénom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, prenom]   # ?select=cle,nom,prenom
                - name: cle
                  in: query
                  description: retourne seulement les contacts ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les contacts ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [contact1]   # ?nom=contact1
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [contact1, contact2, contact3]   # ?nom=contact1,contact2,contact3
                - name: prenom
                  in: query
                  description: retourne seulement les contacts ayant un de ces prénoms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul prénom souhaité
                      value: [prenomContact1]   # ?prenom=prenomContact1
                    multipleIds:
                      summary: Exemple avec plusieurs prénoms souhaités
                      value: [prenomContact1, prenomContact2, prenomContact3]   # ?prenom=prenomContact1,prenomContact2,prenomContact3
                - name: date_naissance
                  in: query
                  description: retourne seulement les contacts ayant une de ces dates de naissance
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec une seule date de naissance souhaitée
                      value: [2000-12-21]   # ?date_naissance=2000-12-21
                    multipleIds:
                      summary: Exemple avec plusieurs dates de naissance souhaitées
                      value: [2000-12-21, 2001-12-21, 2002-12-21]   # ?date_naissance=2000-12-21,2001-12-21,2002-12-21
                - name: uid_identifiant
                  in: query
                  description: retourne seulement les contacts ayant un de ces uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [conta1]   # ?uid_identifiant=conta1
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiants souhaités
                      value: [conta1, conta2, conta3]   # ?uid_identifiant=conta1,conta2,conta3
                - name: cas_identifiant
                  in: query
                  description: retourne seulement les contacts ayant un de ces cas_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul cas_identifiant souhaité
                      value: [ident1]   # ?cas_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs cas_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?cas_identifiant=ident1,ident2,ident3
                - name: adfs_identifiant
                  in: query
                  description: retourne seulement les contacts ayant un de ces adfs_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul adfs_identifiant souhaité
                      value: [ident1]   # ?adfs_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs adfs_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?adfs_identifiant=ident1,ident2,ident3
                - name: saml_identifiant
                  in: query
                  description: retourne seulement les contacts ayant un de ces saml_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul saml_identifiant souhaité
                      value: [ident1]   # ?saml_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs saml_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?saml_identifiant=ident1,ident2,ident3
            responses:
              '200':    # status code
                description: Tableau des JSON des contacts
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Contacts'
        post:
            tags:
                - Contacts
            summary: Création d'un nouveau contact
            description: Crée un nouveau contact dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Dupond"
                      prenom:
                        type: string
                        example: "Camille"
                      civilite:
                        type: string
                        example: "Mme"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      cas_identifiant:
                        type: string
                        example: "Identifiant__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identifiant__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identifiant__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identifiant__connexion"
                      date_naissance:
                        type: string
                        example: "2000-02-24"
                      lieu_naissance:
                        type: string
                        example: "Marseille"
                      code_fiscal:
                        type: string
                        example: "154862"
                      fonction:
                        type: string
                        example: "Fonction"
                      entreprises:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      email:
                        type: string
                        example: "prenom.nom@email.fr"
                      autorisation_reception_email:
                        type: boolean
                        example: true
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      autorisation_reception_sms:
                        type: boolean
                        example: true
                      numero_fax:
                        type: string
                        example: "01010101"
                      indicatif_fax:
                        type: string
                        example: "01"
                      proprietaire:
                        type: integer
                        example: 10
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Seulement pour la modification, pas de visualisation, doit respecter la politique de sécurité
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Contacts'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /contacts/{cle}:
        get:
            tags:
                - Contacts
            summary: Json du contact de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du contact"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Contacts'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Contacts
            summary: Mise à jour partielle d'un contact
            description: Modifie les champs du contact de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du contact que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Dupond"
                      prenom:
                        type: string
                        example: "Camille"
                      civilite:
                        type: string
                        example: "Mme"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      cas_identifiant:
                        type: string
                        example: "Identifiant__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identifiant__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identifiant__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identifiant__connexion"
                      date_naissance:
                        type: string
                        example: "2000-02-24"
                      lieu_naissance:
                        type: string
                        example: "Marseille"
                      code_fiscal:
                        type: string
                        example: "154862"
                      fonction:
                        type: string
                        example: "Fonction"
                      entreprises:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      email:
                        type: string
                        example: "prenom.nom@email.fr"
                      autorisation_reception_email:
                        type: boolean
                        example: true
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      autorisation_reception_sms:
                        type: boolean
                        example: true
                      numero_fax:
                        type: string
                        example: "01010101"
                      indicatif_fax:
                        type: string
                        example: "01"
                      proprietaire:
                        type: integer
                        example: 10
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Seulement pour la modification, pas de visualisation, doit respecter la politique de sécurité
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Contacts'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : contact inexistant"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Contacts
            summary: Suppression d'un contact
            description: Supprime définitivement le contact de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /contacts/supprimer:
        post:
            tags:
                - Contacts
            summary: Suppression de plusieurs contacts
            description: Supprime les contacts dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des contacts à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /contacts/{cle_cont}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Contacts
            summary: Rubriques affectées au contact pour la famille
            description: Rubriques affectées au contact de clé {cle_cont} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_cont
                  in: path
                  description: "clé du contact"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        contact:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Contacts
            summary: Modification des rubriques affectées au contact pour la famille
            description: Modifie les rubriques affectées au contact de clé {cle_cont} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_cont
                  in: path
                  description: "clé du contact"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        contact:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Stages ####
    /stages:
        get:
            tags:
                - Stages
            summary: Liste de tous les stages
            description: Tableau contenant les json des stages de la base, par défaut trié par entreprise
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - entreprise
                      - etudiant
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, entreprise, etudiant]   # ?select=cle,entreprise,etudiant
                - name: cle
                  in: query
                  description: retourne seulement les stages ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: entreprise
                  in: query
                  description: retourne seulement les stages ayant une de ces entreprises
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec une seule entreprise souhaitée
                      value: [entreprise1]   # ?entreprise=entreprise1
                    multipleIds:
                      summary: Exemple avec plusieurs entreprises souhaitées
                      value: [entreprise1, entreprise2, entreprise3]   # ?entreprise=entreprise1,entreprise2,entreprise3
                - name: etudiant
                  in: query
                  description: retourne seulement les stages ayant un de ces étudiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul étudiant souhaité
                      value: [etudiant1]   # ?etudiant=etudiant1
                    multipleIds:
                      summary: Exemple avec plusieurs étudiants souhaités
                      value: [etudiant1, etudiant2, etudiant3]   # ?etudiant=etudiant1,etudiant2,etudiant3
                - name: enseignant_tutueur
                  in: query
                  description: retourne seulement les stages ayant un de ces enseignants tuteurs
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul enseignant tuteur souhaité
                      value: [enseignant1]   # ?enseignant_tuteur=enseignant1
                    multipleIds:
                      summary: Exemple avec plusieurs enseignants tuteurs souhaités
                      value: [enseignant1, enseignant2, enseignant3]   # ?enseignant_tuteur=enseignant1,enseignant2,enseignant3
                - name: enseignant_responsable
                  in: query
                  description: retourne seulement les stages ayant un de ces enseignants responsables
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul enseignant responsable souhaité
                      value: [enseignant1]   # ?enseignant_responsable=enseignant1
                    multipleIds:
                      summary: Exemple avec plusieurs enseignants responsables souhaités
                      value: [enseignant1, enseignant2, enseignant3]   # ?enseignant_responsable=enseignant1,enseignant2,enseignant3
            responses:
              '200':    # status code
                description: Tableau des JSON des stages
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Stages'
        post:
            tags:
                - Stages
            summary: Création d'un nouveau stage
            description: Crée un nouveau stage dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      etudiant:
                        type: integer
                        example: 12
                      dates:
                        type: array
                        items:
                          type: object
                          properties:
                            du:
                              type: string
                              example: "2000-02-14"
                            au:
                              type: string
                              example: "2000-02-27"
                      formulaire_etudiant:
                        type: object
                        properties:
                          visibilite:
                            type: boolean
                            example: true
                          du:
                            type: string
                            example: "2000-02-14"
                          au:
                            type: string
                            example: "2000-02-27"
                      duree_saisie:
                        type: number
                        example: 10.0
                      duree_calculee:
                        type: number
                        example: 12.0
                      entreprise:
                        type: integer
                        example: 14
                      maitres_stage:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      sujet:
                        type: string
                        example: "sujet de stage"
                      enseignant_tuteur:
                        type: integer
                        example: 12
                      enseignant_responsable:
                        type: integer
                        example: 14
                      sujet_detaille:
                        type: string
                        example: "Sujet un peu plus détaillé"
                      commentaire:
                        type: string
                        example: "Voici un commentaire bien utile"
                      objectifs:
                        type: string
                        example: "Voici les différents objectifs"
                      activites_prevues:
                        type: string
                        example: "Voici les activités prévues"
                      competences_visees:
                        type: string
                        example: "Voici les compétences visées"
                      modalites_concertation:
                        type: string
                        example: "Voici les modalités de concertation"
                      modalites_evaluation:
                        type: string
                        example: "Voici les modalités d'évaluation"
                      convention_signee:
                        type: boolean
                        example: true
                      attestation_fin_stage_recue:
                        type: boolean
                        example: true
                      remuneration:
                        type: number
                        example: 10.0
                      devise:
                        type: string
                        example: "€"
                      avantages:
                        type: array
                        items:
                          type: string
                        example: ["Tickets restaurant","Transport"]
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Stages'
              '400':    # status code
                description: "Paramètres non valides : étudiant obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /stages/{cle}:
        get:
            tags:
                - Stages
            summary: Json du stage de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du stage"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Stages'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Stages
            summary: Mise à jour partielle d'un stage
            description: Modifie les champs du stage de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du stage que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      etudiant:
                        type: integer
                        example: 12
                      dates:
                        type: array
                        items:
                          type: object
                          properties:
                            du:
                              type: string
                              example: "2000-02-14"
                            au:
                              type: string
                              example: "2000-02-27"
                      formulaire_etudiant:
                        type: object
                        properties:
                          visibilite:
                            type: boolean
                            example: true
                          du:
                            type: string
                            example: "2000-02-14"
                          au:
                            type: string
                            example: "2000-02-27"
                      duree_saisie:
                        type: number
                        example: 10.0
                      duree_calculee:
                        type: number
                        example: 12.0
                      entreprise:
                        type: integer
                        example: 14
                      maitres_stage:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      sujet:
                        type: string
                        example: "sujet de stage"
                      enseignant_tuteur:
                        type: integer
                        example: 12
                      enseignant_responsable:
                        type: integer
                        example: 14
                      sujet_detaille:
                        type: string
                        example: "Sujet un peu plus détaillé"
                      commentaire:
                        type: string
                        example: "Voici un commentaire bien utile"
                      objectifs:
                        type: string
                        example: "Voici les différents objectifs"
                      activites_prevues:
                        type: string
                        example: "Voici les activités prévues"
                      competences_visees:
                        type: string
                        example: "Voici les compétences visées"
                      modalites_concertation:
                        type: string
                        example: "Voici les modalités de concertation"
                      modalites_evaluation:
                        type: string
                        example: "Voici les modalités d'évaluation"
                      convention_signee:
                        type: boolean
                        example: true
                      attestation_fin_stage_recue:
                        type: boolean
                        example: true
                      remuneration:
                        type: number
                        example: 10.0
                      devise:
                        type: string
                        example: "€"
                      avantages:
                        type: array
                        items:
                          type: string
                        example: ["Tickets restaurant","Transport"]
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Stages'
              '400':    # status code
                description: "Paramètres non valides : étudiant obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : stage inexistant"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Stages
            summary: Suppression d'un stage
            description: Supprime définitivement le stage de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /stages/supprimer:
        post:
            tags:
                - Stages
            summary: Suppression de plusieurs stages
            description: Supprime les stages dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des stages à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /stages/{cle_sta}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Stages
            summary: Rubriques affectées au stage pour la famille
            description: Rubriques affectées au stage de clé {cle_sta} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_sta
                  in: path
                  description: "clé du stage"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        stage:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Stages
            summary: Modification des rubriques affectées au stage pour la famille
            description: Modifie les rubriques affectées au stage de clé {cle_sta} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_sta
                  in: path
                  description: "clé du stage"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        stage:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Alternances ####
    /alternances:
        get:
            tags:
                - Alternances
            summary: Liste de toutes les alternances
            description: Tableau contenant les json des alternances de la base, par défaut trié par entreprise
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - entreprise
                      - etudiant
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, entreprise, etudiant]   # ?select=cle,entreprise,etudiant
                - name: cle
                  in: query
                  description: retourne seulement les alternances ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: entreprise
                  in: query
                  description: retourne seulement les alternances ayant une de ces entreprises
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec une seule entreprise souhaitée
                      value: [entreprise1]   # ?entreprise=entreprise1
                    multipleIds:
                      summary: Exemple avec plusieurs entreprises souhaitées
                      value: [entreprise1, entreprise2, entreprise3]   # ?entreprise=entreprise1,entreprise2,entreprise3
                - name: etudiant
                  in: query
                  description: retourne seulement les alternances ayant un de ces étudiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul étudiant souhaité
                      value: [etudiant1]   # ?etudiant=etudiant1
                    multipleIds:
                      summary: Exemple avec plusieurs étudiants souhaités
                      value: [etudiant1, etudiant2, etudiant3]   # ?etudiant=etudiant1,etudiant2,etudiant3
                - name: enseignant_tutueur
                  in: query
                  description: retourne seulement les alternances ayant un de ces enseignants tuteurs
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul enseignant tuteur souhaité
                      value: [enseignant1]   # ?enseignant_tuteur=enseignant1
                    multipleIds:
                      summary: Exemple avec plusieurs enseignants tuteurs souhaités
                      value: [enseignant1, enseignant2, enseignant3]   # ?enseignant_tuteur=enseignant1,enseignant2,enseignant3
                - name: enseignant_responsable
                  in: query
                  description: retourne seulement les alternances ayant un de ces enseignants responsables
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul enseignant responsable souhaité
                      value: [enseignant1]   # ?enseignant_responsable=enseignant1
                    multipleIds:
                      summary: Exemple avec plusieurs enseignants responsables souhaités
                      value: [enseignant1, enseignant2, enseignant3]   # ?enseignant_responsable=enseignant1,enseignant2,enseignant3
            responses:
              '200':    # status code
                description: Tableau des JSON des alternances
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Alternances'
        post:
            tags:
                - Alternances
            summary: Création d'une nouvelle alternance
            description: Crée une nouvelle alternance dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      etudiant:
                        type: integer
                        example: 12
                      dates:
                        type: array
                        items:
                          type: object
                          properties:
                            du:
                              type: string
                              example: "2000-02-14"
                            au:
                              type: string
                              example: "2000-02-27"
                      formulaire_etudiant:
                        type: object
                        properties:
                          visibilite:
                            type: boolean
                            example: true
                          du:
                            type: string
                            example: "2000-02-14"
                          au:
                            type: string
                            example: "2000-02-27"
                      duree_saisie:
                        type: number
                        example: 10.0
                      duree_calculee:
                        type: number
                        example: 12.0
                      entreprise:
                        type: integer
                        example: 14
                      maitres_tuteurs:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      sujet:
                        type: string
                        example: "sujet de l'alternance"
                      type_contrat:
                        type: string
                        example: "Apprentissage"
                      dates_contrat:
                        type: object
                        properties:
                          du:
                            type: string
                            example: "2000-02-14"
                          au:
                            type: string
                            example: "2000-02-27"
                      commentaire:
                        type: string
                        example: "Voici un commentaire bien utile"
                      enseignant_tuteur:
                        type: integer
                        example: 12
                      enseignant_responsable:
                        type: integer
                        example: 14
                      sujet_detaille:
                        type: string
                        example: "Sujet un peu plus détaillé"
                      objectifs:
                        type: string
                        example: "Voici les différents objectifs"
                      activites_prevues:
                        type: string
                        example: "Voici les activités prévues"
                      competences_visees:
                        type: string
                        example: "Voici les compétences visées"
                      modalites_concertation:
                        type: string
                        example: "Voici les modalités de concertation"
                      modalites_evaluation:
                        type: string
                        example: "Voici les modalités d'évaluation"
                      convention_signee:
                        type: boolean
                        example: true
                      contrat_rempli:
                        type: boolean
                        example: true
                      remuneration:
                        type: number
                        example: 10.0
                      devise:
                        type: string
                        example: €
                      avantages:
                        type: array
                        items:
                          type: string
                        example: ["Tickets restaurant","Transport"]
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Alternances'
              '400':    # status code
                description: "Paramètres non valides : étudiant obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /alternances/{cle}:
        get:
            tags:
                - Alternances
            summary: Json de l'alternance de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'alternance"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Alternances'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Alternances
            summary: Mise à jour partielle d'une alternance
            description: Modifie les champs de l'alternance de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'alternance que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      etudiant:
                        type: integer
                        example: 12
                      dates:
                        type: array
                        items:
                          type: object
                          properties:
                            du:
                              type: string
                              example: "2000-02-14"
                            au:
                              type: string
                              example: "2000-02-27"
                      formulaire_etudiant:
                        type: object
                        properties:
                          visibilite:
                            type: boolean
                            example: true
                          du:
                            type: string
                            example: "2000-02-14"
                          au:
                            type: string
                            example: "2000-02-27"
                      duree_saisie:
                        type: number
                        example: 10.0
                      duree_calculee:
                        type: number
                        example: 12.0
                      entreprise:
                        type: integer
                        example: 14
                      maitres_tuteurs:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      sujet:
                        type: string
                        example: "sujet de l'alternance"
                      type_contrat:
                        type: string
                        example: "Apprentissage"
                      dates_contrat:
                        type: object
                        properties:
                          du:
                            type: string
                            example: "2000-02-14"
                          au:
                            type: string
                            example: "2000-02-27"
                      commentaire:
                        type: string
                        example: "Voici un commentaire bien utile"
                      enseignant_tuteur:
                        type: integer
                        example: 12
                      enseignant_responsable:
                        type: integer
                        example: 14
                      sujet_detaille:
                        type: string
                        example: "Sujet un peu plus détaillé"
                      objectifs:
                        type: string
                        example: "Voici les différents objectifs"
                      activites_prevues:
                        type: string
                        example: "Voici les activités prévues"
                      competences_visees:
                        type: string
                        example: "Voici les compétences visées"
                      modalites_concertation:
                        type: string
                        example: "Voici les modalités de concertation"
                      modalites_evaluation:
                        type: string
                        example: "Voici les modalités d'évaluation"
                      convention_signee:
                        type: boolean
                        example: true
                      contrat_rempli:
                        type: boolean
                        example: true
                      remuneration:
                        type: number
                        example: 10.0
                      devise:
                        type: string
                        example: €
                      avantages:
                        type: array
                        items:
                          type: string
                        example: ["Tickets restaurant","Transport"]
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Alternances'
              '400':    # status code
                description: "Paramètres non valides : étudiant obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : alternance inexistante"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Alternances
            summary: Suppression d'une alternance
            description: Supprime définitivement l'alternance de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /alternances/supprimer:
        post:
            tags:
                - Alternances
            summary: Suppression de plusieurs alternances
            description: Supprime les alternances dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des alternances à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /alternances/{cle_alt}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Alternances
            summary: Rubriques affectées à l'alternance pour la famille
            description: Rubriques affectées à l'alternance de clé {cle_alt} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_alt
                  in: path
                  description: "clé de l'alternance"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        alternance:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Alternances
            summary: Modification des rubriques affectées à l'alternance pour la famille
            description: Modifie les rubriques affectées à l'alternance de clé {cle_alt} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_alt
                  in: path
                  description: "clé de l'alternance"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        alternance:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Cours ####
    /cours:
        get:
            tags:
                - Cours
            summary: Liste de tous les cours
            description: Tableau contenant les json des cours de la base, par défaut trié par clé
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - type
                      - place
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, type, place]   # ?select=cle,type,place
                - name: cle
                  in: query
                  description: retourne seulement les cours ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: parente
                  in: query
                  description: retourne seulement les cours ayant une de ces parentés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: est_non_place
                  in: query
                  description: retourne seulement les cours placés ou non placés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: statut_place
                  in: query
                  description: retourne seulement les cours ayant un de ces statuts
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: mobilite_seances
                  in: query
                  description: retourne seulement les cours ayant une de ces mobilités
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: matiere
                  in: query
                  description: retourne seulement les cours ayant une de ces clés matières
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: type
                  in: query
                  description: retourne seulement les cours ayant un de ces types
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: reference
                  in: query
                  description: retourne seulement les cours ayant un de ces numéros de références (ne passer que le numéro, pas la chaine entière)
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: date_debut
                  in: query
                  description: retourne seulement les cours ayant lieu après cette date de debut. Si cette date de début n'est pas renseignée, on prendra celle du début de la base
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: retourne seulement les cours ayant lieu avant cette date de fin. Si cette date de fin n'est pas renseignée, on prendra celle de fin de la base
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: Tableau des JSON des cours
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Cours'
        post:
            tags:
                - Cours
            summary: Création d'un nouveau cours
            description: Crée un nouveau cours dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Cours'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cours'
              '400':    # status code
                description: "Paramètres non valides : matière, durée, statut_place, mobilite_seances domaine ou domaine_potentiel obligatoires"
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /cours/{cle}:
        get:
            tags:
                - Cours
            summary: Json du cours de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cours'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Cours
            summary: Mise à jour partielle d'un cours
            description: Modifie les champs du cours de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du cours que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Cours'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cours'
              '400':    # status code
                description: "Paramètre non valide"
              '404':    # status code
                description: "Paramètre invalide : cours inexistant"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Cours
            summary: Suppression d'un cours
            description: Supprime définitivement le cours de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /cours/supprimer:
        post:
            tags:
                - Cours
            summary: Suppression de plusieurs cours
            description: Supprime les cours dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des cours à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /cours/{cle}/cout:
        get:
            tags:
                - Cours
            summary: Coût d'un cours sur un domaine
            description: Coût du cours de clé {cle} sur un domaine (coût de l'enseignant + coût de la salle). Si pas de paramètres, retourne le coût annuel, avec les jours fériés et les cours non placés.
            parameters:
                - name: cle
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Droits insuffisants"
    /cours/cout:
        get:
            tags:
                - Cours
            summary: Coûts des cours sur un domaine
            description: Coûts des cours sur un domaine. Si pas de paramètres, retourne le coût annuel de tous les cours, avec les jours fériés et les cours non placés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des cours"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              cout:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Droits insuffisants"
    /cours/{cle}/site:
        get:
            tags:
                - Cours
            summary: Site affecté à un cours sur un domaine
            description: Site affecté au cours de clé {cle} sur un domaine. Si pas de paramètres, retourne le site sur l'année complète.
            parameters:
                - name: cle
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        site:
                          type: string
                          example: "Principal"
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Droits insuffisants"
        post:
            tags:
                - Cours
            summary: Modification du site d'un cours sur un domaine
            description: Modifie le site du cours de clé {cle} avec le libelle de site passe en paramètre. Prends l'année complète si pas de domaine en paramètres.
            parameters:
                - name: cle
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: site
                  in: query
                  description: "libellé du site"
                  required: true
                  schema:
                    type: string
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        site:
                          type: string
                          example: "Principal"
              '403':    # status code
                description: "Droits insuffisants"
              '404':    # status code
                description: "Paramètre invalide : cours inexistant"
              '500':    # status code
                description: site inexistant
    /cours/site:
        get:
            tags:
                - Cours
            summary: Site des cours sur un domaine
            description: Site des cours sur un domaine. Si pas de paramètres, retourne le site de tous les cours sur l'année complète.
            parameters:
                - name: cles
                  in: query
                  description: "clés des cours"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        site:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              site:
                                type: string
                                example: "Principal"
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Droits insuffisants"
    /cours/{cle}/contenus:
        get:
            tags:
                - Cours
            summary: Caracteristiques du contenu d'un cours sur une semaine
            description: Caracteristiques du contenu du cours de clé {cle} sur une semaine
            parameters:
                - name: cle
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: "numéro de la semaine"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        semaine:
                          type: integer
                          example: 1
                        contenus:
                          type: array
                          items:
                            type: object
                            properties:
                              titre:
                                type: string
                              description:
                                type: string
                              delai_publication:
                                type: string
                              sites_internet:
                                type: array
                                items:
                                  type: string
                              lien_visio:
                                type: object
                                properties:
                                  libelle:
                                    type: string
                                  url:
                                    type: string
                                  commentaire:
                                    type: string
                              cours:
                                type: integer
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '404':    # status code
                description: "Paramètre invalide : cours inexistant"
              '500':    # status code
                description: "Droits insuffisants"
        post:
            tags:
                - Cours
            summary: Modification du titre, de la description, des sites internet et/ou du délai de publication du contenu d'un cours pour une semaine
            description: Modifie le titre, la description les sites internet et/ou le délai de publication du contenu pour le cours de clé {cle} pour la semaine passées en paramètre. Crée le contenu si le cours ne possède aucun contenu. Retourne une exception si le cours a déjà plusieurs contenus.
            parameters:
                - name: cle
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: "numéro de la semaine"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Champs du JSON utilisés pour la création/modification
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      titre:
                        type: string
                        example: "Titre du contenu de la séance 1"
                      description:
                        type: string
                        example: "description de la séance 1"
                        description: La description peut être une chaine HTML
                      sites_internet:
                        type: array
                        items:
                          type: string
                          example: "www.index-education.fr"
                        description: URLs des sites internet du contenu de ce cours pour cette séance. Si l'url n'existe pas, elle sera créée dans la base.
                      delai_publication:
                        type: string
                        example: "Immédiatement"
                        description: ADelaiPublication correspond soit au nombre de jour avant le début de la séance (pour une publication personnalisée) soit à une valeur particulière donnée par les fonctions PublieImmediatement, PublieDesDebutSeance ou PublieDesFinSeance
                      lien_visio:
                        type: object
                        properties:
                          libelle:
                            type: string
                          url:
                            type: string
                            example: 'www.visio.fr'
                          commentaire:
                            type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        semaine:
                          type: integer
                          example: 1
                        contenus:
                          type: array
                          items:
                            type: object
                            properties:
                              titre:
                                type: string
                              description:
                                type: string
                              delai_publication:
                                type: string
                              sites_internet:
                                type: array
                                items:
                                  type: string
                              lien_visio:
                                type: object
                                properties:
                                  libelle:
                                    type: string
                                  url:
                                    type: string
                                  commentaire:
                                    type: string
                              cours:
                                type: integer
              '400':    # status code
                description: "Paramètre invalide : semaine obligatoire ou format delai non valide"
              '403':    # status code
                description: "Paramètre invalide : séance inexistante pour cette semaine"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible : plusieurs contenus sur cette séance ou modification d'un des champs impossible"
    /cours/{cle}/appel_termine:
        get:
            tags:
                - Cours
            summary: Booléen indiquant si l'appel du cours sur une semaine est terminé
            description: Booléen indiquant si l'appel du cours de clé {cle} est terminé pour la semaine {semaine}
            parameters:
                - name: cle
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: "numéro de la semaine"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        semaine:
                          type: integer
                          example: 1
                        cours:
                          type: integer
                          example: 10
                        appel_termine:
                          type: boolean
                          example: true
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '403':    # status code
                description: "Paramètre invalide : séance inexistante pour cette semaine"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Cours
            summary: Modification du booléen indiquant si l'appel d'un cours pour une semaine est terminé
            description: Modifie le booléen indiquant si l'appel du cours de clé {cle} pour la semaine passées en paramètre est terminé ou non
            parameters:
                - name: cle
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: "numéro de la semaine"
                  required: true
                  schema:
                    type: integer
                - name: appel_termine
                  in: query
                  description: "booléen indiquant si l'appel est terminé"
                  required: true
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        semaine:
                          type: integer
                          example: 1
                        cours:
                          type: integer
                          example: 10
                        appel_termine:
                          type: boolean
                          example: true
              '400':    # status code
                description: "Paramètre invalide : semaine obligatoire"
              '403':    # status code
                description: "Paramètre invalide : séance inexistante pour cette semaine"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /cours/{cle}/detail_seances_placees:
        get:
            tags:
                - Cours
            summary: Détail des séances placées d'un cours
            description: Détail des séances placées du cours de clé {cle}. Le cours doit être un cours placé. Si c'est un cours père, renvoie le détail de tous ses cours fils placés. Attention, aucune indication de fuseau horaire n'est renvoyée avec jour_heure_debut.
            parameters:
                - name: cle
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: retourne le détail des séances placées ayant lieu après cette date/heure ('yyyy-mm-ddThh:nn') de debut. <br>
                               Si cette date/heure de début n'est pas renseignée, on prendra celle du début de la base.<br>
                               Si le paramètre passé est seulement sous format date, 'yyyy-mm-dd', renvoie les séances ayant lieu à partir de la première heure de cette date.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: retourne le détail des séances placées ayant lieu avant cette date/heure ('yyyy-mm-ddThh:nn') de fin. <br>
                               Si cette date/heure de fin n'est pas renseignée, on prendra celle de fin de la base.<br>
                               Si le paramètre passé est seulement sous format date, 'yyyy-mm-dd', renvoie les séances ayant lieu jusqu'à la dernière heure de cette date.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle:
                            type: integer
                            example: 12
                          matiere:
                            type: integer
                            example: 10
                          type:
                            type: string
                            example: TD
                          duree:
                            type: number
                            example: 0.125
                          jour_heure_debut:
                            type: string
                            example: "2023-10-03T11:00"
                          ponderation_avant_apport:
                            type: integer
                            example: 1
                          ponderation_apres_apport:
                            type: integer
                            example: 1
                          enseignants:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          promotions:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          tdoptions:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          regroupements:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          salles:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
              '400':    # status code
                description: "Paramètre invalide : cours non placé"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /cours/detail_seances_placees:
        get:
            tags:
                - Cours
            summary: Détail des séances placées des cours
            description: Détail des séances placées des cours passés en paramètre. Les cours doivent être placés. Pour un cours père, renvoie le détail de tous ses cours fils placés. Si pas de paramètres, retourne les séances de tous les cours placés. Attention, aucune indication de fuseau horaire n'est renvoyée avec jour_heure_debut.
            parameters:
                - name: cles
                  in: query
                  description: "clés des cours"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: date_debut
                  in: query
                  description: retourne le détail des séances placées ayant lieu après cette date/heure ('yyyy-mm-ddThh:nn') de debut. <br>
                               Si cette date/heure de début n'est pas renseignée, on prendra celle du début de la base.<br>
                               Si le paramètre passé est seulement sous format date, 'yyyy-mm-dd', renvoie les séances ayant lieu à partir de la première heure de cette date.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: retourne le détail des séances placées ayant lieu avant cette date/heure ('yyyy-mm-ddThh:nn') de fin. <br>
                               Si cette date/heure de fin n'est pas renseignée, on prendra celle de fin de la base.<br>
                               Si le paramètre passé est seulement sous format date, 'yyyy-mm-dd', renvoie les séances ayant lieu jusqu'à la dernière heure de cette date.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle:
                            type: integer
                            example: 12
                          matiere:
                            type: integer
                            example: 10
                          type:
                            type: string
                            example: TD
                          duree:
                            type: number
                            example: 0.125
                          jour_heure_debut:
                            type: string
                            example: "2023-10-03T11:00"
                          ponderation_avant_apport:
                            type: integer
                            example: 1
                          ponderation_apres_apport:
                            type: integer
                            example: 1
                          enseignants:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          promotions:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          tdoptions:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          regroupements:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          salles:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
              '400':    # status code
                description: "Paramètre invalide : cours non placé"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /cours/{cle_cours}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Cours
            summary: Rubriques affectées au cours pour la famille
            description: Rubriques affectées au cours de clé {cle_cours} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_cours
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Cours
            summary: Modification des rubriques affectées au cours pour la famille
            description: Modifie les rubriques affectées au cours de clé {cle_cours} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_cours
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Cours_annules ####
    /cours_annules:
        get:
            tags:
                - Cours_annules
            summary: Liste de tous les cours annulés
            description: Tableau contenant les json des cours annulés de la base, par défaut trié par clé
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - type
                      - matiere
                      - motif_annulation
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, type, matiere]   # ?select=cle,type,matiere
                - name: cle
                  in: query
                  description: retourne seulement les cours annulés ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: matiere
                  in: query
                  description: retourne seulement les cours annulés ayant une de ces clés matières
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: type
                  in: query
                  description: retourne seulement les cours annulés ayant un de ces types
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: reference
                  in: query
                  description: retourne seulement les cours annulés ayant un de ces numéros de références (ne passer que le numéro, pas la chaine entière)
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: date_debut
                  in: query
                  description: retourne seulement les cours annulés ayant lieu après cette date de debut. Si cette date de début n'est pas renseignée, on prendra celle du début de la base
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: retourne seulement les cours annulés ayant lieu avant cette date de fin. Si cette date de fin n'est pas renseignée, on prendra celle de fin de la base
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                - name: enseignants
                  in: query
                  description: retourne seulement les cours annulés de ces enseignants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: promotions
                  in: query
                  description: retourne seulement les cours annulés de ces promotions
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: tdoptions
                  in: query
                  description: retourne seulement les cours annulés de ces td/options
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: regroupements
                  in: query
                  description: retourne seulement les cours annulés de ces regroupements
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: salles
                  in: query
                  description: retourne seulement les cours annulés de ces salles
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: etudiants
                  in: query
                  description: retourne seulement les cours annulés de ces étudiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: Tableau des JSON des cours annulés
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Cours_annules'
        post:
            tags:
                - Cours_annules
            summary: Annulation d'un cours dans la base
            description: Annulation d'un cours dans la base à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cle_cours:
                        type: integer
                        example: 388
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      motif_annulation:
                        type: string
                        example: "Annulation"
                      commentaire:
                        type: string
                        example: "commentaire"
            responses:
              '204':    # status code
                description: Succès
              '400':    # status code
                description: "Paramètres non valides : clé du cours obligatoire, cours protégé ou verrouillé"
              '500':    # status code
                description: Annulation impossible
    /cours_annules/{cle}:
        get:
            tags:
                - Cours_annules
            summary: Json du cours annulé de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du cours annulé"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cours_annules'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Cours_annules
            summary: Mise à jour partielle d'un cours annulé
            description: Modifie les champs motif_annulation et/ou commentaire du cours annulé de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du cours annulé que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      motif_annulation:
                        type: string
                        example: "Annulation"
                      commentaire:
                        type: string
                        example: "commentaire"
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cours_annules'
              '400':    # status code
                description: "Paramètre non valide"
              '404':    # status code
                description: "Paramètre invalide : cours annulé inexistant"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Cours_annules
            summary: Suppression d'un cours annulé
            description: Supprime définitivement le cours annulé de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /cours_annules/supprimer:
        post:
            tags:
                - Cours_annules
            summary: Suppression de plusieurs cours annulés
            description: Supprime les cours annulés dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des cours annulés à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '400':    # status code
                description: "Bad request : on a pas pu tout supprimer"
              '403':    # status code
                description: "Droits insuffisants"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /cours_annules/{cle}/detail_seances_placees:
        get:
            tags:
                - Cours_annules
            summary: Détail des séances placées d'un cours annulé
            description: Détail des séances placées du cours annulé de clé {cle}. Attention, aucune indication de fuseau horaire n'est renvoyée avec jour_heure_debut.
            parameters:
                - name: cle
                  in: path
                  description: "clé du cours annulé"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle_cours:
                            type: integer
                            example: 12
                            description: "clé du cours annulé"
                          matiere:
                            type: integer
                            example: 10
                          type:
                            type: string
                            example: TD
                          duree:
                            type: number
                            example: 0.125
                          jour_heure_debut:
                            type: string
                            example: "2023-10-03T11:00"
                          ponderation_avant_apport:
                            type: integer
                            example: 1
                          ponderation_apres_apport:
                            type: integer
                            example: 1
                          enseignants:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          promotions:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          tdoptions:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          regroupements:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          salles:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    #### Couts_horaires_enseignants ####
    /couts_horaires_enseignants:
        get:
            tags:
                - Couts_horaires_enseignants
            summary: Liste de tous les coûts horaires des enseignants
            description: Tableau contenant les json des coûts horaires des enseignants de la base, par défaut trié par libellé
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - libelle
                      - valeur
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, libelle, valeur]   # ?select=cle,libelle,valeur
                - name: cle
                  in: query
                  description: retourne seulement les coûts horaires des enseignants ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: libelle
                  in: query
                  description: retourne seulement les coûts horaires des enseignants ayant un de ces libellés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul libellé souhaité
                      value: [cout1]   # ?libelle=cout1
                    multipleIds:
                      summary: Exemple avec plusieurs libellés souhaités
                      value: [cout1, cout2, cout3]   # ?libelle=cout1,cout2,cout3
                - name: valeur
                  in: query
                  description: retourne seulement les coûts horaires des enseignants ayant une de ces valeurs
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: number
                  examples:
                    oneId:
                      summary: Exemple avec une seule valeur souhaitée
                      value: [20.5]   # ?valeur=20.5
                    multipleIds:
                      summary: Exemple avec plusieurs valeurs souhaitées
                      value: [20.5, 40, 60]   # ?valeur=20.5,40,60
            responses:
              '200':    # status code
                description: Tableau des JSON des coûts horaires des enseignants
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Couts_horaires_enseignants'
        post:
            tags:
                - Couts_horaires_enseignants
            summary: Création d'un nouveau coût horaire pour les enseignants
            description: Crée un nouveau coût horaire pour les enseignants dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Couts_horaires_enseignants'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Couts_horaires_enseignants'
              '400':    # status code
                description: "Paramètres non valides : libellé et valeur obligatoires"
              '500':    # status code
                description: "Création impossible"
    /couts_horaires_enseignants/{cle}:
        get:
            tags:
                - Couts_horaires_enseignants
            summary: Json du coût horaire des enseignants de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du coût horaire des enseignants"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Couts_horaires_enseignants'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Couts_horaires_enseignants
            summary: Mise à jour partielle d'un coût horaire d'enseignants
            description: Modifie les champs du coût horaire des enseignants de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du coût horaire des enseignants que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Couts_horaires_enseignants'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Couts_horaires_enseignants'
              '400':    # status code
                description: "Paramètre non valide"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Couts_horaires_enseignants
            summary: Suppression d'un coût horaire d'enseignants
            description: Supprime définitivement le coût horaire des enseignants de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /couts_horaires_enseignants/supprimer:
        post:
            tags:
                - Couts_horaires_enseignants
            summary: Suppression de plusieurs coûts horaires d'enseignants
            description: Supprime les coûts horaires d'enseignants dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des coûts horaires d'enseignants à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    #### Couts_horaires_salles ####
    /couts_horaires_salles:
        get:
            tags:
                - Couts_horaires_salles
            summary: Liste de tous les coûts horaires des salles
            description: Tableau contenant les json des coûts horaires des salles de la base, par défaut trié par libellé
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - libelle
                      - valeur
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, libelle, valeur]   # ?select=cle,libelle,valeur
                - name: cle
                  in: query
                  description: retourne seulement les coûts horaires des salles ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: libelle
                  in: query
                  description: retourne seulement les coûts horaires des salles ayant un de ces libellés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul libellé souhaité
                      value: [cout1]   # ?libelle=cout1
                    multipleIds:
                      summary: Exemple avec plusieurs libellés souhaités
                      value: [cout1, cout2, cout3]   # ?libelle=cout1,cout2,cout3
                - name: valeur
                  in: query
                  description: retourne seulement les coûts horaires des salles ayant une de ces valeurs
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: number
                  examples:
                    oneId:
                      summary: Exemple avec une seule valeur souhaitée
                      value: [20.5]   # ?valeur=20.5
                    multipleIds:
                      summary: Exemple avec plusieurs valeurs souhaitées
                      value: [20.5, 40, 60]   # ?valeur=20.5,40,60
            responses:
              '200':    # status code
                description: Tableau des JSON des coûts horaires des salles
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Couts_horaires_salles'
        post:
            tags:
                - Couts_horaires_salles
            summary: Création d'un nouveau coût horaire pour les salles
            description: Crée un nouveau coût horaire pour les salles dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Couts_horaires_salles'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Couts_horaires_salles'
              '400':    # status code
                description: "Paramètres non valides : libellé et valeur obligatoires"
              '500':    # status code
                description: "Création impossible"
    /couts_horaires_salles/{cle}:
        get:
            tags:
                - Couts_horaires_salles
            summary: Json du coût horaire des salles de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du coût horaire des salles"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Couts_horaires_salles'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Couts_horaires_salles
            summary: Mise à jour partielle d'un coût horaire de salles
            description: Modifie les champs du coût horaire des salles de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du coût horaire des salles que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Couts_horaires_salles'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Couts_horaires_salles'
              '400':    # status code
                description: "Paramètre non valide"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Couts_horaires_salles
            summary: Suppression d'un coût horaire de salles
            description: Supprime définitivement le coût horaire des salles de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /couts_horaires_salles/supprimer:
        post:
            tags:
                - Couts_horaires_salles
            summary: Suppression de plusieurs coûts horaires de salles
            description: Supprime les coûts horaires de salles dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des coûts horaires de salles à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    #### Cursus ####
    /cursus:
        get:
            tags:
                - Cursus
            summary: Liste de tous les cursus
            description: Tableau contenant les json des cursus de la base, par défaut trié par nom puis code
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - code
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: Filtre sur les clés des cursus
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: Filtre sur les noms des cursus
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: code
                  in: query
                  description: Filtre sur les codes des cursus
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul code souhaité
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
            responses:
              '200':    # status code
                description: Tableau des JSON des cursus
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Cursus'
        post:
            tags:
                - Cursus
            summary: Création d'un nouveau cursus
            description: Crée un nouveau cursus dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Cursus'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cursus'
              '400':    # status code
                description: "Paramètres non valides : libellé obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /cursus/{cle}:
        get:
            tags:
                - Cursus
            summary: Json du cursus de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du cursus"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cursus'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Cursus
            summary: Mise à jour partielle d'un cursus
            description: Modifie les champs du cursus de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du cursus que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Cursus'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cursus'
              '400':    # status code
                description: "Paramètres non valides : libellé obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : cursus inexistant"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Cursus
            summary: Suppression d'un cursus
            description: Supprime définitivement le cursus de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /cursus/supprimer:
        post:
            tags:
                - Cursus
            summary: Suppression de plusieurs cursus
            description: Supprime les cursus dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des cursus à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /cursus/{cle_cursus}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Cursus
            summary: Rubriques affectées au cursus pour la famille
            description: Rubriques affectées au cursus de clé {cle_cursus} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_cursus
                  in: path
                  description: "clé du cursus"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cursus:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Cursus
            summary: Modification des rubriques affectées au cursus pour la famille
            description: Modifie les rubriques affectées au cursus de clé {cle_cursus} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_cursus
                  in: path
                  description: "clé du cursus"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cursus:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Enseignants ####
    /enseignants:
        get:
            tags:
                - Enseignants
            summary: Liste de tous les enseignants
            description: Tableau contenant les json des enseignants de la base, par défaut trié par nom, prénom puis code
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - prenom
                      - code
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: retourne seulement les enseignants ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les enseignants ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: prenom
                  in: query
                  description: retourne seulement les enseignants ayant un de ces prénoms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul prénom souhaité
                      value: [maths]   # ?prenom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs prénoms souhaités
                      value: [maths, francais, histoire]   # ?prenom=maths,francais,histoire
                - name: code
                  in: query
                  description: retourne seulement les enseignants ayant un de ces codes
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul code souhaité
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
                - name: uid_identifiant
                  in: query
                  description: retourne seulement les enseignants ayant un de ces uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiants souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
                - name: cas_identifiant
                  in: query
                  description: retourne seulement les enseignants ayant un de ces cas_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul cas_identifiant souhaité
                      value: [ident1]   # ?cas_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs cas_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?cas_identifiant=ident1,ident2,ident3
                - name: adfs_identifiant
                  in: query
                  description: retourne seulement les enseignants ayant un de ces adfs_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul adfs_identifiant souhaité
                      value: [ident1]   # ?adfs_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs adfs_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?adfs_identifiant=ident1,ident2,ident3
                - name: saml_identifiant
                  in: query
                  description: retourne seulement les enseignants ayant un de ces saml_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul saml_identifiant souhaité
                      value: [ident1]   # ?saml_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs saml_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?saml_identifiant=ident1,ident2,ident3
            responses:
              '200':    # status code
                description: Tableau des JSON des enseignants
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Enseignants'
        post:
            tags:
                - Enseignants
            summary: Création d'un nouvel enseignant
            description: Crée un nouvel enseignant dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Dupond"
                      prenom:
                        type: string
                        example: "Camille"
                      code:
                        type: string
                        example: "AD"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      civilite:
                        type: string
                        example: "Mme"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      cas_identifiant:
                        type: string
                        example: "Identifiant__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identifiant__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identifiant__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identifiant__connexion"
                      nom_jeune_fille:
                        type: string
                        example: "Dupond"
                      date_naissance:
                        type: string
                        example: "2000-02-24"
                      email1:
                        type: string
                        example: "Martin@email1.fr"
                      email2:
                        type: string
                        example: "Martin@email2.fr"
                      type_email_a_utiliser_par_personnels:
                        type: string
                        example: "email1"
                      type_email_a_utiliser_par_enseignants:
                        type: string
                        example: "email2"
                      type_email_a_utiliser_par_etudiants_parents:
                        type: string
                        example: "email2"
                      type_email_a_utiliser_par_contacts_entreprise:
                        type: string
                        example: "Aucun"
                      lieu_naissance:
                        type: string
                        example: "Marseille"
                      numero_securite_sociale:
                        type: string
                        example: "2000213456789"
                      cle_securite_sociale:
                        type: string
                        example: "12"
                      mutuelle:
                        type: string
                        example: "MaMutuelle"
                      commentaire:
                        type: string
                        example: "Voici un commentaire bien utile"
                      code_fiscal:
                        type: string
                        example: "154862"
                      numero_tva:
                        type: string
                        example: "12584165a"
                      site_internet:
                        type: string
                        example: "https://www.index-education.com"
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      apport_annuel:
                        type: number
                        example: 5.416666666666667
                      information_interne:
                        type: string
                        example: "information interne"
                      adresse1:
                        type: string
                        example: "12 rue de la paix"
                      adresse2:
                        type: string
                        example: "12 rue de la paix"
                      adresse3:
                        type: string
                        example: "12 rue de la paix"
                      adresse4:
                        type: string
                        example: "12 rue de la paix"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Marseille"
                      pays:
                        type: string
                        example: "France"
                      province:
                        type: string
                        example: "Province"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      autorisation_reception_sms:
                        type: boolean
                        example: true
                      numero_telephone_bureau:
                        type: string
                        example: "01010101"
                      indicatif_telephone_bureau:
                        type: string
                        example: "01"
                      publication:
                        type: boolean
                        example: true
                      proprietaire:
                        type: integer
                        example: 10
                      autorisation_diffusion_photo:
                        type: boolean
                        example: true
                      partage_ponderation:
                        type: boolean
                        example: false
                      matieres:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      promotions:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Martin.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
                      cout_horaire_statutaire:
                        type: integer
                        example: 10
                      cout_horaire_sans_public:
                        type: integer
                        example: 11
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Seulement pour la modification, pas de visualisation, doit respecter la politique de sécurité
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Enseignants'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /enseignants/{cle}:
        get:
            tags:
                - Enseignants
            summary: Json de l'enseignant de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Enseignants'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Enseignants
            summary: Mise à jour partielle d'un enseignant
            description: Modifie les champs de l'enseignant de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Dupond"
                      prenom:
                        type: string
                        example: "Camille"
                      code:
                        type: string
                        example: "AD"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      civilite:
                        type: string
                        example: "Mme"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      cas_identifiant:
                        type: string
                        example: "Identifiant__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identifiant__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identifiant__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identifiant__connexion"
                      nom_jeune_fille:
                        type: string
                        example: "Dupond"
                      date_naissance:
                        type: string
                        example: "2000-02-24"
                      email1:
                        type: string
                        example: "Martin@email1.fr"
                      email2:
                        type: string
                        example: "Martin@email2.fr"
                      type_email_a_utiliser_par_personnels:
                        type: string
                        example: "email1"
                      type_email_a_utiliser_par_enseignants:
                        type: string
                        example: "email2"
                      type_email_a_utiliser_par_etudiants_parents:
                        type: string
                        example: "email2"
                      type_email_a_utiliser_par_contacts_entreprise:
                        type: string
                        example: "Aucun"
                      lieu_naissance:
                        type: string
                        example: "Marseille"
                      numero_securite_sociale:
                        type: string
                        example: "2000213456789"
                      cle_securite_sociale:
                        type: string
                        example: "12"
                      mutuelle:
                        type: string
                        example: "MaMutuelle"
                      commentaire:
                        type: string
                        example: "Voici un commentaire bien utile"
                      code_fiscal:
                        type: string
                        example: "154862"
                      numero_tva:
                        type: string
                        example: "12584165a"
                      site_internet:
                        type: string
                        example: "https://www.index-education.com"
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      apport_annuel:
                        type: number
                        example: 5.416666666666667
                      information_interne:
                        type: string
                        example: "information interne"
                      adresse1:
                        type: string
                        example: "12 rue de la paix"
                      adresse2:
                        type: string
                        example: "12 rue de la paix"
                      adresse3:
                        type: string
                        example: "12 rue de la paix"
                      adresse4:
                        type: string
                        example: "12 rue de la paix"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Marseille"
                      pays:
                        type: string
                        example: "France"
                      province:
                        type: string
                        example: "Province"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      autorisation_reception_sms:
                        type: boolean
                        example: true
                      numero_telephone_bureau:
                        type: string
                        example: "01010101"
                      indicatif_telephone_bureau:
                        type: string
                        example: "01"
                      publication:
                        type: boolean
                        example: true
                      proprietaire:
                        type: integer
                        example: 10
                      autorisation_diffusion_photo:
                        type: boolean
                        example: true
                      partage_ponderation:
                        type: boolean
                        example: false
                      matieres:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      promotions:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Martin.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
                      cout_horaire_statutaire:
                        type: integer
                        example: 10
                      cout_horaire_sans_public:
                        type: integer
                        example: 11
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Seulement pour la modification, pas de visualisation, doit respecter la politique de sécurité
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Enseignants'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : enseignant inexistant"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Enseignants
            summary: Suppression d'un enseignant
            description: Supprime définitivement l'enseignant de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /enseignants/supprimer:
        post:
            tags:
                - Enseignants
            summary: Suppression de plusieurs enseignants
            description: Supprime les enseignants dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des enseignants à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /enseignants/{cle}/photo/{format}:
        get:
            tags:
                - Enseignants
            summary: Photo de format {format} d'un enseignant
            description: Flux de la photo de l'enseignant de clé {cle} au format voulu (jpeg, png, gif ou bitmap)
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: format
                  in: path
                  description: 'Format de la photo'
                  required: true
                  schema:
                    type: string
                    enum:
                      - jpeg
                      - png
                      - gif
                      - bitmap
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        format:
                          type: string
                          example: "jpeg"
                        base64binary:
                          type: string
                          example: 12
              '400':    # status code
                description: "Paramètre invalide"
    /enseignants/{cle}/photo:
        post:
            tags:
                - Enseignants
            summary: Mise à jour de la photo d'un enseignant
            description: Modifie la photo de l'enseignant de clé {cle} avec celle passée dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant le champs format (jpeg, png, gif ou bitmap) et la photo
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      format:
                        type: string
                        example: "jpeg"
                      base64binary:
                        type: string
                        example: 12
            responses:
              '200':    # status code
                description: Succès - JSON de la photo modifiée
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        format:
                          type: string
                          example: "jpeg"
                        base64binary:
                          type: string
                          example: 12
              '400':    # status code
                description: "Paramètre non valide"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Enseignants
            summary: Suppression de la photo d'un enseignant
            description: Efface la photo de l'enseignant de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /enseignants/{cle}/cours:
        get:
            tags:
                - Enseignants
            summary: Clés des cours d'un enseignant entre 2 dates
            description: Clés des cours de l'enseignant de clé {cle} entre 2 dates. Si pas de paramètres, retourne la liste des cours sur tout le domaine.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: array
                          items:
                            type: integer
                          example: [388,400]
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/{cle_ens}/cours/{cle_cours}/domaine:
        get:
            tags:
                - Enseignants
            summary: Domaine de présence d'un enseignant dans un cours
            description: Domaine de présence de l'enseignant de clé {cle_ens} pour le cours de clé {cle_cours}. Le domaine est vide si l'enseignant n'est pas dans le cours.
            parameters:
                - name: cle_ens
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Enseignants
            summary: Modification du domaine de présence d'un enseignant dans un cours
            description: Modifie le domaine de présence de l'enseignant de clé {cle_ens} pour le cours de clé {cle_cours}. Permet d'ajouter un enseignant à un cours ou l'enlever de ce cours. Le domaine peut être passé dans l'URL ?domaine=12,24,48. Par défaut, prend tout le domaine.
            parameters:
                - name: cle_ens
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/{cle}/indisponibilites:
        get:
            tags:
                - Enseignants
            summary: Indisponibilités d'un enseignant pour une semaine
            description: Indisponibilités (en places) de l'enseignant de clé {cle} pour une semaine.<br>
                         Si pas de paramètres, retourne la premiere semaine.<br>
                         Une place correspond à la durée écoulée entre le Lundi à 0h00 et le début de l'indisponibilté.<br>
                         Attention, les durées sont exprimées en 'jour'.<br>
                         Par exemple, lundi midi = 12h00 = 12/24ème jour = 0,5 jour.<br>
                         Mercredi midi = 24h (du lundi entier) + 24h (du mardi entier) + 12h (du mercredi) = 60/24ème = 2.5 jours
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: semaine
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_enseignant:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_indisponibilites:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Paramètre invalide : semaine"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/{cle}/voeux:
        get:
            tags:
                - Enseignants
            summary: Voeux d'un enseignant pour une semaine
            description: Voeux (en places) de l'enseignant de clé {cle} pour une semaine.<br>
                         Si pas de paramètres, retourne la premiere semaine.<br>
                         Une place correspond à la durée écoulée entre le Lundi à 0h00 et le début du voeux.<br>
                         Attention, les durées sont exprimées en 'jour'.<br>
                         Par exemple, lundi midi = 12h00 = 12/24ème jour = 0,5 jour.<br>
                         Mercredi midi = 24h (du lundi entier) + 24h (du mardi entier) + 12h (du mercredi) = 60/24ème = 2.5 jours
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: semaine
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_enseignant:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_voeux:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Paramètre invalide : semaine"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/{cle}/cout:
        get:
            tags:
                - Enseignants
            summary: Coût d'un enseignant entre 2 dates ou sur un domaine
            description: Coût de l'enseignant de clé {cle} entre 2 dates. Si pas de paramètres, retourne le coût sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Droits insuffisants"
    /enseignants/cout:
        get:
            tags:
                - Enseignants
            summary: Coûts des enseignants entre 2 dates ou sur un domaine
            description: Coûts des enseignants entre 2 dates ou sur un domaine. Si pas de paramètres, retourne le coût sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des enseignants"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: date_debut
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              cout:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Droits insuffisants"
    /enseignants/{cle}/duree_cours:
        get:
            tags:
                - Enseignants
            summary: Durée de cours d'un enseignant sur un domaine
            description: Durée de cours de l'enseignant de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/duree_cours:
        get:
            tags:
                - Enseignants
            summary: Durée de cours des enseignants sur un domaine
            description: Durée de cours des enseignants sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des enseignants"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/{cle}/duree_disponible:
        get:
            tags:
                - Enseignants
            summary: Durée disponible d'un enseignant sur un domaine
            description: Durée disponible de l'enseignant de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/duree_disponible:
        get:
            tags:
                - Enseignants
            summary: Durée disponible des enseignants sur un domaine
            description: Durée disponible des enseignants sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des enseignants"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/{cle}/duree_ponderee_cours:
        get:
            tags:
                - Enseignants
            summary: Durée de cours pondérée d'un enseignant sur un domaine
            description: Durée de cours pondérée de l'enseignant de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_ponderee_cours:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/duree_ponderee_cours:
        get:
            tags:
                - Enseignants
            summary: Durée de cours pondérée des enseignants sur un domaine
            description: Durée de cours pondérée des enseignants sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des enseignants"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_ponderee_cours:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/{cle}/t1:
        get:
            tags:
                - Enseignants
            summary: T1 d'un enseignant sur un domaine
            description: T1 de l'enseignant de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t1:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/t1:
        get:
            tags:
                - Enseignants
            summary: T1 des enseignants sur un domaine
            description: T1 des enseignants sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des enseignants"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t1:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/{cle}/t2_conv:
        get:
            tags:
                - Enseignants
            summary: T2 conventionnel d'un enseignant sur un domaine
            description: T2 conventionnel de l'enseignant de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t2_conv:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/t2_conv:
        get:
            tags:
                - Enseignants
            summary: T2 conventionnel des enseignants sur un domaine
            description: T2 conventionnel des enseignants sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des enseignants"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t2_conv:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/{cle}/t2_real:
        get:
            tags:
                - Enseignants
            summary: T2 réalisé d'un enseignant sur un domaine
            description: T2 réalisé de l'enseignant de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t2_real:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/t2_real:
        get:
            tags:
                - Enseignants
            summary: T2 réalisé des enseignants sur un domaine
            description: T2 réalisé des enseignants sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des enseignants"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t2_real:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/{cle}/t3:
        get:
            tags:
                - Enseignants
            summary: T3 d'un enseignant sur un domaine
            description: T3 de l'enseignant de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t3:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/t3:
        get:
            tags:
                - Enseignants
            summary: T3 des enseignants sur un domaine
            description: T3 des enseignants sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des enseignants"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t3:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/{cle}/decharges:
        get:
            tags:
                - Enseignants
            summary: Total des heures annuelles de décharge et coût annuel total des heures de décharge d'un enseignant
            description: Total des heures annuelles de décharge et coût annuel total des heures de décharge de l'enseignant de clé {cle}
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        total_heures_annuelles:
                          type: number
                          example: 17.2916666666667
                        total_cout_annuel:
                          type: number
                          example: 1431.75
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/decharges:
        get:
            tags:
                - Enseignants
            summary: Total des heures annuelles de décharge et coût annuel total des heures de décharge des enseignants
            description: Total des heures annuelles de décharge et coût annuel total des heures de décharge des enseignants passés en paramètres
            parameters:
                - name: cles
                  in: query
                  description: "clés des enseignants"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        decharges:
                          type: array
                          items:
                            type: object
                            properties:
                              cle_enseignant:
                                type: integer
                                example: 12
                              total_heures_annuelles:
                                type: number
                                example: 17.2916666666667
                              total_cout_annuel:
                                type: number
                                example: 1431.75
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /enseignants/{cle_ens}/promotions/{cle_promo}/cout_horaire:
        get:
            tags:
                - Enseignants
            summary: Coût horaire affecté à une promotion pour un enseignant
            description: Clé du coût horaire affectée à la promotion de clé {cle_promo} pour l'enseignant de clé {cle_ens}
            parameters:
                - name: cle_ens
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_enseignant:
                          type: integer
                          example: 388
                        cle_promotion:
                          type: integer
                          example: 125
                        cle_cout_horaire:
                          type: integer
                          example: 234
              '403':    # status code
                description: "Droits insuffisants"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Enseignants
            summary: Modification du coût horaire affecté à une promotion pour un enseignant
            description: Modifie la clé du coût horaire affectée à la promotion de clé {cle_promo} pour l'enseignant de clé {cle_ens}
            parameters:
                - name: cle_ens
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cout_horaire
                  in: query
                  description: "Clé du coût horaire"
                  required: true
                  schema:
                    type: integer
                    example: 24
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_enseignant:
                          type: integer
                          example: 388
                        cle_promotion:
                          type: integer
                          example: 125
                        cle_cout_horaire:
                          type: integer
                          example: 120
              '400':    # status code
                description: "Droits insuffisants"
              '403':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /enseignants/{cle_ens}/tdoptions/{cle_tdopt}/cout_horaire:
        get:
            tags:
                - Enseignants
            summary: Coût horaire affecté à un td/option pour un enseignant
            description: Clé du coût horaire affectée au td/option de clé {cle_tdopt} pour l'enseignant de clé {cle_ens}
            parameters:
                - name: cle_ens
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: cle_tdopt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_enseignant:
                          type: integer
                          example: 388
                        cle_tdoption:
                          type: integer
                          example: 125
                        cle_cout_horaire:
                          type: integer
                          example: 234
              '403':    # status code
                description: "Droits insuffisants"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Enseignants
            summary: Modification du coût horaire affecté à un td/option pour un enseignant
            description: Modifie la clé du coût horaire affectée au td/option de clé {cle_tdopt} pour l'enseignant de clé {cle_ens}
            parameters:
                - name: cle_ens
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: cle_tdopt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: cout_horaire
                  in: query
                  description: "Clé du coût horaire"
                  required: true
                  schema:
                    type: integer
                    example: 24
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_enseignant:
                          type: integer
                          example: 388
                        cle_tdoption:
                          type: integer
                          example: 125
                        cle_cout_horaire:
                          type: integer
                          example: 120
              '400':    # status code
                description: "Droits insuffisants"
              '403':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /enseignants/{cle_ens}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Enseignants
            summary: Rubriques affectées à l'enseignant pour la famille
            description: Rubriques affectées à l'enseignant de clé {cle_ens} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_ens
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        enseignant:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Enseignants
            summary: Modification des rubriques affectées à l'enseignant pour la famille
            description: Modifie les rubriques affectées à l'enseignant de clé {cle_ens} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_ens
                  in: path
                  description: "clé de l'enseignant"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        enseignant:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Entreprises ####
    /entreprises:
        get:
            tags:
                - Entreprises
            summary: Liste de toutes les entreprises
            description: Tableau contenant les json des entreprises de la base, par défaut trié par raison sociale
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - raison_sociale
                      - numero_siret
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, raison_sociale, numero_siret]   # ?select=cle,raison_sociale,numero_siret
                - name: cle
                  in: query
                  description: retourne seulement les entreprises ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: raison_sociale
                  in: query
                  description: retourne seulement les entreprises ayant une de ces raisons sociales
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec une seule raison sociale souhaitée
                      value: [entreprise1]   # ?raison_sociale=entreprise1
                    multipleIds:
                      summary: Exemple avec plusieurs raisons sociales souhaitées
                      value: [entreprise1, entreprise2, entreprise3]   # ?raison_sociale=entreprise1,entreprise2,entreprise3
                - name: nom_commercial
                  in: query
                  description: retourne seulement les entreprises ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [entrepriseNC1]   # ?nom_commercial=entrepriseNC1
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [entrepriseNC1, entrepriseNC2, entrepriseNC3]   # ?nom_commercial=entrepriseNC1,entrepriseNC2,entrepriseNC3
                - name: numero_siret
                  in: query
                  description: retourne seulement les entreprises ayant un de ces numéros siret
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul numéro souhaité
                      value: [123]   # ?numero_siret=123
                    multipleIds:
                      summary: Exemple avec plusieurs numéros souhaités
                      value: [123, 456, 789]   # ?numero_siret=123,456,789
                - name: uid_identifiant
                  in: query
                  description: retourne seulement les entreprises ayant un de ces uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [ent1]   # ?uid_identifiant=ent1
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiants souhaités
                      value: [ent1, ent2, ent3]   # ?uid_identifiant=ent1,ent2,ent3
            responses:
              '200':    # status code
                description: Tableau des JSON des entreprises
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Entreprises'
        post:
            tags:
                - Entreprises
            summary: Création d'une nouvelle entreprise
            description: Crée une nouvelle entreprise dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      raison_sociale:
                        type: string
                        example: "Index Education"
                      nom_commercial:
                        type: string
                        example: "Docaposte"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      adresse1:
                        type: string
                        example: "12 rue de la paix"
                      adresse2:
                        type: string
                        example: "12 rue de la paix"
                      adresse3:
                        type: string
                        example: "12 rue de la paix"
                      adresse4:
                        type: string
                        example: "12 rue de la paix"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Marseille"
                      pays:
                        type: string
                        example: "France"
                      province:
                        type: string
                        example: "Province"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      numero_fax:
                        type: string
                        example: "04050607"
                      indicatif_fax:
                        type: string
                        example: "04"
                      email1:
                        type: string
                        example: "prenom.nom@email.fr"
                      site_internet:
                        type: string
                        example: "https://www.index-education.com"
                      activite:
                        type: string
                        example: "Activite"
                      ape:
                        type: string
                        example: "APE"
                      numero_siret:
                        type: string
                        example: "12345678901234"
                      urssaf:
                        type: string
                        example: "08080808080808"
                      convention_collective_code_idcc:
                        type: string
                        example: "1486"
                      convention_collective:
                        type: string
                        example: "Syntec"
                      effectif:
                        type: integer
                        example: 150
                      assurance_responsabilite_civile:
                        type: string
                        example: "AD"
                      numero_police_assurance:
                        type: string
                        example: "AD"
                      commentaire_public:
                        type: string
                        example: "Commentaire public"
                      commentaire_interne:
                        type: string
                        example: "Commentaire interne"
                      proprietaire:
                        type: integer
                        example: 10
                      responsable:
                        type: integer
                        example: 10
                      contacts:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      maitres_tuteurs:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      charges_contrat:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Entreprises'
              '400':    # status code
                description: "Paramètres non valides : raison sociale obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /entreprises/{cle}:
        get:
            tags:
                - Entreprises
            summary: Json de l'entreprise de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'entreprise"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Entreprises'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Entreprises
            summary: Mise à jour partielle d'une entreprise
            description: Modifie les champs de l'entreprise de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'entreprise que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      raison_sociale:
                        type: string
                        example: "Index Education"
                      nom_commercial:
                        type: string
                        example: "Docaposte"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      adresse1:
                        type: string
                        example: "12 rue de la paix"
                      adresse2:
                        type: string
                        example: "12 rue de la paix"
                      adresse3:
                        type: string
                        example: "12 rue de la paix"
                      adresse4:
                        type: string
                        example: "12 rue de la paix"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Marseille"
                      pays:
                        type: string
                        example: "France"
                      province:
                        type: string
                        example: "Province"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      numero_fax:
                        type: string
                        example: "04050607"
                      indicatif_fax:
                        type: string
                        example: "04"
                      email1:
                        type: string
                        example: "prenom.nom@email.fr"
                      site_internet:
                        type: string
                        example: "https://www.index-education.com"
                      activite:
                        type: string
                        example: "Activite"
                      ape:
                        type: string
                        example: "APE"
                      numero_siret:
                        type: string
                        example: "12345678901234"
                      urssaf:
                        type: string
                        example: "08080808080808"
                      convention_collective_code_idcc:
                        type: string
                        example: "1486"
                      convention_collective:
                        type: string
                        example: "Syntec"
                      effectif:
                        type: integer
                        example: 150
                      assurance_responsabilite_civile:
                        type: string
                        example: "AD"
                      numero_police_assurance:
                        type: string
                        example: "AD"
                      commentaire_public:
                        type: string
                        example: "Commentaire public"
                      commentaire_interne:
                        type: string
                        example: "Commentaire interne"
                      proprietaire:
                        type: integer
                        example: 10
                      responsable:
                        type: integer
                        example: 10
                      contacts:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      maitres_tuteurs:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      charges_contrat:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Entreprises'
              '400':    # status code
                description: "Paramètres non valides : raison sociale obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : entreprise inexistante"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Entreprises
            summary: Suppression d'une entreprise
            description: Supprime définitivement l'entreprise de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /entreprises/supprimer:
        post:
            tags:
                - Entreprises
            summary: Suppression de plusieurs entreprises
            description: Supprime les entreprises dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des entreprises à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /entreprises/{cle_ent}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Entreprises
            summary: Rubriques affectées à l'entreprise pour la famille
            description: Rubriques affectées à l'entreprise de clé {cle_ent} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_ent
                  in: path
                  description: "clé de l'entreprise"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        entreprise:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Entreprises
            summary: Modification des rubriques affectées à l'entreprise pour la famille
            description: Modifie les rubriques affectées à l'entreprise de clé {cle_ent} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_ent
                  in: path
                  description: "clé de l'entreprise"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        entreprise:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Etudiants ####
    /etudiants:
        get:
            tags:
                - Etudiants
            summary: Liste de tous les étudiants
            description: Tableau contenant les json des étudiants de la base, par défaut trié par nom, prénom puis date de naissance
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - numero_ine
                      - numero_ordre
                      - uid_identifiant
                      - proprietaire
                      - civilite
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: retourne seulement les étudiants ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les étudiants ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: prenom
                  in: query
                  description: retourne seulement les étudiants ayant un de ces prénoms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul prénom souhaité
                      value: [maths]   # ?prenom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs prénoms souhaités
                      value: [maths, francais, histoire]   # ?prenom=maths,francais,histoire
                - name: date_naissance
                  in: query
                  description: retourne seulement les étudiants ayant une de ces dates de naissance
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec une seule date de naissance souhaitée
                      value: [2000-12-21]   # ?date_naissance=2000-12-21
                    multipleIds:
                      summary: Exemple avec plusieurs dates de naissance souhaitées
                      value: [2000-12-21, 2001-12-21, 2002-12-21]   # ?date_naissance=2000-12-21,2001-12-21,2002-12-21
                - name: e_mail_personnel
                  in: query
                  description: retourne seulement les étudiants ayant un de ces e-mails personnels
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul email souhaité
                      value: [email1@monmail.fr]   # ?e_mail_personnel=email1@monmail.fr
                    multipleIds:
                      summary: Exemple avec plusieurs emails souhaités
                      value: [email1@monmail.fr, email2@monmail.fr, email3@monmail.fr]   # ?e_mail_personnel=email1@monmail.fr,email2@monmail.fr,email3@monmail.fr
                - name: e_mail_institutionnel
                  in: query
                  description: retourne seulement les étudiants ayant un de ces e-mails institutionnels
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul email souhaité
                      value: [email1@monmail.fr]   # ?e_mail_institutionnel=email1@monmail.fr
                    multipleIds:
                      summary: Exemple avec plusieurs emails souhaités
                      value: [email1@monmail.fr, email2@monmail.fr, email3@monmail.fr]   # ?e_mail_institutionnel=email1@monmail.fr,email2@monmail.fr,email3@monmail.fr
                - name: uid_identifiant
                  in: query
                  description: retourne seulement les étudiants ayant un de ces uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiants souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
                - name: numero_ordre
                  in: query
                  description: retourne seulement les étudiants ayant un de ces numéros d'ordre
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul numéro souhaité
                      value: [123]   # ?numero_ordre=123
                    multipleIds:
                      summary: Exemple avec plusieurs numéros souhaités
                      value: [123, 456, 789]   # ?numero_ordre=123,456,789
                - name: numero_ine
                  in: query
                  description: retourne seulement les étudiants ayant un de ces numéros INE
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul numéro souhaité
                      value: [123]   # ?numero_ine=123
                    multipleIds:
                      summary: Exemple avec plusieurs numéros souhaités
                      value: [123, 456, 789]   # ?numero_ine=123,456,789
                - name: cas_identifiant
                  in: query
                  description: retourne seulement les étudiants ayant un de ces cas_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul cas_identifiant souhaité
                      value: [ident1]   # ?cas_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs cas_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?cas_identifiant=ident1,ident2,ident3
                - name: adfs_identifiant
                  in: query
                  description: retourne seulement les étudiants ayant un de ces adfs_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul adfs_identifiant souhaité
                      value: [ident1]   # ?adfs_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs adfs_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?adfs_identifiant=ident1,ident2,ident3
                - name: saml_identifiant
                  in: query
                  description: retourne seulement les étudiants ayant un de ces saml_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul saml_identifiant souhaité
                      value: [ident1]   # ?saml_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs saml_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?saml_identifiant=ident1,ident2,ident3
            responses:
              '200':    # status code
                description: Tableau des JSON des étudiants
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Etudiants'
        post:
            tags:
                - Etudiants
            summary: Création d'un nouvel étudiant
            description: Crée un nouvel étudiant dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Dupond"
                      prenom1:
                        type: string
                        example: "Camille"
                      prenom2:
                        type: string
                        example: "Dominique"
                      prenom3:
                        type: string
                        example: "Claude"
                      prenom_usage:
                        type: string
                        example: "Sacha"
                      date_naissance:
                        type: string
                        example: "2010-02-22"
                      civilite:
                        type: string
                        example: "Mme"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      cas_identifiant:
                        type: string
                        example: "Identifiant__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identifiant__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identifiant__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identifiant__connexion"
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Seulement pour la modification, pas de visualisation, doit respecter la politique de sécurité
                      e_mail_personnel:
                        type: string
                        example: "durand@email1.fr"
                      e_mail_institutionnel:
                        type: string
                        example: "durand@email2.fr"
                      e_mail_a_utiliser:
                        type: string
                        example: "E-mail personnel"
                      sexe:
                        type: string
                        example: "masculin"
                      numero_ine:
                        type: string
                        example: "1235847A"
                      numero_ordre:
                        type: string
                        example: "12345"
                      nom_jeune_fille:
                        type: string
                        example: "Dupond"
                      lieu_naissance:
                        type: string
                        example: "Marseille"
                      nationalite:
                        type: string
                        example: "Francaise"
                      numero_securite_sociale:
                        type: string
                        example: "1100213123456"
                      cle_securite_sociale:
                        type: string
                        example: "12"
                      mutuelle:
                        type: string
                        example: "MaMutuelle"
                      cotisation:
                        type: string
                        example: "non"
                      motif_non_cotisation:
                        type: string
                        example: "raison de non cotisation"
                      assurance_responsabilite_civile:
                        type: string
                        example: "MonAssurance"
                      numero_contrat:
                        type: string
                        example: "123456789"
                      information_interne:
                        type: string
                        example: "Information à usage interne"
                      commentaire:
                        type: string
                        example: "Voici un commentaire bien utile"
                      code_fiscal:
                        type: string
                        example: "123456"
                      adresse1:
                        type: string
                        example: "12 rue de la paix"
                      adresse2:
                        type: string
                        example: "12 rue de la paix"
                      adresse3:
                        type: string
                        example: "12 rue de la paix"
                      adresse4:
                        type: string
                        example: "12 rue de la paix"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Marseille"
                      pays:
                        type: string
                        example: "France"
                      province:
                        type: string
                        example: "Province"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      autorisation_reception_sms:
                        type: boolean
                        example: true
                      redoublant:
                        type: boolean
                        example: false
                      baccalaureat:
                        type: string
                        example: "S"
                      baccalaureat_specialite1:
                        type: string
                        example: "MATHS"
                      baccalaureat_specialite2:
                        type: string
                        example: "PHY_CHI"
                      baccalaureat_departement_obtention:
                        type: string
                        example: "013"
                      baccalaureat_annee_obtention:
                        type: string
                        example: "2022"
                      niveau_dans_diplome:
                        type: string
                        example: "01"
                      type_dernier_diplome:
                        type: string
                        example: "A"
                      modalite_admission:
                        type: string
                        example: "modalite admission"
                      etablissement_origine:
                        type: integer
                        example: 10
                      date_inscription:
                        type: string
                        example: "2022-02-22"
                      cursus_anterieur:
                        type: string
                        example: "Cursus anterieur"
                      publication_sur_tous_les_espaces:
                        type: boolean
                        example: true
                      acces_espace_etudiants:
                        type: boolean
                        example: true
                      emargement_numerique:
                        type: boolean
                        example: true
                      parent1:
                        type: integer
                        example: 10
                      lien_parente1:
                        type: string
                        example: "mere"
                      parent2:
                        type: integer
                        example: 10
                      lien_parente2:
                        type: string
                        example: "pere"
                      autorisation_diffusion_photo:
                        type: boolean
                        example: true
                      coefficient:
                        type: integer
                        example: 0
                      proprietaire:
                        type: integer
                        example: 10
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Durand.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
                      bonus_final:
                        type: string
                        example: "5"
                      avis_final:
                        type: string
                        example: "Parfait"
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Etudiants'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /etudiants/{cle}:
        get:
            tags:
                - Etudiants
            summary: Json de l'étudiant de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Etudiants'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Etudiants
            summary: Mise à jour partielle d'un étudiant
            description: Modifie les champs de l'étudiant de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'étudiant que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Dupond"
                      prenom1:
                        type: string
                        example: "Camille"
                      prenom2:
                        type: string
                        example: "Dominique"
                      prenom3:
                        type: string
                        example: "Claude"
                      prenom_usage:
                        type: string
                        example: "Sacha"
                      date_naissance:
                        type: string
                        example: "2010-02-22"
                      civilite:
                        type: string
                        example: "Mme"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      cas_identifiant:
                        type: string
                        example: "Identifiant__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identifiant__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identifiant__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identifiant__connexion"
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Seulement pour la modification, pas de visualisation, doit respecter la politique de sécurité
                      e_mail_personnel:
                        type: string
                        example: "durand@email1.fr"
                      e_mail_institutionnel:
                        type: string
                        example: "durand@email2.fr"
                      e_mail_a_utiliser:
                        type: string
                        example: "E-mail personnel"
                      sexe:
                        type: string
                        example: "masculin"
                      numero_ine:
                        type: string
                        example: "1235847A"
                      numero_ordre:
                        type: string
                        example: "12345"
                      nom_jeune_fille:
                        type: string
                        example: "Dupond"
                      lieu_naissance:
                        type: string
                        example: "Marseille"
                      nationalite:
                        type: string
                        example: "Francaise"
                      numero_securite_sociale:
                        type: string
                        example: "1100213123456"
                      cle_securite_sociale:
                        type: string
                        example: "12"
                      mutuelle:
                        type: string
                        example: "MaMutuelle"
                      cotisation:
                        type: string
                        example: "non"
                      motif_non_cotisation:
                        type: string
                        example: "raison de non cotisation"
                      assurance_responsabilite_civile:
                        type: string
                        example: "MonAssurance"
                      numero_contrat:
                        type: string
                        example: "123456789"
                      information_interne:
                        type: string
                        example: "Information à usage interne"
                      commentaire:
                        type: string
                        example: "Voici un commentaire bien utile"
                      code_fiscal:
                        type: string
                        example: "123456"
                      adresse1:
                        type: string
                        example: "12 rue de la paix"
                      adresse2:
                        type: string
                        example: "12 rue de la paix"
                      adresse3:
                        type: string
                        example: "12 rue de la paix"
                      adresse4:
                        type: string
                        example: "12 rue de la paix"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Marseille"
                      pays:
                        type: string
                        example: "France"
                      province:
                        type: string
                        example: "Province"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      autorisation_reception_sms:
                        type: boolean
                        example: true
                      redoublant:
                        type: boolean
                        example: false
                      baccalaureat:
                        type: string
                        example: "S"
                      baccalaureat_specialite1:
                        type: string
                        example: "MATHS"
                      baccalaureat_specialite2:
                        type: string
                        example: "PHY_CHI"
                      baccalaureat_departement_obtention:
                        type: string
                        example: "013"
                      baccalaureat_annee_obtention:
                        type: string
                        example: "2022"
                      niveau_dans_diplome:
                        type: string
                        example: "01"
                      type_dernier_diplome:
                        type: string
                        example: "A"
                      modalite_admission:
                        type: string
                        example: "modalite admission"
                      etablissement_origine:
                        type: integer
                        example: 10
                      date_inscription:
                        type: string
                        example: "2022-02-22"
                      cursus_anterieur:
                        type: string
                        example: "Cursus anterieur"
                      publication_sur_tous_les_espaces:
                        type: boolean
                        example: true
                      acces_espace_etudiants:
                        type: boolean
                        example: true
                      emargement_numerique:
                        type: boolean
                        example: true
                      parent1:
                        type: integer
                        example: 10
                      lien_parente1:
                        type: string
                        example: "mere"
                      parent2:
                        type: integer
                        example: 10
                      lien_parente2:
                        type: string
                        example: "pere"
                      autorisation_diffusion_photo:
                        type: boolean
                        example: true
                      coefficient:
                        type: integer
                        example: 0
                      proprietaire:
                        type: integer
                        example: 10
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Durand.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
                      bonus_final:
                        type: string
                        example: "5"
                      avis_final:
                        type: string
                        example: "Parfait"
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Etudiants'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : étudiant inexistant"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Etudiants
            summary: Suppression d'un étudiant
            description: Supprime définitivement l'étudiant de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /etudiants/supprimer:
        post:
            tags:
                - Etudiants
            summary: Suppression de plusieurs étudiants
            description: Supprime les étudiants dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des étudiants à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /etudiants/{cle}/photo/{format}:
        get:
            tags:
                - Etudiants
            summary: Photo de format {format} d'un étudiant
            description: Flux de la photo de l'étudiant de clé {cle} au format voulu (jpeg, png, gif ou bitmap)
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: string
                - name: format
                  in: path
                  description: 'Format de la photo'
                  required: true
                  schema:
                    type: string
                    enum:
                      - jpeg
                      - png
                      - gif
                      - bitmap
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        format:
                          type: string
                          example: "jpeg"
                        base64binary:
                          type: string
                          example: 12
              '400':    # status code
                description: "Paramètre invalide"
    /etudiants/{cle}/photo:
        post:
            tags:
                - Etudiants
            summary: Mise à jour de la photo d'un étudiant
            description: Modifie la photo de l'étudiant de clé {cle} avec celle passée dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'étudiant que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: string
            requestBody:
              description: JSON contenant le champs format (jpeg, png, gif ou bitmap) et la photo
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      format:
                        type: string
                        example: "jpeg"
                      base64binary:
                        type: string
                        example: 12
            responses:
              '200':    # status code
                description: Succès - JSON de la photo modifiée
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        format:
                          type: string
                          example: "jpeg"
                        base64binary:
                          type: string
                          example: 12
              '400':    # status code
                description: "Paramètre non valide"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Etudiants
            summary: Suppression de la photo d'un étudiant
            description: Efface la photo de l'étudiant de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /etudiants/{cle}/regroupements:
        get:
            tags:
                - Etudiants
            summary: Clés des regroupements d'un étudiant à une date ou entre 2 dates
            description: Clés des regroupements de l'étudiant de clé {cle} à une date ou entre 2 dates. Si pas de paramètres, retourne la liste des regroupements de l'étudiant à la date d'aujourd'hui.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_debut
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-08"   # ?date_fin=2024-08-08
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        regroupements:
                          type: array
                          items:
                            type: integer
                            example: 13
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '405':    # status code
                description: "Droits insuffisants"
    /etudiants/{cle}/promotions:
        get:
            tags:
                - Etudiants
            summary: Clés des promotions d'un étudiant à une date ou entre 2 dates
            description: Clés des promotions de l'étudiant de clé {cle} à une date ou entre 2 dates. Si pas de paramètres, retourne la liste des promotions de l'étudiant à la date d'aujourd'hui.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_debut
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-08"   # ?date_fin=2024-08-08
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        promotions:
                          type: array
                          items:
                            type: integer
                            example: 12
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '405':    # status code
                description: "Droits insuffisants"
    /etudiants/{cle_etu}/promotions/{cle_promo}/ajouter:
        post:
            tags:
                - Etudiants
            summary: Affectation d'un étudiant à une promotion sur l'année ou à partir d'une date
            description: Affecte l'étudiant de clé {cle_etu} à la promotion de clé {cle_promo} sur l'année par défaut. Pour affecter l'étudiant à la promotion à partir d'une date, passer cette date en paramètre. Si pas de paramètres, affecte l'étudiant sur l'année.
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        promotions:
                          type: array
                          items:
                            type: integer
                            example: 12
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '405':    # status code
                description: "Droits insuffisants"
    /etudiants/{cle_etu}/promotions/{cle_promo}/enlever:
        post:
            tags:
                - Etudiants
            summary: Retrait d'un étudiant d'une promotion sur l'année ou à partir d'une date
            description: Enleve l'étudiant de clé {cle_etu} de la promotion de clé {cle_promo} sur l'année par défaut. Pour enlever l'étudiant de la promotion à partir d'une date, passer cette date en paramètre. Si pas de paramètres, enleve l'étudiant sur l'année.
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        promotions:
                          type: array
                          items:
                            type: integer
                            example: 12
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '405':    # status code
                description: "Droits insuffisants"
    /etudiants/{cle_etu}/promotions/{cle_promo}/dates_affectation:
        get:
            tags:
                - Etudiants
            summary: Dates d'affectation d'un étudiant dans une promotion
            description: Dates d'affectation de l'étudiant de clé {cle_etu} dans la promotion de clé {cle_promo}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        dates_affectation:
                          type: array
                          items:
                            type: object
                            properties:
                              du:
                                type: string
                              au:
                                type: string
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '405':    # status code
                description: "Droits insuffisants"
        post:
            tags:
                - Etudiants
            summary: Modification des dates d'affectation d'un étudiant dans une promotion
            description: Remplace les dates d'affectation de l'étudiant de clé {cle_etu} dans la promotion de clé {cle_promo} par celles passées dans le JSON au niveau du BODY
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: "JSON des dates d'affectation (tableau de json contenant la date de debut de l'intervalle ('du') et la date de fin ('au')). Passer 'du' :'1899-12-30' pour signifier 'depuis le debut de l'année' et/ou 'au': '2199-12-30' pour signifier jusqu'à la fin de l'année"
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      dates_affectation:
                        type: array
                        items:
                          type: object
                          properties:
                            du:
                              type: string
                              example: "2000-02-02"
                            au:
                              type: string
                              example: "2000-02-20"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        dates_affectation:
                          type: array
                          items:
                            type: object
                            properties:
                              du:
                                type: string
                              au:
                                type: string
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '405':    # status code
                description: "Droits insuffisants"
    /etudiants/{cle}/tdoptions:
        get:
            tags:
                - Etudiants
            summary: Clés des TD/options d'un étudiant à une date ou entre 2 dates
            description: Clés des TD/options de l'étudiant de clé {cle} à une date ou entre 2 dates. Si pas de paramètres, retourne la liste des TD/options de l'étudiant à la date d'aujourd'hui.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_debut
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-08"   # ?date_fin=2024-08-08
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        tdoptions:
                          type: array
                          items:
                            type: integer
                            example: 12
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '405':    # status code
                description: "Droits insuffisants"
    /etudiants/{cle_etu}/tdoptions/{cle_tdopt}/ajouter:
        post:
            tags:
                - Etudiants
            summary: Affectation d'un étudiant à un TD/option sur l'année ou à partir d'une date
            description: Affecte l'étudiant de clé {cle_etu} au TD/option de clé {cle_tdopt} sur l'année par défaut. Pour affecter l'étudiant au TD/option à partir d'une date, passer cette date en paramètre. Si pas de paramètres, affecte l'étudiant sur l'année.
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_tdopt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        tdoptions:
                          type: array
                          items:
                            type: integer
                            example: 12
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '405':    # status code
                description: "Droits insuffisants"
    /etudiants/{cle_etu}/tdoptions/{cle_tdopt}/enlever:
        post:
            tags:
                - Etudiants
            summary: Retrait d'un étudiant d'un TD/option sur l'année ou à partir d'une date
            description: Enleve l'étudiant de clé {cle_etu} du TD/option de clé {cle_tdopt} sur l'année par défaut. Pour enlever l'étudiant du TD/option à partir d'une date, passer cette date en paramètre. Si pas de paramètres, enleve l'étudiant sur l'année.
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_tdopt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        tdoptions:
                          type: array
                          items:
                            type: integer
                            example: 12
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '405':    # status code
                description: "Droits insuffisants"
    /etudiants/{cle_etu}/tdoptions/{cle_tdopt}/dates_affectation:
        get:
            tags:
                - Etudiants
            summary: Dates d'affectation d'un étudiant dans un TD/option
            description: Dates d'affectation de l'étudiant de clé {cle_etu} dans le TD/option de clé {cle_tdopt}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_tdopt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        dates_affectation:
                          type: array
                          items:
                            type: object
                            properties:
                              du:
                                type: string
                              au:
                                type: string
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '405':    # status code
                description: "Droits insuffisants"
        post:
            tags:
                - Etudiants
            summary: Modification des dates d'affectation d'un étudiant dans un TD/option
            description: Remplace les dates d'affectation de l'étudiant de clé {cle_etu} dans le TD/option de clé {cle_tdopt} par celles passées dans le JSON au niveau du BODY
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_tdopt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: "JSON des dates d'affectation (tableau de json contenant la date de debut de l'intervalle ('du') et la date de fin ('au')). Passer 'du' :'1899-12-30' pour signifier 'depuis le debut de l'année' et/ou 'au': '2199-12-30' pour signifier jusqu'à la fin de l'année"
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      dates_affectation:
                        type: array
                        items:
                          type: object
                          properties:
                            du:
                              type: string
                              example: "2000-02-02"
                            au:
                              type: string
                              example: "2000-02-20"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        dates_affectation:
                          type: array
                          items:
                            type: object
                            properties:
                              du:
                                type: string
                              au:
                                type: string
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '405':    # status code
                description: "Droits insuffisants"
    /etudiants/{cle}/cours:
        get:
            tags:
                - Etudiants
            summary: Clés des cours d'un étudiant entre 2 dates
            description: Clés des cours de l'étudiant de clé {cle} entre 2 dates. Si pas de paramètres, retourne la liste des cours de l'étudiant sur tout le domaine.
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-08"   # ?date_fin=2024-08-08
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: array
                          items:
                            type: integer
                          example: [388,400]
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '405':    # status code
                description: "Droits insuffisants"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/periodes_notation/{cle_pern}/bonus_malus:
        get:
            tags:
                - Etudiants
            summary: Bonus/malus affecté à un étudiant pour un service de notation et une période de notation
            description: Bonus/malus affecté à l'étudiant de clé {cle_etu} pour le service de notation de clé {cle_sn} et pour la période de notation de clé {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        bonus_malus:
                          type: string
                          example: "5"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Etudiants
            summary: Modification du bonus/malus d'un étudiant pour un service de notation et une période de notation
            description: Modifie le bonus/malus de l'étudiant de clé {cle_etu} pour le service de notation de clé {cle_sn} et la période de notation de clé {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
                - name: bonus_malus
                  in: query
                  description: Bonus/malus à affecter
                  required: true
                  schema:
                    type: string
                    example: "5"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        bonus_malus:
                          type: string
                          example: "5"
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/periodes_hors_calendrier/{cle_perhc}/bonus_malus:
        get:
            tags:
                - Etudiants
            summary: Bonus/malus affecté à un étudiant pour un service de notation et une période hors calendrier
            description: Bonus/malus affecté à l'étudiant de clé {cle_etu} pour le service de notation de clé {cle_sn} et la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        bonus_malus:
                          type: string
                          example: "5"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Etudiants
            summary: Modification du bonus/malus d'un étudiant pour un service de notation et une période hors calendrier
            description: Modifie le bonus/malus de l'étudiant de clé {cle_etu} pour le service de notation de clé {cle_sn} et la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
                - name: bonus_malus
                  in: query
                  description: Bonus/malus à affecter
                  required: true
                  schema:
                    type: string
                    example: "5"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        bonus_malus:
                          type: string
                          example: "5"
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/calendriers_notation/{cle_caln}/appreciation:
        get:
            tags:
                - Etudiants
            summary: Appréciation d'un étudiant pour un service de notation et un calendrier de notation
            description: Appréciation de l'étudiant de clé {cle_etu} pour le service de notation de clé {cle_sn} et pour le calendrier de notation de clé {cle_caln}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_caln
                  in: path
                  description: "clé du calendrier de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_calendrier_notation:
                          type: integer
                          example: 125
                        appreciation:
                          type: string
                          example: "Excellent travail"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Etudiants
            summary: Modification de l'appréciation d'un étudiant pour un service de notation et un calendrier de notation
            description: Modifie l'appréciation de l'étudiant de clé {cle_etu} pour le service de notation de clé {cle_sn} et le calendrier de notation de clé {cle_caln}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_caln
                  in: path
                  description: "clé du calendrier de notation"
                  required: true
                  schema:
                    type: integer
                - name: appreciation
                  in: query
                  description: Nouvelle appréciation
                  required: true
                  schema:
                    type: string
                    example: "Remarquable"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_calendrier_notation:
                          type: integer
                          example: 125
                        appreciation:
                          type: string
                          example: "Remarquable"
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/periodes_notation/{cle_pern}/appreciation:
        get:
            tags:
                - Etudiants
            summary: Appréciation d'un étudiant pour un service de notation et une période de notation
            description: Appréciation de l'étudiant de clé {cle_etu} pour le service de notation de clé {cle_sn} et pour la période de notation de clé {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        appreciation:
                          type: string
                          example: "Excellent travail"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Etudiants
            summary: Modification de l'appréciation d'un étudiant pour un service de notation et une période de notation
            description: Modifie l'appréciation de l'étudiant de clé {cle_etu} pour le service de notation de clé {cle_sn} et la période de notation de clé {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
                - name: appreciation
                  in: query
                  description: Nouvelle appréciation
                  required: true
                  schema:
                    type: string
                    example: "Remarquable"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        appreciation:
                          type: string
                          example: "Remarquable"
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/periodes_hors_calendrier/{cle_perhc}/appreciation:
        get:
            tags:
                - Etudiants
            summary: Appréciation d'un étudiant pour un service de notation et une période hors calendrier
            description: Appréciation de l'étudiant de clé {cle_etu} pour le service de notation de clé {cle_sn} et la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        appreciation:
                          type: string
                          example: "Excellent travail"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Etudiants
            summary: Modification de l'appréciation d'un étudiant pour un service de notation et une période hors calendrier
            description: Modifie l'appréciation de l'étudiant de clé {cle_etu} pour le service de notation de clé {cle_sn} et la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
                - name: appreciation
                  in: query
                  description: Nouvelle appréciation
                  required: true
                  schema:
                    type: string
                    example: "Remarquable"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        appreciation:
                          type: string
                          example: "Remarquable"
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /etudiants/{cle_etu}/promotions/{cle_promo}/periodes_notation/{cle_pern}/observation_generale:
        get:
            tags:
                - Etudiants
            summary: Observation générale affectée à un étudiant pour une promotion et une période de notation
            description: Observation générale affectée à l'étudiant de clé {cle_etu} pour la promotion de clé {cle_promo} et pour la période de notation de clé {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        observation_generale:
                          type: string
                          example: "Parfait"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Etudiants
            summary: Modification de l'observation générale d'un étudiant pour une promotion et une période de notation
            description: Modifie l'observation générale de l'étudiant de clé {cle_etu} pour la promotion de clé {cle_promo} et la période de notation de clé {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
                - name: observation_generale
                  in: query
                  description: Observation générale à affecter
                  required: true
                  schema:
                    type: string
                    example: "Parfait"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        observation_generale:
                          type: string
                          example: "Parfait"
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /etudiants/{cle_etu}/promotions/{cle_promo}/periodes_hors_calendrier/{cle_perhc}/observation_generale:
        get:
            tags:
                - Etudiants
            summary: Observation générale affectée à un étudiant pour une promotion et une période hors calendrier
            description: Observation générale affectée à l'étudiant de clé {cle_etu} pour la promotion de clé {cle_promo} et la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        observation_generale:
                          type: string
                          example: "Parfait"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Etudiants
            summary: Modification de l'observation générale d'un étudiant pour une promotion et une période hors calendrier
            description: Modifie l'observation générale de l'étudiant de clé {cle_etu} pour la promotion de clé {cle_promo} et la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
                - name: observation_generale
                  in: query
                  description: Observation générale à affecter
                  required: true
                  schema:
                    type: string
                    example: "Parfait"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        observation_generale:
                          type: string
                          example: "Parfait"
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /etudiants/{cle_etu}/promotions/{cle_promo}/periodes_notation/{cle_pern}/decision:
        get:
            tags:
                - Etudiants
            summary: Décision affectée à un étudiant pour une promotion et une période de notation
            description: Décision affectée à l'étudiant de clé {cle_etu} pour la promotion de clé {cle_promo} et pour la période de notation de clé {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        decision:
                          type: string
                          example: "Semestre validé"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Etudiants
            summary: Modification de la décision d'un étudiant pour une promotion et une période de notation
            description: Modifie la décision de l'étudiant de clé {cle_etu} pour la promotion de clé {cle_promo} et la période de notation de clé {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
                - name: decision
                  in: query
                  description: Décision à affecter
                  required: true
                  schema:
                    type: string
                    example: "Semestre validé"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        decision:
                          type: string
                          example: "Semestre validé"
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /etudiants/{cle_etu}/promotions/{cle_promo}/periodes_hors_calendrier/{cle_perhc}/decision:
        get:
            tags:
                - Etudiants
            summary: Décision affectée à un étudiant pour une promotion et une période hors calendrier
            description: Décision affectée à l'étudiant de clé {cle_etu} pour la promotion de clé {cle_promo} et la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        decision:
                          type: string
                          example: "Semestre validé"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Etudiants
            summary: Modification de la décision d'un étudiant pour une promotion et une période hors calendrier
            description: Modifie la décision de l'étudiant de clé {cle_etu} pour la promotion de clé {cle_promo} et la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
                - name: decision
                  in: query
                  description: Décision à affecter
                  required: true
                  schema:
                    type: string
                    example: "Semestre validé"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        decision:
                          type: string
                          example: "Semestre validé"
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /etudiants/{cle_etu}/periodes_notation/{cle_pern}/modules_notation/{cle_mod}/validation_module:
        get:
            tags:
                - Etudiants
            summary: Validation d'un module de notation d'un étudiant pour une période de notation
            description: Validation du module de notation de clé {cle_mod} de l'étudiant de clé {cle_etu} pour la période de notation de clé {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_mod
                  in: path
                  description: "clé du module de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_periode_notation:
                          type: integer
                          example: 125
                        cle_module_notation:
                          type: integer
                          example: 388
                        validation_module:
                          type: string
                          example: "Validé"
                        international:
                          type: string
                          example: "Admitted"
                        date_validation:
                          type: string
                          example: "2026-01-22"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Etudiants
            summary: Modification de la validation d'un module de notation d'un étudiant pour une période de notation
            description: Modifie la validation du module de notation de clé {cle_mod} de l'étudiant de clé {cle_etu} pour la période de notation de clé {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_mod
                  in: path
                  description: "clé du module de notation"
                  required: true
                  schema:
                    type: integer
                - name: validation_module
                  in: query
                  description: "Validation de module à affecter. Format attendu : 'validé', 'V', 'non', 'N', 'aucune', 'aucun', '' (chaine vide) ou une date sous format chaine 'yyyy-mm-dd' pour valider à une date précise"
                  required: true
                  schema:
                    type: string
                    example: "2026-01-22"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_periode_notation:
                          type: integer
                          example: 125
                        cle_module_notation:
                          type: integer
                          example: 388
                        validation_module:
                          type: string
                          example: "Validé"
                        international:
                          type: string
                          example: "Admitted"
                        date_validation:
                          type: string
                          example: "2026-01-22"
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante, périodes clôturées, promotion supprimée"
              '500':    # status code
                description: "Modification impossible"
    /etudiants/{cle_etu}/periodes_hors_calendrier/{cle_perhc}/modules_notation/{cle_mod}/validation_module:
        get:
            tags:
                - Etudiants
            summary: Validation d'un module de notation d'un étudiant pour une période hors calendrier
            description: Validation du module de notation de clé {cle_mod} de l'étudiant de clé {cle_etu} pour la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
                - name: cle_mod
                  in: path
                  description: "clé du module de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        cle_module_notation:
                          type: integer
                          example: 388
                        validation_module:
                          type: string
                          example: "Validé"
                        international:
                          type: string
                          example: "Admitted"
                        date_validation:
                          type: string
                          example: "2026-01-22"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Etudiants
            summary: Modification de la validation d'un module de notation d'un étudiant pour une période hors calendrier
            description: Modifie la validation du module de notation de clé {cle_mod} de l'étudiant de clé {cle_etu} pour la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
                - name: cle_mod
                  in: path
                  description: "clé du module de notation"
                  required: true
                  schema:
                    type: integer
                - name: validation_module
                  in: query
                  description: "Validation de module à affecter. Format attendu : 'validé', 'V', 'non', 'N', 'aucune', 'aucun', '' (chaine vide) ou une date sous format chaine 'yyyy-mm-dd' pour valider à une date précise"
                  required: true
                  schema:
                    type: string
                    example: "2026-01-22"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        cle_module_notation:
                          type: integer
                          example: 388
                        validation_module:
                          type: string
                          example: "Validé"
                        international:
                          type: string
                          example: "Admitted"
                        date_validation:
                          type: string
                          example: "2026-01-22"
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante, périodes clôturées, promotion supprimée"
              '500':    # status code
                description: "Modification impossible"
    /etudiants/{cle_etu}/devoirs/{cle_devoir}/notes:
        get:
            tags:
                - Etudiants
            summary: Note affectée à un étudiant pour un devoir
            description: Note affectée à l'étudiant de clé {cle_etu} pour le devoir de clé {cle_devoir} (en tenant compte de la note du devoir de rattrapage s'il existe)
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_devoir
                  in: path
                  description: "clé du devoir"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        etudiant:
                          type: integer
                          example: 498
                        devoir:
                          type: integer
                          example: 388
                        date_devoir:
                          type: string
                          example: "2024-10-04"
                        note:
                          type: string
                          example: "15,4"
                        matiere:
                          type: integer
                          example: 314
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Etudiants
            summary: Modification de la note d'un étudiant pour un devoir
            description: Modifie la note de l'étudiant de clé {cle_etu} pour le devoir de clé {cle_devoir}
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_devoir
                  in: path
                  description: "clé du devoir"
                  required: true
                  schema:
                    type: integer
                - name: note
                  in: query
                  description: note à affecter. Peut être aussi une anotation (Abs, N.Not, N.Rdu*, Disp,..). Cf. documentation PRONOTE Campus
                  required: true
                  schema:
                    type: string
                    example: "15,5"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        etudiant:
                          type: integer
                          example: 498
                        devoir:
                          type: integer
                          example: 388
                        date_devoir:
                          type: string
                          example: "2024-10-04"
                        note:
                          type: string
                          example: "15,4"
                        matiere:
                          type: integer
                          example: 314
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /etudiants/{cle_etu}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Etudiants
            summary: Rubriques affectées à l'étudiant pour la famille
            description: Rubriques affectées à l'étudiant de clé {cle_etu} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        etudiant:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Etudiants
            summary: Modification des rubriques affectées à l'étudiant pour la famille
            description: Modifie les rubriques affectées à l'étudiant de clé {cle_etu} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_etu
                  in: path
                  description: "clé de l'étudiant"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        etudiant:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Matieres ####
    /matieres:
        get:
            tags:
                - Matieres
            summary: Liste de toutes les matières
            description: Tableau contenant les json des matières de la base, par défaut trié par libellé puis code
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - libelle
                      - code
                      - libelle_long
                      - uid_identifiant
                      - couleur
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, libelle, code]   # ?select=cle,libelle,code
                - name: cle
                  in: query
                  description: retourne seulement les matières ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: libelle
                  in: query
                  description: retourne seulement les matières ayant un de ces libellés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul libellé souhaité
                      value: [maths]   # ?libelle=maths
                    multipleIds:
                      summary: Exemple avec plusieurs libellés souhaités
                      value: [maths, francais, histoire]   # ?libelle=maths,francais,histoire
                - name: code
                  in: query
                  description: retourne seulement les matières ayant un de ces codes
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul code souhaité
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
                - name: uid_identifiant
                  in: query
                  description: retourne seulement les matières ayant un de ces uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiants souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tableau des JSON des matières
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Matieres'
        post:
            tags:
                - Matieres
            summary: Création d'une nouvelle matière
            description: Crée une nouvelle matière dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      libelle:
                        type: string
                        example: "Anglais"
                      code:
                        type: string
                        example: "LV1"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      libelle_long:
                        type: string
                        example: "Voici un libelle un peu plus long"
                      libelle_international:
                        type: string
                        example: "English"
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      coefficient:
                        type: integer
                        example: 0
                      publication:
                        type: string
                        example: "Publié sur tous les Espaces"
                      proprietaire:
                        type: integer
                        example: 10
                      matieres_incompatibles:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Anglais.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Matieres'
              '400':    # status code
                description: "Paramètres non valides : libellé obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /matieres/{cle}:
        get:
            tags:
                - Matieres
            summary: Json de la matière de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de la matière"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Matieres'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Matieres
            summary: Mise à jour partielle d'une matière
            description: Modifie les champs de la matière de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la matière que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      libelle:
                        type: string
                        example: "Anglais"
                      code:
                        type: string
                        example: "LV1"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      libelle_long:
                        type: string
                        example: "Voici un libelle un peu plus long"
                      libelle_international:
                        type: string
                        example: "English"
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      coefficient:
                        type: integer
                        example: 0
                      publication:
                        type: string
                        example: "Publié sur tous les Espaces"
                      proprietaire:
                        type: integer
                        example: 10
                      matieres_incompatibles:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Anglais.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Matieres'
              '400':    # status code
                description: "Paramètres non valides : libellé obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : matière inexistante"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Matieres
            summary: Suppression d'une matière
            description: Supprime définitivement la matière de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /matieres/supprimer:
        post:
            tags:
                - Matieres
            summary: Suppression de plusieurs matières
            description: Supprime les matières dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des matières à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /matieres/{cle_mat}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Matieres
            summary: Rubriques affectées à la matière pour la famille
            description: Rubriques affectées à la matière de clé {cle_mat} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_mat
                  in: path
                  description: "clé de la matière"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        matiere:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Matieres
            summary: Modification des rubriques affectées à la matière pour la famille
            description: Modifie les rubriques affectées à la matière de clé {cle_mat} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_mat
                  in: path
                  description: "clé de la matière"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        matiere:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Modules ####
    /modules:
        get:
            tags:
                - Modules
            summary: Liste de tous les modules
            description: Tableau contenant les json des modules de la base, par défaut trié par nom puis code
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - code
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: retourne seulement les modules ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les modules ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: code
                  in: query
                  description: retourne seulement les modules ayant un de ces codes
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul code souhaité
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
            responses:
              '200':    # status code
                description: Tableau des JSON des modules
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Modules'
        post:
            tags:
                - Modules
            summary: Création d'un nouveau module
            description: Crée un nouveau module dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Modules'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Modules'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /modules/{cle}:
        get:
            tags:
                - Modules
            summary: Json du module de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du module"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Modules'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Modules
            summary: Mise à jour partielle d'un module
            description: Modifie les champs du module de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du module que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Modules'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Modules'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : module inexistant"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Modules
            summary: Suppression d'un module
            description: Supprime définitivement le module de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /modules/supprimer:
        post:
            tags:
                - Modules
            summary: Suppression de plusieurs modules
            description: Supprime les modules dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des modules à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /modules/{cle_mod}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Modules
            summary: Rubriques affectées au module pour la famille
            description: Rubriques affectées au module de clé {cle_mod} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_mod
                  in: path
                  description: "clé du module"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        module:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Modules
            summary: Modification des rubriques affectées au module pour la famille
            description: Modifie les rubriques affectées au module de clé {cle_mod} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_mod
                  in: path
                  description: "clé du module"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        module:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Parents ####
    /parents:
        get:
            tags:
                - Parents
            summary: Liste de tous les parents
            description: Tableau contenant les json des parents de la base, par défaut trié par nom, prénom, adresse1 puis civilité
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - uid_identifiant
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: retourne seulement les parents ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les parents ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [Dupond]   # ?nom=Dupond
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [Dupond, Dupont, Martin]   # ?nom=Dupond,Dupont,Martin
                - name: prenom
                  in: query
                  description: retourne seulement les parents ayant un de ces prénoms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul prénom souhaité
                      value: [Dominique]   # ?prenom=Dominique
                    multipleIds:
                      summary: Exemple avec plusieurs prénoms souhaités
                      value: [Dominique, Claude, Camille]   # ?prenom=Dominique,Claude,Camille
                - name: nom_naissance
                  in: query
                  description: retourne seulement les parents ayant un de ces noms de naissance
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [Dupond]   # ?nom_naissance=Dupond
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [Dupond, Dupont, Martin]   # ?nom_naissance=Dupond,Dupont,Martin
                - name: uid_identifiant
                  in: query
                  description: retourne seulement les parents ayant un de ces uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiants souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
                - name: cas_identifiant
                  in: query
                  description: retourne seulement les parents ayant un de ces cas_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul cas_identifiant souhaité
                      value: [ident1]   # ?cas_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs cas_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?cas_identifiant=ident1,ident2,ident3
                - name: adfs_identifiant
                  in: query
                  description: retourne seulement les parents ayant un de ces adfs_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul adfs_identifiant souhaité
                      value: [ident1]   # ?adfs_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs adfs_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?adfs_identifiant=ident1,ident2,ident3
                - name: saml_identifiant
                  in: query
                  description: retourne seulement les parents ayant un de ces saml_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul saml_identifiant souhaité
                      value: [ident1]   # ?saml_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs saml_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?saml_identifiant=ident1,ident2,ident3
            responses:
              '200':    # status code
                description: Tableau des JSON des parents
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Parents'
        post:
            tags:
                - Parents
            summary: Création d'un nouveau parent
            description: Crée un nouveau parent dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Dupond"
                      prenom:
                        type: string
                        example: "Camille"
                      civilite:
                        type: string
                        example: "Mme"
                      nom_naissance:
                        type: string
                        example: "Dupond"
                      email:
                        type: string
                        example: "prenom.nom@email.fr"
                      destinataire_courriers_absences:
                        type: boolean
                        example: true
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      cas_identifiant:
                        type: string
                        example: "Identifiant__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identifiant__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identifiant__SAML"
                      commentaire:
                        type: string
                        example: "Voici un commentaire bien utile"
                      profession:
                        type: string
                        example: "enseignante"
                      situation_professionnelle:
                        type: string
                        example: "en activite"
                      adresse1:
                        type: string
                        example: "12 rue de la paix"
                      adresse2:
                        type: string
                        example: "12 rue de la paix"
                      adresse3:
                        type: string
                        example: "12 rue de la paix"
                      adresse4:
                        type: string
                        example: "12 rue de la paix"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Marseille"
                      pays:
                        type: string
                        example: "France"
                      province:
                        type: string
                        example: "Province"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      autorisation_reception_sms:
                        type: boolean
                        example: true
                      numero_telephone_bureau:
                        type: string
                        example: "01010101"
                      indicatif_telephone_bureau:
                        type: string
                        example: "01"
                      identifiant_connexion:
                        type: string
                        example: "Identifiant__connexion"
                      acces_espace_parents:
                        type: boolean
                        example: true
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Seulement pour la modification, pas de visualisation, doit respecter la politique de sécurité
                      etudiants:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Parents'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /parents/{cle}:
        get:
            tags:
                - Parents
            summary: Json du parent de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du parent"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Parents'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Parents
            summary: Mise à jour partielle d'un parent
            description: Modifie les champs du parent de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du parent que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Dupond"
                      prenom:
                        type: string
                        example: "Camille"
                      civilite:
                        type: string
                        example: "Mme"
                      nom_naissance:
                        type: string
                        example: "Dupond"
                      email:
                        type: string
                        example: "prenom.nom@email.fr"
                      destinataire_courriers_absences:
                        type: boolean
                        example: true
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      cas_identifiant:
                        type: string
                        example: "Identifiant__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identifiant__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identifiant__SAML"
                      commentaire:
                        type: string
                        example: "Voici un commentaire bien utile"
                      profession:
                        type: string
                        example: "enseignante"
                      situation_professionnelle:
                        type: string
                        example: "en activite"
                      adresse1:
                        type: string
                        example: "12 rue de la paix"
                      adresse2:
                        type: string
                        example: "12 rue de la paix"
                      adresse3:
                        type: string
                        example: "12 rue de la paix"
                      adresse4:
                        type: string
                        example: "12 rue de la paix"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Marseille"
                      pays:
                        type: string
                        example: "France"
                      province:
                        type: string
                        example: "Province"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      autorisation_reception_sms:
                        type: boolean
                        example: true
                      numero_telephone_bureau:
                        type: string
                        example: "01010101"
                      indicatif_telephone_bureau:
                        type: string
                        example: "01"
                      identifiant_connexion:
                        type: string
                        example: "Identifiant__connexion"
                      acces_espace_parents:
                        type: boolean
                        example: true
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Seulement pour la modification, pas de visualisation, doit respecter la politique de sécurité
                      etudiants:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Parents'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : parent inexistant"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Parents
            summary: Suppression d'un parent
            description: Supprime définitivement le parent de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /parents/supprimer:
        post:
            tags:
                - Parents
            summary: Suppression de plusieurs parents
            description: Supprime les parents dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des parents à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    #### Partitions ####
    /partitions:
        get:
            tags:
                - Partitions
            summary: Liste de toutes les partitions
            description: Tableau contenant les json des partitions de la base, par défaut trié par promotion puis nom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: retourne seulement les partitions ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les partitions ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: promotion
                  in: query
                  description: retourne seulement les partitions ayant une de ces promotions
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule promotion souhaitée
                      value: [12]   # ?promotion=12
                    multipleIds:
                      summary: Exemple avec plusieurs promotions souhaitées
                      value: [12, 15, 18]   # ?promotion=12,15,18
            responses:
              '200':    # status code
                description: Tableau des JSON des partitions
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Partitions'
        post:
            tags:
                - Partitions
            summary: Création d'une nouvelle partition
            description: Crée une nouvelle partition dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Partitions'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Partitions'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /partitions/{cle}:
        get:
            tags:
                - Partitions
            summary: Json de la partition de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de la partition"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Partitions'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Partitions
            summary: Mise à jour partielle d'une partition
            description: Modifie les champs de la partition de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la partition que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Partitions'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Partitions'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : partition inexistante"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Partitions
            summary: Suppression d'une partition
            description: Supprime définitivement la partition de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /partitions/supprimer:
        post:
            tags:
                - Partitions
            summary: Suppression de plusieurs partitions
            description: Supprime les partitions dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des partitions à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    #### Promotions ####
    /promotions:
        get:
            tags:
                - Promotions
            summary: Liste de toutes les promotions
            description: Tableau contenant les json des promotions de la base, par défaut trié par nom puis code
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - code
                      - libelle_long
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: retourne seulement les promotions ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les promotions ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: code
                  in: query
                  description: retourne seulement les promotions ayant un de ces codes
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul code souhaité
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
                - name: uid_identifiant
                  in: query
                  description: retourne seulement les promotions ayant un de ces uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiants souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tableau des JSON des promotions
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Promotions'
        post:
            tags:
                - Promotions
            summary: Création d'une nouvelle promotion
            description: Crée une nouvelle promotion dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "1GM1"
                      code:
                        type: string
                        example: "GM1"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      libelle_long:
                        type: string
                        example: "Voici un libelle un peu plus long"
                      email:
                        type: string
                        example: "1gm1@email.fr"
                      coordinateurs_pedagogiques:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      effectif_saisi:
                        type: integer
                        example: 30
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      gestion_automatique_des_liens:
                        type: boolean
                        example: true
                      publication_sur_tous_les_espaces:
                        type: boolean
                        example: true
                      regroupement:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      calendrier:
                        type: string
                        example: "Calendrier1"
                      proprietaire:
                        type: integer
                        example: 10
                      calendrier_notation:
                        type: integer
                        example: 10
                      periodes_hors_calendrier:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      modules_notation:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      services_notation:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      services_notation_avec_td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      note_seuil_ects_rattrapage:
                        type: string
                        example: "10"
                      autoriser_rattrapage_ects:
                        type: boolean
                        example: true
                      module_attribution_ects_est_par_module:
                        type: boolean
                        example: true
                      mode_calcul_moyenne_generale_est_par_module:
                        type: boolean
                        example: true
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Anglais.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Promotions'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /promotions/{cle}:
        get:
            tags:
                - Promotions
            summary: Json de la promotion de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Promotions'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Promotions
            summary: Mise à jour partielle d'une promotion
            description: Modifie les champs de la promotion de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la promotion que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "1GM1"
                      code:
                        type: string
                        example: "GM1"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      libelle_long:
                        type: string
                        example: "Voici un libelle un peu plus long"
                      email:
                        type: string
                        example: "1gm1@email.fr"
                      coordinateurs_pedagogiques:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      effectif_saisi:
                        type: integer
                        example: 30
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      gestion_automatique_des_liens:
                        type: boolean
                        example: true
                      publication_sur_tous_les_espaces:
                        type: boolean
                        example: true
                      regroupement:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      calendrier:
                        type: string
                        example: "Calendrier1"
                      proprietaire:
                        type: integer
                        example: 10
                      calendrier_notation:
                        type: integer
                        example: 10
                      periodes_hors_calendrier:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      modules_notation:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      services_notation:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      services_notation_avec_td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      note_seuil_ects_rattrapage:
                        type: string
                        example: "10"
                      autoriser_rattrapage_ects:
                        type: boolean
                        example: true
                      module_attribution_ects_est_par_module:
                        type: boolean
                        example: true
                      mode_calcul_moyenne_generale_est_par_module:
                        type: boolean
                        example: true
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Anglais.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Promotions'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : promotion inexistante"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Promotions
            summary: Suppression d'une promotion
            description: Supprime définitivement la promotion de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /promotions/supprimer:
        post:
            tags:
                - Promotions
            summary: Suppression de plusieurs promotions
            description: Supprime les promotions dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des promotions à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /promotions/{cle}/etudiants:
        get:
            tags:
                - Promotions
            summary: Clés des étudiants d'une promotion
            description: Clés des étudiants de la promotion de clé {cle} à une date ou entre 2 dates. Si pas de paramètres, retourne la liste des étudiants à la date d'aujourd'hui.
            parameters:
                - name: cle
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date=2024-08-06
                - name: date_debut
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-08"   # ?date_fin=2024-08-08
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        etudiants:
                          type: array
                          items:
                            type: integer
                            example: 10
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /promotions/{cle}/cours:
        get:
            tags:
                - Promotions
            summary: Clés des cours d'une promotion entre 2 dates
            description: Clés des cours de la promotion de clé {cle} entre 2 dates. Si pas de paramètres, retourne la liste des cours sur tout le domaine.
            parameters:
                - name: cle
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: array
                          items:
                            type: integer
                          example: [388,400]
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /promotions/{cle_promo}/cours/{cle_cours}/domaine:
        get:
            tags:
                - Promotions
            summary: Domaine de présence d'une promotion dans un cours
            description: Domaine de présence de la promotion de clé {cle_promo} pour le cours de clé {cle_cours}. Le domaine est vide si la promotion n'est pas dans le cours.
            parameters:
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Promotions
            summary: Modification du domaine de présence d'une promotion dans un cours
            description: Modifie le domaine de présence de la promotion de clé {cle_promo} pour le cours de clé {cle_cours}. Permet d'ajouter une promotion à un cours ou l'enlever de ce cours. Le domaine peut être passé dans l'URL ?domaine=12,24,48. Par défaut, prend tout le domaine.
            parameters:
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /promotions/{cle}/indisponibilites:
        get:
            tags:
                - Promotions
            summary: Indisponibilités d'une promotion pour une semaine
            description: Indisponibilités (en places) de la promotion de clé {cle} pour une semaine.<br>
                         Si pas de paramètres, retourne la premiere semaine.<br>
                         Une place correspond à la durée écoulée entre le Lundi à 0h00 et le début de l'indisponibilté.<br>
                         Attention, les durées sont exprimées en 'jour'.<br>
                         Par exemple, lundi midi = 12h00 = 12/24ème jour = 0,5 jour.<br>
                         Mercredi midi = 24h (du lundi entier) + 24h (du mardi entier) + 12h (du mercredi) = 60/24ème = 2.5 jours
            parameters:
                - name: cle
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: semaine
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_promotion:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_indisponibilites:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Paramètre invalide : semaine"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /promotions/{cle}/voeux:
        get:
            tags:
                - Promotions
            summary: Voeux d'une promotion pour une semaine
            description: Voeux (en places) de la promotion de clé {cle} pour une semaine.<br>
                         Si pas de paramètres, retourne la premiere semaine.<br>
                         Une place correspond à la durée écoulée entre le Lundi à 0h00 et le début du voeux.<br>
                         Attention, les durées sont exprimées en 'jour'.<br>
                         Par exemple, lundi midi = 12h00 = 12/24ème jour = 0,5 jour.<br>
                         Mercredi midi = 24h (du lundi entier) + 24h (du mardi entier) + 12h (du mercredi) = 60/24ème = 2.5 jours
            parameters:
                - name: cle
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: semaine
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_promotion:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_voeux:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Paramètre invalide : semaine"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /promotions/{cle}/cout:
        get:
            tags:
                - Promotions
            summary: Coût d'une promotion sur un domaine
            description: Coût de la promotion de clé {cle} sur un domaine. Si pas de paramètres, retourne le coût sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /promotions/cout:
        get:
            tags:
                - Promotions
            summary: Coûts des promotions sur un domaine
            description: Coûts des promotions sur un domaine. Si pas de paramètres, retourne le coût sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des promotions"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              cout:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /promotions/{cle}/duree_cours:
        get:
            tags:
                - Promotions
            summary: Durée de cours d'une promotion sur un domaine
            description: Durée de cours de la promotion de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /promotions/duree_cours:
        get:
            tags:
                - Promotions
            summary: Durée de cours des promotions sur un domaine
            description: Durée de cours des promotions sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des promotions"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /promotions/{cle}/duree_disponible:
        get:
            tags:
                - Promotions
            summary: Durée disponible d'une promotion sur un domaine
            description: Durée disponible de la promotion de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /promotions/duree_disponible:
        get:
            tags:
                - Promotions
            summary: Durée disponible des promotions sur un domaine
            description: Durée disponible des promotions sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des promotions"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /promotions/{cle_promo}/matieres/{cle_mat}/matiere_personnalisee:
        get:
            tags:
                - Promotions
            summary: Clé de la matière affectée comme matière personnalisée à une matière pour une promotion
            description: Clé de la matière affectée comme matière personnalisée à la matière de clé {cle_mat} pour la promotion de clé {cle_promo}
            parameters:
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_mat
                  in: path
                  description: "clé de la matière"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_matiere:
                          type: integer
                          example: 125
                        cle_matiere_personnalisee:
                          type: integer
                          example: 120
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Promotions
            summary: Modification de la matière afffectée comme matière personnalisée à une matière pour une promotion
            description: Modifie la matière affectée comme matière personnalisée à la matière de clé {cle_mat} pour la promotion de clé {cle_promo}
            parameters:
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_mat
                  in: path
                  description: "clé de la matière"
                  required: true
                  schema:
                    type: integer
                - name: matiere_personnalisee
                  in: query
                  description: clé de la matière à affecter comme matière personnalisée
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_matiere:
                          type: integer
                          example: 125
                        cle_matiere_personnalisee:
                          type: integer
                          example: 120
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /promotions/{cles_promo}/matieres/{cles_mat}/matieres_personnalisees:
        get:
            tags:
                - Promotions
            summary: Clé de la matière affectée comme matière personnalisée à chaque matière pour chacune des promotions
            description: Clé de la matière affectée comme matière personnalisée à chaque matière dont la clé est dans {cles_mat} pour chacune des promotions dont la clé est dans {cles_promo}
            parameters:
                - name: cles_promo
                  in: path
                  description: clés des promotions voulues, séparées par des virgules (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: cles_mat
                  in: path
                  description: clés des matières voulues, séparées par des virgules (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle_promotion:
                            type: integer
                            example: 388
                          cle_matiere:
                            type: integer
                            example: 125
                          cle_matiere_personnalisee:
                            type: integer
                            example: 120
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /promotions/{cle_promo}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Promotions
            summary: Rubriques affectées à la promotion pour la famille
            description: Rubriques affectées à la promotion de clé {cle_promo} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        promotion:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Promotions
            summary: Modification des rubriques affectées à la promotion pour la famille
            description: Modifie les rubriques affectées à la promotion de clé {cle_promo} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        promotion:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Regroupements ####
    /regroupements:
        get:
            tags:
                - Regroupements
            summary: Liste de tous les regroupements
            description: Tableau contenant les json des regroupements de la base, par défaut trié par nom puis code
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - code
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: retourne seulement les regroupements ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les regroupements ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: code
                  in: query
                  description: retourne seulement les regroupements ayant un de ces codes
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul code souhaité
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
                - name: uid_identifiant
                  in: query
                  description: retourne seulement les regroupements ayant un de ces uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiants souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tableau des JSON des regroupements
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Regroupements'
        post:
            tags:
                - Regroupements
            summary: Création d'un nouveau regroupement
            description: Crée un nouveau regroupement dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "GM1-2"
                      code:
                        type: string
                        example: "1-2"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      effectif_saisi:
                        type: integer
                        example: 60
                      promotions:
                        type: array
                        items:
                          type: integer
                        example: [11,13,15]
                      td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      proprietaire:
                        type: integer
                        example: 10
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Regroupements'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /regroupements/{cle}:
        get:
            tags:
                - Regroupements
            summary: Json du regroupement de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du regroupement"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Regroupements'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Regroupements
            summary: Mise à jour partielle d'un regroupement
            description: Modifie les champs du regroupement de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du regroupement que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "GM1-2"
                      code:
                        type: string
                        example: "1-2"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      effectif_saisi:
                        type: integer
                        example: 60
                      promotions:
                        type: array
                        items:
                          type: integer
                        example: [11,13,15]
                      td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      proprietaire:
                        type: integer
                        example: 10
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Regroupements'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : regroupement inexistant"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Regroupements
            summary: Suppression d'un regroupement
            description: Supprime définitivement le regroupement de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /regroupements/supprimer:
        post:
            tags:
                - Regroupements
            summary: Suppression de plusieurs regroupements
            description: Supprime les regroupements dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des regroupements à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /regroupements/{cle}/cours:
        get:
            tags:
                - Regroupements
            summary: Clés des cours d'un regroupement entre 2 dates
            description: Clés des cours du regroupement de clé {cle} entre 2 dates. Si pas de paramètres, retourne la liste des cours sur tout le domaine.
            parameters:
                - name: cle
                  in: path
                  description: "clé du regroupement"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: array
                          items:
                            type: integer
                          example: [388,400]
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /regroupements/{cle_regroup}/cours/{cle_cours}/domaine:
        get:
            tags:
                - Regroupements
            summary: Domaine de présence d'un regroupement dans un cours
            description: Domaine de présence du regroupement de clé {cle_regroup} pour le cours de clé {cle_cours}. Le domaine est vide si le regroupement n'est pas dans le cours.
            parameters:
                - name: cle_regroup
                  in: path
                  description: "clé du regroupement"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Regroupements
            summary: Modification du domaine de présence d'un regroupement dans un cours
            description: Modifie le domaine de présence du regroupement de clé {cle_regroup} pour le cours de clé {cle_cours}. Permet d'ajouter un regroupement à un cours ou l'enlever de ce cours. Le domaine peut être passé dans l'URL ?domaine=12,24,48. Par défaut, prend tout le domaine.
            parameters:
                - name: cle_regroup
                  in: path
                  description: "clé du regroupement"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /regroupements/{cle}/cout:
        get:
            tags:
                - Regroupements
            summary: Coût d'un regroupement sur un domaine
            description: Coût du regroupement de clé {cle} sur un domaine. Si pas de paramètres, retourne le coût sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cle
                  in: path
                  description: "clé du regroupement"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /regroupements/cout:
        get:
            tags:
                - Regroupements
            summary: Coûts des regroupements sur un domaine
            description: Coûts des regroupements sur un domaine. Si pas de paramètres, retourne le coût sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des regroupements"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              cout:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /regroupements/{cle}/duree_cours:
        get:
            tags:
                - Regroupements
            summary: Durée de cours d'un regroupement sur un domaine
            description: Durée de cours du regroupement de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cle
                  in: path
                  description: "clé du regroupement"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /regroupements/duree_cours:
        get:
            tags:
                - Regroupements
            summary: Durée de cours des regroupements sur un domaine
            description: Durée de cours des regroupements sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des regroupements"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /regroupements/{cle}/duree_disponible:
        get:
            tags:
                - Regroupements
            summary: Durée disponible d'un regroupement sur un domaine
            description: Durée disponible du regroupement de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cle
                  in: path
                  description: "clé du regroupement"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /regroupements/duree_disponible:
        get:
            tags:
                - Regroupements
            summary: Durée disponible des regroupements sur un domaine
            description: Durée disponible des regroupements sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des regroupements"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /regroupements/{cle_regroup}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Regroupements
            summary: Rubriques affectées au regroupement pour la famille
            description: Rubriques affectées au regroupement de clé {cle_regroup} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_regroup
                  in: path
                  description: "clé du regroupement"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        regroupement:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Regroupements
            summary: Modification des rubriques affectées au regroupement pour la famille
            description: Modifie les rubriques affectées au regroupement de clé {cle_regroup} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_regroup
                  in: path
                  description: "clé du regroupement"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        regroupement:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Salles ####
    /salles:
        get:
            tags:
                - Salles
            summary: Liste de toutes les salles
            description: Tableau contenant les json des salles de la base, par défaut trié par nom puis code
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - code
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: retourne seulement les salles ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les salles ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: code
                  in: query
                  description: retourne seulement les salles ayant un de ces codes
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul code souhaité
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
                - name: uid_identifiant
                  in: query
                  description: retourne seulement les salles ayant un de ces uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiants souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tableau des JSON des salles
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Salles'
        post:
            tags:
                - Salles
            summary: Création d'une nouvelle salle
            description: Crée une nouvelle salle dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Salle 001"
                      code:
                        type: string
                        example: "001"
                      libelle_long:
                        type: string
                        example: "Voici un libelle un peu plus long"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      capacite:
                        type: integer
                        example: 50
                      acces_pmr:
                        type: boolean
                        example: true
                      chaises_ergo:
                        type: integer
                        example: 5
                      handiboucle:
                        type: boolean
                        example: true
                      nombre_salles_max:
                        type: integer
                        example: 10
                      proprietaire:
                        type: integer
                        example: 10
                      publication:
                        type: string
                        example: "Publié sur tous les Espaces"
                      site:
                        type: string
                        example: "Principal"
                      descriptif:
                        type: string
                        example: "Descriptif de la salle"
                      descriptif_publie:
                        type: boolean
                        example: true
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Salle_001.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
                      est_dans_groupe_de_salle:
                        type: integer
                        example: 10
                        description: "attention, seulement pour les salles simples"
                      salles_de_ce_groupe_de_salle:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                        description: "attention, seulement pour les groupes de salles"
                      cout_horaire:
                        type: integer
                        example: 10
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Salles'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /salles/{cle}:
        get:
            tags:
                - Salles
            summary: Json de la salle de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de la salle"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Salles'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Salles
            summary: Mise à jour partielle d'une salle
            description: Modifie les champs de la salle de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la salle que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Salle 001"
                      code:
                        type: string
                        example: "001"
                      libelle_long:
                        type: string
                        example: "Voici un libelle un peu plus long"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      capacite:
                        type: integer
                        example: 50
                      acces_pmr:
                        type: boolean
                        example: true
                      chaises_ergo:
                        type: integer
                        example: 5
                      handiboucle:
                        type: boolean
                        example: true
                      nombre_salles_max:
                        type: integer
                        example: 10
                      proprietaire:
                        type: integer
                        example: 10
                      publication:
                        type: string
                        example: "Publié sur tous les Espaces"
                      site:
                        type: string
                        example: "Principal"
                      descriptif:
                        type: string
                        example: "Descriptif de la salle"
                      descriptif_publie:
                        type: boolean
                        example: true
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Salle_001.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
                      est_dans_groupe_de_salle:
                        type: integer
                        example: 10
                        description: "attention, seulement pour les salles simples"
                      salles_de_ce_groupe_de_salle:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                        description: "attention, seulement pour les groupes de salles"
                      cout_horaire:
                        type: integer
                        example: 10
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Salles'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : salle inexistante"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Salles
            summary: Suppression d'une salle
            description: Supprime définitivement la salle de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /salles/supprimer:
        post:
            tags:
                - Salles
            summary: Suppression de plusieurs salles
            description: Supprime les salles dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des salles à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /salles/{cle}/cours:
        get:
            tags:
                - Salles
            summary: Clés des cours d'une salle entre 2 dates
            description: Clés des cours de la salle de clé {cle} entre 2 dates. Si pas de paramètres, retourne la liste des cours sur tout le domaine.
            parameters:
                - name: cle
                  in: path
                  description: "clé de la salle"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: array
                          items:
                            type: integer
                          example: [388,400]
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /salles/{cle_salle}/cours/{cle_cours}/domaine:
        get:
            tags:
                - Salles
            summary: Domaine de présence d'une salle dans un cours
            description: Domaine de présence de la salle de clé {cle_salle} pour le cours de clé {cle_cours}. Le domaine est vide si la salle n'est pas dans le cours.
            parameters:
                - name: cle_salle
                  in: path
                  description: "clé de la salle"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Salles
            summary: Modification du domaine de présence d'une salle dans un cours
            description: Modifie le domaine de présence de la salle de clé {cle_salle} pour le cours de clé {cle_cours}. Permet d'ajouter une salle à un cours ou l'enlever de ce cours. Le domaine peut être passé dans l'URL ?domaine=12,24,48. Par défaut, prend tout le domaine.
            parameters:
                - name: cle_salle
                  in: path
                  description: "clé de la salle"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /salles/{cle}/indisponibilites:
        get:
            tags:
                - Salles
            summary: Indisponibilités d'une salle pour une semaine
            description: Indisponibilités (en places) de la salle de clé {cle} pour une semaine.<br>
                         Si pas de paramètres, retourne la premiere semaine.<br>
                         Une place correspond à la durée écoulée entre le Lundi à 0h00 et le début de l'indisponibilté.<br>
                         Attention, les durées sont exprimées en 'jour'.<br>
                         Par exemple, lundi midi = 12h00 = 12/24ème jour = 0,5 jour.<br>
                         Mercredi midi = 24h (du lundi entier) + 24h (du mardi entier) + 12h (du mercredi) = 60/24ème = 2.5 jours
            parameters:
                - name: cle
                  in: path
                  description: "clé de la salle"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: semaine
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_salle:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_indisponibilites:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Paramètre invalide : semaine"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /salles/{cle}/voeux:
        get:
            tags:
                - Salles
            summary: Voeux d'une salle pour une semaine
            description: Voeux (en places) de la salle de clé {cle} pour une semaine.<br>
                         Si pas de paramètres, retourne la premiere semaine.<br>
                         Une place correspond à la durée écoulée entre le Lundi à 0h00 et le début du voeux.<br>
                         Attention, les durées sont exprimées en 'jour'.<br>
                         Par exemple, lundi midi = 12h00 = 12/24ème jour = 0,5 jour.<br>
                         Mercredi midi = 24h (du lundi entier) + 24h (du mardi entier) + 12h (du mercredi) = 60/24ème = 2.5 jours
            parameters:
                - name: cle
                  in: path
                  description: "clé de la salle"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: semaine
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_salle:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_voeux:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Paramètre invalide : semaine"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /salles/{cle}/cout:
        get:
            tags:
                - Salles
            summary: Coût d'une salle sur un domaine
            description: Coût de la salle de clé {cle} sur un domaine. Si pas de paramètres, retourne le coût sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de la salle"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /salles/cout:
        get:
            tags:
                - Salles
            summary: Coûts des salles sur un domaine
            description: Coûts des salles sur un domaine. Si pas de paramètres, retourne le coût sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des salles"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              cout:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /salles/{cle}/duree_cours:
        get:
            tags:
                - Salles
            summary: Durée de cours d'une salle sur un domaine
            description: Durée de cours de la salle de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de la salle"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /salles/duree_cours:
        get:
            tags:
                - Salles
            summary: Durée de cours des salles sur un domaine
            description: Durée de cours des salles sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des salles"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /salles/{cle}/duree_disponible:
        get:
            tags:
                - Salles
            summary: Durée disponible d'une salle sur un domaine
            description: Durée disponible de la salle de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cle
                  in: path
                  description: "clé de la salle"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /salles/duree_disponible:
        get:
            tags:
                - Salles
            summary: Durée disponible des salles sur un domaine
            description: Durée disponible des salles sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des salles"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /salles/{cle_salle}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Salles
            summary: Rubriques affectées à la salle pour la famille
            description: Rubriques affectées à la salle de clé {cle_salle} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_salle
                  in: path
                  description: "clé de la salle"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        salle:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Salles
            summary: Modification des rubriques affectées à la salle pour la famille
            description: Modifie les rubriques affectées à la salle de clé {cle_salle} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_salle
                  in: path
                  description: "clé de la salle"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        salle:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### TDOptions ####
    /tdoptions:
        get:
            tags:
                - TDOptions
            summary: Liste de tous les TD/options
            description: Tableau contenant les json des TD/options de la base, par défaut trié par nom puis code
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - code
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: retourne seulement les TD/options ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les TD/options ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: code
                  in: query
                  description: retourne seulement les TD/options ayant un de ces codes
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul code souhaité
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
                - name: uid_identifiant
                  in: query
                  description: retourne seulement les TD/options ayant un de ces uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiants souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tableau des JSON des TD/options
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/TDOptions'
        post:
            tags:
                - TDOptions
            summary: Création d'un nouveau TD/option
            description: Crée un nouveau TD/option dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "TD1"
                      code:
                        type: string
                        example: "1"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      genre:
                        type: string
                        example: "TD"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      effectif_saisi:
                        type: integer
                        example: 10
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      libelle_long:
                        type: string
                        example: "Voici un libelle un peu plus long"
                      email:
                        type: string
                        example: "TD1@mail.fr"
                      proprietaire:
                        type: integer
                        example: 10
                      publication_sur_tous_les_espaces:
                        type: boolean
                        example: true
                      calendrier:
                        type: string
                        example: "Calendrier1"
                      promotion:
                        type: integer
                        example: 10
                      partition:
                        type: integer
                        example: 9
                      regroupement:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      services_notation:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_TD1.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/TDOptions'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /tdoptions/{cle}:
        get:
            tags:
                - TDOptions
            summary: Json du TD/option de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/TDOptions'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - TDOptions
            summary: Mise à jour partielle d'un TD/option
            description: Modifie les champs du TD/option de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du TD/option que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "TD1"
                      code:
                        type: string
                        example: "1"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      genre:
                        type: string
                        example: "TD"
                      uid_identifiant:
                        type: string
                        example: "Identifiant__UID"
                      effectif_saisi:
                        type: integer
                        example: 10
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      libelle_long:
                        type: string
                        example: "Voici un libelle un peu plus long"
                      email:
                        type: string
                        example: "TD1@mail.fr"
                      proprietaire:
                        type: integer
                        example: 10
                      publication_sur_tous_les_espaces:
                        type: boolean
                        example: true
                      calendrier:
                        type: string
                        example: "Calendrier1"
                      promotion:
                        type: integer
                        example: 10
                      partition:
                        type: integer
                        example: 9
                      regroupement:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      services_notation:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_TD1.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/TDOptions'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : TD/option inexistant"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - TDOptions
            summary: Suppression d'un TD/option
            description: Supprime définitivement le TD/option de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /tdoptions/supprimer:
        post:
            tags:
                - TDOptions
            summary: Suppression de plusieurs TD/options
            description: Supprime les TD/options dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des TD/options à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /tdoptions/{cle}/etudiants:
        get:
            tags:
                - TDOptions
            summary: Clés des étudiants d'un TD/option
            description: Clés des étudiants du TD/option de clé {cle} à une date ou entre 2 dates. Si pas de paramètres, retourne la liste des étudiants à la date d'aujourd'hui.
            parameters:
                - name: cle
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date=2024-08-06
                - name: date_debut
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-08"   # ?date_fin=2024-08-08
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        etudiants:
                          type: array
                          items:
                            type: integer
                            example: 10
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /tdoptions/{cle}/cours:
        get:
            tags:
                - TDOptions
            summary: Clés des cours d'un TD/option entre 2 dates
            description: Clés des cours du TD/option de clé {cle} entre 2 dates. Si pas de paramètres, retourne la liste des cours sur tout le domaine.
            parameters:
                - name: cle
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Date sous format chaine 'yyyy-mm-dd'
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: array
                          items:
                            type: integer
                          example: [388,400]
              '400':    # status code
                description: "Paramètre invalide : Dates hors limites, format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /tdoptions/{cle_TDOpt}/cours/{cle_cours}/domaine:
        get:
            tags:
                - TDOptions
            summary: Domaine de présence d'un TD/option dans un cours
            description: Domaine de présence du TD/option de clé {cle_TDOpt} pour le cours de clé {cle_cours}. Le domaine est vide si le TD/option n'est pas dans le cours.
            parameters:
                - name: cle_TDOpt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - TDOptions
            summary: Modification du domaine de présence d'un TD/option dans un cours
            description: Modifie le domaine de présence du TD/option de clé {cle_TDOpt} pour le cours de clé {cle_cours}. Permet d'ajouter un TD/option à un cours ou l'enlever de ce cours. Le domaine peut être passé dans l'URL ?domaine=12,24,48. Par défaut, prend tout le domaine.
            parameters:
                - name: cle_TDOpt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "clé du cours"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /tdoptions/{cle}/indisponibilites:
        get:
            tags:
                - TDOptions
            summary: Indisponibilités d'un TD/option pour une semaine
            description: Indisponibilités (en places) du TD/option de clé {cle} pour une semaine.<br>
                         Si pas de paramètres, retourne la premiere semaine.<br>
                         Une place correspond à la durée écoulée entre le Lundi à 0h00 et le début de l'indisponibilté.<br>
                         Attention, les durées sont exprimées en 'jour'.<br>
                         Par exemple, lundi midi = 12h00 = 12/24ème jour = 0,5 jour.<br>
                         Mercredi midi = 24h (du lundi entier) + 24h (du mardi entier) + 12h (du mercredi) = 60/24ème = 2.5 jours
            parameters:
                - name: cle
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: semaine
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_tdoption:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_indisponibilites:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Paramètre invalide : semaine"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /tdoptions/{cle}/voeux:
        get:
            tags:
                - TDOptions
            summary: Voeux d'un TD/option pour une semaine
            description: Voeux (en places) du TD/option de clé {cle} pour une semaine.<br>
                         Si pas de paramètres, retourne la premiere semaine.<br>
                         Une place correspond à la durée écoulée entre le Lundi à 0h00 et le début du voeux.<br>
                         Attention, les durées sont exprimées en 'jour'.<br>
                         Par exemple, lundi midi = 12h00 = 12/24ème jour = 0,5 jour.<br>
                         Mercredi midi = 24h (du lundi entier) + 24h (du mardi entier) + 12h (du mercredi) = 60/24ème = 2.5 jours
            parameters:
                - name: cle
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: semaine
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_tdoption:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_voeux:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Paramètre invalide : semaine"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /tdoptions/{cle}/cout:
        get:
            tags:
                - TDOptions
            summary: Coût d'un TD/option sur un domaine
            description: Coût du TD/option de clé {cle} sur un domaine. Si pas de paramètres, retourne le coût sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cle
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /tdoptions/cout:
        get:
            tags:
                - TDOptions
            summary: Coûts des TD/options sur un domaine
            description: Coûts des TD/options sur un domaine. Si pas de paramètres, retourne le coût sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des TD/options"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              cout:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /tdoptions/{cle}/duree_cours:
        get:
            tags:
                - TDOptions
            summary: Durée de cours d'un TD/option sur un domaine
            description: Durée de cours du TD/option de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cle
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /tdoptions/duree_cours:
        get:
            tags:
                - TDOptions
            summary: Durée de cours des TD/options sur un domaine
            description: Durée de cours des TD/options sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine, avec les jours fériés et les cours non placés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des TD/options"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /tdoptions/{cle}/duree_disponible:
        get:
            tags:
                - TDOptions
            summary: Durée disponible d'un TD/option sur un domaine
            description: Durée disponible du TD/option de clé {cle} sur le domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cle
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /tdoptions/duree_disponible:
        get:
            tags:
                - TDOptions
            summary: Durée disponible des TD/options sur un domaine
            description: Durée disponible des TD/options sur un domaine. Si pas de paramètres, retourne la durée sur tout le domaine avec les jours fériés.
            parameters:
                - name: cles
                  in: query
                  description: "clés des TD/options"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Domaine (tableau des semaines)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Paramètre invalide : format incorrect"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /tdoptions/{cle_tdopt}/matieres/{cle_mat}/matiere_personnalisee:
        get:
            tags:
                - TDOptions
            summary: Clé de la matière affectée comme matière personnalisée à une matière pour un TD/option
            description: Clé de la matière affectée comme matière personnalisée à la matière de clé {cle_mat} pour le TD/option de clé {cle_TDOpt}
            parameters:
                - name: cle_tdopt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: cle_mat
                  in: path
                  description: "clé de la matière"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_tdoption:
                          type: integer
                          example: 388
                        cle_matiere:
                          type: integer
                          example: 125
                        cle_matiere_personnalisee:
                          type: integer
                          example: 120
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - TDOptions
            summary: Modification de la matière afffectée comme matière personnalisée à une matière pour un TD/option
            description: Modifie la matière affectée comme matière personnalisée à la matière de clé {cle_mat} pour le TD/option de clé {cle_TDOpt}
            parameters:
                - name: cle_tdopt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: cle_mat
                  in: path
                  description: "clé de la matière"
                  required: true
                  schema:
                    type: integer
                - name: matiere_personnalisee
                  in: query
                  description: clé de la matière à affecter comme matière personnalisée
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_tdoption:
                          type: integer
                          example: 388
                        cle_matiere:
                          type: integer
                          example: 125
                        cle_matiere_personnalisee:
                          type: integer
                          example: 120
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /tdoptions/{cles_tdopt}/matieres/{cles_mat}/matieres_personnalisees:
        get:
            tags:
                - TDOptions
            summary: Clé de la matière affectée comme matière personnalisée à chaque matière pour chacun des TD/options
            description: Clé de la matière affectée comme matière personnalisée à chaque matière dont la clé est dans {cles_mat} pour chacun des TD/options dont la clé est dans {cles_TDOpt}
            parameters:
                - name: cles_tdopt
                  in: path
                  description: clés des TD/options voulus, séparés par des virgules (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: cles_mat
                  in: path
                  description: clés des matières voulues, séparées par des virgules (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle_tdoption:
                            type: integer
                            example: 388
                          cle_matiere:
                            type: integer
                            example: 125
                          cle_matiere_personnalisee:
                            type: integer
                            example: 120
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /tdoptions/{cle_tdopt}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - TDOptions
            summary: Rubriques affectées au TD/option pour la famille
            description: Rubriques affectées au TD/option de clé {cle_tdopt} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_tdopt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        td_option:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - TDOptions
            summary: Modification des rubriques affectées au TD/option pour la famille
            description: Modifie les rubriques affectées au TD/option de clé {cle_tdopt} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_tdopt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        td_option:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Baccalaureats ####
    /baccalaureats:
        get:
            tags:
                - Baccalaureats
            summary: Liste de tous les baccalauréats
            description: Tableau contenant les json des baccalauréats de la base, par défaut trié par nom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - nom
                      - code
                      - type
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [nom]   # ?select=nom
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [nom, code]   # ?select=nom,code
                - name: nom
                  in: query
                  description: retourne seulement les baccalauréats ayant un de ces noms
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [SCIENTIFIQUE]   # ?nom=SCIENTIFIQUE
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [SCIENTIFIQUE, LITTÉRAIRE]   # ?nom=SCIENTIFIQUE,LITTÉRAIRE
                - name: code
                  in: query
                  description: retourne seulement les baccalauréats ayant un de ces codes
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul code souhaité
                      value: [S]   # ?code=S
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [S, L]   # ?code=S,L
                - name: type
                  in: query
                  description: retourne seulement les baccalauréats ayant un de ces types
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul type souhaité
                      value: [Autre]   # ?type=Autre
                    multipleIds:
                      summary: Exemple avec plusieurs types souhaités
                      value: [Autre, Équivalence]   # ?type=Autre,Équivalence
            responses:
              '200':    # status code
                description: Tableau des JSON des baccalauréats
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Baccalaureats'
    /baccalaureats/{code}:
        get:
            tags:
                - Baccalaureats
            summary: Json du baccalauréat de code {code}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: code
                  in: path
                  description: "code du baccalauréat"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Baccalaureats'
              '400':    # status code
                description: "Paramètre invalide"
    #### Baccalaureat_specialites ####
    /baccalaureat_specialites:
        get:
            tags:
                - Baccalaureat_specialites
            summary: Liste de toutes les spécialités du baccalauréat
            description: Tableau contenant les json des spécialités du baccalauréat de la base, par défaut trié par nom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - nom
                      - code
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [nom]   # ?select=nom
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [nom, code]   # ?select=nom,code
                - name: nom
                  in: query
                  description: retourne seulement les spécialités du baccalauréat ayant un de ces noms
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [MATHEMATIQUES]   # ?nom=MATHEMATIQUES
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [MATHEMATIQUES, PHYSIQUE-CHIMIE]   # ?nom=MATHEMATIQUES,PHYSIQUE-CHIMIE
                - name: code
                  in: query
                  description: retourne seulement les spécialités du baccalauréat ayant un de ces codes
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul code souhaité
                      value: [MATHS]   # ?code=MATHS
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [MATHS, PHY_CHI]   # ?code=MATHS,PHY_CHI
            responses:
              '200':    # status code
                description: Tableau des JSON des spécialités du baccalauréat
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Baccalaureat_specialites'
    /baccalaureat_specialites/{code}:
        get:
            tags:
                - Baccalaureat_specialites
            summary: Json de la spécialité du baccalauréat de code {code}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: code
                  in: path
                  description: "code de la spécialité du baccalauréat"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Baccalaureat_specialites'
              '400':    # status code
                description: "Paramètre invalide"
    #### Departements ####
    /departements:
        get:
            tags:
                - Departements
            summary: Liste de tous les départements
            description: Tableau contenant les json des départements de la base, par défaut trié par nom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - nom
                      - code
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [nom]   # ?select=nom
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [nom, code]   # ?select=nom,code
                - name: nom
                  in: query
                  description: retourne seulement les départements ayant un de ces noms
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [Ain]   # ?nom=Ain
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [Ain, Aisne, Allier]   # ?nom=Ain,Aisne,Allier
                - name: code
                  in: query
                  description: retourne seulement les départements ayant un de ces codes
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul code souhaité
                      value: [001]   # ?code=001
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [001, 002, 003]   # ?code=001,002,003
            responses:
              '200':    # status code
                description: Tableau des JSON des départements
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Departements'
    /departements/{code}:
        get:
            tags:
                - Departements
            summary: Json du département de code {code}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: code
                  in: path
                  description: "code du département"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Departements'
              '400':    # status code
                description: "Paramètre invalide"
    #### Type_dernier_diplome ####
    /type_dernier_diplome:
        get:
            tags:
                - Type_dernier_diplome
            summary: Liste de tous les types de dernier diplome
            description: Tableau contenant les json des types de dernier diplome de la base, par défaut trié par nom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - nom
                      - code
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [nom]   # ?select=nom
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [nom, code]   # ?select=nom,code
                - name: nom
                  in: query
                  description: retourne seulement les types de dernier diplome ayant un de ces noms
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [BTS]   # ?nom=BTS
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [BTS, DUT]   # ?nom=BTS,DUT
                - name: code
                  in: query
                  description: retourne seulement les types de dernier diplome ayant un de ces codes
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul code souhaité
                      value: [B]   # ?code=B
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [B, C, A]   # ?code=B,C,A
            responses:
              '200':    # status code
                description: Tableau des JSON des types de dernier diplome
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Type_dernier_diplome'
    /type_dernier_diplome/{code}:
        get:
            tags:
                - Type_dernier_diplome
            summary: Json du type du dernier diplome de code {code}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: code
                  in: path
                  description: "code du type du dernier diplome"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Type_dernier_diplome'
              '400':    # status code
                description: "Paramètre invalide"
    #### Etablissement_origine ####
    /etablissement_origine:
        get:
            tags:
                - Etablissement_origine
            summary: Liste de tous les établissements d'origine
            description: Tableau contenant les json des établissements d'origine de la base, par défaut trié par nom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, email]   # ?select=cle,nom,email
                - name: cle
                  in: query
                  description: Filtre sur les clés des établissements d'origine
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: Filtre sur les noms des établissements d'origine
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [Etab1]   # ?nom=Etab1
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [Etab1, Etab2, Etab3]   # ?nom=Etab1,Etab2,Etab3
                - name: email
                  in: query
                  description: Filtre sur les emails des établissements d'origine
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul email souhaité
                      value: [Etab1@email.fr]   # ?email=Etab1@email.fr
                    multipleIds:
                      summary: Exemple avec plusieurs emails souhaités
                      value: [Etab1@email.fr, Etab2@email.fr]   # ?email=Etab1@email.fr,Etab2@email.fr
            responses:
              '200':    # status code
                description: Tableau des JSON des établissements d'origine
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Etablissement_origine'
        post:
            tags:
                - Etablissement_origine
            summary: Création d'un nouvel établissement d'origine
            description: Crée un nouvel établissement d'origine dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Etablissement_origine'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Etablissement_origine'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /etablissement_origine/{cle}:
        get:
            tags:
                - Etablissement_origine
            summary: Json de l'établissement d'origine de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'établissement d'origine"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Etablissement_origine'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Etablissement_origine
            summary: Mise à jour partielle d'un établissement d'origine
            description: Modifie les champs de l'établissement d'origine de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'établissement d'origine que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Etablissement_origine'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Etablissement_origine'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Etablissement_origine
            summary: Suppression d'un établissement d'origine
            description: Supprime définitivement l'établissement d'origine de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /etablissement_origine/supprimer:
        post:
            tags:
                - Etablissement_origine
            summary: Suppression de plusieurs établissements d'origine
            description: Supprime les établissements d'origine dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des établissements d'origine à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    #### Semaines ####
    /semaines:
        get:
            tags:
                - Semaines
            summary: Liste de toutes les semaines
            description: Tableau contenant les json des semaines de la base, avec la semaine calendaire correspondante ainsi que la date de début de celle ci
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [numero_semaine]   # ?select=numero_semaine
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [numero_semaine, numero_calendaire]   # ?select=numero_semaine,numero_calendaire
                - name: numero_semaine
                  in: query
                  description: retourne seulement les semaines ayant un de ces numéros
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec un seul numéro souhaité
                      value: [10]   # ?numero_semaine=10
                    multipleIds:
                      summary: Exemple avec plusieurs numéros souhaités
                      value: [10, 14, 15]   # ?numero_semaine=10,14,15
                - name: numero_calendaire
                  in: query
                  description: retourne seulement les semaines ayant un de ces numéros calendaires
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec un seul numéro souhaité
                      value: [1]   # ?numero_calendaire=1
                    multipleIds:
                      summary: Exemple avec plusieurs numéros souhaités
                      value: [1, 2, 3]   # ?numero_calendaire=1,2,3
            responses:
              '200':    # status code
                description: Tableau des JSON des semaines
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Semaines'
    /semaines/{numero_semaine}:
        get:
            tags:
                - Semaines
            summary: Json de la semaine de numéro {numero_semaine}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: numero_semaine
                  in: path
                  description: "numéro de la semaine"
                  required: true
                  schema:
                    type: integer
                    example: 10
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Semaines'
              '400':    # status code
                description: "Paramètre invalide : numéro de la semaine hors limite"
    #### Sites ####
    /sites:
        get:
            tags:
                - Sites
            summary: Liste de tous les sites
            description: Tableau contenant les json des sites de la base trié par nom
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [nom]   # ?select=nom
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [nom, couleur]   # ?select=nom,couleur
                - name: nom
                  in: query
                  description: Filtre sur les noms des sites
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [site1]   # ?nom=site1
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [site1, site2, site3]   # ?nom=site1,site2,site3
            responses:
              '200':    # status code
                description: Tableau des JSON des sites
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Sites'
              '405':    # status code
                description: "Droits insuffisants : Gestion des sites inactive"
    /sites/{nom}:
        get:
            tags:
                - Sites
            summary: Json du site de nom {nom}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: nom
                  in: path
                  description: "nom du site"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Sites'
              '404':    # status code
                description: "Paramètre invalide"
              '405':    # status code
                description: "Droits insuffisants : Gestion des sites inactive"
        post:
            tags:
                - Sites
            summary: Mise à jour partielle d'un site
            description: Modifie le champs couleur du site de nom {nom} avec celle passée dans le JSON au niveau du BODY
            parameters:
                - name: nom
                  in: path
                  description: "nom du site que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: string
            requestBody:
              description: JSON contenant le champs couleur et sa valeur. Possibilite de modifier seulement la couleur d'un site via le Service Web.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Sites'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Sites'
              '400':    # status code
                description: "Paramètres non valides : problème de taille..."
              '405':    # status code
                description: "Droits insuffisants : Gestion des sites inactive"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
    #### Types ####
    /types:
        get:
            tags:
                - Types
            summary: Liste de tous les types de cours
            description: Tableau contenant les json des types de cours de la base trié par nom
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [nom]   # ?select=nom
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [nom, couleur]   # ?select=nom,couleur
                - name: nom
                  in: query
                  description: Filtre sur les noms des types
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [cours]   # ?nom=cours
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [cours, td, tp]   # ?nom=cours,td,tp
            responses:
              '200':    # status code
                description: Tableau des JSON des types
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Types'
    /types/{nom}:
        get:
            tags:
                - Types
            summary: Json du type de cours de nom {nom}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: nom
                  in: path
                  description: "nom du type de cours"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Types'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Types
            summary: Mise à jour partielle d'un type de cours
            description: Modifie le champs couleur, mode_appel du type de cours de nom {nom} avec celui passé dans le JSON au niveau du BODY
            parameters:
                - name: nom
                  in: path
                  description: "nom du type de cours que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: string
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Types'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Types'
              '400':    # status code
                description: "Paramètre non valide"
              '404':    # status code
                description: "Not found : Le nom passé n'existe pas"
        delete:
            tags:
                - Types
            summary: Suppression d'un type de cours
            description: Supprime définitivement le type de cours de nom {nom} de la base
            parameters:
                - name: nom
                  in: path
                  description: nom du type de cours à supprimer
                  required: true
                  schema:
                    type: string
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : Le nom passé n'existe pas"
    /types/{nom}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Types
            summary: Rubriques affectées au type de cours pour la famille
            description: Rubriques affectées au type de cours de nom {nom} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: nom
                  in: path
                  description: "nom du type de cours"
                  required: true
                  schema:
                    type: string
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        type:
                          type: string
                          example: "cours"
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : nom de l'élément ou clé de la famille incorrecte"
        post:
            tags:
                - Types
            summary: Modification des rubriques affectées au type de cours pour la famille
            description: Modifie les rubriques affectées au type de cours de nom {nom} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: nom
                  in: path
                  description: "nom du type de cours"
                  required: true
                  schema:
                    type: string
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        type:
                          type: string
                          example: "cours"
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : nom de l'élément ou clé de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Motifs_annulation ####
    /motifs_annulation:
        get:
            tags:
                - Motifs_annulation
            summary: Liste de tous les motifs d'annulation
            description: Tableau contenant les json des motifs d'annulation de la base trié par libellé
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [libelle]   # ?select=libelle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [libelle, par_defaut, est_remunere]   # ?select=libelle,par_defaut,est_remunere
                - name: libelle
                  in: query
                  description: retourne seulement les motifs d'annulation ayant un de ces libellés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul libellé souhaité
                      value: [Annulation]   # ?libelle=Annulation
                    multipleIds:
                      summary: Exemple avec plusieurs libellés souhaités
                      value: [Annulation, Annulation2]   # ?libelle=Annulation,Annulation2
                - name: par_defaut
                  in: query
                  description: retourne seulement les motifs d'annulation par défaut ou non
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: est_remunere
                  in: query
                  description: retourne seulement les motifs d'annulation rémunérés ou non
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: est_utilisable_par_enseignants
                  in: query
                  description: retourne seulement les motifs d'annulation utilisables par les enseignants ou non
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: Tableau des JSON des motifs d'annulation
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Motifs_annulation'
    /motifs_annulation/{libelle}:
        get:
            tags:
                - Motifs_annulation
            summary: Json du motif d'annulation de libellé {libelle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: libelle
                  in: path
                  description: "libellé du motif d'annulation"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Motifs_annulation'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Motifs_annulation
            summary: Mise à jour partielle d'un motif d'annulation
            description: Modifie les champs du motif d'annulation de libellé {libelle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: libelle
                  in: path
                  description: "libellé du motif d'annulation que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: string
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Motifs_annulation'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Motifs_annulation'
              '400':    # status code
                description: "Paramètre non valide"
              '404':    # status code
                description: "Paramètre invalide : motif d'annulation inexistant"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Motifs_annulation
            summary: Suppression d'un motif d'annulation
            description: Supprime définitivement le motif d'annulation de libellé {libelle} de la base
            parameters:
                - name: libelle
                  in: path
                  description: libellé du motif d'annulation à supprimer
                  required: true
                  schema:
                    type: string
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : Le libellé passé n'existe pas"
    #### Motifs_absence_retard ####
    /motifs_absence_retard:
        get:
            tags:
                - Motifs_absence_retard
            summary: Liste de tous les motifs d'absence et de retard
            description: Tableau contenant les json des motifs d'absence et de retard de la base trié par libellé
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [libelle]   # ?select=libelle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [libelle, actif_absence, par_defaut_absence]   # ?select=libelle,actif_absence,par_defaut_absence
                - name: libelle
                  in: query
                  description: retourne seulement les motifs d'absence et de retard ayant un de ces libellés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul libellé souhaité
                      value: [Annulation]   # ?libelle=Annulation
                    multipleIds:
                      summary: Exemple avec plusieurs libellés souhaités
                      value: [Annulation, Annulation2]   # ?libelle=Annulation,Annulation2
                - name: code
                  in: query
                  description: retourne seulement les motifs d'absence et de retard ayant un de ces codes
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul code souhaité
                      value: [Annulation]   # ?code=Annulation
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [Annulation, Annulation2]   # ?code=Annulation,Annulation2
                - name: par_defaut_absence
                  in: query
                  description: retourne seulement les motifs d'absence par défaut ou non
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: actif_absence
                  in: query
                  description: retourne seulement les motifs d'absence actifs ou non
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: est_justifie_absence
                  in: query
                  description: retourne seulement les motifs d'absence dont le statut est justifié ou non
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: par_defaut_retard
                  in: query
                  description: retourne seulement les motifs de retard par défaut ou non
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: actif_retard
                  in: query
                  description: retourne seulement les motifs de retard actifs ou non
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: est_justifie_retard
                  in: query
                  description: retourne seulement les motifs de retard dont le statut est justifié ou non
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: Tableau des JSON des motifs d'absence et de retard
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Motifs_absence_retard'
    /motifs_absence_retard/{libelle}:
        get:
            tags:
                - Motifs_absence_retard
            summary: Json du motif d'absence et de retard de libellé {libelle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: libelle
                  in: path
                  description: "libellé du motif d'absence et de retard"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Motifs_absence_retard'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Motifs_absence_retard
            summary: Mise à jour partielle d'un motif d'absence et de retard
            description: Modifie les champs du motif d'absence et de retard de libellé {libelle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: libelle
                  in: path
                  description: "libellé du motif d'absence et de retard que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: string
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Motifs_absence_retard'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Motifs_absence_retard'
              '400':    # status code
                description: "Paramètre non valide"
              '404':    # status code
                description: "Paramètre invalide : motif d'absence et de retard inexistant"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Motifs_absence_retard
            summary: Suppression d'un motif d'absence et de retard
            description: Supprime définitivement le motif d'absence et de retard de libellé {libelle} de la base
            parameters:
                - name: libelle
                  in: path
                  description: libellé du motif d'absence et de retard à supprimer
                  required: true
                  schema:
                    type: string
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : Le libellé passé n'existe pas"
    #### Motifs_decharge ####
    /motifs_decharge:
        get:
            tags:
                - Motifs_decharge
            summary: Liste de tous les motifs de décharge
            description: Tableau contenant les json des motifs de décharge de la base trié par libellé
            parameters:
                - name: libelle
                  in: query
                  description: retourne seulement les motifs de décharge ayant un de ces libellés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul libellé souhaité
                      value: [Annulation]   # ?libelle=Annulation
                    multipleIds:
                      summary: Exemple avec plusieurs libellés souhaités
                      value: [Annulation, Annulation2]   # ?libelle=Annulation,Annulation2
            responses:
              '200':    # status code
                description: Tableau des JSON des motifs de décharge
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Motifs_decharge'
    /motifs_decharge/{libelle}:
        delete:
            tags:
                - Motifs_decharge
            summary: Suppression d'un motif de décharge
            description: Supprime définitivement le motif de décharge de libellé {libelle} de la base
            parameters:
                - name: libelle
                  in: path
                  description: libellé du motif de décharge à supprimer
                  required: true
                  schema:
                    type: string
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : Le libellé passé n'existe pas"
    #### Motifs_dispense ####
    /motifs_dispense:
        get:
            tags:
                - Motifs_dispense
            summary: Liste de tous les motifs de dispense
            description: Tableau contenant les json des motifs de dispense de la base trié par libellé
            parameters:
                - name: libelle
                  in: query
                  description: retourne seulement les motifs de dispense ayant un de ces libellés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul libellé souhaité
                      value: [Annulation]   # ?libelle=Annulation
                    multipleIds:
                      summary: Exemple avec plusieurs libellés souhaités
                      value: [Annulation, Annulation2]   # ?libelle=Annulation,Annulation2
            responses:
              '200':    # status code
                description: Tableau des JSON des motifs de dispense
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Motifs_dispense'
    /motifs_dispense/{libelle}:
        delete:
            tags:
                - Motifs_dispense
            summary: Suppression d'un motif de dispense
            description: Supprime définitivement le motif de dispense de libellé {libelle} de la base
            parameters:
                - name: libelle
                  in: path
                  description: libellé du motif de dispense à supprimer
                  required: true
                  schema:
                    type: string
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : Le libellé passé n'existe pas"
    #### Ponderations ####
    /ponderations:
        get:
            tags:
                - Ponderations
            summary: Liste de toutes les pondérations
            description: Tableau contenant les json des pondérations de la base, par défaut trié par valeur
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - valeur
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, numerateur, denominateur]   # ?select=cle,numerateur,denominateur
                - name: cle
                  in: query
                  description: retourne seulement les pondérations ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: numerateur
                  in: query
                  description: retourne seulement les pondérations ayant un de ces numérateurs
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec un seul numérateur souhaité
                      value: [10]   # ?numerateur=10
                    multipleIds:
                      summary: Exemple avec plusieurs numérateurs souhaités
                      value: [10, 20, 30]   # ?numerateur=10,20,30
                - name: denominateur
                  in: query
                  description: retourne seulement les pondérations ayant un de ces dénominateurs
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec un seul dénominateur souhaité
                      value: [20]   # ?denominateur=20
                    multipleIds:
                      summary: Exemple avec plusieurs dénominateurs souhaités
                      value: [20, 40, 60]   # ?denominateur=20,40,60
            responses:
              '200':    # status code
                description: Tableau des JSON des pondérations
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Ponderations'
              '403':    # status code
                description: "Droits insuffisants"
        post:
            tags:
                - Ponderations
            summary: Création d'une nouvelle pondération
            description: Crée une nouvelle pondération dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Ponderations'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Ponderations'
              '400':    # status code
                description: "Paramètres non valides : numérateur et dénominateur obligatoires"
              '403':    # status code
                description: "Droits insuffisants"
              '500':    # status code
                description: "Création impossible"
    /ponderations/{cle}:
        get:
            tags:
                - Ponderations
            summary: Json de la pondération de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de la pondération"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Ponderations'
              '403':    # status code
                description: "Droits insuffisants"
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Ponderations
            summary: Mise à jour partielle d'une pondération
            description: Modifie les champs de la pondération de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la pondération que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Ponderations'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Ponderations'
              '400':    # status code
                description: "Paramètre non valide"
              '403':    # status code
                description: "Droits insuffisants"
              '404':    # status code
                description: "Paramètre invalide : pondération inexistante"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Ponderations
            summary: Suppression d'une pondération
            description: Supprime définitivement la pondération de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '403':    # status code
                description: "Droits insuffisants"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /ponderations/supprimer:
        post:
            tags:
                - Ponderations
            summary: Suppression de plusieurs pondérations
            description: Supprime les pondérations dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des pondérations à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '403':    # status code
                description: "Droits insuffisants"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    #### Profils_utilisation ####
    /profils_utilisation:
        get:
            tags:
                - Profils_utilisation
            summary: Liste de tous les profils d'utilisation
            description: Tableau contenant les json des profils d'utilisation, par défaut trié par nom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom]   # ?select=cle,nom
                - name: cle
                  in: query
                  description: retourne seulement les profils d'utilisation ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les profils d'utilisation ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [admin]   # ?nom=admin
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [admin, modif, consult]   # ?nom=admin,modif,consult
            responses:
              '200':    # status code
                description: Tableau des JSON des profils d'utilisation
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle:
                            type: integer
                            example: 10
                          nom:
                            type: string
                            example: "admin"
    /profils_utilisation/{cle}:
        get:
            tags:
                - Profils_utilisation
            summary: Json du profil d'utilisation de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du profil d'utilisation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle:
                          type: integer
                          example: 10
                        nom:
                          type: string
                          example: "admin"
              '404':    # status code
                description: "Paramètre non valide"
              '500':    # status code
                description: "Droits insuffisants"
    #### Utilisateurs ####
    /utilisateurs:
        get:
            tags:
                - Utilisateurs
            summary: Liste de tous les utilisateurs
            description: Tableau contenant les json des utilisateurs, par défaut trié par nom puis prénom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - profil_utilisation
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, prenom]   # ?select=cle,nom,prenom
                - name: cle
                  in: query
                  description: retourne seulement les utilisateurs ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les utilisateurs ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [Dupond]   # ?nom=Dupond
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [Dupond, Durand, Martin]   # ?nom=Dupond,Durand,Martin
                - name: prenom
                  in: query
                  description: retourne seulement les utilisateurs ayant un de ces prénoms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul prénom souhaité
                      value: [Claude]   # ?prenom=Claude
                    multipleIds:
                      summary: Exemple avec plusieurs prénoms souhaités
                      value: [Claude, Dominique, Louis]   # ?prenom=Claude,Dominique,Louis
                - name: identifiant_connexion
                  in: query
                  description: retourne seulement les utilisateurs ayant un de ces identifiants de connexion
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul identifiant de connexion souhaité
                      value: [Claude]   # ?identifiant_connexion=Claude
                    multipleIds:
                      summary: Exemple avec plusieurs identifiants de connexion souhaités
                      value: [Claude, Dominique, Louis]   # ?identifiant_connexion=Claude,Dominique,Louis
                - name: profil_utilisation
                  in: query
                  description: retourne seulement les utilisateurs ayant un de ces profil d'utilisation (de clé ou nom)
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul profil d'utilisation souhaité
                      value: [Modification]   # ?profil_utilisation=Modification
                    multipleIds:
                      summary: Exemple avec plusieurs profils d'utilisation souhaités
                      value: [1, Modification, 2]   # ?profil_utilisation=1,Modification,2
                - name: cas_identifiant
                  in: query
                  description: retourne seulement les utilisateurs ayant un de ces cas_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul cas_identifiant souhaité
                      value: [ident1]   # ?cas_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs cas_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?cas_identifiant=ident1,ident2,ident3
                - name: adfs_identifiant
                  in: query
                  description: retourne seulement les utilisateurs ayant un de ces adfs_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul adfs_identifiant souhaité
                      value: [ident1]   # ?adfs_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs adfs_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?adfs_identifiant=ident1,ident2,ident3
                - name: saml_identifiant
                  in: query
                  description: retourne seulement les utilisateurs ayant un de ces saml_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul saml_identifiant souhaité
                      value: [ident1]   # ?saml_identifiant=ident1
                    multipleIds:
                      summary: Exemple avec plusieurs saml_identifiants souhaités
                      value: [ident1, ident2, ident3]   # ?saml_identifiant=ident1,ident2,ident3
            responses:
              '200':    # status code
                description: Tableau des JSON des utilisateurs
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Utilisateurs'
        post:
            tags:
                - Utilisateurs
            summary: Création d'un nouvel utilisateur
            description: Crée un nouvel utilisateur dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      actif:
                        type: boolean
                        example: true
                      nom:
                        type: string
                        example: "Dupond"
                      prenom:
                        type: string
                        example: "Camille"
                      profil_utilisation:
                        type: integer
                        example: 1
                      civilite:
                        type: string
                        example: "Mme"
                      statut:
                        type: string
                        example: "Superadministrateur"
                        description: "Format attendu : 'U' ou 'utilisateur', 'S' ou 'superadministrateur', 'A' ou 'administrateur de base'"
                      ldap_identifiant:
                        type: string
                        example: "Identifiant__LDAP"
                      cas_identifiant:
                        type: string
                        example: "Identifiant__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identifiant__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identifiant__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identifiant__connexion"
                      e_mail:
                        type: string
                        example: "prenom.nom@email.fr"
                      adresse1:
                        type: string
                        example: "12 rue de la paix"
                      adresse2:
                        type: string
                        example: "12 rue de la paix"
                      adresse3:
                        type: string
                        example: "12 rue de la paix"
                      adresse4:
                        type: string
                        example: "12 rue de la paix"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Marseille"
                      pays:
                        type: string
                        example: "France"
                      province:
                        type: string
                        example: "Province"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      acces_espace_secretariat:
                        type: boolean
                        example: true
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Seulement pour la modification, pas de visualisation, doit respecter la politique de sécurité
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Utilisateurs'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible, problème de droits
    /utilisateurs/{cle}:
        get:
            tags:
                - Utilisateurs
            summary: Json de l'utilisateur de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'utilisateur"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Utilisateurs'
              '404':    # status code
                description: "Paramètre invalide"
              '500':    # status code
                description: "Droits insuffisants"
        post:
            tags:
                - Utilisateurs
            summary: Mise à jour partielle d'un utilisateur
            description: Modifie les champs de l'utilisateur de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'utilisateur que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      actif:
                        type: boolean
                        example: true
                      nom:
                        type: string
                        example: "Dupond"
                      prenom:
                        type: string
                        example: "Camille"
                      profil_utilisation:
                        type: integer
                        example: 1
                      civilite:
                        type: string
                        example: "Mme"
                      statut:
                        type: string
                        example: "Superadministrateur"
                        description: "Format attendu : 'U' ou 'utilisateur', 'S' ou 'superadministrateur', 'A' ou 'administrateur de base'"
                      ldap_identifiant:
                        type: string
                        example: "Identifiant__LDAP"
                      cas_identifiant:
                        type: string
                        example: "Identifiant__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identifiant__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identifiant__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identifiant__connexion"
                      e_mail:
                        type: string
                        example: "prenom.nom@email.fr"
                      adresse1:
                        type: string
                        example: "12 rue de la paix"
                      adresse2:
                        type: string
                        example: "12 rue de la paix"
                      adresse3:
                        type: string
                        example: "12 rue de la paix"
                      adresse4:
                        type: string
                        example: "12 rue de la paix"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Marseille"
                      pays:
                        type: string
                        example: "France"
                      province:
                        type: string
                        example: "Province"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      acces_espace_secretariat:
                        type: boolean
                        example: true
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Seulement pour la modification, pas de visualisation, doit respecter la politique de sécurité
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Utilisateurs'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Utilisateurs
            summary: Suppression d'un utilisateur
            description: Supprime définitivement l'utilisateur de clé {cle}
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /utilisateurs/supprimer:
        post:
            tags:
                - Utilisateurs
            summary: Suppression de plusieurs utilisateurs
            description: Supprime les utilisateurs dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des utilisateurs à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    #### Parametres_base ####
    /parametres_base:
        get:
            tags:
                - Parametres_base
            summary: Json de certains paramètres de la base (premier jour, devise, semaines verrouillées, jours ouvrés, durée d'un jour)
            description: Json de certains paramètres de la base (date du premier jour de la base, devise utilisée pour les coûts horaires, semaines verrouillée, durée d'un jour complet, jours ouvrés de la base)
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [premier_jour]   # ?select=premier_jour
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [premier_jour, domaine_verrouille]   # ?select=premier_jour,domaine_verrouille
            responses:
              '200':    # status code
                description: Json de certains paramètres de la base
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        devise:
                          type: string
                          example: "€"
                        premier_jour:
                          type: string
                          example: "2023-09-04"
                        domaine_verrouille:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        duree_jour:
                          type: number
                          example: 0.5
                        jours_ouvres:
                          type: array
                          items:
                            type: string
                          example: ["lundi","mardi","mercredi","jeudi","vendredi","samedi"]
        post:
            tags:
                - Parametres_base
            summary: Mise à jour de certains paramètres de la base - devise, domaine_verrouille
            description: Modifie les champs des paramètres de la base autorisés avec ceux passés dans le JSON au niveau du BODY
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier et qui sont autorisés en modification.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      devise:
                        type: string
                        example: "€"
                      domaine_verrouille:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
            responses:
              '200':    # status code
                description: Succès - Json des paramètres de la base
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        devise:
                          type: string
                          example: "€"
                        premier_jour:
                          type: string
                          example: "2023-09-04"
                        domaine_verrouille:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        duree_jour:
                          type: number
                          example: 0.5
                        jours_ouvres:
                          type: array
                          items:
                            type: string
                          example: ["lundi","mardi","mercredi","jeudi","vendredi","samedi"]
              '400':    # status code
                description: "Paramètre non valide"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
    #### Version ####
    /version:
        get:
            tags:
                - Version
            summary: Version de PRONOTE Campus
            description: Version de l'application PRONOTE Campus Service Web
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [version]   # ?select=version
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [version, majeure]   # ?select=version,majeure
            responses:
              '200':    # status code
                description: JSON de la version
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        version:
                          type: string
                          example: "Service web HYPERPLANNING 2024.0.3.0"
                        majeure:
                          type: integer
                          example: 2024
                        mineure:
                          type: integer
                          example: 0
                        release:
                          type: integer
                          example: 3
                        sous_release:
                          type: integer
                          example: 0
    #### Icals ####
    /ical/matieres:
        post:
            tags:
                - Icals
            summary: Ical des matières
            description: Ical des matières passées en paramètre dans le json du body
            requestBody:
              description: Champs du JSON utilisés pour parametrer l'ical
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cles:
                        type: array
                        items:
                          type: integer
                        example: [10,11]
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Succès - Tableau des icals"
              '400':    # status code
                description: "Paramètres non valides : paramètre passé non valide"
              '404':    # status code
                description: "Paramètres non valides : clé inexistante"
    /ical/matieres/{cle}:
        post:
            tags:
                - Icals
            summary: Ical d'une matière
            description: Ical de la matière de clé {cle}, parametrable en passant les options dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la matière de l'ical souhaité"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Champs du JSON utilisés pour parametrer l'ical
              required: false
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Succès - Ical de l'élément"
              '400':    # status code
                description: "Paramètres non valides : clé inexistante, paramètre passé non valide..."
    /ical/enseignants:
        post:
            tags:
                - Icals
            summary: Ical des enseignants
            description: Ical des enseignants passés en paramètre dans le json du body
            requestBody:
              description: Champs du JSON utilisés pour parametrer l'ical
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cles:
                        type: array
                        items:
                          type: integer
                        example: [10,11]
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Succès - Tableau des icals"
              '400':    # status code
                description: "Paramètres non valides : paramètre passé non valide"
              '404':    # status code
                description: "Paramètres non valides : clé inexistante"
    /ical/enseignants/{cle}:
        post:
            tags:
                - Icals
            summary: Ical d'un enseignant
            description: Ical de l'enseignant de clé {cle}, parametrable en passant les options dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'enseignant de l'ical souhaité"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Champs du JSON utilisés pour parametrer l'ical
              required: false
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Succès - Ical de l'élément"
              '400':    # status code
                description: "Paramètres non valides : clé inexistante, paramètre passé non valide..."
    /ical/etudiants:
        post:
            tags:
                - Icals
            summary: Ical des étudiants
            description: Ical des étudiants passés en paramètre dans le json du body
            requestBody:
              description: Champs du JSON utilisés pour parametrer l'ical
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cles:
                        type: array
                        items:
                          type: integer
                        example: [10,11]
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Succès - Tableau des icals"
              '400':    # status code
                description: "Paramètres non valides : paramètre passé non valide"
              '404':    # status code
                description: "Paramètres non valides : clé inexistante"
    /ical/etudiants/{cle}:
        post:
            tags:
                - Icals
            summary: Ical d'un étudiant
            description: Ical de l'étudiant de clé {cle}, parametrable en passant les options dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de l'étudiant de l'ical souhaité"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Champs du JSON utilisés pour parametrer l'ical
              required: false
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Succès - Ical de l'élément"
              '400':    # status code
                description: "Paramètres non valides : clé inexistante, paramètre passé non valide..."
    /ical/promotions:
        post:
            tags:
                - Icals
            summary: Ical des promotions
            description: Ical des promotions passées en paramètre dans le json du body
            requestBody:
              description: Champs du JSON utilisés pour parametrer l'ical
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cles:
                        type: array
                        items:
                          type: integer
                        example: [10,11]
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Succès - Tableau des icals"
              '400':    # status code
                description: "Paramètres non valides : paramètre passé non valide"
              '404':    # status code
                description: "Paramètres non valides : clé inexistante"
    /ical/promotions/{cle}:
        post:
            tags:
                - Icals
            summary: Ical d'une promotion
            description: Ical de la promotion de clé {cle}, parametrable en passant les options dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la promotion de l'ical souhaité"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Champs du JSON utilisés pour parametrer l'ical
              required: false
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Succès - Ical de l'élément"
              '400':    # status code
                description: "Paramètres non valides : clé inexistante, paramètre passé non valide..."
    /ical/tdoptions:
        post:
            tags:
                - Icals
            summary: Ical des TD/options
            description: Ical des TD/options passés en paramètre dans le json du body
            requestBody:
              description: Champs du JSON utilisés pour parametrer l'ical
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cles:
                        type: array
                        items:
                          type: integer
                        example: [10,11]
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Succès - Tableau des icals"
              '400':    # status code
                description: "Paramètres non valides : paramètre passé non valide"
              '404':    # status code
                description: "Paramètres non valides : clé inexistante"
    /ical/tdoptions/{cle}:
        post:
            tags:
                - Icals
            summary: Ical d'un TD/option
            description: Ical du TD/option de clé {cle}, parametrable en passant les options dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du TD/option de l'ical souhaité"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Champs du JSON utilisés pour parametrer l'ical
              required: false
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Succès - Ical de l'élément"
              '400':    # status code
                description: "Paramètres non valides : clé inexistante, paramètre passé non valide..."
    /ical/salles:
        post:
            tags:
                - Icals
            summary: Ical des salles
            description: Ical des salles passées en paramètre dans le json du body
            requestBody:
              description: Champs du JSON utilisés pour parametrer l'ical
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cles:
                        type: array
                        items:
                          type: integer
                        example: [10,11]
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Succès - Tableau des icals"
              '400':    # status code
                description: "Paramètres non valides : paramètre passé non valide"
              '404':    # status code
                description: "Paramètres non valides : clé inexistante"
    /ical/salles/{cle}:
        post:
            tags:
                - Icals
            summary: Ical d'une salle
            description: Ical de la salle de clé {cle}, parametrable en passant les options dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la salle de l'ical souhaité"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Champs du JSON utilisés pour parametrer l'ical
              required: false
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Succès - Ical de l'élément"
              '400':    # status code
                description: "Paramètres non valides : clé inexistante, paramètre passé non valide..."
    #### Familles ####
    /familles:
        get:
            tags:
                - Familles
            summary: Liste de toutes les familles
            description: Tableau contenant les json des familles de la base, par défaut trié par nom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, libelle, utilisee_pour]   # ?select=cle,libelle,utilisee_pour
                - name: cle
                  in: query
                  description: retourne seulement les familles ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: libelle
                  in: query
                  description: retourne seulement les familles ayant un de ces libellés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul libellé souhaité
                      value: [maths]   # ?libelle=maths
                    multipleIds:
                      summary: Exemple avec plusieurs libellés souhaités
                      value: [maths, francais, histoire]   # ?libelle=maths,francais,histoire
                - name: mode
                  in: query
                  description: retourne seulement les familles de ce mode
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                - name: utilisee_pour
                  in: query
                  description: retourne seulement les familles utilisant un de ces genres
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
            responses:
              '200':    # status code
                description: Tableau des JSON des familles
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Familles'
        post:
            tags:
                - Familles
            summary: Création d'une nouvelle famille
            description: Crée une nouvelle famille dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      libelle:
                        type: string
                        example: "Famille1"
                      mode:
                        type: string
                        example: "Rubriques prédéfinies"
                      proprietaire:
                        type: integer
                        example: 10
                      utilisee_pour:
                        type: array
                        items:
                          type: string
                        example: ["Matières", "Enseignants"]
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Familles'
              '400':    # status code
                description: "Paramètres non valides : nom, genre et mode obligatoires, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /familles/{cle}:
        get:
            tags:
                - Familles
            summary: Json de la famille de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Familles'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Familles
            summary: Mise à jour partielle d'une famille
            description: Modifie les champs de la famille de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la famille que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      libelle:
                        type: string
                        example: "Famille1"
                      mode:
                        type: string
                        example: "Rubriques prédéfinies"
                      proprietaire:
                        type: integer
                        example: 10
                      utilisee_pour:
                        type: array
                        items:
                          type: string
                        example: ["Matières", "Enseignants"]
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Familles'
              '400':    # status code
                description: "Paramètres non valides : libellé obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : famille inexistante"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Familles
            summary: Suppression d'une famille
            description: Supprime définitivement la famille de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /familles/supprimer:
        post:
            tags:
                - Familles
            summary: Suppression de plusieurs familles
            description: Supprime les familles dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des familles à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /familles/{cle}/rubriques:
        get:
            tags:
                - Familles
            summary: Rubriques de la famille de clé {cle}
            parameters:
                - name: cle
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle:
                            type: integer
                            example: 10
                          nom:
                            type: string
                            example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Familles
            summary: Ajout d'une rubrique à la famille
            description: Ajoute une rubrique à la famille de clé {cle}, le nom étant passé dans le body
            parameters:
                - name: cle
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant le champs nom de la nouvelle rubrique et sa valeur
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Rubrique2"
            responses:
              '201':    # status code
                description: Succès - JSON de l'élément crée
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle:
                          type: integer
                          example: 11
                        nom:
                          type: string
                          example: "Rubrique2"
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : famille inexistante"
              '500':    # status code
                description: "Création impossible"
    #### Rubriques ####
    /rubriques:
        get:
            tags:
                - Rubriques
            summary: Liste de toutes les rubriques
            description: Tableau contenant les json des rubriques de la base, par défaut trié par nom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, famille]   # ?select=cle,nom,famille
                - name: cle
                  in: query
                  description: retourne seulement les rubriques ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: retourne seulement les rubriques ayant un de ces noms
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: famille
                  in: query
                  description: retourne seulement les rubriques des familles ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec une seule famille souhaitée
                      value: [12]   # ?famille=12
                    multipleIds:
                      summary: Exemple avec plusieurs familles souhaitées
                      value: [12, 24, 31]   # ?famille=12,24,31
            responses:
              '200':    # status code
                description: Tableau des JSON des rubriques
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Rubriques'
        post:
            tags:
                - Rubriques
            summary: Création d'une nouvelle rubrique
            description: Crée une nouvelle rubrique dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Rubriques'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Rubriques'
              '400':    # status code
                description: "Paramètres non valides : nom et clé de la famille obligatoires, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /rubriques/{cle}:
        get:
            tags:
                - Rubriques
            summary: Json de la rubrique de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de la rubrique"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Rubriques'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Rubriques
            summary: Mise à jour partielle d'une rubrique
            description: Modifie les champs de la rubrique de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la rubrique que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Rubriques'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Rubriques'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Paramètre invalide : rubrique inexistante"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Rubriques
            summary: Suppression d'une rubrique
            description: Supprime définitivement la rubrique de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /rubriques/supprimer:
        post:
            tags:
                - Rubriques
            summary: Suppression de plusieurs rubriques
            description: Supprime les rubriques dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des rubriques à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    #### Calendriers_notation ####
    /calendriers_notation:
        get:
            tags:
                - Calendriers_notation
            summary: Liste de tous les calendriers de notation
            description: Tableau contenant les json des calendriers de notation de la base, par défaut trié par nom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, proprietaire]   # ?select=cle,nom,proprietaire
                - name: cle
                  in: query
                  description: Filtre sur les clés des calendriers de notation
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: Filtre sur les noms des calendriers de notation
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [semestriel]   # ?nom=semestriel
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [semestriel, trimestriel]   # ?nom=semestriel,trimestriel
            responses:
              '200':    # status code
                description: Tableau des JSON des calendriers de notation
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Calendriers_notation'
        post:
            tags:
                - Calendriers_notation
            summary: Création d'un nouveau calendrier de notation
            description: Crée un nouveau calendrier de notation dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Calendriers_notation'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Calendriers_notation'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /calendriers_notation/{cle}:
        get:
            tags:
                - Calendriers_notation
            summary: Json du calendrier de notation de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du calendrier de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Calendriers_notation'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Calendriers_notation
            summary: Mise à jour partielle d'un calendrier de notation
            description: Modifie les champs du calendrier de notation de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du calendrier de notation que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Calendriers_notation'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Calendriers_notation'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
              '405':    # status code
                description: "Droits insuffisants"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Calendriers_notation
            summary: Suppression d'un calendrier de notation
            description: Supprime définitivement le calendrier de notation de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /calendriers_notation/supprimer:
        post:
            tags:
                - Calendriers_notation
            summary: Suppression de plusieurs calendriers de notation
            description: Supprime les calendriers de notation dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des calendriers de notation à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /calendriers_notation/{cle_calendrier}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Calendriers_notation
            summary: Rubriques affectées au calendrier de notation pour la famille
            description: Rubriques affectées au calendrier de notation de clé {cle_calendrier} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_calendrier
                  in: path
                  description: "clé du calendrier de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        calendrier_notation:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Calendriers_notation
            summary: Modification des rubriques affectées au calendrier de notation pour la famille
            description: Modifie les rubriques affectées au calendrier de notation de clé {cle_calendrier} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_calendrier
                  in: path
                  description: "clé du calendrier de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        calendrier_notation:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Periodes_hors_calendrier ####
    /periodes_hors_calendrier:
        get:
            tags:
                - Periodes_hors_calendrier
            summary: Liste de toutes les périodes hors calendrier
            description: Tableau contenant les json des périodes hors calendrier de la base, par défaut trié par nom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - date_debut
                      - proprietaire
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, proprietaire]   # ?select=cle,nom,proprietaire
                - name: cle
                  in: query
                  description: Filtre sur les clés des périodes hors calendrier
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: Filtre sur les noms des périodes hors calendrier
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [semestriel]   # ?nom=semestriel
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [semestriel, trimestriel]   # ?nom=semestriel,trimestriel
            responses:
              '200':    # status code
                description: Tableau des JSON des périodes hors calendrier
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Periodes_hors_calendrier'
        post:
            tags:
                - Periodes_hors_calendrier
            summary: Création d'une nouvelle période hors calendrier
            description: Crée une nouvelle période hors calendrier dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Periodes_hors_calendrier'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Periodes_hors_calendrier'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /periodes_hors_calendrier/{cle}:
        get:
            tags:
                - Periodes_hors_calendrier
            summary: Json de la période hors calendrier de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Periodes_hors_calendrier'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Periodes_hors_calendrier
            summary: Mise à jour partielle d'une période hors calendrier
            description: Modifie les champs de la période hors calendrier de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la période hors calendrier que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Periodes_hors_calendrier'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Periodes_hors_calendrier'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
              '405':    # status code
                description: "Droits insuffisants"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Periodes_hors_calendrier
            summary: Suppression d'une période hors calendrier
            description: Supprime définitivement la période hors calendrier de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /periodes_hors_calendrier/supprimer:
        post:
            tags:
                - Periodes_hors_calendrier
            summary: Suppression de plusieurs périodes hors calendrier
            description: Supprime les périodes hors calendrier dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des périodes hors calendrier à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /periodes_hors_calendrier/{cle_periode}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Periodes_hors_calendrier
            summary: Rubriques affectées à la période hors calendrier pour la famille
            description: Rubriques affectées à la période hors calendrier de clé {cle_periode} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', 'rubrique_libre' permet d'obtenir la rubrique libre de cette famille. Dans le cas des 'rubriques prédéfinies', 'rubriques' permet d'obtenir le tableau (clé et nom) de toutes les rubriques affectées.
            parameters:
                - name: cle_periode
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        periode_hors_calendrier:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
        post:
            tags:
                - Periodes_hors_calendrier
            summary: Modification des rubriques affectées à la période hors calendrier pour la famille
            description: Modifie les rubriques affectées à la période hors calendrier de clé {cle_periode} pour la famille de clé {cle_fam}. Si le mode de la famille est 'Rubrique libre', renseigner 'rubrique_libre' pour modifier la rubrique libre pour cette famille. Dans le cas des 'rubriques prédéfinies', renseigner 'rubriques' avec le tableau des clés des rubriques voulues.
            parameters:
                - name: cle_periode
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "clé de la famille"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: libellé de la rubrique libre. Dans le cas seulement d'une famille de rubriques libre.
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tableau des clés des rubriques prédéfinies de la famille. Dans le cas seulement d'une famille de rubriques prédéfinies.
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        periode_hors_calendrier:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Rubriques prédéfinies"
                        rubrique_libre:
                          type: string
                          example: "Rubriques libres de cet élément"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Rubrique1"
              '404':    # status code
                description: "Paramètre invalide : clé de l'élément ou de la famille incorrecte"
              '500':    # status code
                description: "'Modification impossible' ou 'Droits insuffisants'"
    #### Periodes_notation ####
    /periodes_notation:
        get:
            tags:
                - Periodes_notation
            summary: Liste de toutes les périodes de notation
            description: Tableau contenant les json des périodes de notation de la base, par défaut trié par calendrier et nom
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri (par clé, par calendrier puis nom, par calendrier puis date de debut)
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - date_debut
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, nom, date_debut]   # ?select=cle,nom,date_debut
                - name: cle
                  in: query
                  description: Filtre sur les clés des périodes de notation
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: Filtre sur les noms des périodes de notation
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec un seul nom souhaité
                      value: [semestriel]   # ?nom=semestriel
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [semestriel, trimestriel]   # ?nom=semestriel,trimestriel
            responses:
              '200':    # status code
                description: Tableau des JSON des périodes de notation
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Periodes_notation'
        post:
            tags:
                - Periodes_notation
            summary: Création d'une nouvelle période de notation
            description: Crée une nouvelle période de notation dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Periodes_notation'
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Periodes_notation'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /periodes_notation/{cle}:
        get:
            tags:
                - Periodes_notation
            summary: Json de la période de notation de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Periodes_notation'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Periodes_notation
            summary: Mise à jour partielle d'une période de notation
            description: Modifie les champs de la période de notation de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé de la période de notation que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Periodes_notation'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Periodes_notation'
              '400':    # status code
                description: "Paramètres non valides : nom obligatoire, problème de taille..."
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
              '405':    # status code
                description: "Droits insuffisants"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Periodes_notation
            summary: Suppression d'une période de notation
            description: Supprime définitivement la période de notation de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /periodes_notation/supprimer:
        post:
            tags:
                - Periodes_notation
            summary: Suppression de plusieurs périodes de notation
            description: Supprime les périodes de notation dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des périodes de notation à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    #### Modules_notation ####
    /modules_notation/{cle}:
        get:
            tags:
                - Modules_notation
            summary: Json du module de notation de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du module de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Modules_notation'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Modules_notation
            summary: Mise à jour partielle d'un module de notation
            description: Modifie les champs du module de notation de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du module de notation que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Modules_notation'
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Modules_notation'
              '400':    # status code
                description: "Paramètres non valides : libellé obligatoire, problème de taille..."
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Modules_notation
            summary: Suppression d'un module de notation
            description: Supprime définitivement le module de notation de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /modules_notation/supprimer:
        post:
            tags:
                - Modules_notation
            summary: Suppression de plusieurs modules de notation
            description: Supprime les modules de notation dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des modules de notation à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /modules_notation/{cle_mod}/periodes_notation/{cle_pern}/coefficient:
        get:
            tags:
                - Modules_notation
            summary: Coefficient affecté au module de notation pour la période de notation
            description: Coefficient affecté au module de notation de clé {cle_mod} pour la période de notation de clé {cle_pern}
            parameters:
                - name: cle_mod
                  in: path
                  description: "clé du module de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_module_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Modules_notation
            summary: Modification du coefficient affecté au module de notation pour la période de notation
            description: Modifie le coefficient affecté au module de notation de clé {cle_mod} pour la période de notation de clé {cle_pern}
            parameters:
                - name: cle_mod
                  in: path
                  description: "clé du module de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
                - name: coefficient
                  in: query
                  description: coefficient à affecter
                  required: true
                  schema:
                    type: number
                    example: 3.5
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_module_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /modules_notation/{cles_mod}/periodes_notation/{cles_pern}/coefficients:
        get:
            tags:
                - Modules_notation
            summary: Coefficient affecté à chaque module de notation pour chacune des périodes de notation
            description: Coefficient affecté à chaque module de notation dont la clé est dans {cles_mod} pour chacune des périodes de notation dont la clé est dans {cles_pern}
            parameters:
                - name: cles_mod
                  in: path
                  description: clés des modules de notation voulues, séparées par des virgules (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: cles_pern
                  in: path
                  description: clés des périodes de notation voulues, séparées par des virgules (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle_module_notation:
                            type: integer
                            example: 388
                          cle_periode_notation:
                            type: integer
                            example: 125
                          coefficient:
                            type: number
                            example: 2.5
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /modules_notation/{cle_mod}/periodes_hors_calendrier/{cle_perhc}/coefficient:
        get:
            tags:
                - Modules_notation
            summary: Coefficient affecté au module de notation pour la période hors calendrier
            description: Coefficient affecté au module de notation de clé {cle_mod} pour la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_mod
                  in: path
                  description: "clé du module de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_module_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Modules_notation
            summary: Modification du coefficient affecté au module de notation pour la période hors calendrier
            description: Modifie le coefficient affecté au module de notation de clé {cle_mod} pour la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_mod
                  in: path
                  description: "clé du module de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
                - name: coefficient
                  in: query
                  description: coefficient à affecter
                  required: true
                  schema:
                    type: number
                    example: 3.5
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_module_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /modules_notation/{cles_mod}/periodes_hors_calendrier/{cles_perhc}/coefficients:
        get:
            tags:
                - Modules_notation
            summary: Coefficient affecté à chaque module de notation pour chacune des périodes hors calendrier
            description: Coefficient affecté à chaque module de notation dont la clé est dans {cles_mod} pour chacune des périodes hors calendrier dont la clé est dans {cles_perhc}
            parameters:
                - name: cles_mod
                  in: path
                  description: clés des modules de notation voulues, séparées par des virgules (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: cles_perhc
                  in: path
                  description: clés des périodes hors calendrier voulues, séparées par des virgules (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle_module_notation:
                            type: integer
                            example: 388
                          cle_periode_hors_calendrier:
                            type: integer
                            example: 125
                          coefficient:
                            type: number
                            example: 2.5
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    #### Services_notation ####
    /services_notation:
        get:
            tags:
                - Services_notation
            summary: Liste de tous les services de notation
            description: Tableau contenant les json des services de notation de la base, par défaut trié par matières
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - matiere
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, matiere, promotions]   # ?select=cle,matiere,promotions
                - name: cle
                  in: query
                  description: Filtre sur les clés des services de notation
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: matiere
                  in: query
                  description: Filtre sur les clés des matières des services de notation
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Exemple avec une seule matière souhaitée
                      value: [12]   # ?matiere=12
                    multipleIds:
                      summary: Exemple avec plusieurs matières souhaitées
                      value: [12, 15]   # ?matiere=12,15
            responses:
              '200':    # status code
                description: Tableau des JSON des services de notation
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Services_notation'
        post:
            tags:
                - Services_notation
            summary: Création d'un nouveau service de notation
            description: Crée un nouveau service de notation dans la base et initialise les champs à l'aide des paramètres passés dans le JSON.<br>
                         Par défaut, le service de notation sera créé dans un module de notation automatiquement créé ayant le même libellé que la matière de ce service.<br>
                         Pour creer le service dans un module de notation déjà existant, il faut passer la clé du module avec le champ 'module_notation'.<br>
                         Pour creer un sous service de notation d'un service de notation, il faut passer sa clé avec le champs 'service_pere'.
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      matiere:
                        type: integer
                        example: 13
                      promotions:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      regroupements:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      enseignants:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      est_facultatif:
                        type: boolean
                        example: false
                      nb_points_ects:
                        type: number
                        example: 10.5
                      note_seuil_ects:
                        type: string
                        example: "10"
                      note_eliminatoire_ects:
                        type: string
                        example: "5"
                      devoirs:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      periodes_notation_actives:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      periodes_hors_calendrier_actives:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      sous_services:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      est_sous_service:
                        type: boolean
                        example: false
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Services_notation'
              '400':    # status code
                description: "Paramètres non valides : matière obligatoire, nombre de points trop grand..."
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /services_notation/{cle}:
        get:
            tags:
                - Services_notation
            summary: Json du service de notation de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Services_notation'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Services_notation
            summary: Mise à jour partielle d'un service de notation
            description: Modifie les champs du service de notation de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du service de notation que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      matiere:
                        type: integer
                        example: 13
                      promotions:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      regroupements:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      enseignants:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      est_facultatif:
                        type: boolean
                        example: false
                      nb_points_ects:
                        type: number
                        example: 10.5
                      note_seuil_ects:
                        type: string
                        example: "10"
                      note_eliminatoire_ects:
                        type: string
                        example: "5"
                      devoirs:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      periodes_notation_actives:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      periodes_hors_calendrier_actives:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      sous_services:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      est_sous_service:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Services_notation'
              '400':    # status code
                description: "Paramètres non valides : matière obligatoire, problème de taille..."
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
              '405':    # status code
                description: "Droits insuffisants"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Services_notation
            summary: Suppression d'un service de notation
            description: Supprime définitivement le service de notation de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /services_notation/supprimer:
        post:
            tags:
                - Services_notation
            summary: Suppression de plusieurs services de notation
            description: Supprime les services de notation dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des services de notation à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /services_notation/{cle_sn}/promotions/{cle_promo}/module_notation:
        get:
            tags:
                - Services_notation
            summary: Module de notation du service de notation pour cette promotion
            description: Clé du module de notation du service de notation de clé {cle_sn} pour la promotion de clé {cle_promo}
            parameters:
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_promotion:
                          type: integer
                          example: 125
                        cle_module_notation:
                          type: integer
                          example: 234
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /services_notation/{cle_sn}/periodes_notation/{cle_pern}/coefficient:
        get:
            tags:
                - Services_notation
            summary: Coefficient affecté au service de notation pour la période de notation
            description: Coefficient affecté au service de notation de clé {cle_sn} pour la période de notation de clé {cle_pern}
            parameters:
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Services_notation
            summary: Modification du coefficient affecté au service de notation pour la période de notation
            description: Modifie le coefficient affecté au service de notation de clé {cle_sn} pour la période de notation de clé {cle_pern}
            parameters:
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
                - name: coefficient
                  in: query
                  description: coefficient à affecter
                  required: true
                  schema:
                    type: number
                    example: 3.5
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /services_notation/{cles_sn}/periodes_notation/{cles_pern}/coefficients:
        get:
            tags:
                - Services_notation
            summary: Coefficient affecté à chaque service de notation pour chacune des périodes de notation
            description: Coefficient affecté à chaque service de notation dont la clé est dans {cles_sn} pour chacune des périodes de notation dont la clé est dans {cles_pern}
            parameters:
                - name: cles_sn
                  in: path
                  description: clés des services de notation voulues, séparées par des virgules (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: cles_pern
                  in: path
                  description: clés des périodes de notation voulues, séparées par des virgules (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle_service_notation:
                            type: integer
                            example: 388
                          cle_periode_notation:
                            type: integer
                            example: 125
                          coefficient:
                            type: number
                            example: 2.5
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /services_notation/{cle_sn}/periodes_hors_calendrier/{cle_perhc}/coefficient:
        get:
            tags:
                - Services_notation
            summary: Coefficient affecté au service de notation pour la période hors calendrier
            description: Coefficient affecté au service de notation de clé {cle_sn} pour la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Services_notation
            summary: Modification du coefficient affecté au service de notation pour la période hors calendrier
            description: Modifie le coefficient affecté au service de notation de clé {cle_sn} pour la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
                - name: coefficient
                  in: query
                  description: coefficient à affecter
                  required: true
                  schema:
                    type: number
                    example: 3.5
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /services_notation/{cles_sn}/periodes_hors_calendrier/{cles_perhc}/coefficients:
        get:
            tags:
                - Services_notation
            summary: Coefficient affecté à chaque service de notation pour chacune des périodes hors calendrier
            description: Coefficient affecté à chaque service de notation dont la clé est dans {cles_sn} pour chacune des périodes hors calendrier dont la clé est dans {cles_perhc}
            parameters:
                - name: cles_sn
                  in: path
                  description: clés des services de notation voulues, séparées par des virgules (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: cles_perhc
                  in: path
                  description: clés des périodes hors calendrier voulues, séparées par des virgules (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle_service_notation:
                            type: integer
                            example: 388
                          cle_periode_hors_calendrier:
                            type: integer
                            example: 125
                          coefficient:
                            type: number
                            example: 2.5
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
    /services_notation/{cle_sn}/periodes_notation/{cle_pern}/bonus_malus_actif:
        get:
            tags:
                - Services_notation
            summary: Booléen indiquant si le service de notation pour la période de notation tient compte des bonus/malus
            description: Vrai si le service de notation de clé {cle_sn} pour la période de notation de clé {cle_pern} tient compte des bonus/malus, faux sinon
            parameters:
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        bonus_malus_actif:
                          type: boolean
                          example: true
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Services_notation
            summary: Modification de la prise en compte des bonus/malus du service de notation pour la période de notation
            description: Active ou non la prise en compte des bonus/malus du service de notation de clé {cle_sn} pour la période de notation de clé {cle_pern}
            parameters:
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "clé de la période de notation"
                  required: true
                  schema:
                    type: integer
                - name: bonus_malus_actif
                  in: query
                  description: Prise en compte du bonus/malus
                  required: true
                  schema:
                    type: boolean
                    example: true
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        bonus_malus_actif:
                          type: boolean
                          example: true
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /services_notation/{cle_sn}/periodes_hors_calendrier/{cle_perhc}/bonus_malus_actif:
        get:
            tags:
                - Services_notation
            summary: Booléen indiquant si le service de notation pour la période hors calendrier tient compte des bonus/malus
            description: Vrai si le service de notation de clé {cle_sn} pour la période hors calendrier de clé {cle_perhc} tient compte des bonus/malus, faux sinon
            parameters:
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        bonus_malus_actif:
                          type: boolean
                          example: true
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Services_notation
            summary: Modification de la prise en compte des bonus/malus du service de notation pour la période hors calendrier
            description: Active ou non la prise en compte des bonus/malus du service de notation de clé {cle_sn} pour la période hors calendrier de clé {cle_perhc}
            parameters:
                - name: cle_sn
                  in: path
                  description: "clé du service de notation"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "clé de la période hors calendrier"
                  required: true
                  schema:
                    type: integer
                - name: bonus_malus_actif
                  in: query
                  description: Prise en compte du bonus/malus
                  required: true
                  schema:
                    type: boolean
                    example: true
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        bonus_malus_actif:
                          type: boolean
                          example: true
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    #### Devoirs ####
    /devoirs:
        get:
            tags:
                - Devoirs
            summary: Liste de tous les devoirs
            description: Tableau contenant les json des devoirs de la base, par défaut trié par services de notation
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - cle
                      - service_notation
                      - date
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [cle, matiere, promotions]   # ?select=cle,matiere,promotions
                - name: cle
                  in: query
                  description: Filtre sur les clés des devoirs
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: services_notation
                  in: query
                  description: Filtre sur les clés des services de notation des devoirs
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec un seul service de notation souhaité
                      value: [12]   # ?services_notation=12
                    multipleIds:
                      summary: Exemple avec plusieurs services de notation souhaités
                      value: [12, 15]   # ?services_notation=12,15
            responses:
              '200':    # status code
                description: Tableau des JSON des devoirs
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Devoirs'
        post:
            tags:
                - Devoirs
            summary: Création d'un nouveau devoir
            description: Crée un nouveau devoir dans la base et initialise les champs à l'aide des paramètres passés dans le JSON
            requestBody:
              description: Champs du JSON utilisés pour la création
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      service_notation:
                        type: integer
                        example: 11
                      date:
                        type: string
                        example: "2024-12-01"
                      date_publication:
                        type: string
                        example: "2024-12-02"
                      est_facultatif_comme_note:
                        type: boolean
                        example: true
                      est_facultatif_comme_bonus:
                        type: boolean
                        example: false
                      commentaire:
                        type: string
                        example: "Voici un commentaire pour le devoir"
                      est_verrouille:
                        type: boolean
                        example: false
                      est_devoir_surveille:
                        type: boolean
                        example: false
                      bareme:
                        type: string
                        example: "20"
                      est_ramener_sur:
                        type: boolean
                        example: false
                      coefficient:
                        type: number
                        example: 2.5
            responses:
              '201':    # status code
                description: Created
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Devoirs'
              '400':    # status code
                description: "Paramètres non valides : service_notation obligatoire"
              '500':    # status code
                description: Création ou modification d'au moins un des champs impossible
    /devoirs/{cle}:
        get:
            tags:
                - Devoirs
            summary: Json du devoir de clé {cle}
            description: Utiliser SELECT pour obtenir seulement certains champs du JSON
            parameters:
                - name: cle
                  in: path
                  description: "clé du devoir"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Devoirs'
              '404':    # status code
                description: "Paramètre invalide"
        post:
            tags:
                - Devoirs
            summary: Mise à jour partielle d'un devoir
            description: Modifie les champs du devoir de clé {cle} avec ceux passés dans le JSON au niveau du BODY
            parameters:
                - name: cle
                  in: path
                  description: "clé du devoir que l'on veut mettre à jour"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenant les champs et valeurs que l'on veut modifier. Ne mettre dans le JSON que les champs que l'on souhaite modifier.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      service_notation:
                        type: integer
                        example: 11
                      date:
                        type: string
                        example: "2024-12-01"
                      date_publication:
                        type: string
                        example: "2024-12-02"
                      est_facultatif_comme_note:
                        type: boolean
                        example: true
                      est_facultatif_comme_bonus:
                        type: boolean
                        example: false
                      commentaire:
                        type: string
                        example: "Voici un commentaire pour le devoir"
                      est_verrouille:
                        type: boolean
                        example: false
                      est_devoir_surveille:
                        type: boolean
                        example: false
                      bareme:
                        type: string
                        example: "20"
                      est_ramener_sur:
                        type: boolean
                        example: false
                      coefficient:
                        type: number
                        example: 2.5
            responses:
              '200':    # status code
                description: Succès - JSON de l'élément modifié
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Devoirs'
              '400':    # status code
                description: "Paramètres non valides : service_notation obligatoire, problème de taille..."
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
              '405':    # status code
                description: "Droits insuffisants"
              '500':    # status code
                description: "Modification d'au moins un des champs impossible"
        delete:
            tags:
                - Devoirs
            summary: Suppression d'un devoir
            description: Supprime définitivement le devoir de clé {cle} de la base
            parameters:
                - name: cle
                  in: path
                  description: clé de l'élément à supprimer
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /devoirs/supprimer:
        post:
            tags:
                - Devoirs
            summary: Suppression de plusieurs devoirs
            description: Supprime les devoirs dont la clé est passée en paramètre (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: une ou plusieurs clés des devoirs à supprimer
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé souhaitée
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés souhaitées
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted : Suppression reussie"
              '404':    # status code
                description: "Not found : La clé passée n'existe pas"
    /devoirs/{cle_dev}/promotions/{cle_promo}/periodes_notation:
        get:
            tags:
                - Devoirs
            summary: Périodes de notation et périodes hors calendrier affectées au devoir pour la promotion
            description: Périodes de notation et périodes hors calendrier affectées au devoir de clé {cle_dev} pour la promotion de clé {cle_promo}
            parameters:
                - name: cle_dev
                  in: path
                  description: "clé du devoir"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_devoir:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        periodes_notation:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        periodes_hors_calendrier:
                          type: array
                          items:
                            type: integer
                          example: [11,13,16,17]
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Devoirs
            summary: Modification des périodes de notation et/ou les périodes hors calendrier du devoir pour la promotion
            description: Modifie les périodes de notation et/ou les périodes hors calendrier du devoir de clé {cle_dev} pour la promotion de clé {cle_promo}
            parameters:
                - name: cle_dev
                  in: path
                  description: "clé du devoir"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "clé de la promotion"
                  required: true
                  schema:
                    type: integer
                - name: periodes_notation
                  in: query
                  description: clés des périodes de notation voulues pour le devoir (au moins un des deux parametres entre periodes_notation et periodes_hors_calendrier est requis)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                    example: [10,12,14,15]
                - name: periodes_hors_calendrier
                  in: query
                  description: clés des périodes hors calendrier voulues pour le devoir (au moins un des deux parametres entre periodes_notation et periodes_hors_calendrier est requis)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                    example: [11,13,16,17]
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_devoir:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        periodes_notation:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        periodes_hors_calendrier:
                          type: array
                          items:
                            type: integer
                          example: [11,13,16,17]
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    /devoirs/{cle_dev}/tdoptions/{cle_TDOpt}/periodes_notation:
        get:
            tags:
                - Devoirs
            summary: Périodes de notation et périodes hors calendrier affectées au devoir pour le td/option
            description: Périodes de notation et périodes hors calendrier affectées au devoir de clé {cle_dev} pour le td/option de clé {cle_TDOpt}
            parameters:
                - name: cle_dev
                  in: path
                  description: "clé du devoir"
                  required: true
                  schema:
                    type: integer
                - name: cle_TDOpt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_devoir:
                          type: integer
                          example: 498
                        cle_tdoption:
                          type: integer
                          example: 388
                        periodes_notation:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        periodes_hors_calendrier:
                          type: array
                          items:
                            type: integer
                          example: [11,13,16,17]
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
        post:
            tags:
                - Devoirs
            summary: Modification des périodes de notation et/ou les périodes hors calendrier du devoir pour le td/option
            description: Modifie les périodes de notation et/ou les périodes hors calendrier du devoir de clé {cle_dev} pour le td/option de clé {cle_TDOpt}
            parameters:
                - name: cle_dev
                  in: path
                  description: "clé du devoir"
                  required: true
                  schema:
                    type: integer
                - name: cle_TDOpt
                  in: path
                  description: "clé du TD/option"
                  required: true
                  schema:
                    type: integer
                - name: periodes_notation
                  in: query
                  description: clés des périodes de notation voulues pour le devoir (au moins un des deux parametres entre periodes_notation et periodes_hors_calendrier est requis)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                    example: [10,12,14,15]
                - name: periodes_hors_calendrier
                  in: query
                  description: clés des périodes hors calendrier voulues pour le devoir (au moins un des deux parametres entre periodes_notation et periodes_hors_calendrier est requis)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                    example: [11,13,16,17]
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_devoir:
                          type: integer
                          example: 498
                        cle_tdoption:
                          type: integer
                          example: 388
                        periodes_notation:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        periodes_hors_calendrier:
                          type: array
                          items:
                            type: integer
                          example: [11,13,16,17]
              '400':    # status code
                description: "Paramètre obligatoire non renseigné"
              '404':    # status code
                description: "Paramètre invalide : clé inexistante"
              '500':    # status code
                description: "Modification impossible"
    #### Notes ####
    /notes:
        get:
            tags:
                - Notes
            summary: Liste de toutes les notes
            description: Tableau contenant les notes (avec le devoir et l'étudiant concerné) de la base, par défaut trié par devoir puis étudiant
            parameters:
                - name: sort
                  in: query
                  description: Choix de l'ordre de tri
                  schema:
                    type: string
                    enum:
                      - devoir
                      - etudiant
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [devoir]   # ?select=devoir
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [devoir, note, etudiant]   # ?select=devoir,note,etudiant
                - name: etudiant
                  in: query
                  description: retourne seulement les notes des étudiants ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec un seul étudiant souhaité
                      value: [12]   # ?etudiant=12
                    multipleIds:
                      summary: Exemple avec plusieurs étudiants souhaités
                      value: [12, 14, 18]   # ?etudiant=12,14,18
                - name: devoir
                  in: query
                  description: retourne seulement les notes des devoirs ayant une de ces clés
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Exemple avec un seul devoir souhaité
                      value: [13]   # ?devoir=13
                    multipleIds:
                      summary: Exemple avec plusieurs devoirs souhaités
                      value: [13, 15, 19]   # ?devoir=13,15,19
                - name: date_debut
                  in: query
                  description: retourne seulement les notes des devoirs ayant lieu après cette date de debut. Si cette date de début n'est pas renseignée, on prendra celle du début de la base
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: retourne seulement les notes des devoirs ayant lieu avant cette date de fin. Si cette date de fin n'est pas renseignée, on prendra celle de fin de la base
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_fin=2024-08-06
            responses:
              '200':    # status code
                description: Tableau des JSON des notes de devoirs
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Notes'
    #### Durees ####
    /duree/{duree}:
        get:
            tags:
                - Durees
            summary: Conversion d'une durée exprimée en jour
            description: Convertis la durée (exprimée en jour) en minutes et en heures/minutes
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [duree]   # ?select=duree
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [duree, duree_en_minutes]   # ?select=duree,duree_en_minutes
                - name: duree
                  in: path
                  description: "durée (exprimée en jour) à convertir"
                  required: true
                  schema:
                    type: number
            responses:
              '200':    # status code
                description: JSON de la durée
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        duree:
                          type: number
                          example: 0.063
                        duree_en_minutes:
                          type: integer
                          example: 90
                        duree_nombre_heures:
                          type: integer
                          example: 1
                        duree_nombre_minutes:
                          type: integer
                          example: 30
    /duree/minutes/{duree_en_minutes}:
        get:
            tags:
                - Durees
            summary: Conversion d'une durée exprimée en minutes
            description: Convertis la durée (exprimée en minutes) en jour et en heures/minutes
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [duree]   # ?select=duree
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [duree, duree_en_minutes]   # ?select=duree,duree_en_minutes
                - name: duree_en_minutes
                  in: path
                  description: "durée (exprimée en minutes) à convertir"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: JSON de la durée
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        duree:
                          type: number
                          example: 0.063
                        duree_en_minutes:
                          type: integer
                          example: 90
                        duree_nombre_heures:
                          type: integer
                          example: 1
                        duree_nombre_minutes:
                          type: integer
                          example: 30
    /duree/heures/{nombre_heures}/minutes/{nombre_minutes}:
        get:
            tags:
                - Durees
            summary: Conversion d'une durée exprimée en heures/minutes
            description: Convertis la durée (exprimée en heures/minutes) en jour et en minutes
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [duree]   # ?select=duree
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [duree, duree_en_minutes]   # ?select=duree,duree_en_minutes
                - name: nombre_heures
                  in: path
                  description: "durée (exprimée en heures/minutes) à convertir"
                  required: true
                  schema:
                    type: integer
                - name: nombre_minutes
                  in: path
                  description: "durée (exprimée en heures/minutes) à convertir"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: JSON de la durée
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        duree:
                          type: number
                          example: 0.063
                        duree_en_minutes:
                          type: integer
                          example: 90
                        duree_nombre_heures:
                          type: integer
                          example: 1
                        duree_nombre_minutes:
                          type: integer
                          example: 30
    #### Couleurs ####
    /couleur/{couleur}:
        get:
            tags:
                - Couleurs
            summary: Conversion d'une couleur
            description: Convertis la couleur en 3 valeurs (rouge, vert et bleu) comprises entre 0 et 255
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [couleur]   # ?select=couleur
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [couleur, rouge]   # ?select=couleur,rouge
                - name: couleur
                  in: path
                  description: "couleur à convertir"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: JSON de la couleur
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        couleur:
                          type: integer
                          example: 16777215
                        rouge:
                          type: integer
                          example: 255
                        vert:
                          type: integer
                          example: 255
                        bleu:
                          type: integer
                          example: 255
    /couleur/rouge/{R}/vert/{G}/bleu/{B}:
        get:
            tags:
                - Couleurs
            summary: Conversion d'une couleur exprimée en RGB
            description: Convertis en couleur les 3 valeurs (rouge, vert et bleu) comprises entre 0 et 255
            parameters:
                - name: select
                  in: query
                  description: Choix des champs que l'on souhaite avoir dans le json de reponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneId:
                      summary: Exemple avec une seule colonne souhaitée
                      value: [couleur]   # ?select=couleur
                    multipleIds:
                      summary: Exemple avec plusieurs colonnes souhaitées
                      value: [couleur, rouge]   # ?select=couleur,rouge
                - name: R
                  in: path
                  description: "couleur (exprimée en rouge/vert/bleu) à convertir"
                  required: true
                  schema:
                    type: integer
                - name: G
                  in: path
                  description: "couleur (exprimée en rouge/vert/bleu) à convertir"
                  required: true
                  schema:
                    type: integer
                - name: B
                  in: path
                  description: "couleur (exprimée en rouge/vert/bleu) à convertir"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: JSON de la couleur
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        couleur:
                          type: integer
                          example: 16777215
                        rouge:
                          type: integer
                          example: 255
                        vert:
                          type: integer
                          example: 255
                        bleu:
                          type: integer
                          example: 255
components:
  securitySchemes:
    basicAuth:     # <-- Basic authentification
      type: http
      scheme: basic

  schemas:
    Absences:                   # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        etudiant:
          type: integer
          example: 12
        date_heure_debut:
          type: string
          example: "2024-08-16T09:00"
        date_heure_fin:
          type: string
          example: "2024-08-17T16:45"
        est_justifie:
          type: boolean
          example: true
        motif:
          type: string
          example: "Maladie avec certificat"
        cours_manques:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
    Alternances:                # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        etudiant:
          type: integer
          example: 12
        dates:
          type: array
          items:
            type: object
            properties:
              du:
                type: string
                example: "2000-02-14"
              au:
                type: string
                example: "2000-02-27"
        formulaire_etudiant:
          type: object
          properties:
            visibilite:
              type: boolean
              example: true
            du:
              type: string
              example: "2000-02-14"
            au:
              type: string
              example: "2000-02-27"
        duree_saisie:
          type: number
          example: 10.0
        duree_calculee:
          type: number
          example: 12.0
        entreprise:
          type: integer
          example: 14
        maitres_tuteurs:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        sujet:
          type: string
          example: "sujet de l'alternance"
        type_contrat:
          type: string
          example: "Apprentissage"
        dates_contrat:
          type: object
          properties:
            du:
              type: string
              example: "2000-02-14"
            au:
              type: string
              example: "2000-02-27"
        commentaire:
          type: string
          example: "Voici un commentaire bien utile"
        enseignant_tuteur:
          type: integer
          example: 12
        enseignant_responsable:
          type: integer
          example: 14
        sujet_detaille:
          type: string
          example: "Sujet un peu plus détaillé"
        objectifs:
          type: string
          example: "Voici les différents objectifs"
        activites_prevues:
          type: string
          example: "Voici les activités prévues"
        competences_visees:
          type: string
          example: "Voici les compétences visées"
        modalites_concertation:
          type: string
          example: "Voici les modalités de concertation"
        modalites_evaluation:
          type: string
          example: "Voici les modalités d'évaluation"
        convention_signee:
          type: boolean
          example: true
        contrat_rempli:
          type: boolean
          example: true
        remuneration:
          type: number
          example: 10.0
        devise:
          type: string
          example: €
        avantages:
          type: array
          items:
            type: string
          example: ["Tickets restaurant","Transport"]
    Appariteurs:                # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Dupond"
        prenom:
          type: string
          example: "Camille"
        civilite:
          type: string
          example: "Mme"
        cas_identifiant:
          type: string
          example: "Identifiant__CAS"
        adfs_identifiant:
          type: string
          example: "Identifiant__ADFS"
        saml_identifiant:
          type: string
          example: "Identifiant__SAML"
        identifiant_connexion:
          type: string
          example: "Identifiant__connexion"
        email:
          type: string
          example: "prenom.nom@email.fr"
        adresse1:
          type: string
          example: "12 rue de la paix"
        adresse2:
          type: string
          example: "12 rue de la paix"
        adresse3:
          type: string
          example: "12 rue de la paix"
        adresse4:
          type: string
          example: "12 rue de la paix"
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Marseille"
        pays:
          type: string
          example: "France"
        province:
          type: string
          example: "Province"
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        numero_telephone_portable:
          type: string
          example: "06060606"
        indicatif_telephone_portable:
          type: string
          example: "06"
        acces_espace_appariteurs:
          type: boolean
          example: true
        salles:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
    Baccalaureats:              # Object definition
      type: object
      properties:
        nom:
          type: string
          example: "SCIENTIFIQUE"
        code:
          type: string
          example: "S"
        type:
          type: string
          example: "Bac général"
    Baccalaureat_specialites:   # Object definition
      type: object
      properties:
        nom:
          type: string
          example: "MATHEMATIQUES"
        code:
          type: string
          example: "MATHS"
    Calendriers_notation:       # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Semestriel"
        proprietaire:
          type: integer
          example: 10
        periodes_notation:
          type: array
          items:
            type: integer
          example: [10,12,14]
        promotions:
          type: array
          items:
            type: integer
          example: [11,13,15,47]
    Contacts:                   # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Dupond"
        prenom:
          type: string
          example: "Camille"
        civilite:
          type: string
          example: "Mme"
        uid_identifiant:
          type: string
          example: "Identifiant__UID"
        cas_identifiant:
          type: string
          example: "Identifiant__CAS"
        adfs_identifiant:
          type: string
          example: "Identifiant__ADFS"
        saml_identifiant:
          type: string
          example: "Identifiant__SAML"
        identifiant_connexion:
          type: string
          example: "Identifiant__connexion"
        date_naissance:
          type: string
          example: "2000-02-24"
        lieu_naissance:
          type: string
          example: "Marseille"
        code_fiscal:
          type: string
          example: "154862"
        fonction:
          type: string
          example: "Fonction"
        entreprises:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        email:
          type: string
          example: "prenom.nom@email.fr"
        autorisation_reception_email:
          type: boolean
          example: true
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        numero_telephone_portable:
          type: string
          example: "06060606"
        indicatif_telephone_portable:
          type: string
          example: "06"
        autorisation_reception_sms:
          type: boolean
          example: true
        numero_fax:
          type: string
          example: "01010101"
        indicatif_fax:
          type: string
          example: "01"
        proprietaire:
          type: integer
          example: 10
    Cours:                      # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 388
        parente:
          type: string
          example: "CoursSimple"
        cours_fils:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        cours_pere:
          type: integer
          example: 11
        matiere:
          type: integer
          example: 12
        type:
          type: string
          example: "TP"
        duree:
          type: number
          example: 0.416666666666667
        statut_place:
          type: string
          example: "fixe"
        mobilite_seances:
          type: string
          example: "mobile"
        est_non_place:
          type: boolean
          example: false
        place:
          type: number
          example: 1.5
        domaine:
          type: array
          items:
            type: integer
          example: [10,12,14,15]
        domaine_potentiel:
          type: array
          items:
            type: integer
          example: [10,12,14,15]
        memo:
          type: string
          example: "Voici un petit memo"
        reference:
          type: string
          example: "Ref. HP 000001"
        uid_identifiant:
          type: string
          example: "Identifiant__UID"
        ponderation_avant_apport:
          type: integer
          example: 1
        ponderation_apres_apport:
          type: integer
          example: 1
        est_co_enseignement:
          type: boolean
          example: false
        presence_obligatoire:
          type: boolean
          example: true
        emargement_numerique:
          type: boolean
          example: true
        verrouillage:
          type: string
          example: "Déverrouillé"
        nombre_seance:
          type: integer
          example: 15
        proprietaire:
          type: integer
          example: 1
        enseignants:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        promotions:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        tdoptions:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        etudiants:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        regroupements:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        salles:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        modules_cursus_associes:
          type: array
          items:
            type: object
            properties:
              cle_module:
                type: integer
              cle_cursus:
                type: integer
          example: [{"cle_module": 1,"cle_cursus": 1}]
        utilisateurs_autorises_acces:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        profils_autorises_acces:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        derniere_modification:
          type: string
          example: "Modification du premier jour de la base"
        date_derniere_modification:
          type: string
          example: "2023-09-11T10:37"
    Cours_annules:              # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 388
        place:
          type: number
          example: 1.5
        duree:
          type: number
          example: 0.416666666666667
        domaine:
          type: array
          items:
            type: integer
          example: [10,12,14,15]
        type:
          type: string
          example: "TP"
        ponderation_avant_apport:
          type: integer
          example: 1
        ponderation_apres_apport:
          type: integer
          example: 1
        matiere:
          type: integer
          example: 12
        promotions:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
              domaine:
                type: array
                items:
                  type: integer
          example: [{"cle": 1,"domaine": [10,12,14,15]}]
        tdoptions:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
              domaine:
                type: array
                items:
                  type: integer
          example: [{"cle": 1,"domaine": [10,12,14,15]}]
        regroupements:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
              domaine:
                type: array
                items:
                  type: integer
          example: [{"cle": 1,"domaine": [10,12,14,15]}]
        enseignants:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
              domaine:
                type: array
                items:
                  type: integer
          example: [{"cle": 1,"domaine": [10,12,14,15]}]
        salles:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
              domaine:
                type: array
                items:
                  type: integer
          example: [{"cle": 1,"domaine": [10,12,14,15]}]
        motif_annulation:
          type: string
          example: "Annulation"
        commentaire:
          type: string
          example: "Voici un commentaire bien utile"
        uid_identifiant:
          type: string
          example: "Identifiant__UID"
        reference:
          type: string
          example: "Ref. HP 000001"
        memo:
          type: string
          example: "Voici un petit memo"
        date_heure_annulation:
          type: string
          example: "2023-09-11T10:37"
        modifiant:
          type: integer
          example: 1
    Couts_horaires_enseignants: # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 11
        libelle:
          type: string
          example: "cout124E"
        valeur:
          type: number
          example: 124.0
    Couts_horaires_salles:      # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 11
        libelle:
          type: string
          example: "cout124E"
        valeur:
          type: number
          example: 124.0
    Cursus:                     # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "GM1 - S1"
        code:
          type: string
          example: "11"
        duree:
          type: number
          example: 0.416666666666667
        proprietaire:
          type: integer
          example: 10
        modules:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        promotions:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        matieres_obligatoires:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        matieres_au_choix:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
                example: 11
              libelle:
                type: string
                example: "Options"
        libelles_au_choix:
          type: array
          items:
            type: string
        Apport:
          type: array
          items:
            type: object
            properties:
              cle_matiere:
                type: integer
                example: 11
              type:
                type: string
                example: "Cours"
              duree_totale:
                type: number
                example: 0.5
              duree_seance:
                type: number
                example: 0.041666666666666664
    Decharges:                  # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 11
        motif:
          type: string
          example: "Motif de la décharge"
        promotion:
          type: integer
          example: 12
        enseignant:
          type: integer
          example: 15
        cout_horaire_enseignant:
          type: integer
          example: 25
        mode_decompte:
          type: string
          example: "hebdomadaire"
          description: "Format attendu : 'annuel' ou 'hebdomadaire'"
        heures_annuelles:
          type: number
          example: 10.4166666666667,
        heures_hebdomadaires:
          type: object
          properties:
            domaine:
              type: array
              items:
                type: integer
              example: [1,2,3,4]
            duree:
              type: number
              example: 0.416666666666667
          description: "Seulement si mode_decompte est 'hebdomadaire'"
        cout_annuel:
          type: number
          example: 30862.5
    Departements:               # Object definition
      type: object
      properties:
        nom:
          type: string
          example: "Ain"
        code:
          type: string
          example: "001"
    Devoirs:                    # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        service_notation:
          type: integer
          example: 11
        date:
          type: string
          example: "2024-12-01"
        date_publication:
          type: string
          example: "2024-12-02"
        est_facultatif_comme_note:
          type: boolean
          example: true
        est_facultatif_comme_bonus:
          type: boolean
          example: false
        commentaire:
          type: string
          example: "Voici un commentaire bien utile"
        est_verrouille:
          type: boolean
          example: false
        est_devoir_surveille:
          type: boolean
          example: false
        bareme:
          type: string
          example: "20"
        est_ramener_sur:
          type: boolean
          example: false
        coefficient:
          type: number
          example: 2.5
        moyenne:
          type: string
          example: "15.25"
        note_max:
          type: string
          example: "20.0"
        note_min:
          type: string
          example: "5.5"
        mediane:
          type: string
          example: "12.3"
        etudiants:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
    Dispenses:                  # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        etudiant:
          type: integer
          example: 12
        matiere:
          type: integer
          example: 24
          description: "0 pour avoir une dispense avec 'Toutes matières confondues'"
        date_debut:
          type: string
          example: "2024-08-16"
        date_fin:
          type: string
          example: "2024-09-16"
        avec_participation_requise:
          type: boolean
          example: true
        motif:
          type: string
          example: "Dispense médicale"
        plage_horaire:
          type: string
          example: "Journée"
          description: "Format attendu : 'Journée', 'Matin', 'Après-midi' ou 'Personnalisée'"
        plage_horaire_duree_debut:
          type: number
          example: 0.333333333333333
          description: Durée écoulée entre 0h00 et le début de la plage horaire. Attention, seulement pour les dispenses dont la plage horaire est personnalisée
        plage_horaire_duree_fin:
          type: number
          example: 0.833333333333333
          description: Durée écoulée entre 0h00 et la fin de la plage horaire. Attention, seulement pour les dispenses dont la plage horaire est personnalisée
        periodicite:
          type: object
          properties:
            jours:
              type: array
              items:
                type: string
              example: ["lundi","mardi","jeudi","vendredi"]
              description: "Format attendu : 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche'"
            frequence:
              type: integer
              example: 1
    Enseignants:                # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Dupond"
        prenom:
          type: string
          example: "Camille"
        code:
          type: string
          example: "AD"
        couleur:
          type: string
          example: "#FFFF80"
        civilite:
          type: string
          example: "Mme"
        uid_identifiant:
          type: string
          example: "Identifiant__UID"
        cas_identifiant:
          type: string
          example: "Identifiant__CAS"
        adfs_identifiant:
          type: string
          example: "Identifiant__ADFS"
        saml_identifiant:
          type: string
          example: "Identifiant__SAML"
        identifiant_connexion:
          type: string
          example: "Identifiant__connexion"
        nom_jeune_fille:
          type: string
          example: "Dupond"
        date_naissance:
          type: string
          example: "2000-02-24"
        email1:
          type: string
          example: "Martin@email1.fr"
        email2:
          type: string
          example: "Martin@email2.fr"
        type_email_a_utiliser_par_personnels:
          type: string
          example: "email1"
        type_email_a_utiliser_par_enseignants:
          type: string
          example: "email2"
        type_email_a_utiliser_par_etudiants_parents:
          type: string
          example: "email2"
        type_email_a_utiliser_par_contacts_entreprise:
          type: string
          example: "Aucun"
        lieu_naissance:
          type: string
          example: "Marseille"
        numero_securite_sociale:
          type: string
          example: "2000213456789"
        cle_securite_sociale:
          type: string
          example: "12"
        mutuelle:
          type: string
          example: "MaMutuelle"
        commentaire:
          type: string
          example: "Voici un commentaire bien utile"
        code_fiscal:
          type: string
          example: "154862"
        numero_tva:
          type: string
          example: "12584165a"
        site_internet:
          type: string
          example: "https://www.index-education.com"
        mhh:
          type: number
          example: 0
        mhj:
          type: number
          example: 0.416666666666667
        apport_annuel:
          type: number
          example: 5.416666666666667
        information_interne:
          type: string
          example: "information interne"
        adresse1:
          type: string
          example: "12 rue de la paix"
        adresse2:
          type: string
          example: "12 rue de la paix"
        adresse3:
          type: string
          example: "12 rue de la paix"
        adresse4:
          type: string
          example: "12 rue de la paix"
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Marseille"
        pays:
          type: string
          example: "France"
        province:
          type: string
          example: "Province"
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        numero_telephone_portable:
          type: string
          example: "06060606"
        indicatif_telephone_portable:
          type: string
          example: "06"
        autorisation_reception_sms:
          type: boolean
          example: true
        numero_telephone_bureau:
          type: string
          example: "01010101"
        indicatif_telephone_bureau:
          type: string
          example: "01"
        publication:
          type: boolean
          example: true
        proprietaire:
          type: integer
          example: 10
        autorisation_diffusion_photo:
          type: boolean
          example: true
        partage_ponderation:
          type: boolean
          example: false
        matieres:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        promotions:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        td_options:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        url_ical:
          type: string
          example: "Telechargements/ical/Edt_Martin.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
        cout_horaire_statutaire:
          type: integer
          example: 10
        cout_horaire_sans_public:
          type: integer
          example: 11
    Entreprises:                # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        raison_sociale:
          type: string
          example: "Index Education"
        nom_commercial:
          type: string
          example: "Docaposte"
        uid_identifiant:
          type: string
          example: "Identifiant__UID"
        adresse1:
          type: string
          example: "12 rue de la paix"
        adresse2:
          type: string
          example: "12 rue de la paix"
        adresse3:
          type: string
          example: "12 rue de la paix"
        adresse4:
          type: string
          example: "12 rue de la paix"
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Marseille"
        pays:
          type: string
          example: "France"
        province:
          type: string
          example: "Province"
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        numero_telephone_portable:
          type: string
          example: "06060606"
        indicatif_telephone_portable:
          type: string
          example: "06"
        numero_fax:
          type: string
          example: "04050607"
        indicatif_fax:
          type: string
          example: "04"
        email1:
          type: string
          example: "prenom.nom@email.fr"
        site_internet:
          type: string
          example: "https://www.index-education.com"
        activite:
          type: string
          example: "Activite"
        ape:
          type: string
          example: "APE"
        numero_siret:
          type: string
          example: "12345678901234"
        urssaf:
          type: string
          example: "08080808080808"
        convention_collective_code_idcc:
          type: string
          example: "1486"
        convention_collective:
          type: string
          example: "Syntec"
        effectif:
          type: integer
          example: 150
        assurance_responsabilite_civile:
          type: string
          example: "AD"
        numero_police_assurance:
          type: string
          example: "AD"
        commentaire_public:
          type: string
          example: "Commentaire public"
        commentaire_interne:
          type: string
          example: "Commentaire interne"
        proprietaire:
          type: integer
          example: 10
        responsable:
          type: integer
          example: 10
        contacts:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        maitres_tuteurs:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        charges_contrat:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
    Etablissement_origine:      # Object definition
      type: object
      properties:
        nom:
          type: string
          example: "Etablissement1"
        email:
          type: string
          example: "Etablissement1@email.fr"
    Etudiants:                  # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Dupond"
        prenom1:
          type: string
          example: "Camille"
        prenom2:
          type: string
          example: "Dominique"
        prenom3:
          type: string
          example: "Claude"
        prenom_usage:
          type: string
          example: "Sacha"
        date_naissance:
          type: string
          example: "2010-02-22"
        civilite:
          type: string
          example: "Mme"
        uid_identifiant:
          type: string
          example: "Identifiant__UID"
        cas_identifiant:
          type: string
          example: "Identifiant__CAS"
        adfs_identifiant:
          type: string
          example: "Identifiant__ADFS"
        saml_identifiant:
          type: string
          example: "Identifiant__SAML"
        identifiant_connexion:
          type: string
          example: "Identifiant__connexion"
        e_mail_personnel:
          type: string
          example: "durand@email1.fr"
        e_mail_institutionnel:
          type: string
          example: "durand@email2.fr"
        e_mail_a_utiliser:
          type: string
          example: "E-mail personnel"
        sexe:
          type: string
          example: "masculin"
        numero_ine:
          type: string
          example: "1235847A"
        numero_ordre:
          type: string
          example: "12345"
        nom_jeune_fille:
          type: string
          example: "Dupond"
        lieu_naissance:
          type: string
          example: "Marseille"
        nationalite:
          type: string
          example: "Francaise"
        numero_securite_sociale:
          type: string
          example: "1100213123456"
        cle_securite_sociale:
          type: string
          example: "12"
        mutuelle:
          type: string
          example: "MaMutuelle"
        cotisation:
          type: string
          example: "non"
        motif_non_cotisation:
          type: string
          example: "raison de non cotisation"
        assurance_responsabilite_civile:
          type: string
          example: "MonAssurance"
        numero_contrat:
          type: string
          example: "123456789"
        information_interne:
          type: string
          example: "Information à usage interne"
        commentaire:
          type: string
          example: "Voici un commentaire bien utile"
        code_fiscal:
          type: string
          example: "123456"
        adresse1:
          type: string
          example: "12 rue de la paix"
        adresse2:
          type: string
          example: "12 rue de la paix"
        adresse3:
          type: string
          example: "12 rue de la paix"
        adresse4:
          type: string
          example: "12 rue de la paix"
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Marseille"
        pays:
          type: string
          example: "France"
        province:
          type: string
          example: "Province"
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        numero_telephone_portable:
          type: string
          example: "06060606"
        indicatif_telephone_portable:
          type: string
          example: "06"
        autorisation_reception_sms:
          type: boolean
          example: true
        redoublant:
          type: boolean
          example: false
        baccalaureat:
          type: string
          example: "S"
        baccalaureat_specialite1:
          type: string
          example: "MATHS"
        baccalaureat_specialite2:
          type: string
          example: "PHY_CHI"
        baccalaureat_departement_obtention:
          type: string
          example: "013"
        baccalaureat_annee_obtention:
          type: string
          example: "2022"
        niveau_dans_diplome:
          type: string
          example: "01"
        type_dernier_diplome:
          type: string
          example: "A"
        modalite_admission:
          type: string
          example: "modalite admission"
        etablissement_origine:
          type: integer
          example: 10
        date_inscription:
          type: string
          example: "2022-02-22"
        cursus_anterieur:
          type: string
          example: "Cursus anterieur"
        publication_sur_tous_les_espaces:
          type: boolean
          example: true
        acces_espace_etudiants:
          type: boolean
          example: true
        emargement_numerique:
          type: boolean
          example: true
        parent1:
          type: integer
          example: 10
        lien_parente1:
          type: string
          example: "mere"
        parent2:
          type: integer
          example: 10
        lien_parente2:
          type: string
          example: "pere"
        autorisation_diffusion_photo:
          type: boolean
          example: true
        coefficient:
          type: integer
          example: 0
        proprietaire:
          type: integer
          example: 10
        url_ical:
          type: string
          example: "Telechargements/ical/Edt_Durand.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
        bonus_final:
          type: string
          example: "5"
        avis_final:
          type: string
          example: "Parfait"
    Familles:                   # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        libelle:
          type: string
          example: "Famille1"
        mode:
          type: string
          example: "Rubriques prédéfinies"
        proprietaire:
          type: integer
          example: 10
        utilisee_pour:
          type: array
          items:
            type: string
          example: ["Matières", "Enseignants"]
        rubriques:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
              nom:
                type: string
          example: [{"cle": 424,"nom": "Rubrique1"},{"cle": 426,"nom": "Rubrique1"}]
    Matieres:                   # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        libelle:
          type: string
          example: "Anglais"
        code:
          type: string
          example: "LV1"
        couleur:
          type: string
          example: "#FFFF80"
        uid_identifiant:
          type: string
          example: "Identifiant__UID"
        libelle_long:
          type: string
          example: "Voici un libelle un peu plus long"
        libelle_international:
          type: string
          example: "English"
        mhh:
          type: number
          example: 0
        mhj:
          type: number
          example: 0.416666666666667
        coefficient:
          type: integer
          example: 0
        publication:
          type: string
          example: "Publié sur tous les Espaces"
        proprietaire:
          type: integer
          example: 10
        matieres_incompatibles:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        url_ical:
          type: string
          example: "Telechargements/ical/Edt_Anglais.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
    Modules:                    # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Anglais"
        code:
          type: string
          example: "LV1"
        duree:
          type: number
          example: 3.125
        proprietaire:
          type: integer
          example: 10
        cursus:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        matieres_obligatoires:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        matieres_au_choix:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
                example: 11
              libelle:
                type: string
                example: "Options"
        libelles_au_choix:
          type: array
          items:
            type: string
        Apport:
          type: array
          items:
            type: object
            properties:
              cle_matiere:
                type: integer
                example: 11
              type:
                type: string
                example: "Cours"
              duree_totale:
                type: number
                example: 0.5
              duree_seance:
                type: number
                example: 0.041666666666666664
    Modules_notation:           # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        libelle:
          type: string
          example: "Anglais"
        libelle_international:
          type: string
          example: "English"
        nb_points_ects:
          type: number
          example: 10.5
        note_seuil_ects:
          type: string
          example: "10"
        services_notation:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
    Motifs_absence_retard:      # Object definition
      type: object
      properties:
        couleur:
          type: string
          example: "#00FF00"
        code:
          type: string
          example: "MC"
        libelle:
          type: string
          example: "Maladie avec certificat"
        actif_absence:
          type: boolean
          example: true
        est_justifie_absence:
          type: boolean
          example: true
        par_defaut_absence:
          type: boolean
          example: false
        actif_retard:
          type: boolean
          example: true
        est_justifie_retard:
          type: boolean
          example: true
        par_defaut_retard:
          type: boolean
          example: false
    Motifs_annulation:          # Object definition
      type: object
      properties:
        libelle:
          type: string
          example: "ANNULATION"
        par_defaut:
          type: boolean
          example: true
        est_remunere:
          type: boolean
          example: false
        est_utilisable_par_enseignants:
          type: boolean
          example: true
    Motifs_decharge:            # Object definition
      type: object
      properties:
        libelle:
          type: string
          example: "Decharge 1"
    Motifs_dispense:            # Object definition
      type: object
      properties:
        libelle:
          type: string
          example: "Dispense médicale"
    Notes:                      # Object definition
      type: object
      properties:
        etudiant:
          type: integer
          example: 10
        devoir:
          type: integer
          example: 11
        date_devoir:
          type: string
          example: "2024-12-01"
        note:
          type: string
          example: "Absent"
        matiere:
          type: integer
          example: 48
    Parents:                    # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Dupond"
        prenom:
          type: string
          example: "Camille"
        civilite:
          type: string
          example: "Mme"
        nom_naissance:
          type: string
          example: "Dupond"
        email:
          type: string
          example: "prenom.nom@email.fr"
        destinataire_courriers_absences:
          type: boolean
          example: true
        uid_identifiant:
          type: string
          example: "Identifiant__UID"
        cas_identifiant:
          type: string
          example: "Identifiant__CAS"
        adfs_identifiant:
          type: string
          example: "Identifiant__ADFS"
        saml_identifiant:
          type: string
          example: "Identifiant__SAML"
        commentaire:
          type: string
          example: "Voici un commentaire bien utile"
        profession:
          type: string
          example: "enseignante"
        situation_professionnelle:
          type: string
          example: "en activite"
        adresse1:
          type: string
          example: "12 rue de la paix"
        adresse2:
          type: string
          example: "12 rue de la paix"
        adresse3:
          type: string
          example: "12 rue de la paix"
        adresse4:
          type: string
          example: "12 rue de la paix"
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Marseille"
        pays:
          type: string
          example: "France"
        province:
          type: string
          example: "Province"
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        numero_telephone_portable:
          type: string
          example: "06060606"
        indicatif_telephone_portable:
          type: string
          example: "06"
        autorisation_reception_sms:
          type: boolean
          example: true
        numero_telephone_bureau:
          type: string
          example: "01010101"
        indicatif_telephone_bureau:
          type: string
          example: "01"
        identifiant_connexion:
          type: string
          example: "Identifiant__connexion"
        acces_espace_parents:
          type: boolean
          example: true
        etudiants:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
    Partitions:                 # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "TD"
        promotion:
          type: integer
          example: 12
        td:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
    Periodes_hors_calendrier:   # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Partiel1"
        couleur:
          type: string
          example: "#FFFF80"
        date_debut:
          type: string
          example: "2024-08-16"
        date_fin:
          type: string
          example: "2024-08-17"
        abreviation:
          type: string
          example: "P1"
        proprietaire:
          type: integer
          example: 10
        promotions:
          type: array
          items:
            type: integer
          example: [11,13,15,47]
    Periodes_notation:          # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Partiel1"
        couleur:
          type: string
          example: "#FFFF80"
        date_debut:
          type: string
          example: "2024-08-16"
        date_fin:
          type: string
          example: "2024-08-17"
        abreviation:
          type: string
          example: "P1"
        calendrier_notation:
          type: integer
          example: 11
    Ponderations:               # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 11
        numerateur:
          type: integer
          example: 3
        denominateur:
          type: integer
          example: 2
    Promotions:                 # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "1GM1"
        code:
          type: string
          example: "GM1"
        couleur:
          type: string
          example: "#FFFF80"
        uid_identifiant:
          type: string
          example: "Identifiant__UID"
        libelle_long:
          type: string
          example: "Voici un libelle un peu plus long"
        email:
          type: string
          example: "1gm1@email.fr"
        coordinateurs_pedagogiques:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        effectif_saisi:
          type: integer
          example: 30
        mhh:
          type: number
          example: 0
        mhj:
          type: number
          example: 0.416666666666667
        gestion_automatique_des_liens:
          type: boolean
          example: true
        publication_sur_tous_les_espaces:
          type: boolean
          example: true
        regroupement:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        calendrier:
          type: string
          example: "Calendrier1"
        proprietaire:
          type: integer
          example: 10
        calendrier_notation:
          type: integer
          example: 10
        periodes_hors_calendrier:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        modules_notation:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        services_notation:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        services_notation_avec_td_options:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        note_seuil_ects_rattrapage:
          type: string
          example: "10"
        autoriser_rattrapage_ects:
          type: boolean
          example: true
        module_attribution_ects_est_par_module:
          type: boolean
          example: true
        mode_calcul_moyenne_generale_est_par_module:
          type: boolean
          example: true
        url_ical:
          type: string
          example: "Telechargements/ical/Edt_Anglais.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
    Regroupements:              # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "GM1-2"
        code:
          type: string
          example: "1-2"
        couleur:
          type: string
          example: "#FFFF80"
        uid_identifiant:
          type: string
          example: "Identifiant__UID"
        effectif_saisi:
          type: integer
          example: 60
        promotions:
          type: array
          items:
            type: integer
          example: [11,13,15]
        td_options:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        proprietaire:
          type: integer
          example: 10
    Retards:                    # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        etudiant:
          type: integer
          example: 12
        date_heure:
          type: string
          example: "2024-08-16T09:00"
        duree:
          type: number
          example: 0.0104166666666667
        est_justifie:
          type: boolean
          example: true
        motif:
          type: string
          example: "Problème de transport"
    Rubriques:                  # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Rubrique1"
        famille:
          type: integer
          example: 10
    Salles:                     # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Salle 001"
        code:
          type: string
          example: "001"
        libelle_long:
          type: string
          example: "Voici un libelle un peu plus long"
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        uid_identifiant:
          type: string
          example: "Identifiant__UID"
        capacite:
          type: integer
          example: 50
        acces_pmr:
          type: boolean
          example: true
        chaises_ergo:
          type: integer
          example: 5
        handiboucle:
          type: boolean
          example: true
        nombre_salles_max:
          type: integer
          example: 10
        proprietaire:
          type: integer
          example: 10
        publication:
          type: string
          example: "Publié sur tous les Espaces"
        site:
          type: string
          example: "Principal"
        descriptif:
          type: string
          example: "Descriptif de la salle"
        descriptif_publie:
          type: boolean
          example: true
        url_ical:
          type: string
          example: "Telechargements/ical/Edt_Salle_001.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
        est_dans_groupe_de_salle:
          type: integer
          example: 10
          description: "attention, seulement pour les salles simples"
        salles_de_ce_groupe_de_salle:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
          description: "attention, seulement pour les groupes de salles"
        cout_horaire:
          type: integer
          example: 10
    Semaines:                   # Object definition
      type: object
      properties:
        numero_semaine:
          type: integer
          example: 1
        numero_calendaire:
          type: integer
          example: 36
        date:
          type: string
          example: "2023-09-04"
    Services_notation:          # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        matiere:
          type: integer
          example: 13
        promotions:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        td_options:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        regroupements:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        enseignants:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        est_facultatif:
          type: boolean
          example: false
        nb_points_ects:
          type: number
          example: 10.5
        note_seuil_ects:
          type: string
          example: "10"
        note_eliminatoire_ects:
          type: string
          example: "5"
        devoirs:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        periodes_notation_actives:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        periodes_hors_calendrier_actives:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        sous_services:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        est_sous_service:
          type: boolean
          example: false
    Sites:                      # Object definition
      type: object
      properties:
        nom:
          type: string
          example: "Principal"
        couleur:
          type: string
          example: "#21BBEF"
    Stages:                     # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        etudiant:
          type: integer
          example: 12
        dates:
          type: array
          items:
            type: object
            properties:
              du:
                type: string
                example: "2000-02-14"
              au:
                type: string
                example: "2000-02-27"
        formulaire_etudiant:
          type: object
          properties:
            visibilite:
              type: boolean
              example: true
            du:
              type: string
              example: "2000-02-14"
            au:
              type: string
              example: "2000-02-27"
        duree_saisie:
          type: number
          example: 10.0
        duree_calculee:
          type: number
          example: 12.0
        entreprise:
          type: integer
          example: 14
        maitres_stage:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        sujet:
          type: string
          example: "sujet de stage"
        enseignant_tuteur:
          type: integer
          example: 12
        enseignant_responsable:
          type: integer
          example: 14
        sujet_detaille:
          type: string
          example: "Sujet un peu plus détaillé"
        commentaire:
          type: string
          example: "Voici un commentaire bien utile"
        objectifs:
          type: string
          example: "Voici les différents objectifs"
        activites_prevues:
          type: string
          example: "Voici les activités prévues"
        competences_visees:
          type: string
          example: "Voici les compétences visées"
        modalites_concertation:
          type: string
          example: "Voici les modalités de concertation"
        modalites_evaluation:
          type: string
          example: "Voici les modalités d'évaluation"
        convention_signee:
          type: boolean
          example: true
        attestation_fin_stage_recue:
          type: boolean
          example: true
        remuneration:
          type: number
          example: 10.0
        devise:
          type: string
          example: "€"
        avantages:
          type: array
          items:
            type: string
          example: ["Tickets restaurant","Transport"]
    TDOptions:                  # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "TD1"
        code:
          type: string
          example: "1"
        couleur:
          type: string
          example: "#FFFF80"
        genre:
          type: string
          example: "TD"
        uid_identifiant:
          type: string
          example: "Identifiant__UID"
        effectif_saisi:
          type: integer
          example: 10
        mhh:
          type: number
          example: 0
        mhj:
          type: number
          example: 0.416666666666667
        libelle_long:
          type: string
          example: "Voici un libelle un peu plus long"
        email:
          type: string
          example: "TD1@mail.fr"
        proprietaire:
          type: integer
          example: 10
        publication_sur_tous_les_espaces:
          type: boolean
          example: true
        calendrier:
          type: string
          example: "Calendrier1"
        promotion:
          type: integer
          example: 10
        partition:
          type: integer
          example: 9
        regroupement:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        services_notation:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        url_ical:
          type: string
          example: "Telechargements/ical/Edt_TD1.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
    Type_dernier_diplome:       # Object definition
      type: object
      properties:
        nom:
          type: string
          example: "BTS"
        code:
          type: string
          example: "B"
    Types:                      # Object definition
      type: object
      properties:
        nom:
          type: string
          example: "Cours"
        couleur:
          type: string
          example: "#21BBEF"
        mode_appel:
          type: string
          example: "QR Code fixe"
    Utilisateurs:               # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        actif:
          type: boolean
          example: true
        nom:
          type: string
          example: "Dupond"
        prenom:
          type: string
          example: "Camille"
        profil_utilisation:
          type: object
          properties:
            cle:
              type: integer
            nom:
              type: string
          example:  {"cle": 2,"nom": "Modifiant"}
        civilite:
          type: string
          example: "Mme"
        statut:
          type: string
          example: "Superadministrateur"
          description: "Format attendu : 'U' ou 'utilisateur', 'S' ou 'superadministrateur', 'A' ou 'administrateur de base'"
        ldap_identifiant:
          type: string
          example: "Identifiant__LDAP"
        cas_identifiant:
          type: string
          example: "Identifiant__CAS"
        adfs_identifiant:
          type: string
          example: "Identifiant__ADFS"
        saml_identifiant:
          type: string
          example: "Identifiant__SAML"
        identifiant_connexion:
          type: string
          example: "Identifiant__connexion"
        e_mail:
          type: string
          example: "prenom.nom@email.fr"
        adresse1:
          type: string
          example: "12 rue de la paix"
        adresse2:
          type: string
          example: "12 rue de la paix"
        adresse3:
          type: string
          example: "12 rue de la paix"
        adresse4:
          type: string
          example: "12 rue de la paix"
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Marseille"
        pays:
          type: string
          example: "France"
        province:
          type: string
          example: "Province"
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        numero_telephone_portable:
          type: string
          example: "06060606"
        indicatif_telephone_portable:
          type: string
          example: "06"
        acces_espace_secretariat:
          type: boolean
          example: true
security:
  - basicAuth: []  # <-- use the same name here
