openapi: 3.0.0
info:
  title: Description de l'API Rest HP
  description: Description openAPI de l'API Rest d'Hyperplanning.
  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: 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: 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:
                - in: query
                  name: select
                  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:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les absences ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: etudiant
                  description: retourne seulement les absences ayant un de ces clés d'étudiants
                  schema:
                    type: array
                    items:
                        type: integer
                  style: form
                  explode: false
                  required: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: date_debut
                  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
                  schema:
                    type: string
                  style: form
                  explode: false
                  required: false
                  examples:
                    oneIds:
                      value: ["2024-08-06T09:00"]   # ?date_debut=2024-08-06T09:00
                - in: query
                  name: date_fin
                  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
                  schema:
                    type: string
                  style: form
                  explode: false
                  required: false
                  examples:
                    oneIds:
                      value: ["2024-08-06T19:00"]   # ?date_fin=2024-08-06T19:00
            responses:
              '200':    # status code
                description: Tableau des JSON des absences
                content:
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Absences'
                '404':
                    description: "Paramètre invalide"
                '405':
                    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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
            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':
                    description: "Paramètre invalide : Dates hors limites, format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'absence incorrecte"
                '405':
                    description: "Droits insuffisants"

    /absences/ajouter:
        post:
            tags:
                - Absences
            summary: Ajoute une absence à l'étudiant entre 2 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é 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':
                    description: "Paramètre invalide : clé de l'étudiant incorrecte"
                '405':
                    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é 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 : Supression reussie"
                '404':
                    description: "Paramètre invalide : clé de l'étudiant incorrecte"
                '405':
                    description: "Droits insuffisants"


    #### retards ####
    /retards:
        get:
            tags:
                - Retards
            summary: Liste de tous les retards entre 2 dates/heures.
            description: Tableau contenant les json des retards de la base entre 2 dates/heures.
            parameters:
                - in: query
                  name: select
                  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:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les retards ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: etudiant
                  description: retourne seulement les retards ayant un de ces clés d'étudiants
                  schema:
                    type: array
                    items:
                        type: integer
                  style: form
                  explode: false
                  required: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: date_debut
                  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
                  schema:
                    type: string
                  style: form
                  explode: false
                  required: false
                  examples:
                    oneIds:
                      value: ["2024-08-06T09:00"]   # ?date_debut=2024-08-06T09:00
                - in: query
                  name: date_fin
                  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
                  schema:
                    type: string
                  style: form
                  explode: false
                  required: false
                  examples:
                    oneIds:
                      value: ["2024-08-06T19:00"]   # ?date_fin=2024-08-06T19:00
            responses:
              '200':    # status code
                description: Tableau des JSON des retards
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Retards'
        post:
            tags:
                - Retards
            summary: Création d'un nouveau retard dans la base
            description: Création d'un nouveau retard dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Retards'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Retards'
                '400':
                  description: "Paramètres non valides : clé de l'étudiant incorrecte, date ou durée obligatoire..."
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Retards'
                '404':
                    description: "Paramètre invalide"
                '405':
                    description: "Droits insuffisants"
        delete:
            tags:
                - Retards
            summary: Suppression du retard de clé {cle}.
            description: Permet de supprimer définitivement le retard de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du retard à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des retards dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des retards à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - etudiant
                        - matiere
                        - motif
                        - date_debut
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les dispenses ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: etudiant
                  description: retourne seulement les dispenses ayant une de ces clés d'étudiants
                  schema:
                    type: array
                    items:
                        type: integer
                  style: form
                  explode: false
                  required: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: matiere
                  description: retourne seulement les dispenses ayant une de ces clés de matières
                  schema:
                    type: array
                    items:
                        type: integer
                  style: form
                  explode: false
                  required: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: date_debut
                  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
                  schema:
                    type: string
                  style: form
                  explode: false
                  required: false
                  examples:
                    oneIds:
                      value: ["2024-08-06"]   # ?date_debut=2024-08-06
                - in: query
                  name: date_fin
                  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
                  schema:
                    type: string
                  style: form
                  explode: false
                  required: false
                  examples:
                    oneIds:
                      value: ["2024-08-06"]   # ?date_fin=2024-08-06
            responses:
              '200':    # status code
                description: Tableau des JSON des dispenses
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Dispenses'
        post:
            tags:
                - Dispenses
            summary: Création d'une nouvelle dispense dans la base
            description: Création d'une nouvelle dispense dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Dispenses'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Dispenses'
                '400':
                  description: "Paramètres non valides : clé de l'étudiant incorrecte, date ou matiere obligatoire..."
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Dispenses'
                '400':
                    description: "Paramètre invalide"
        post:
            tags:
                - Dispenses
            summary: Mise à jour partielle de la 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: 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/Dispenses'
            responses:
              '200':    # status code
                description: succès - JSON de la dispense modifiée
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Dispenses'
              '400':
                description: "Paramètres non valide : nom obligatoire, Problème de taille..."
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Dispenses
            summary: Suppression de la dispense.
            description: Permet de supprimer définitivement la dispense de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de la dispense à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des dispenses dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des dispenses à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - enseignant
                        - promotion
                        - motif
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les décharges ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: enseignant
                  description: retourne seulement les décharges ayant une de ces clés d'enseignants
                  schema:
                    type: array
                    items:
                        type: integer
                  style: form
                  explode: false
                  required: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: promotion
                  description: retourne seulement les décharges ayant une de ces clés de promotions
                  schema:
                    type: array
                    items:
                        type: integer
                  style: form
                  explode: false
                  required: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: motif
                  description: retourne seulement les décharges ayant une de ces motifs
                  schema:
                    type: string
                  style: form
                  explode: false
                  required: false
                  examples:
                    oneIds:
                      value: ["Motif de la decharge"]   # ?motif=Motif de la decharge
            responses:
              '200':    # status code
                description: Tableau des JSON des décharges
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Decharges'
        post:
            tags:
                - Decharges
            summary: Création d'une nouvelle décharge dans la base
            description: Création d'une nouvelle décharge dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Decharges'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Decharges'
                '400':
                  description: "Paramètres non valides : clé de l'enseignant ou de la promotion incorrecte ..."
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Decharges'
                '400':
                    description: "Paramètre invalide"
        post:
            tags:
                - Decharges
            summary: Mise à jour partielle de la 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: 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/Decharges'
            responses:
              '200':    # status code
                description: succès - JSON de la décharge modifiée
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Decharges'
              '400':
                description: "Paramètres non valide : enseignant obligatoire, Problème de taille..."
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Decharges
            summary: Suppression de la décharge.
            description: Permet de supprimer définitivement la décharge de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de la décharge à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des décharges dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des décharges à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les appariteurs ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les appariteurs ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul nom souhaité
                      value: [Dupond]   # ?nom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs noms souhaités
                      value: [Dupond, Dupont, Martin]   # ?nom=Dupond,Dupont,Martin
                - in: query
                  name: prenom
                  description: retourne seulement les appariteurs ayant un de ces prenoms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul prenom souhaité
                      value: [Denis]   # ?prenom=Denis
                    multipleIds:
                      summary: Exemple avec plusieurs prenoms souhaités
                      value: [Denis, Dominique, Claude]   # ?prenom=Denis,Dominique,Claude
                - in: query
                  name: cas_identifiant
                  description: retourne seulement les appariteurs ayant un de ces cas_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: adfs_identifiant
                  description: retourne seulement les appariteurs ayant un de ces adfs_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: saml_identifiant
                  description: retourne seulement les appariteurs ayant un de ces saml_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Appariteurs'
        post:
            tags:
                - Appariteurs
            summary: Création d'un nouvel appariteur dans la base
            description: Création d'un nouvel appariteur dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Appariteurs'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Appariteurs'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Appariteurs'
                '400':
                    description: "Paramètre invalide"
        post:
            tags:
                - Appariteurs
            summary: Mise à jour partielle de l'appariteur de clé {cle}.
            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: 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/Appariteurs'
            responses:
              '200':    # status code
                description: succès - JSON de l'appariteur modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Appariteurs'
              '400':
                description: "Paramètres non valide : nom obligatoire, Problème de taille..."
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Appariteurs
            summary: Suppression de l'appariteur de clé {cle}.
            description: Permet de supprimer définitivement l'appariteur de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de l'appariteur à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des appariteurs dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des appariteurs à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de la matière ou de la famille incorrecte"
        post:
            tags:
                - Appariteurs
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de l'appariteur ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"

    #### 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ée par nom et prénom.
            parameters:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - uid_identifiant
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les contacts ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les contacts ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: prenom
                  description: retourne seulement les contacts ayant un de ces prénoms 
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: date_naissance
                  description: retourne seulement les contacts ayant une de ces dates de naissance
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: uid_identifiant
                  description: retourne seulement les contacts ayant un de ces uid_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cas_identifiant
                  description: retourne seulement les contacts ayant un de ces cas_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: adfs_identifiant
                  description: retourne seulement les contacts ayant un de ces adfs_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: saml_identifiant
                  description: retourne seulement les contacts ayant un de ces saml_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Contacts'
        post:
            tags:
                - Contacts
            summary: Création d'un nouveau contact dans la base
            description: Création d'un nouveau contact dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Contacts'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Contacts'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Contacts'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Contacts
            summary: Mise à jour partielle du contact de clé {cle}.
            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: 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/Contacts'
            responses:
              '200':    # status code
                description: succès - JSON du contact modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Contacts'
              '400':
                description: "Paramètres non valide : nom obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : contact inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Contacts
            summary: Suppression du contact de clé {cle}.
            description: Permet de supprimer définitivement le contact de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du contact à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des contacts dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés de contacts à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du contact ou de la famille incorrecte"
        post:
            tags:
                - Contacts
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du contact ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - entreprise
                        - etudiant
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les stages ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: entreprise
                  description: retourne seulement les stages ayant un de ces entreprises
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: etudiant
                  description: retourne seulement les stages ayant un de ces étudiants 
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: enseignant_tutueur
                  description: retourne seulement les stages ayant une de ces enseignants tuteurs
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul enseignant tuteur souhaité
                      value: [enseignant1]   # ?enseignant_tutueur=enseignant1
                    multipleIds:
                      summary: Exemple avec plusieurs enseignant tuteurs souhaités
                      value: [enseignant1, enseignant2, enseignant3]   # ?enseignant_tutueur=enseignant11,enseignant2,enseignant3
                - in: query
                  name: enseignant_responsable
                  description: retourne seulement les stages ayant une de ces enseignants responsables
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul enseignant responsable souhaité
                      value: [enseignant1]   # ?enseignant_responsable=enseignant1
                    multipleIds:
                      summary: Exemple avec plusieurs enseignant responsables souhaités
                      value: [enseignant1, enseignant2, enseignant3]   # ?enseignant_responsable=enseignant11,enseignant2,enseignant3
            responses:
              '200':    # status code
                description: Tableau des JSON des stages
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Stages'
        post:
            tags:
                - Stages
            summary: Création d'un nouveau stage dans la base
            description: Création d'un nouveau stage dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Stages'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Stages'
                '400':
                  description: "Paramètres non valides : Etudiant obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Stages'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Stages
            summary: Mise à jour partielle du stage de clé {cle}.
            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: 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/Stages'
            responses:
              '200':    # status code
                description: succès - JSON du stage modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Stages'
              '400':
                description: "Paramètres non valide : Etudiant obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : stage inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Stages
            summary: Suppression du stage de clé {cle}.
            description: Permet de supprimer définitivement le stage de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du stage à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des stages dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés de stages à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du stage ou de la famille incorrecte"
        post:
            tags:
                - Stages
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du stage ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
    #### 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ée par entreprise.
            parameters:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - entreprise
                        - etudiant
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les alternances ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: entreprise
                  description: retourne seulement les alternances ayant une de ces entreprises
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: etudiant
                  description: retourne seulement les alternances ayant un de ces étudiants 
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: enseignant_tutueur
                  description: retourne seulement les alternances ayant un de ces enseignants tuteurs
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul enseignant tuteur souhaité
                      value: [enseignant1]   # ?enseignant_tutueur=enseignant1
                    multipleIds:
                      summary: Exemple avec plusieurs enseignant tuteurs souhaités
                      value: [enseignant1, enseignant2, enseignant3]   # ?enseignant_tutueur=enseignant11,enseignant2,enseignant3
                - in: query
                  name: enseignant_responsable
                  description: retourne seulement les alternances ayant un de ces enseignants responsables
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul enseignant responsable souhaité
                      value: [enseignant1]   # ?enseignant_responsable=enseignant1
                    multipleIds:
                      summary: Exemple avec plusieurs enseignant responsables souhaités
                      value: [enseignant1, enseignant2, enseignant3]   # ?enseignant_responsable=enseignant11,enseignant2,enseignant3
            responses:
              '200':    # status code
                description: Tableau des JSON des alternances
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Alternances'
        post:
            tags:
                - Alternances
            summary: Création d'une nouvelle alternance dans la base
            description: Création d'une nouvelle alternance dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Alternances'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Alternances'
                '400':
                  description: "Paramètres non valides : Etudiant obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Alternances'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Alternances
            summary: Mise à jour partielle de l'alternance de clé {cle}.
            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: 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/Alternances'
            responses:
              '200':    # status code
                description: succès - JSON de l'alternance modifiée
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Alternances'
              '400':
                description: "Paramètres non valide : Etudiant obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : alternance inexistante"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Alternances
            summary: Suppression de l'alternance de clé {cle}.
            description: Permet de supprimer définitivement l'alternance de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de l'alternance à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des alternances dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés de alternances à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé d'alternance ou de la famille incorrecte"
        post:
            tags:
                - Alternances
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de l'alternance ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - type
                        - place
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                - in: query
                  name: cle
                  description: retourne seulement les cours ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - in: query
                  name: parente
                  description: retourne seulement les cours ayant une de ces parentés
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: est_non_place
                  description: retourne seulement les cours placés ou non placés
                  schema:
                    type: boolean
                  style: form
                  explode: false
                - in: query
                  name: statut_place
                  description: retourne seulement les cours ayant un de ces statuts
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: mobilite_seances
                  description: retourne seulement les cours ayant une de ces mobilités
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: matiere
                  description: retourne seulement les cours ayant une de ces clés matières
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: type
                  description: retourne seulement les cours ayant un de ces types
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: reference
                  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)
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: date_debut
                  description: retourne seulement les cours ayant lieu après cette date de debut. Si non renseigné, prend la premiere date de la base.
                  schema:
                    type: string
                  style: form
                  explode: false
                - in: query
                  name: date_fin
                  description: retourne seulement les cours ayant lieu avant cette date de fin. Si non renseigné, prend la derniere date de la base.
                  schema:
                    type: string
                  style: form
                  explode: false
            responses:
              '200':    # status code
                description: Tableau des JSON des cours
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Cours'
        post:
            tags:
                - Cours
            summary: Création d'un nouveau cours dans la base
            description: Création d'un nouveau cours dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Cours'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Cours'
                '400':
                  description: "Paramètres non valides : matière, durée, statut_place, mobilite_seances domaine ou domaine_potentiel obligatoires"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Cours'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Cours
            summary: Mise à jour partielle du cours de clé {cle}.
            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: 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/Cours'
            responses:
              '200':    # status code
                description: succès - JSON du cours modifié
                content:
                  application/json:
                    schema: 
                      $ref: '#/components/schemas/Cours'
              '400':
                description: "Paramètres non valide"
              '404':
                description: "Paramètre invalide : cours inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Cours
            summary: Suppression du cours de clé {cle}.
            description: Permet de supprimer définitivement le cours de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du cours à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des cours dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des cours à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression reussie"
                '404':    # status code
                    description: "Not found : La clé passée n'existe pas"

    /cours/{cle}/cout:
        get:
            tags:
                - Cours
            summary: Coût du cours de clé {cle} sur un domaine.
            description: Coût du cours 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Cout'
                '400':
                    description: "Paramètre invalide : Dates hors limites, format incorrect"
                '404':
                    description: "Paramètre invalide : clé du cours incorrecte"
                '500':
                    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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Couts'
                '400':
                    description: "Paramètre invalide : Dates hors limites, format incorrect"
                '404':
                    description: "Paramètre invalide : clé du cours incorrecte"
                '500':
                    description: "Droits insuffisants"
    /cours/{cle}/site:
        get:
            tags:
                - Cours
            summary: Site affecté au cours de clé {cle} sur un domaine.
            description: Site affecté au cours 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
            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':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé du cours incorrecte"
                '500':
                    description: "Droits insuffisants"
        post:
            tags:
                - Cours
            summary: Modifie le site du cours de clé {cle} 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: 'libelle du site'
                    required: true
                    schema:
                        type: string
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array
                                items:
                                    type: integer
                '403':
                    description: "Droits insuffisants"
                '404':
                    description: "Paramètre invalide : clé de la salle incorrecte"
                '500':
                    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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: object
                                properties:
                                    domaine:
                                        type: array
                                        items:
                                            type: integer
                                            example: 1
                                    site:
                                        type: array                                    
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                site:
                                                    type: string
                                                    example: "Principal"
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé du cours incorrecte"
                '500':
                    description: "Droits insuffisants"
    /cours/{cle}/contenus:
        get:
            tags:
                - Cours
            summary: Caracteristiques du contenu du 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       
                - in: query
                  name: semaine
                  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':
                    description: "Paramètre invalide : Dates hors limites, format incorrect"
                '404':
                    description: "Paramètre invalide : clé du cours incorrecte"
                '500':
                    description: "Droits insuffisants"
        post:
            tags:
                - Cours
            summary: Modifier le titre, la description, les sites internet et/ou le délai de publication du contenu d'un cours pour une semaine.
            description: Modifier 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
                - in: query
                  name: semaine
                  description: 'numéro de la semaine'
                  required: true
                  schema:
                    type: integer
            requestBody:
                description: Champs du JSON utilisé 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
                                                cours: 
                                                    type: integer
                '400':
                    description: "Paramètre invalide : semaine obligatoire ou format delai non valide"
                '403':
                    description: "Paramètre invalide : séance inexistante pour cette semaine"
                '404':
                    description: "Paramètre invalide : Clé du cours incorrecte"
                '500':
                    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       
                - in: query
                  name: semaine
                  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':
                    description: "Paramètre invalide : Dates hors limites, format incorrect"
                '403':
                    description: "Paramètre invalide : séance inexistante pour cette semaine"
                '404':
                    description: "Paramètre invalide : clé du cours incorrecte"
        post:
            tags:
                - Cours
            summary: Modifier le booléen indiquant si l'appel d'un cours pour une semaine est terminé.
            description: Modifier 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
                - in: query
                  name: semaine
                  description: 'numéro de la semaine'
                  required: true
                  schema:
                    type: integer
                - in: query
                  name: appel_termine
                  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':
                    description: "Paramètre invalide : semaine obligatoire"
                '403':
                    description: "Paramètre invalide : séance inexistante pour cette semaine"
                '404':
                    description: "Paramètre invalide : Clé du cours incorrecte"
                '500':
                    description: "Modification impossible"
    /cours/{cle}/detail_seances_placees:
        get:
            tags:
                - Cours
            summary: Détail des séances placées du 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       
                - in: query
                  name: date_debut
                  style: form
                  explode: false
                  schema:
                    type: string
                  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 non renseigné, prend la première date/heure 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.
                - in: query
                  name: date_fin
                  style: form
                  explode: false
                  schema:
                    type: string
                  description: retourne le détail des séances placées ayant lieu avant cette date/heure ('yyyy-mm-ddThh:nn') de fin. <br>
                               Si non renseigné, prend la dernière date/heure 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.
            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':
                    description: "Paramètre invalide : Cours non placé"
                '404':
                    description: "Paramètre invalide : Clé du cours incorrecte"
    /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
                - in: query
                  name: date_debut
                  style: form
                  explode: false
                  schema:
                    type: string
                  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 non renseigné, prend la première date/heure 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.
                - in: query
                  name: date_fin
                  style: form
                  explode: false
                  schema:
                    type: string
                  description: retourne le détail des séances placées ayant lieu avant cette date/heure ('yyyy-mm-ddThh:nn') de fin. <br>
                               Si non renseigné, prend la dernière date/heure 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.
            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':
                    description: "Paramètre invalide : Cours non placé"
                '404':
                    description: "Paramètre invalide : Clé du cours incorrecte"
    

    /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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du cours ou de la famille incorrecte"
        post:
            tags:
                - Cours
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du cours ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"

    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - type
                        - matiere
                        - motif_annulation
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  description: Choix des champs que l'on souhaite avoir dans le json de réponse. Si non renseigné, il y aura tous les champs possibles.
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de réponse
                - in: query
                  name: cle
                  description: retourne seulement les cours annulés ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - in: query
                  name: matiere
                  description: retourne seulement les cours annulés ayant une de ces clés matières
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: type
                  description: retourne seulement les cours annulés ayant un de ces types 
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: reference
                  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)
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: date_debut
                  description: retourne seulement les cours annulés ayant lieu après cette date de debut. Si non renseigné, prend la premiere date de la base.
                  schema:
                    type: string
                  style: form
                  explode: false
                - in: query
                  name: date_fin
                  description: retourne seulement les cours annulés ayant lieu avant cette date de fin. Si non renseigné, prend la derniere date de la base.
                  schema:
                    type: string
                  style: form
                  explode: false
                - in: query
                  name: enseignants
                  description: retourne seulement les cours annulés de ces enseignants
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: promotions
                  description: retourne seulement les cours annulés de ces promotions
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: tdoptions
                  description: retourne seulement les cours annulés de ces td/options
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: regroupements
                  description: retourne seulement les cours annulés de ces regroupements
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: salles
                  description: retourne seulement les cours annulés de ces salles
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                - in: query
                  name: etudiants
                  description: retourne seulement les cours annulés de ces étudiants
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
            responses:
              '200':    # status code
                description: Tableau des JSON des cours annulés
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/CoursAnnules'
        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é pour la création (cle_cours, domaine, motif et commentaire)
                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':
                  description: succès
                '400':
                  description: "Paramètres non valides : cle_cours obligatoire, cours protege ou verrouille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/CoursAnnules'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Cours_annules
            summary: Mise à jour partielle du cours annulés de clé {cle}.
            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: string            
            requestBody:
                description: JSON contenant les champs (motif_annulation et/ou commentaire) 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/CoursAnnules'
            responses:
              '200':    # status code
                description: succès - JSON du cours modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/CoursAnnules'
              '400':
                description: "Paramètres non valide"
              '404':
                description: "Paramètre invalide : cours annulé inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Cours_annules
            summary: Suppression du cours annulé de clé {cle}.
            description: Permet de supprimer définitivement le cours annulé de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du cours annulé à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des cours annulés dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des cours annulés à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression reussie"
                '400':    # Bad request
                    description: "Bad request : on a pas pu tout supprimer"
                '403':    # forbidden
                    description: "Droits insuffisants"
                '404':    # status code
                    description: "Not found : La clé passée n'existe pas"


    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - libelle
                        - valeur
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les coûts horaires des enseignants ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: libelle
                  description: retourne seulement les coûts horaires des enseignants ayant un de ces libellés
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: valeur
                  description: retourne seulement les coûts horaires des enseignants ayant une de ces valeurs
                  schema:
                    type: array
                    items:
                        type: number
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  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 dans la base
            description: Création d'une nouveau coût horaire pour les enseignants dans la base à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Couts_horaires_enseignants'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Couts_horaires_enseignants'
                '400':
                  description: "Paramètres non valides : libellé et valeur obligatoires"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Couts_horaires_enseignants'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Couts_horaires_enseignants
            summary: Mise à jour partielle du coût horaire des enseignants de clé {cle}.
            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: 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/Couts_horaires_enseignants'
            responses:
              '200':    # status code
                description: succès - JSON du coût horaire des enseignants modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Couts_horaires_enseignants'
              '400':
                description: "Paramètres non valide"
              '404':
                description: "Paramètre invalide : coût horaire des enseignants inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Couts_horaires_enseignants
            summary: Suppression du coût horaire des enseignants de clé {cle}.
            description: Permet de supprimer définitivement le coût horaire des enseignants de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du coût horaire des enseignants à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 des enseignants
            description: Suppression des coûts horaires des enseignants dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des coûts horaires des enseignants à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - libelle
                        - valeur
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les coûts horaires des salles ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: libelle
                  description: retourne seulement les coûts horaires des salles ayant un de ces libellés
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: valeur
                  description: retourne seulement les coûts horaires des salles ayant une de ces valeurs
                  schema:
                    type: array
                    items:
                        type: number
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  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 dans la base
            description: Création d'une nouveau coût horaire pour les salles dans la base à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Couts_horaires_salles'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Couts_horaires_salles'
                '400':
                  description: "Paramètres non valides : libellé et valeur obligatoires"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Couts_horaires_salles'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Couts_horaires_salles
            summary: Mise à jour partielle du coût horaire des salles de clé {cle}.
            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: 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/Couts_horaires_salles'
            responses:
              '200':    # status code
                description: succès - JSON du coût horaire des salles modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Couts_horaires_salles'
              '400':
                description: "Paramètres non valide"
              '404':
                description: "Paramètre invalide : coût horaire des salles inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Couts_horaires_salles
            summary: Suppression du coût horaire des salles de clé {cle}.
            description: Permet de supprimer définitivement le coût horaire des salles de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du coût horaire des salles à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 des salles
            description: Suppression des coûts horaires des salles dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des coûts horaires des salles à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression reussie"
                '403':
                    description: "Droits insuffisants"
                '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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - code
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: Filtre sur les clés des cursus
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: Filtre sur les noms des cursus
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: code
                  description: Filtre sur les codes des cursus
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Cursus'
        post:
            tags:
                - Cursus
            summary: Création d'un nouveau cursus
            description: Création d'un nouveau cursus dans la base et initialisation des 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':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Cursus'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Cursus'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Cursus
            summary: Mise à jour partielle du cursus de clé {cle}.
            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: 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/Cursus'
            responses:
              '200':    # status code
                description: succès - JSON du cursus modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Cursus'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : partition inexistante"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Cursus
            summary: Suppression du cursus de clé {cle}.
            description: Permet de supprimer définitivement le cursus de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du cursus à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des cursus dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des cursus à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du cursus ou de la famille incorrecte"
        post:
            tags:
                - Cursus
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du cursus ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - prenom
                        - code
                        - uid_identifiant
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les enseignants ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les enseignants ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: prenom
                  description: retourne seulement les enseignants ayant un de ces prenoms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul prenom souhaité
                      value: [maths]   # ?prenom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs prenoms souhaités
                      value: [maths, francais, histoire]   # ?prenom=maths,francais,histoire
                - in: query
                  name: code
                  description: retourne seulement les enseignants ayant un de ces codes
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: uid_identifiant
                  description: retourne seulement les enseignants ayant un de ces uid_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiant souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
                - in: query
                  name: cas_identifiant
                  description: retourne seulement les enseignants ayant un de ces cas_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: adfs_identifiant
                  description: retourne seulement les enseignants ayant un de ces adfs_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: saml_identifiant
                  description: retourne seulement les enseignants ayant un de ces saml_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Enseignants'
        post:
            tags:
                - Enseignants
            summary: Création d'un nouvel enseignant dans la base
            description: Création d'un nouvel enseignant dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Enseignants'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Enseignants'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Enseignants'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Enseignants
            summary: Mise à jour partielle de l'enseignant de clé {cle}.
            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: 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/Enseignants'
            responses:
              '200':    # status code
                description: succès - JSON de l'enseignant modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Enseignants'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : enseignant inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Enseignants
            summary: Suppression de l'enseignant de clé {cle}.
            description: Permet de supprimer définitivement l'enseignant de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de l'enseignant à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des enseignants dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des enseignants à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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} de l'enseignant de clé {cle}.
            description: Flux de la photo de l'enseignant au format voulu (jpeg, png, gif ou bitmap).
            parameters:
                -   name: cle
                    in: path
                    description: 'clé de l''enseignant'
                    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: 
                                $ref: '#/components/schemas/Photos'
                '400':
                    description: "Paramètre invalide"
                            
    /enseignants/{cle}/photo:
        post:
            tags:
                - Enseignants
            summary: Mise à jour de la photo de l'enseignant de clé {cle}.
            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: string            
            requestBody:
                description: JSON contenant le champs format (jpeg, png, gif ou bitmap) et la photo.
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Photos'
            responses:
              '200':    # status code
                description: succès - JSON de la photo de l'enseignant modifiée
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Photos'
              '400':
                description: "Paramètres non valide"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Enseignants
            summary: Suppression de la photo l'enseignant de clé {cle}.
            description: Permet d'effacer la photo l'enseignant de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de l'enseignant
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 de l'enseignant de clé {cle} entre 2 dates.
            description: Clés des cours de l'enseignant 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       
                - in: query
                  name: date_debut
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_fin
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'

                        
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array 
                                items:
                                    type: integer
                '400':
                    description: "Paramètre invalide : Dates hors limites"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
                            
    /enseignants/{cle_ens}/cours/{cle_cours}/domaine:
        get:
            tags:
                - Enseignants
            summary: Domaine de présence de l'enseignant de clé {cle_ens} dans le cours de clé {cle_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: array
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
        post:
            tags:
                - Enseignants
            summary: Modifie le domaine de présence de l'enseignant de clé {cle_ens} dans le cours de clé {cle_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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 

                        
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
    /enseignants/{cle}/indisponibilites:
        get:
            tags:
                - Enseignants
            summary: Indisponibilités de l'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       
                - in: query
                  name: semaine
                  schema:
                    type: integer
                  description: semaine
            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':
                    description: "Paramètre semaine invalide"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
    /enseignants/{cle}/voeux:
        get:
            tags:
                - Enseignants
            summary: Voeux de l'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       
                - in: query
                  name: semaine
                  schema:
                    type: integer
                  description: semaine
            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':
                    description: "Paramètre semaine invalide"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
    /enseignants/{cle}/cout:
        get:
            tags:
                - Enseignants
            summary: Coût de l'enseignant de clé {cle} entre 2 dates ou sur un domaine.
            description: Coût de l'enseignant 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       
                - in: query
                  name: date_debut
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_fin
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non

                        
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Cout'
                '400':
                    description: "Paramètre invalide : Dates hors limites, format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
                '500':
                    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. Si pas de paramètres, retourne le coût de tous les enseignants 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
                - in: query
                  name: date_debut
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_fin
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non

                        
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Couts'
                '400':
                    description: "Paramètre invalide : Dates hors limites, format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
                '500':
                    description: "Droits insuffisants"
        
    /enseignants/{cle}/duree_cours:
        get:
            tags:
                - Enseignants
            summary: Durée de cours de l'enseignant de clé {cle} sur un domaine.
            description: Durée des cours de l'enseignant 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non

                        
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureeCours'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
        
    /enseignants/duree_cours:
        get:
            tags:
                - Enseignants
            summary: Durée du cours des enseignants sur un domaine.
            description: Durée des cours des enseignants sur le domaine. Si pas de paramètres, retourne la durée de tous les enseignants 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureesCours'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
        
    /enseignants/{cle}/duree_disponible:
        get:
            tags:
                - Enseignants
            summary: Durée disponible de l'enseignant de clé {cle} sur un domaine.
            description: Durée disponible de l'enseignant 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non

                        
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema:
                                $ref: '#/components/schemas/DureeDisponible'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
        
    /enseignants/duree_disponible:
        get:
            tags:
                - Enseignants
            summary: Durée disponible des enseignants sur un domaine.
            description: Durée disponible des enseignants sur le domaine. Si pas de paramètres, retourne la durée de tous les enseignants 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureesDisponible'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
        
    /enseignants/{cle}/duree_ponderee_cours:
        get:
            tags:
                - Enseignants
            summary: Durée de cours ponderee de l'enseignant de clé {cle} sur un domaine.
            description: Durée de cours ponderee de l'enseignant 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non

                        
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema:
                                type: object
                                properties:
                                    domaine:
                                        type: array
                                        items:
                                            type: integer
                                    avec_jours_feries: 
                                        type: boolean
                                        example: true
                                    avec_cours_non_places: 
                                        type: boolean
                                        example: true
                                    duree_ponderee_cours: 
                                        type: number
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
        
    /enseignants/duree_ponderee_cours:
        get:
            tags:
                - Enseignants
            summary: Durée de cours ponderee des enseignants sur un domaine.
            description: Durée de cours ponderee des enseignants sur le domaine. Si pas de paramètres, retourne la durée de tous les enseignants 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
                  
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: object
                                properties:
                                    domaine:
                                        type: array
                                        items:
                                            type: integer
                                    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
                                                duree: 
                                                    type: number
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"

    /enseignants/{cle}/t1:
        get:
            tags:
                - Enseignants
            summary: T1 de l'enseignant de clé {cle} sur un domaine.
            description: T1 l'enseignant 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema:
                                type: object
                                properties:
                                    domaine:
                                        type: array
                                        items:
                                            type: integer
                                    avec_jours_feries: 
                                        type: boolean
                                        example: true
                                    t1: 
                                        type: number
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
        
    /enseignants/t1:
        get:
            tags:
                - Enseignants
            summary: T1 des enseignants sur un domaine.
            description: T1 des enseignants sur le domaine. Si pas de paramètres, retourne la durée de tous les enseignants 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: object
                                properties:
                                    domaine:
                                        type: array
                                        items:
                                            type: integer
                                    avec_jours_feries: 
                                        type: boolean
                                        example: true
                                    t1: 
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                duree: 
                                                    type: number
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
    /enseignants/{cle}/t2_conv:
        get:
            tags:
                - Enseignants
            summary: T2 conventionnel de l'enseignant de clé {cle} sur un domaine.
            description: T2 conventionnel l'enseignant 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema:
                                type: object
                                properties:
                                    domaine:
                                        type: array
                                        items:
                                            type: integer
                                    avec_jours_feries: 
                                        type: boolean
                                        example: true
                                    t2_conv: 
                                        type: number
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
        
    /enseignants/t2_conv:
        get:
            tags:
                - Enseignants
            summary: T2 conventionnel des enseignants sur un domaine.
            description: T2 conventionnel des enseignants sur le domaine. Si pas de paramètres, retourne la durée de tous les enseignants 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: object
                                properties:
                                    domaine:
                                        type: array
                                        items:
                                            type: integer
                                    avec_jours_feries: 
                                        type: boolean
                                        example: true
                                    t2_conv: 
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                duree: 
                                                    type: number
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
    /enseignants/{cle}/t2_real:
        get:
            tags:
                - Enseignants
            summary: T2 réalisé de l'enseignant de clé {cle} sur un domaine.
            description: T2 réalisé  l'enseignant 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema:
                                type: object
                                properties:
                                    domaine:
                                        type: array
                                        items:
                                            type: integer
                                    avec_jours_feries: 
                                        type: boolean
                                        example: true
                                    t2_real: 
                                        type: number
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
    /enseignants/t2_real:
        get:
            tags:
                - Enseignants
            summary: T2 réalisé des enseignants sur un domaine.
            description: T2 réalisé des enseignants sur le domaine. Si pas de paramètres, retourne la durée de tous les enseignants 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: object
                                properties:
                                    domaine:
                                        type: array
                                        items:
                                            type: integer
                                    avec_jours_feries: 
                                        type: boolean
                                        example: true
                                    t2_real: 
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                duree: 
                                                    type: number
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
    /enseignants/{cle}/t3:
        get:
            tags:
                - Enseignants
            summary: T3 de l'enseignant de clé {cle} sur un domaine.
            description: T3 l'enseignant 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema:
                                type: object
                                properties:
                                    domaine:
                                        type: array
                                        items:
                                            type: integer
                                    avec_jours_feries: 
                                        type: boolean
                                        example: true
                                    t3: 
                                        type: number
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
        
    /enseignants/t3:
        get:
            tags:
                - Enseignants
            summary: T3 des enseignants sur un domaine.
            description: T3 des enseignants sur le domaine. Si pas de paramètres, retourne la durée de tous les enseignants 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: object
                                properties:
                                    domaine:
                                        type: array
                                        items:
                                            type: integer
                                    avec_jours_feries: 
                                        type: boolean
                                        example: true
                                    t3: 
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                duree: 
                                                    type: number
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
    /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':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
    /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':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant incorrecte"
    /enseignants/{cle_ens}/promotions/{cle_promo}/cout_horaire:
        get:
            tags:
                - Enseignants
            summary: Coût horaire affecté à la promotion pour l'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':
                    description: "Droits insuffisants"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant ou de la promotion incorrecte"
        post:
            tags:
                - Enseignants
            summary: Modification du coût horaire affecté à la promotion pour l'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':
                    description: "Droits insuffisants"
                '403':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant ou de la promotion incorrecte"
                '500':
                    description: "Modification impossible"
    /enseignants/{cle_ens}/tdoptions/{cle_tdopt}/cout_horaire:
        get:
            tags:
                - Enseignants
            summary: Coût horaire affecté au td/option pour l'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':
                    description: "Droits insuffisants"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant ou du td/option incorrecte"
        post:
            tags:
                - Enseignants
            summary: Modification du coût horaire affecté au td/option pour l'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':
                    description: "Droits insuffisants"
                '403':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant ou du td/option incorrecte"
                '500':
                    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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant ou de la famille incorrecte"
        post:
            tags:
                - Enseignants
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de l'enseignant ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
    #### 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ée par raison sociale.
            parameters:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - raison_sociale
                        - numero_siret
                        - uid_identifiant
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les entreprises ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: raison_sociale
                  description: retourne seulement les entreprises ayant une de ces raisons sociales
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec une seule raison sociale souhaitée
                      value: [entreprise1]   # ?raison_sociale=entreprise1
                    multipleIds:
                      summary: Exemple avec plusieurs raisons sociales souhaités
                      value: [entreprise1, entreprise2, entreprise3]   # ?raison_sociale=entreprise1,entreprise2,entreprise3
                - in: query
                  name: nom_commercial
                  description: retourne seulement les entreprises ayant un de ces noms 
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: numero_siret
                  description: retourne seulement les entreprises ayant un de ces numeros siret
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul numero souhaité
                      value: [123]   # ?numero_siret=123
                    multipleIds:
                      summary: Exemple avec plusieurs codes souhaités
                      value: [123, 456, 789]   # ?numero_siret=123,456,789
                - in: query
                  name: uid_identifiant
                  description: retourne seulement les entreprises ayant un de ces uid_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [ent1]   # ?uid_identifiant=ent1
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiant souhaités
                      value: [ent1, ent2, ent3]   # ?uid_identifiant=ent1,ent2,ent3
            responses:
              '200':    # status code
                description: Tableau des JSON des entreprises
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Entreprises'
        post:
            tags:
                - Entreprises
            summary: Création d'une nouvelle entreprise dans la base
            description: Création d'une nouvelle entreprise dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Entreprises'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Entreprises'
                '400':
                  description: "Paramètres non valides : raison sociale obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Entreprises'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Entreprises
            summary: Mise à jour partielle de l'entreprise de clé {cle}.
            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: 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/Entreprises'
            responses:
              '200':    # status code
                description: succès - JSON de l'entreprise modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Entreprises'
              '400':
                description: "Paramètres non valide : raison sociale obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : entreprise inexistante"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Entreprises
            summary: Suppression de l'entreprise de clé {cle}.
            description: Permet de supprimer définitivement l'entreprise de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de l'entreprise à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des entreprises dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des entreprises à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de l'entreprise ou de la famille incorrecte"
        post:
            tags:
                - Entreprises
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de l'entreprise ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - numero_ine
                        - numero_ordre
                        - uid_identifiant
                        - proprietaire
                        - civilite
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les étudiants ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les étudiants ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: prenom
                  description: retourne seulement les étudiants ayant un de ces prenoms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul prenom souhaité
                      value: [maths]   # ?prenom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs prenoms souhaités
                      value: [maths, francais, histoire]   # ?prenom=maths,francais,histoire
                - in: query
                  name: date_naissance
                  description: retourne seulement les étudiants ayant une de ces dates de naissance
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec une seule date de naissance souhaitée
                      value: [mths]   # ?date_naissance=mths
                    multipleIds:
                      summary: Exemple avec plusieurs dates de naissance souhaitées
                      value: [mths, fr, hist]   # ?date_naissance=mths,fr,hist
                - in: query
                  name: uid_identifiant
                  description: retourne seulement les étudiants ayant un de ces uid_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiant souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
                - in: query
                  name: numero_ordre
                  description: retourne seulement les étudiants ayant un de ces numéros d'ordre
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul numéro d'ordre souhaité
                      value: [mths]   # ?numero_ordre=mths
                    multipleIds:
                      summary: Exemple avec plusieurs numéros d'ordre souhaités
                      value: [mths, fr, hist]   # ?numero_ordre=mths,fr,hist
                - in: query
                  name: numero_ine
                  description: retourne seulement les étudiants ayant un de ces numéros INE
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul numéro INE souhaité
                      value: [mths]   # ?numero_ine=mths
                    multipleIds:
                      summary: Exemple avec plusieurs numéros INE souhaités
                      value: [mths, fr, hist]   # ?numero_ine=mths,fr,hist
                - in: query
                  name: cas_identifiant
                  description: retourne seulement les étudiants ayant un de ces cas_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: adfs_identifiant
                  description: retourne seulement les étudiants ayant un de ces adfs_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: saml_identifiant
                  description: retourne seulement les étudiants ayant un de ces saml_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Etudiants'
        post:
            tags:
                - Etudiants
            summary: Création d'un nouvel étudiant dans la base
            description: Création d'un nouvel étudiant dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Etudiants'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Etudiants'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Etudiants'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Etudiants
            summary: Mise à jour partielle de l'étudiant de clé {cle}.
            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: 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/Etudiants'
            responses:
              '200':    # status code
                description: succès - JSON de la matière modifiée
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Etudiants'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : étudiant inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Etudiants
            summary: Suppression de l'étudiant de clé {cle}.
            description: Permet de supprimer définitivement l'étudiant de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de l'étudiant à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des étudiants dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des étudiants à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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} de l'étudiant de clé {cle}.
            description: Flux de la photo de l'étudiant 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: 
                                $ref: '#/components/schemas/Photos'
                '400':
                    description: "Paramètre invalide"
                            
    /etudiants/{cle}/photo:
        post:
            tags:
                - Etudiants
            summary: Mise à jour de la photo de l'étudiant de clé {cle}.
            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: integer            
            requestBody:
                description: JSON contenant le champs format (jpeg, png, gif ou bitmap) et la photo.
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Photos'
            responses:
              '200':    # status code
                description: succès - JSON de la photo de l'étudiant modifiée
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Photos'
              '400':
                description: "Paramètres non valide"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Etudiants
            summary: Suppression de la photo l'étudiant de clé {cle}.
            description: Permet d'effacer la photo 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 : Supression 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 de l'étudiant de clé {cle} à une date ou entre 2 dates.
            description: Clés des regroupements de l'étudiant à 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       
                - in: query
                  name: date
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_debut
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_fin
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array 
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé de l'étudiant incorrecte"
                '405':
                    description: "Droits insuffisants"
    /etudiants/{cle}/promotions:
        get:
            tags:
                - Etudiants
            summary: Clés des promotions de l'étudiant de clé {cle} à une date ou entre 2 dates.
            description: Clés des promotions de l'étudiant à 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       
                - in: query
                  name: date
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_debut
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_fin
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array 
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé de l'étudiant incorrecte"
                '405':
                    description: "Droits insuffisants"
    /etudiants/{cle_etu}/promotions/{cle_promo}/ajouter:
        post:
            tags:
                - Etudiants
            summary: Affecte l'étudiant de clé {cle_etu} à la promotion de clé {cle_promo} sur l'année ou à partir d'une date.
            description: Affecte l'étudiant à une promotion sur l'année par défaut. Pour affecter un é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       
                - in: query
                  name: date
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array 
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé de l'étudiant ou de la promotion incorrecte"
                '405':
                    description: "Droits insuffisants"
    /etudiants/{cle_etu}/promotions/{cle_promo}/enlever:
        post:
            tags:
                - Etudiants
            summary: Enleve l'étudiant de clé {cle_etu} à la promotion de clé {cle_promo} sur l'année ou à partir d'une date.
            description: Enleve l'étudiant à une promotion sur l'année par défaut. Pour enlever un étudiant à 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       
                - in: query
                  name: date
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array 
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé de l'étudiant ou de la promotion incorrecte"
                '405':
                    description: "Droits insuffisants"
    /etudiants/{cle_etu}/promotions/{cle_promo}/dates_affectation:
        get:
            tags:
                - Etudiants
            summary: Dates d'affectation de l'étudiant dans la 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: array 
                                items:
                                    type: object
                                    properties:
                                      du:
                                        type: string
                                      au:
                                        type: string
                '404':
                    description: "Paramètre invalide : clé de l'étudiant ou de la promotion incorrecte"
                '405':
                    description: "Droits insuffisants"
    /etudiants/{cle}/tdoptions:
        get:
            tags:
                - Etudiants
            summary: Clés des td/options de l'étudiant de clé {cle} à une date ou entre 2 dates.
            description: Clés des td/options de l'étudiant à 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       
                - in: query
                  name: date
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_debut
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_fin
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array 
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé de l'étudiant incorrecte"
                '405':
                    description: "Droits insuffisants"
                            
    /etudiants/{cle_etu}/tdoptions/{cle_tdopt}/ajouter:
        post:
            tags:
                - Etudiants
            summary: Affecte l'étudiant de clé {cle_etu} au td/option de clé {cle_tdopt} sur l'année ou à partir d'une date.
            description: Affecte l'étudiant au td/option sur l'année par défaut. Pour affecter un é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       
                - in: query
                  name: date
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array 
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé de l'étudiant ou du TD/option incorrecte"
                '405':
                    description: "Droits insuffisants"
    /etudiants/{cle_etu}/tdoptions/{cle_tdopt}/enlever:
        post:
            tags:
                - Etudiants
            summary: Enleve l'étudiant de clé {cle_etu} du TD/option de clé {cle_tdopt} sur l'année ou à partir d'une date.
            description: Enleve l'étudiant du TD/option sur l'année par défaut. Pour enlever un é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       
                - in: query
                  name: date
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array 
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé de l'étudiant ou du TD/option incorrecte"
                '405':
                    description: "Droits insuffisants"

    /etudiants/{cle_etu}/tdoptions/{cle_tdopt}/dates_affectation:
        get:
            tags:
                - Etudiants
            summary: Dates d'affectation de l'étudiant dans le 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: array 
                                items:
                                    type: object
                                    properties:
                                      du:
                                        type: string
                                      au:
                                        type: string
                '404':
                    description: "Paramètre invalide : clé de l'étudiant ou du td/option incorrecte"
                '405':
                    description: "Droits insuffisants"
    /etudiants/{cle}/cours:
        get:
            tags:
                - Etudiants
            summary: Clés des cours de l'étudiant de clé {cle} entre 2 dates.
            description: Clés des cours de l'étudiant 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       
                - in: query
                  name: date_debut
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_fin
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'

                        
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array 
                                items:
                                    type: integer
                '400':
                    description: "Paramètre invalide : Dates hors limites"
                '404':
                    description: "Paramètre invalide : clé de l'étudiant incorrecte"
                '405':
                    description: "Droits insuffisants"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/periodes_notation/{cle_pern}/bonus_malus:
        get:
            tags:
                - Etudiants
            summary: Bonus/malus affecté à l'étudiant pour le service de notation et la 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':
                    description: "Paramètre invalide : clé du service de notation, de l'étudiant ou de la période de notation incorrecte"
        post:
            tags:
                - Etudiants
            summary: Modification du bonus/malus de l'étudiant pour le service de notation et la 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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé du service de notation, de l'étudiant ou de la période de notation"
                '500':
                    description: "Modification impossible"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/periodes_hors_calendrier/{cle_perhc}/bonus_malus:
        get:
            tags:
                - Etudiants
            summary: Bonus/malus affecté à l'étudiant pour le service de notation et la 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':
                    description: "Paramètre invalide : clé du service de notation, de l'étudiant ou de la période hors calendrier incorrecte"
        post:
            tags:
                - Etudiants
            summary: Modification du bonus/malus de l'étudiant pour le service de notation et la 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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé du service de notation, de l'étudiant ou de la période hors calendrier"
                '500':
                    description: "Modification impossible"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/calendriers_notation/{cle_caln}/appreciation:
        get:
            tags:
                - Etudiants
            summary: Appréciation de l'étudiant pour le service de notation et le 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':
                    description: "Paramètre invalide : clé du service de notation, de l'étudiant ou du calendrier de notation incorrecte"
        post:
            tags:
                - Etudiants
            summary: Modification de l'appréciation de l'étudiant pour le service de notation et le 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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé du service de notation, de l'étudiant ou du calendrier de notation"
                '500':
                    description: "Modification impossible"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/periodes_notation/{cle_pern}/appreciation:
        get:
            tags:
                - Etudiants
            summary: Appréciation de l'étudiant pour le service de notation et la 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':
                    description: "Paramètre invalide : clé du service de notation, de l'étudiant ou de la période de notation incorrecte"
        post:
            tags:
                - Etudiants
            summary: Modification de l'appréciation de l'étudiant pour le service de notation et la 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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé du service de notation, de l'étudiant ou de la période de notation"
                '500':
                    description: "Modification impossible"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/periodes_hors_calendrier/{cle_perhc}/appreciation:
        get:
            tags:
                - Etudiants
            summary: Appréciation de l'étudiant pour le service de notation et la 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':
                    description: "Paramètre invalide : clé du service de notation, de l'étudiant ou de la période hors calendrier incorrecte"
        post:
            tags:
                - Etudiants
            summary: Modification de l'appréciation de l'étudiant pour le service de notation et la 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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé du service de notation, de l'étudiant ou de la période hors calendrier"
                '500':
                    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 à l'étudiant pour la promotion et la 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':
                    description: "Paramètre invalide : clé de la promotion, de l'étudiant ou de la période de notation incorrecte"
        post:
            tags:
                - Etudiants
            summary: Modification de l'observation générale de l'étudiant pour la promotion et la 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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé de la promotion, de l'étudiant ou de la période de notation"
                '500':
                    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 à l'étudiant pour la promotion et la 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':
                    description: "Paramètre invalide : clé de la promotion, de l'étudiant ou de la période hors calendrier incorrecte"
        post:
            tags:
                - Etudiants
            summary: Modification de l'observation générale de l'étudiant pour la promotion et la 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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé de la promotion, de l'étudiant ou de la période hors calendrier"
                '500':
                    description: "Modification impossible"
    /etudiants/{cle_etu}/promotions/{cle_promo}/periodes_notation/{cle_pern}/decision:
        get:
            tags:
                - Etudiants
            summary: Décision affectée à l'étudiant pour la promotion et la 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':
                    description: "Paramètre invalide : clé de la promotion, de l'étudiant ou de la période de notation incorrecte"
        post:
            tags:
                - Etudiants
            summary: Modification de la décision de l'étudiant pour la promotion et la 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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé de la promotion, de l'étudiant ou de la période de notation"
                '500':
                    description: "Modification impossible"
    /etudiants/{cle_etu}/promotions/{cle_promo}/periodes_hors_calendrier/{cle_perhc}/decision:
        get:
            tags:
                - Etudiants
            summary: Décision affectée à l'étudiant pour la promotion et la 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':
                    description: "Paramètre invalide : clé de la promotion, de l'étudiant ou de la période hors calendrier incorrecte"
        post:
            tags:
                - Etudiants
            summary: Modification de la décision de l'étudiant pour la promotion et la 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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé de la promotion, de l'étudiant ou de la période hors calendrier"
                '500':
                    description: "Modification impossible"
    /etudiants/{cle_etu}/devoirs/{cle_devoir}/notes:
        get:
            tags:
                - Etudiants
            summary: Note affectée à l'étudiant pour le 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':
                    description: "Paramètre invalide : clé de la promotion, de l'étudiant ou de la période de notation incorrecte"
        post:
            tags:
                - Etudiants
            summary: Modification de la note de l'étudiant pour le 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 HP
                    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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé du devoir ou de l'étudiant"
                '500':
                    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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de l'étudiant ou de la famille incorrecte"
        post:
            tags:
                - Etudiants
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de l'étudiant ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
    #### 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 libelle puis code.
            parameters:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - libelle
                        - code
                        - libelle_long
                        - uid_identifiant
                        - couleur
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les matières ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: libelle
                  description: retourne seulement les matières ayant un de ces libelles
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul libelle souhaité
                      value: [maths]   # ?libelle=maths
                    multipleIds:
                      summary: Exemple avec plusieurs libelles souhaités
                      value: [maths, francais, histoire]   # ?libelle=maths,francais,histoire
                - in: query
                  name: code
                  description: retourne seulement les matières ayant un de ces codes
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: uid_identifiant
                  description: retourne seulement les matières ayant un de ces uid_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiant souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tableau des JSON des matières
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Matieres'
        post:
            tags:
                - Matieres
            summary: Création d'une nouvelle matière dans la base
            description: Création d'une nouvelle matière dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Matieres'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Matieres'
                '400':
                  description: "Paramètres non valides : libelle obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Matieres'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Matieres
            summary: Mise à jour partielle de la matière de clé {cle}.
            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: 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/Matieres'
            responses:
              '200':    # status code
                description: succès - JSON de la matière modifiée
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Matieres'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : matière inexistante"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Matieres
            summary: Suppression de la matière de clé {cle}.
            description: Permet de supprimer définitivement la matière de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de la matière à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des matières dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des matières à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de la matière ou de la famille incorrecte"
        post:
            tags:
                - Matieres
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de la matière ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
   
    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - code
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les modules ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les modules ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: code
                  description: retourne seulement les modules ayant un de ces codes
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Modules'
        post:
            tags:
                - Modules
            summary: Création d'un nouveau module dans la base
            description: Création d'un nouveau module dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Modules'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Modules'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Modules'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Modules
            summary: Mise à jour partielle du module de clé {cle}.
            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: 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/Modules'
            responses:
              '200':    # status code
                description: succès - JSON du module modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Modules'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : module inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Modules
            summary: Suppression du module de clé {cle}.
            description: Permet de supprimer définitivement le module de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du module à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des modules dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des modules à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du module ou de la famille incorrecte"
        post:
            tags:
                - Modules
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du module ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"

    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - uid_identifiant
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les parents ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les parents ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: prenom
                  description: retourne seulement les parents ayant un de ces prenoms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul prenom souhaité
                      value: [maths]   # ?prenom=maths
                    multipleIds:
                      summary: Exemple avec plusieurs prenoms souhaités
                      value: [maths, francais, histoire]   # ?prenom=maths,francais,histoire
                - in: query
                  name: nom_naissance
                  description: retourne seulement les parents ayant un de ces noms de naissance
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec une seule date de naissance souhaitée
                      value: [mths]   # ?nom_naissance=mths
                    multipleIds:
                      summary: Exemple avec plusieurs dates de naissance souhaitées
                      value: [mths, fr, hist]   # ?nom_naissance=mths,fr,hist
                - in: query
                  name: uid_identifiant
                  description: retourne seulement les parents ayant un de ces uid_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiant souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
                - in: query
                  name: cas_identifiant
                  description: retourne seulement les parents ayant un de ces cas_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: adfs_identifiant
                  description: retourne seulement les parents ayant un de ces adfs_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: saml_identifiant
                  description: retourne seulement les parents ayant un de ces saml_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Parents'
        post:
            tags:
                - Parents
            summary: Création d'un nouveau parent dans la base
            description: Création d'un nouveau parent dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Parents'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Parents'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Parents'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Parents
            summary: Mise à jour partielle du parent de clé {cle}.
            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: 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/Parents'
            responses:
              '200':    # status code
                description: succès - JSON du parent modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Parents'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : parent inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Parents
            summary: Suppression du parent de clé {cle}.
            description: Permet de supprimer définitivement le parent de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du parent à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des parents dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des parents à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 et nom.
            parameters:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les partitions ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les partitions ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: promotion
                  description: retourne seulement les partitions ayant une de ces promotions
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul prenom souhaité
                      value: [12]   # ?promotion=12
                    multipleIds:
                      summary: Exemple avec plusieurs prenoms souhaités
                      value: [12, 15, 18]   # ?promotion=12,15,18
            responses:
              '200':    # status code
                description: Tableau des JSON des partitions
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Partitions'
        post:
            tags:
                - Partitions
            summary: Création d'une nouvelle partition dans la base
            description: Création d'une nouvelle partition dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Partitions'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Partitions'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Partitions'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Partitions
            summary: Mise à jour partielle de la partition de clé {cle}.
            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: 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/Partitions'
            responses:
              '200':    # status code
                description: succès - JSON de la partition modifiée
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Partitions'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : partition inexistante"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Partitions
            summary: Suppression de la partition de clé {cle}.
            description: Permet de supprimer définitivement la partition de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de la partition à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des partitions dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des partitions à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - code
                        - libelle_long
                        - uid_identifiant
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les promotions ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les promotions ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: code
                  description: retourne seulement les promotions ayant un de ces codes
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: uid_identifiant
                  description: retourne seulement les promotions ayant un de ces uid_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiant souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tableau des JSON des promotions
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Promotions'
        post:
            tags:
                - Promotions
            summary: Création d'une nouvelle promotion dans la base
            description: Création d'une nouvelle promotion dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Promotions'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Promotions'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Promotions'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Promotions
            summary: Mise à jour partielle de la promotion de clé {cle}.
            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: 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/Promotions'
            responses:
              '200':    # status code
                description: succès - JSON de la promotion modifiée
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Promotions'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : promotion inexistante"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Promotions
            summary: Suppression de la promotion de clé {cle}.
            description: Permet de supprimer définitivement la promotion de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de la promotion à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des promotions dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des promotions à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression reussie"
                '404':    # status code
                    description: "Not found : La clé passée n'existe pas"
    /promotions/{cle}/cours:
        get:
            tags:
                - Promotions
            summary: Clés des cours de la promotion de clé {cle} entre 2 dates.
            description: Clés des cours de la promotion 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       
                - in: query
                  name: date_debut
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_fin
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array 
                                items:
                                    type: integer
                '400':
                    description: "Paramètre invalide : Dates hors limites"
                '404':
                    description: "Paramètre invalide : clé de la promotion incorrecte"
                            
    /promotions/{cle_promo}/cours/{cle_cours}/domaine:
        get:
            tags:
                - Promotions
            summary: Domaine de présence de la promotion de clé {cle_promo} dans le cours de clé {cle_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: array
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé de la promotion incorrecte"
        post:
            tags:
                - Promotions
            summary: Modifie le domaine de présence de la promotion de clé {cle_promo} dans le cours de clé {cle_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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé de la promotion incorrecte"
    /promotions/{cle}/indisponibilites:
        get:
            tags:
                - Promotions
            summary: Indisponibilités de la 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       
                - in: query
                  name: semaine
                  schema:
                    type: integer
                  description: semaine
            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':
                    description: "Paramètre semaine invalide"
                '404':
                    description: "Paramètre invalide : clé de la promotion incorrecte"
    /promotions/{cle}/voeux:
        get:
            tags:
                - Promotions
            summary: Voeux de la 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       
                - in: query
                  name: semaine
                  schema:
                    type: integer
                  description: semaine
            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':
                    description: "Paramètre semaine invalide"
                '404':
                    description: "Paramètre invalide : clé de la promotion incorrecte"
    /promotions/{cle}/cout:
        get:
            tags:
                - Promotions
            summary: Coût de la promotion de clé {cle} sur un domaine.
            description: Coût de la promotion 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Cout'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de la promotion incorrecte"
    /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 de toutes les promotions 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Couts'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de la promotion incorrecte"
    /promotions/{cle}/duree_cours:
        get:
            tags:
                - Promotions
            summary: Durée de cours de la promotion de clé {cle} sur un domaine.
            description: Durée des cours de la promotion 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureeCours'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de la promotion incorrecte"
    /promotions/duree_cours:
        get:
            tags:
                - Promotions
            summary: Durée du cours des promotions sur un domaine.
            description: Durée des cours des promotions sur le domaine. Si pas de paramètres, retourne la durée de toutes les promotions 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureesCours'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé d'une promotion incorrecte"
    /promotions/{cle}/duree_disponible:
        get:
            tags:
                - Promotions
            summary: Durée disponible de la promotion de clé {cle} sur un domaine.
            description: Durée disponible de la promotion 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema:
                                $ref: '#/components/schemas/DureeDisponible'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de la promotion incorrecte"
    /promotions/duree_disponible:
        get:
            tags:
                - Promotions
            summary: Durée disponible des promotions sur un domaine.
            description: Durée disponible des promotions sur le domaine. Si pas de paramètres, retourne la durée de toutes les promotions 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureesDisponible'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé d'une promotion incorrecte"


    /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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de la promotion ou de la famille incorrecte"
        post:
            tags:
                - Promotions
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de la promotion ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - code
                        - uid_identifiant
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les regroupements ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les regroupements ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: code
                  description: retourne seulement les regroupements ayant un de ces codes
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: uid_identifiant
                  description: retourne seulement les regroupements ayant un de ces uid_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiant souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tableau des JSON des regroupements
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Regroupements'
        post:
            tags:
                - Regroupements
            summary: Création d'un nouveau regroupement dans la base
            description: Création d'un nouveau regroupement dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Regroupements'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Regroupements'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Regroupements'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Regroupements
            summary: Mise à jour partielle du regroupement de clé {cle}.
            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: 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/Regroupements'
            responses:
              '200':    # status code
                description: succès - JSON du regroupement modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Regroupements'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : regroupement inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Regroupements
            summary: Suppression du regroupement de clé {cle}.
            description: Permet de supprimer définitivement le regroupement de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du regroupement à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des regroupements dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des regroupements à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 du regroupement de clé {cle} entre 2 dates.
            description: Clés des cours du regroupement 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       
                - in: query
                  name: date_debut
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_fin
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array 
                                items:
                                    type: integer
                '400':
                    description: "Paramètre invalide : Dates hors limites"
                '404':
                    description: "Paramètre invalide : clé du regroupement incorrecte"
    /regroupements/{cle_regroup}/cours/{cle_cours}/domaine:
        get:
            tags:
                - Regroupements
            summary: Domaine de présence du regroupement de clé {cle_regroup} dans le cours de clé {cle_cours}.
            description: Domaine de présence du regroupement de clé {cle_regroup} pour le cours de clé {cle_cours}. Le domaine est vide si la promotion 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: array
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé du regroupement incorrecte"
        post:
            tags:
                - Regroupements
            summary: Modifie le domaine de présence du regroupement de clé {cle_regroup} dans le cours de clé {cle_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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé du regroupement incorrecte"
    /regroupements/{cle}/cout:
        get:
            tags:
                - Regroupements
            summary: Coût du regroupement de clé {cle} sur un domaine.
            description: Coût du regroupement 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Cout'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé du regroupement incorrecte"
    /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 de tous les regroupements 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Couts'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé du regroupement incorrecte"
    /regroupements/{cle}/duree_cours:
        get:
            tags:
                - Regroupements
            summary: Durée de cours du regroupement de clé {cle} sur un domaine.
            description: Durée des cours du regroupement 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureeCours'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé du regroupement incorrecte"
    /regroupements/duree_cours:
        get:
            tags:
                - Regroupements
            summary: Durée du cours des regroupements sur un domaine.
            description: Durée des cours des regroupements sur le domaine. Si pas de paramètres, retourne la durée de tous les regroupements 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureesCours'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé d'un regroupement incorrecte"
    /regroupements/{cle}/duree_disponible:
        get:
            tags:
                - Regroupements
            summary: Durée disponible du regroupement de clé {cle} sur un domaine.
            description: Durée disponible du regroupement 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema:
                                $ref: '#/components/schemas/DureeDisponible'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé du regroupement incorrecte"
    /regroupements/duree_disponible:
        get:
            tags:
                - Regroupements
            summary: Durée disponible des regroupements sur un domaine.
            description: Durée disponible des regroupements sur le domaine. Si pas de paramètres, retourne la durée de tous les regroupements 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureesDisponible'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé d'un regroupement incorrecte"

    
    /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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du regroupement ou de la famille incorrecte"
        post:
            tags:
                - Regroupements
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du regroupement ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - code
                        - uid_identifiant
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les salles ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les salles ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: code
                  description: retourne seulement les salles ayant un de ces codes
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: uid_identifiant
                  description: retourne seulement les salles ayant un de ces uid_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiant souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tableau des JSON des salles
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Salles'
        post:
            tags:
                - Salles
            summary: Création d'une nouvelle salle dans la base
            description: Création d'une nouvelle salle dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Salles'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Salles'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Salles'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Salles
            summary: Mise à jour partielle de la salle de clé {cle}.
            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: 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/Salles'
            responses:
              '200':    # status code
                description: succès - JSON de la salle modifiée
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Salles'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : salle inexistante"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Salles
            summary: Suppression de la salle de clé {cle}.
            description: Permet de supprimer définitivement la salle de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de la salle à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des salles dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des salles à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 de la salle de clé {cle} entre 2 dates.
            description: Clés des cours de la salle 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       
                - in: query
                  name: date_debut
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_fin
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array 
                                items:
                                    type: integer
                '400':
                    description: "Paramètre invalide : Dates hors limites"
                '404':
                    description: "Paramètre invalide : clé de la salle incorrecte"
    /salles/{cle_salle}/cours/{cle_cours}/domaine:
        get:
            tags:
                - Salles
            summary: Domaine de présence de la salle de clé {cle_salle} dans le cours de clé {cle_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: array
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé de la salle incorrecte"
        post:
            tags:
                - Salles
            summary: Modifie le domaine de présence de la salle de clé {cle_salle} dans le cours de clé {cle_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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé de la salle incorrecte"
    /salles/{cle}/indisponibilites:
        get:
            tags:
                - Salles
            summary: Indisponibilités de la 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       
                - in: query
                  name: semaine
                  schema:
                    type: integer
                  description: semaine
            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':
                    description: "Paramètre semaine invalide"
                '404':
                    description: "Paramètre invalide : clé de la salle incorrecte"
    /salles/{cle}/voeux:
        get:
            tags:
                - Salles
            summary: Voeux de la 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       
                - in: query
                  name: semaine
                  schema:
                    type: integer
                  description: semaine
            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':
                    description: "Paramètre semaine invalide"
                '404':
                    description: "Paramètre invalide : clé de la salle incorrecte"
    /salles/{cle}/cout:
        get:
            tags:
                - Salles
            summary: Coût de la salle de clé {cle} sur un domaine.
            description: Coût de la salle 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Cout'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de la salle incorrecte"
    /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 de toutes les salles 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Couts'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de la salle incorrecte"
    /salles/{cle}/duree_cours:
        get:
            tags:
                - Salles
            summary: Durée de cours de la salle de clé {cle} sur un domaine.
            description: Durée des cours de la salle 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureeCours'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de la salle incorrecte"
    /salles/duree_cours:
        get:
            tags:
                - Salles
            summary: Durée du cours des salles sur un domaine.
            description: Durée des cours des salles sur le domaine. Si pas de paramètres, retourne la durée de toutes les salles 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureesCours'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé d'une salle incorrecte"
    /salles/{cle}/duree_disponible:
        get:
            tags:
                - Salles
            summary: Durée disponible de la salle de clé {cle} sur un domaine.
            description: Durée disponible de la salle 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema:
                                $ref: '#/components/schemas/DureeDisponible'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé de la salle incorrecte"
    /salles/duree_disponible:
        get:
            tags:
                - Salles
            summary: Durée disponible des salles sur un domaine.
            description: Durée disponible des salles sur le domaine. Si pas de paramètres, retourne la durée de toutes les salles 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureesDisponible'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé d'une salle incorrecte"



    /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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de la salle ou de la famille incorrecte"
        post:
            tags:
                - Salles
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de la salle ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - code
                        - uid_identifiant
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les TD/options ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les TD/options ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: code
                  description: retourne seulement les TD/options ayant un de ces codes
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: uid_identifiant
                  description: retourne seulement les TD/options ayant un de ces uid_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul uid_identifiant souhaité
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Exemple avec plusieurs uid_identifiant souhaités
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tableau des JSON des TD/options
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/TDOptions'
        post:
            tags:
                - TDOptions
            summary: Création d'un nouveau TD/option dans la base
            description: Création d'un nouveau TD/option dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/TDOptions'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/TDOptions'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/TDOptions'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - TDOptions
            summary: Mise à jour partielle du TD/Option de clé {cle}.
            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: 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/TDOptions'
            responses:
              '200':    # status code
                description: succès - JSON du TD/Option modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/TDOptions'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : td/option inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - TDOptions
            summary: Suppression du TD/Option de clé {cle}.
            description: Permet de supprimer définitivement le TD/Option de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du TD/Option à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des TD/options dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des TD/options à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression reussie"
                '404':    # status code
                    description: "Not found : La clé passée n'existe pas"
    /tdoptions/{cle}/cours:
        get:
            tags:
                - TDOptions
            summary: Clés des cours du TD/option de clé {cle} entre 2 dates.
            description: Clés des cours du TD/option 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       
                - in: query
                  name: date_debut
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
                - in: query
                  name: date_fin
                  schema:
                    type: string
                  description: Date sous format chaine 'yyyy-mm-dd'
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array 
                                items:
                                    type: integer
                '400':
                    description: "Paramètre invalide : Dates hors limites"
                '404':
                    description: "Paramètre invalide : clé du TD/option incorrecte"
    /tdoptions/{cle_TDOpt}/cours/{cle_cours}/domaine:
        get:
            tags:
                - TDOptions
            summary: Domaine de présence du TD/option de clé {cle_TDOpt} dans le cours de clé {cle_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: array
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé du TD/option incorrecte"
        post:
            tags:
                - TDOptions
            summary: Modifie le domaine de présence du TD/option de clé {cle_TDOpt} dans le cours de clé {cle_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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: array
                                items:
                                    type: integer
                '404':
                    description: "Paramètre invalide : clé du TD/option incorrecte"
    /tdoptions/{cle}/indisponibilites:
        get:
            tags:
                - TDOptions
            summary: Indisponibilités du 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       
                - in: query
                  name: semaine
                  schema:
                    type: integer
                  description: semaine
            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':
                    description: "Paramètre semaine invalide"
                '404':
                    description: "Paramètre invalide : clé du TD/Option incorrecte"
    /tdoptions/{cle}/voeux:
        get:
            tags:
                - TDOptions
            summary: Voeux du 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       
                - in: query
                  name: semaine
                  schema:
                    type: integer
                  description: semaine
            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':
                    description: "Paramètre semaine invalide"
                '404':
                    description: "Paramètre invalide : clé du TD/Option incorrecte"
    /tdoptions/{cle}/cout:
        get:
            tags:
                - TDOptions
            summary: Coût du TD/option de clé {cle} sur un domaine.
            description: Coût du TD/option 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Cout'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé du TD/option incorrecte"
    /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 de tous les TD/options 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Couts'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé d'un TD/option incorrecte"
    /tdoptions/{cle}/duree_cours:
        get:
            tags:
                - TDOptions
            summary: Durée de cours du TD/option de clé {cle} sur un domaine.
            description: Durée des cours du TD/option 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureeCours'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé du TD/option incorrecte"
    /tdoptions/duree_cours:
        get:
            tags:
                - TDOptions
            summary: Durée du cours des TD/options sur un domaine.
            description: Durée des cours des TD/options sur le domaine. Si pas de paramètres, retourne la durée de tous les TD/options 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
                - in: query
                  name: avec_cours_non_places
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les cours non placés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureesCours'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé d'un TD/option incorrecte"
    /tdoptions/{cle}/duree_disponible:
        get:
            tags:
                - TDOptions
            summary: Durée disponible du TD/option de clé {cle} sur un domaine.
            description: Durée disponible du TD/option 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       
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema:
                                $ref: '#/components/schemas/DureeDisponible'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé du TD/option incorrecte"
    /tdoptions/duree_disponible:
        get:
            tags:
                - TDOptions
            summary: Durée disponible des TD/options sur un domaine.
            description: Durée disponible des TD/options sur le domaine. Si pas de paramètres, retourne la durée de tous les TD/options 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
                - in: query
                  name: domaine
                  schema:
                    type: array
                    items:
                        type: integer
                  description: Domaine (tableau des semaines) 
                - in: query
                  name: avec_jours_feries
                  schema:
                    type: boolean
                  description: Booleen indiquant si l'on souhaite prendre en compte les jours fériés ou non
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/DureesDisponible'
                '400':
                    description: "Paramètre invalide : format incorrect"
                '404':
                    description: "Paramètre invalide : clé d'un TD/option incorrecte"


    /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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du TD/option ou de la famille incorrecte"
        post:
            tags:
                - TDOptions
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du TD/option ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - nom
                        - code
                        - type
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les baccalauréats ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: code
                  description: retourne seulement les baccalauréats ayant un de ces codes
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: type
                  description: retourne seulement les baccalauréats ayant un de ces types
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul type souhaité
                      value: [Autre]   # ?code=Autre
                    multipleIds:
                      summary: Exemple avec plusieurs types souhaités
                      value: [Autre, Équivalence]   # ?code=Autre,Équivalence
            responses:
              '200':    # status code
                description: Tableau des JSON des baccalauréats
                content:
                  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':
                    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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - nom
                        - code
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les spécialités du baccalauréat ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: code
                  description: retourne seulement les spécialités du baccalauréat ayant un de ces codes
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  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':
                    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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - nom
                        - code
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les départements ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: code
                  description: retourne seulement les départements ayant un de ces codes
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  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':
                    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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - nom
                        - code
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les types de dernier diplome ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: code
                  description: retourne seulement les types de dernier diplome ayant un de ces codes
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/TypeDernierDiplome'
    /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/TypeDernierDiplome'
                '400':
                    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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: Filtre sur les clés des établissements d'origine 
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: Filtre sur les noms des établissements d'origine 
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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,Etab13
                - in: query
                  name: email
                  description: Filtre sur les emails des établissements d'origine 
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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 email
                description: Tableau des JSON des établissements d'origine
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/EtablissementOrigine'
        post:
            tags:
                - Etablissement_origine
            summary: Création d'un nouvel établissement d'origine
            description: Création d'un nouvel établissement d'origine dans la base et initialisation des 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/EtablissementOrigine'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/EtablissementOrigine'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/EtablissementOrigine'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Etablissement_origine
            summary: Mise à jour partielle de l'établissement d'origine de clé {cle}.
            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: 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/EtablissementOrigine'
            responses:
              '200':    # status code
                description: succès - JSON de l'établissement d'origine modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/EtablissementOrigine'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Etablissement_origine
            summary: Suppression de l'établissement d'origine de clé {cle}.
            description: Permet de supprimer définitivement l'établissement d'origine de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de l'établissement d'origine à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des établissements d'origine dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des établissements d'origine à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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:
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: numero_semaine
                  description: retourne seulement les semaines ayant un de ces numéros
                  schema:
                    type: array
                    items:
                        type: integer
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul numero_semaine souhaité
                      value: [10]   # ?numero_semaine=10
                    multipleIds:
                      summary: Exemple avec plusieurs numero_semaine souhaités
                      value: [10, 14, 15]   # ?numero_semaine=10,14,16
                - in: query
                  name: numero_calendaire
                  description: retourne seulement les semaines ayant un de ces numéros calendaires
                  schema:
                    type: array
                    items:
                        type: integer
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul numero_calendaire souhaité
                      value: [1]   # ?numero_calendaire=1
                    multipleIds:
                      summary: Exemple avec plusieurs numero_calendaire souhaités
                      value: [1, 2, 3]   # ?numero_calendaire=1,2,3
            responses:
              '200':    # status code
                description: Tableau des JSON des semaines
                content:
                  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':
                    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:
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: Filtre sur les noms des sites
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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 
                description: Tableau des JSON des sites
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Sites'
              '405':
                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 de site'
                    required: true
                    schema:
                        type: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Sites'
                '404':
                    description: "Paramètre invalide"
                '405':
                    description: "Droits insuffisants : Gestion des sites inactive"
        post:
            tags:
                - Sites
            summary: Mise à jour partielle du site de nom {nom}.
            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 du site modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Sites'
              '400':
                description: "Paramètres non valide : Problème de taille..."
              '405':
                description: "Droits insuffisants : Gestion des sites inactive"
              '500':
                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:
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: Filtre sur les noms des types
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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 
                description: Tableau des JSON des types
                content:
                  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':
                    description: "Paramètre invalide"
        post:
            tags:
                - Types
            summary: Mise à jour partielle du type de cours de nom {nom}.
            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 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/Types'
            responses:
              '200':    # status code
                description: succès - JSON du site modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Types'
              '400':
                description: "Paramètres non valide"
              '404':
                description: "Not found : Le nom passé n'existe pas"
        delete:
            tags:
                - Types
            summary: Suppression du type de cours de nom {nom}.
            description: Permet de supprimer 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 : Supression 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: 388
                                    famille:
                                        type: integer
                                        example: 125
                                    mode:
                                        type: string
                                        example: "Rubriques prédéfinies"    
                                    rubrique_libre:
                                        type: string
                                        example: "Rubriques libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : nom du type de cours ou clé de la famille incorrecte"
        post:
            tags:
                - Types
            summary: Modification des ruriques 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
                            example: 24
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                type: object
                                properties:
                                    type:
                                        type: string
                                        example: 388
                                    famille:
                                        type: integer
                                        example: 125
                                    mode:
                                        type: string
                                        example: "Rubriques prédéfinies"    
                                    rubrique_libre:
                                        type: string
                                        example: "Rubriques libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : nom du type de cours ou clé de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"







    #### 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 libelle.
            parameters:
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: libelle
                  description: retourne seulement les motifs d'annulation ayant un de ces libellés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneIds:
                      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
                - in: query
                  name: par_defaut
                  description: retourne seulement les motifs d'annulation par défaut ou non
                  schema:
                    type: boolean
                  style: form
                  explode: false
                - in: query
                  name: est_remunere
                  description: retourne seulement les motifs d'annulation rémunérés ou non
                  schema:
                    type: boolean
                  style: form
                  explode: false
                - in: query
                  name: est_utilisable_par_enseignants
                  description: retourne seulement les motifs d'annulation utilisables par les enseignants ou non
                  schema:
                      type: boolean
                  style: form
                  explode: false
            responses:
              '200':    # status code
                description: Tableau des JSON des motifs d'annulation
                content:
                  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 certain 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':
                    description: "Paramètre invalide"
        post:
            tags:
                - Motifs_annulation
            summary: Mise à jour partielle du motif d'annulation de libellé {libelle}.
            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 du motif d'annulation modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Motifs_annulation'
              '400':
                description: "Paramètres non valide"
              '404':
                description: "Paramètre invalide : motif d'annulation inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Motifs_annulation
            summary: Suppression du motif d'annulation de libellé {libelle}.
            description: Permet de supprimer 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 : Supression 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 libelle.
            parameters:
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: libelle
                  description: retourne seulement les motifs d'absence et de retard ayant un de ces libellés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneIds:
                      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
                - in: query
                  name: code
                  description: retourne seulement les motifs d'absence et de retard ayant un de ces codes
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneIds:
                      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
                - in: query
                  name: par_defaut_absence
                  description: retourne seulement les motifs d'absence par défaut ou non
                  schema:
                    type: boolean
                  style: form
                  explode: false
                - in: query
                  name: actif_absence
                  description: retourne seulement les motifs d'absence actifs ou non
                  schema:
                    type: boolean
                  style: form
                  explode: false
                - in: query
                  name: est_justifie_absence
                  description: retourne seulement les motifs d'absence dont le statut est justifié ou non
                  schema:
                      type: boolean
                  style: form
                  explode: false
                - in: query
                  name: par_defaut_retard
                  description: retourne seulement les motifs de retard par défaut ou non
                  schema:
                    type: boolean
                  style: form
                  explode: false
                - in: query
                  name: actif_retard
                  description: retourne seulement les motifs de retard actifs ou non
                  schema:
                    type: boolean
                  style: form
                  explode: false
                - in: query
                  name: est_justifie_retard
                  description: retourne seulement les motifs de retard dont le statut est justifié ou non
                  schema:
                      type: boolean
                  style: form
                  explode: false
            responses:
              '200':    # status code
                description: Tableau des JSON des motifs d'absence et de retard
                content:
                  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 certain 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':
                    description: "Paramètre invalide"
        post:
            tags:
                - Motifs_absence_retard
            summary: Mise à jour partielle du motif d'absence et de retard de libellé {libelle}.
            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 du motif d'absence et de retard modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Motifs_absence_retard'
              '400':
                description: "Paramètres non valide"
              '404':
                description: "Paramètre invalide : motif d'absence et de retard inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Motifs_absence_retard
            summary: Suppression du motif d'absence et de retard de libellé {libelle}.
            description: Permet de supprimer 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 : Supression 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 libelle.
            parameters:
                - in: query
                  name: libelle
                  description: retourne seulement les motifs de décharge ayant un de ces libellés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneIds:
                      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:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Motifs_decharge'
    /motifs_decharge/{libelle}:
        delete:
            tags:
                - Motifs_decharge
            summary: Suppression du motif de décharge de libellé {libelle}.
            description: Permet de supprimer 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 : Supression 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 libelle.
            parameters:
                - in: query
                  name: libelle
                  description: retourne seulement les motifs de dispense ayant un de ces libellés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneIds:
                      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:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Motifs_dispense'
    /motifs_dispense/{libelle}:
        delete:
            tags:
                - Motifs_dispense
            summary: Suppression du motif de dispense de libellé {libelle}.
            description: Permet de supprimer 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 : Supression 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - valeur
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les pondérations ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: numerateur
                  description: retourne seulement les pondérations ayant un de ces numérateurs
                  schema:
                    type: array
                    items:
                        type: integer
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul numérateur souhaité
                      value: [10]   # ?numerateur=10
                    multipleIds:
                      summary: Exemple avec plusieurs numérateur souhaités
                      value: [10, 20, 30]   # ?numerateur=10,20,30
                - in: query
                  name: denominateur
                  description: retourne seulement les pondérations ayant un de ces dénominateurs
                  schema:
                    type: array
                    items:
                        type: integer
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul dénominateur souhaité
                      value: [20]   # ?denominateur=maths
                    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:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Ponderations'
              '403':
                description: "Droits insuffisants"
        post:
            tags:
                - Ponderations
            summary: Création d'une nouvelle pondération dans la base
            description: Création d'une nouvelle pondération dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Ponderations'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Ponderations'
                '400':
                  description: "Paramètres non valides : numérateur et dénominateur obligatoires"
                '403':
                    description: "Droits insuffisants"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Ponderations'
                '404':
                    description: "Paramètre invalide"
                '403':
                    description: "Droits insuffisants"
        post:
            tags:
                - Ponderations
            summary: Mise à jour partielle de la pondération de clé {cle}.
            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: 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/Ponderations'
            responses:
              '200':    # status code
                description: succès - JSON de la pondération modifiée
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Ponderations'
              '400':
                description: "Paramètres non valide"
              '403':
                description: "Droits insuffisants"
              '404':
                description: "Paramètre invalide : pondération inexistante"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Ponderations
            summary: Suppression de la pondération de clé {cle}.
            description: Permet de supprimer définitivement la pondération de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de la pondération à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression reussie"
                '403':
                    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: Suppression des pondérations dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des pondérations à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression reussie"
                '403':
                    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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les profils d'utilisation ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les profils d'utilisation ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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 
                description: Tableau des JSON des profils d'utilisation
                content:
                  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: string            
            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"
                '400':
                    description: "Paramètre invalide"


    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - profil_utilisation
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les utilisateurs ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les utilisateurs ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: prenom
                  description: retourne seulement les utilisateurs ayant un de ces prénoms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: identifiant_connexion
                  description: retourne seulement les utilisateurs ayant un de ces identifiants de connexion
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: profil_utilisation
                  description: retourne seulement les utilisateurs ayant un de ces profil d'utilisation (de clé ou nom)
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cas_identifiant
                  description: retourne seulement les utilisateurs ayant un de ces cas_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: adfs_identifiant
                  description: retourne seulement les utilisateurs ayant un de ces adfs_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: saml_identifiant
                  description: retourne seulement les utilisateurs ayant un de ces saml_identifiants
                  schema:
                    type: array
                    items:
                       type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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 
                description: Tableau des JSON des utilisateurs
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Utilisateurs'
        post:
            tags:
                - Utilisateurs
            summary: Création d'un nouvel utilisateur dans la base
            description: Création d'un nouvel utilisateur dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Utilisateurs'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Utilisateurs'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Utilisateurs'
                '400':
                    description: "Paramètre invalide"
        post:
            tags:
                - Utilisateurs
            summary: Mise à jour partielle de l'utilisateur de clé {cle}.
            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: 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/Utilisateurs'
            responses:
              '200':    # status code
                description: succès - JSON de l'utilisateur modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Utilisateurs'
              '400':
                description: "Paramètres non valide : nom obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : utilisateur inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Utilisateurs
            summary: Suppression de l'utilisateur de clé {cle}.
            description: Permet de supprimer définitivement l'utilisateur de clé {cle}.
            parameters:
                -   name: cle
                    in: path
                    description: clé de l'utilisateur à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des utilisateurs dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des utilisateurs à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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:
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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 
                description: JSON de certains paramètres de la base
                content:
                  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é 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:
                  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':
                description: "Paramètres non valide"
              '500':
                description: "Modification d'au moins un des champs impossible"         


    #### version ####
    /version:
        get:
            tags:
                - Version
            summary: Version d'Hyperplanning.
            description: Version de l'application Hyperplanning Service Web.
            parameters:
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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 
                description: JSON de la version
                content:
                  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: 1


    #### ICAL ####
    /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: 
                            $ref: '#/components/schemas/Icals'
            responses:
                '200':
                  description: "succès - Tableau des icals"
                '400':
                  description: "Paramètres non valides : paramètre passé non valide"
                '404':
                  description: "Paramètres non valides : clé inexistante"
    /ical/matieres/{cle}:
        post:
            tags:
                - Icals
            summary: Ical de la matière de clé {cle}.
            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: string            
            requestBody:
                description: Champs du JSON à utiliser pour parametrer l'ical. 
                required: false
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Icals'
            responses:
              '200':    # status code
                description: succès - Ical de la matière 
                #content:
                #  application/json:
                #    schema: 
                #        $ref: '#/components/schemas/Matieres'
              '400':
                description: "Paramètres non valide : 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: 
                            $ref: '#/components/schemas/Icals'
            responses:
                '200':
                  description: "succès - Tableau des icals"
                '400':
                  description: "Paramètres non valides : paramètre passé non valide"
                '404':
                  description: "Paramètres non valides : clé inexistante"
    /ical/enseignants/{cle}:
        post:
            tags:
                - Icals
            summary: Ical de l'enseignant de clé {cle}.
            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: string            
            requestBody:
                description: Champs du JSON à utiliser pour parametrer l'ical. 
                required: false
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Icals'
            responses:
              '200':    # status code
                description: succès - Ical de l'enseignant
              '400':
                description: "Paramètres non valide : 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: 
                            $ref: '#/components/schemas/Icals'
            responses:
                '200':
                  description: "succès - Tableau des icals"
                '400':
                  description: "Paramètres non valides : paramètre passé non valide"
                '404':
                  description: "Paramètres non valides : clé inexistante"
    /ical/etudiants/{cle}:
        post:
            tags:
                - Icals
            summary: Ical de l'étudiant de clé {cle}.
            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: string            
            requestBody:
                description: Champs du JSON à utiliser pour parametrer l'ical. 
                required: false
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Icals'
            responses:
              '200':    # status code
                description: succès - Ical de l'étudiant
              '400':
                description: "Paramètres non valide : clé inexistante, paramètre passé non valide..."
    /ical/promotions:
        post:
            tags:
                - Icals
            summary: Ical des promotions 
            description: Ical des promotions 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: 
                            $ref: '#/components/schemas/Icals'
            responses:
                '200':
                  description: "succès - Tableau des icals"
                '400':
                  description: "Paramètres non valides : paramètre passé non valide"
                '404':
                  description: "Paramètres non valides : clé inexistante"
    /ical/promotions/{cle}:
        post:
            tags:
                - Icals
            summary: Ical de la promotion de clé {cle}.
            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: string            
            requestBody:
                description: Champs du JSON à utiliser pour parametrer l'ical. 
                required: false
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Icals'
            responses:
              '200':    # status code
                description: succès - Ical de la promotion
              '400':
                description: "Paramètres non valide : 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: 
                            $ref: '#/components/schemas/Icals'
            responses:
                '200':
                  description: "succès - Tableau des icals"
                '400':
                  description: "Paramètres non valides : paramètre passé non valide"
                '404':
                  description: "Paramètres non valides : clé inexistante"
    /ical/tdoptions/{cle}:
        post:
            tags:
                - Icals
            summary: Ical du TD/option de clé {cle}.
            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: string            
            requestBody:
                description: Champs du JSON à utiliser pour parametrer l'ical. 
                required: false
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Icals'
            responses:
              '200':    # status code
                description: succès - Ical du TD/option
              '400':
                description: "Paramètres non valide : clé inexistante, paramètre passé non valide..."
    /ical/salles:
        post:
            tags:
                - Icals
            summary: Ical des salles 
            description: Ical des salles 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: 
                            $ref: '#/components/schemas/Icals'
            responses:
                '200':
                  description: "succès - Tableau des icals"
                '400':
                  description: "Paramètres non valides : paramètre passé non valide"
                '404':
                  description: "Paramètres non valides : clé inexistante"
    /ical/salles/{cle}:
        post:
            tags:
                - Icals
            summary: Ical de la salle de clé {cle}.
            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: string            
            requestBody:
                description: Champs du JSON à utiliser pour parametrer l'ical. 
                required: false
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Icals'
            responses:
              '200':    # status code
                description: succès - Ical de la salle
              '400':
                description: "Paramètres non valide : clé inexistante, paramètre passé non valide..."



    /cours_annules/{cle}/detail_seances_placees:
        get:
            tags:
                - Cours_annules
            summary: Détail des séances placées du 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 concerné
                                        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':
                    description: "Paramètre invalide : Clé du cours annulé incorrecte"


    #### FAMILLE ####
    /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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les familles ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: libelle
                  description: retourne seulement les familles ayant un de ces libelles
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      summary: Exemple avec un seul libelle souhaité
                      value: [maths]   # ?libelle=maths
                    multipleIds:
                      summary: Exemple avec plusieurs libelles souhaités
                      value: [maths, francais, histoire]   # ?libelle=maths,francais,histoire
                - in: query
                  name: mode
                  description: retourne seulement les familles de ce mode
                  schema:
                    type: string
                  style: form
                  explode: false
                - in: query
                  name: utilisee_pour
                  description: retourne seulement les familles utilisant un de ces genres
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
            responses:
              '200':    # status code
                description: Tableau des JSON des familles
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Familles'
        post:
            tags:
                - Familles
            summary: Création d'une nouvelle famille dans la base
            description: Création d'une nouvelle famille dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Familles'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Familles'
                '400':
                  description: "Paramètres non valides : nom, genre et mode obligatoire, problème de taille"
                '500':
                  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 certain champs du JSON.
            parameters:
                -   name: cle
                    in: path
                    description: 'clé de la famille'
                    required: true
                    schema:
                        type: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Familles'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Familles
            summary: Mise à jour partielle de la famille de clé {cle}.
            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: 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/Familles'
            responses:
              '200':    # status code
                description: succès - JSON de la famille modifiée
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Familles'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : famille inexistante"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Familles
            summary: Suppression de la famille de clé {cle}.
            description: Permet de supprimer définitivement la famille de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de la famille à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des familles dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des familles à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: string            
            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':
                    description: "Paramètre invalide"
        post:
            tags:
                - Familles
            summary: Ajoute une rubrique à la famille de clé {cle}.
            description: Ajoute une rubrique à la famille de clé {cle}, le nom etant passé dans le body.
            parameters:
                -   name: cle
                    in: path
                    description: 'clé de la famille'
                    required: true
                    schema:
                        type: string            
            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 la rubrique crée
                content:
                  application/json:
                    schema: 
                        type: object
                        properties:
                            cle:
                                type: integer
                                example: 11
                            nom:
                                type: string
                                example: "Rubrique2"                                                                                    
              '400':
                description: "Paramètres non valide : nom obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : famille inexistante"
              '500':
                description: "creation 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: retourne seulement les rubriques ayant une de ces clés
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: retourne seulement les rubriques ayant un de ces noms
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: famille
                  description: retourne seulement les rubriques des familles ayant une de ces clés
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Rubriques'
        post:
            tags:
                - Rubriques
            summary: Création d'une nouvelle rubrique dans la base
            description: Création d'une nouvelle rubrique dans la base et initialisation des champs à l'aide des paramètres passés dans le JSON.
            requestBody:
                description: Champs du JSON utilisé pour la création
                required: true
                content:
                    application/json:
                        schema: 
                            $ref: '#/components/schemas/Rubriques'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Rubriques'
                '400':
                  description: "Paramètres non valides : nom et clé de la famille obligatoire, problème de taille"
                '500':
                  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 certain champs du JSON.
            parameters:
                -   name: cle
                    in: path
                    description: 'clé de la rubrique'
                    required: true
                    schema:
                        type: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Rubriques'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Rubriques
            summary: Mise à jour partielle de la rubrique de clé {cle}.
            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: 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/Rubriques'
            responses:
              '200':    # status code
                description: succès - JSON de la rubrique modifiée
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Rubriques'
              '400':
                description: "Paramètres non valide : nom obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : rubrique inexistante"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Rubriques
            summary: Suppression de la rubrique de clé {cle}.
            description: Permet de supprimer définitivement la rubrique de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de la rubrique à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des rubriques dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des rubriques à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression reussie"
                '404':    # status code
                    description: "Not found : La clé passée n'existe pas"
    


   
    #### Calendrier de 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: Filtre sur les clés des calendriers de notation
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: Filtre sur les noms des calendriers de notation
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  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éation d'un nouveau calendrier de notation dans la base et initialisation des 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':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Calendriers_notation'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Calendriers_notation'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Calendriers_notation
            summary: Mise à jour partielle du calendrier de notation de clé {cle}.
            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: 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/Calendriers_notation'
            responses:
              '200':    # status code
                description: succès - JSON du calendrier de notation modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Calendriers_notation'
              '400':
                description: "Paramètres non valide : nom obligatoire, Problème de taille..."
              '404':
                description: "Not found : La clé passée n'existe pas"
              '405':
                description: "Droits insuffisants"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Calendriers_notation
            summary: Suppression du calendrier de notation de clé {cle}.
            description: Permet de supprimer définitivement le calendrier de notation de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du calendrier de notation à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des calendriers de notation dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des calendriers de notation à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du calendrier de notation ou de la famille incorrecte"
        post:
            tags:
                - Calendriers_notation
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé du calendrier de notation ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - date_debut
                        - proprietaire
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: Filtre sur les clés des périodes hors calendrier
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: Filtre sur les noms des périodes hors calendrier 
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  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éation d'une nouvelle période hors calendrier dans la base et initialisation des 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':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/periodes_hors_calendrier'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/periodes_hors_calendrier'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Periodes_hors_calendrier
            summary: Mise à jour partielle de la période hors calendrier de clé {cle}.
            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: 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/periodes_hors_calendrier'
            responses:
              '200':    # status code
                description: succès - JSON de la période hors calendrier modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/periodes_hors_calendrier'
              '400':
                description: "Paramètres non valide : nom obligatoire, Problème de taille..."
              '404':
                description: "Not found : La clé passée n'existe pas"
              '405':
                description: "Droits insuffisants"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Periodes_hors_calendrier
            summary: Suppression de la période hors calendrier de clé {cle}.
            description: Permet de supprimer définitivement la période hors calendrier de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de la période hors calendrier à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des périodes hors calendrier dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des périodes hors calendrier à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de la période hors calendrier ou de la famille incorrecte"
        post:
            tags:
                - Periodes_hors_calendrier
            summary: Modification des ruriques 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
                            example: 24
            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 libre de cet élément"    
                                    rubriques:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                cle:
                                                    type: integer
                                                    example: 12
                                                nom:
                                                    type: string
                                                    example: "Rubrique1"
                '404':
                    description: "Paramètre invalide : clé de la période hors calendrier ou de la famille incorrecte"
                '500':
                    description: "'Modification impossible' ou 'Droits insufissants'"
    #### Periode de 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - nom
                        - date_debut
                  description: Choix de l'ordre de tri (par clé, par calendrier puis nom, par calendrier puis date de debut)
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: Filtre sur les clés des périodes de notation
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: nom
                  description: Filtre sur les noms des périodes de notation
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  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éation d'une nouvelle période de notation dans la base et initialisation des 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':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/periodes_notation'
                '400':
                  description: "Paramètres non valides : nom obligatoire, problème de taille"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/periodes_notation'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Periodes_notation
            summary: Mise à jour partielle de la période de notation de clé {cle}.
            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: 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/periodes_notation'
            responses:
              '200':    # status code
                description: succès - JSON du calendrier de notation modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/periodes_notation'
              '400':
                description: "Paramètres non valide : nom obligatoire, Problème de taille..."
              '404':
                description: "Not found : La clé passée n'existe pas"
              '405':
                description: "Droits insuffisants"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Periodes_notation
            summary: Suppression de la période de notation de clé {cle}.
            description: Permet de supprimer définitivement la période de notation de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé de la période de notation à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des périodes de notation dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des périodes de notation à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Modules_notation'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Modules_notation
            summary: Mise à jour partielle du module de notation de clé {cle}.
            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: 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/Modules_notation'
            responses:
              '200':    # status code
                description: succès - JSON du module de notation modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Modules_notation'
              '400':
                description: "Paramètres non valide : libelle obligatoire, Problème de taille..."
              '404':
                description: "Paramètre invalide : module de notation inexistant"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Modules_notation
            summary: Suppression du module de notation de clé {cle}.
            description: Permet de supprimer définitivement le module de notation de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du module de notation à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des modules de notation dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des modules de notation à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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ée 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':
                    description: "Paramètre invalide : clé du module de notation ou de la période de notation incorrecte"
        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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé du module de notation ou de la période de notation"
                '500':
                    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ée à 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 notations 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':
                    description: "Paramètre invalide : clé du module de notation ou de la période de notation incorrecte"
    /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ée 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':
                    description: "Paramètre invalide : clé du module de notation ou de la période hors calendrier incorrecte"
        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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé du module de notation ou de la période hors calendrier"
                '500':
                    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 notations 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':
                    description: "Paramètre invalide : clé du module de notation ou de la période hors calendrier incorrecte"
    #### 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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - matiere
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: Filtre sur les clés des services de notation
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: matiere
                  description: Filtre sur les clés des matières des services de notation
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  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éation d'un nouveau service de notation dans la base et initialisation des 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: 
                            $ref: '#/components/schemas/Services_notation'
            responses:
                '201':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Services_notation'
                '400':
                  description: "Paramètres non valides : matière obligatoire, Nombre de points trop grand"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Services_notation'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Services_notation
            summary: Mise à jour partielle du service de notation de clé {cle}.
            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: 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/Services_notation'
            responses:
              '200':    # status code
                description: succès - JSON du service de notation modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Services_notation'
              '400':
                description: "Paramètres non valide : matière obligatoire, Problème de taille..."
              '404':
                description: "Not found : La clé passée n'existe pas"
              '405':
                description: "Droits insuffisants"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Services_notation
            summary: Suppression du service de notation de clé {cle}.
            description: Permet de supprimer définitivement le service de notation de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du service de notation à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des services de notation dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des services de notation à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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':
                    description: "Paramètre invalide : clé du service de notation ou de la promotion incorrecte"
    /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ée 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':
                    description: "Paramètre invalide : clé du service de notation ou de la période de notation incorrecte"
        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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé du service de notation ou de la période de notation"
                '500':
                    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ée à 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 notations 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':
                    description: "Paramètre invalide : clé du service de notation ou de la période de notation incorrecte"
    /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ée 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':
                    description: "Paramètre invalide : clé du service de notation ou de la période hors calendrier incorrecte"
        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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé du service de notation ou de la période hors calendrier"
                '500':
                    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 notations 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':
                    description: "Paramètre invalide : clé du service de notation ou de la période hors calendrier incorrecte"
    /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':
                    description: "Paramètre invalide : clé du service de notation ou de la période de notation incorrecte"
        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: 2.5
                '400':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé du service de notation ou de la période de notation"
                '500':
                    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':
                    description: "Paramètre invalide : clé du service de notation ou de la période hors calendrier incorrecte"
        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: bonus_malus_actif à affecter
                    required: true
                    schema:
                        type: boolean
                        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
                                    bonus_malus_actif:
                                        type: boolean
                                        example: true
                '400':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé du service de notation ou de la période hors calendrier"
                '500':
                    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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - cle
                        - service_notation
                        - date
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: cle
                  description: Filtre sur les clés des devoirs 
                  required: false
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneIds:
                      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
                - in: query
                  name: services_notation
                  description: Filtre sur les clés des services de notation des devoirs
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Services_notation'
        post:
            tags:
                - Devoirs
            summary: Création d'un nouveau devoir.
            description: Création d'un nouveau devoir dans la base et initialisation des 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':
                    description: Created            
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Devoirs'
                '400':
                  description: "Paramètres non valides : service_notation obligatoire"
                '500':
                  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: string            
            responses:
                '200':    # status code
                    description: OK
                    content:  # Response body
                        application/json:
                            schema: 
                                $ref: '#/components/schemas/Devoirs'
                '404':
                    description: "Paramètre invalide"
        post:
            tags:
                - Devoirs
            summary: Mise à jour partielle du devoir de clé {cle}.
            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: 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: 
                            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 du devoir modifié
                content:
                  application/json:
                    schema: 
                        $ref: '#/components/schemas/Devoirs'
              '400':
                description: "Paramètres non valide : service_notation obligatoire, Problème de taille..."
              '404':
                description: "Not found : La clé passée n'existe pas"
              '405':
                description: "Droits insuffisants"
              '500':
                description: "Modification d'au moins un des champs impossible"         
        delete:
            tags:
                - Devoirs
            summary: Suppression du devoir de clé {cle}.
            description: Permet de supprimer définitivement le devoir de clé {cle} de la base.
            parameters:
                -   name: cle
                    in: path
                    description: clé du devoir à supprimer
                    required: true
                    schema:
                        type: string
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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: Suppression des devoirs dont la clé est passée en paramètre (?cles=1,5,7 ).
            parameters:
                - in: query
                  name: cles
                  description: une ou plusieurs clés des devoirs à supprimer
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                  style: form
                  explode: false
                  examples:
                    oneId:
                      summary: Exemple avec une seule clé
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Exemple avec plusieurs clés
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
                '204':    # status code
                    description: "Deleted : Supression 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':
                    description: "Paramètre invalide : clé de la promotion ou du devoir incorrecte"
        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: 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: 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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé de la promotion ou du devoir"
                '500':
                    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':
                    description: "Paramètre invalide : clé du td/option ou du devoir incorrecte"
        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: 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: 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':
                    description: "Paramètre obligatoire non renseigné"
                '404':
                    description: "Paramètre invalide : clé du td/option ou du devoir"
                '500':
                    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:
                - in: query
                  name: sort
                  schema:
                    type: string
                    enum:
                        - devoir
                        - etudiant
                  description: Choix de l'ordre de tri
                - in: query
                  name: select
                  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
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: champ que l'on souhaite avoir dans le json de reponse
                  examples:
                    oneIds:
                      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
                - in: query
                  name: etudiant
                  description: retourne seulement les notes des étudiants ayant une de ces clés
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: devoir
                  description: retourne seulement les notes des devoirs ayant une de ces clés
                  schema:
                    type: array
                    items:
                        type: string
                  style: form
                  explode: false
                  examples:
                    oneIds:
                      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
                - in: query
                  name: date_debut
                  description: retourne seulement les notes des devoirs ayant lieu après cette date de debut. Si non renseigné, prend la premiere date de la base.
                  schema:
                    type: string
                  style: form
                  explode: false
                - in: query
                  name: date_fin
                  description: retourne seulement les notes des devoirs ayant lieu avant cette date de fin. Si non renseigné, prend la derniere date de la base.
                  schema:
                    type: string
                  style: form
                  explode: false
            responses:
              '200':    # status code
                description: Tableau des JSON des notes de devoirs
                content:
                  application/json:
                    schema: 
                      type: array
                      items:
                        $ref: '#/components/schemas/Notes'
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: "commentaire sur l'alternance"
        enseignant_tuteur:
          type: integer
          example: 12
        enseignant_responsable:
          type: integer
          example: 14
        sujet_detaille:
          type: string
          example: "Sujet détaillé de l'alternance"
        objectifs:
          type: string
          example: "objectifs de l'alternance"
        activites_prevues:
          type: string
          example: "activités prévues de l'alternance"
        competences_visees:
          type: string
          example: "compétences visées de l'alternance"
        modalites_concertation:
          type: string
          example: "modalités de concertation de l'alternance"
        modalites_evaluation:
          type: string
          example: "modalités d'évaluation de l'alternance"
        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: "Claude"
        civilite:
          type: string
          example: "Mr"
        cas_identifiant:
          type: string
          example: "cas_Ident_Dupond"
        adfs_identifiant:
          type: string
          example: "adfs_Ident_Dupond"
        saml_identifiant:
          type: string
          example: "saml_Ident_Dupond"
        identifiant_connexion:
          type: string
          example: "connexion_Ident_Dupond"
        email:
          type: string
          example: "Dupond@email.fr"
        adresse1:
          type: string
          example: "12 rue de la paix"
        adresse2:
          type: string
        adresse3:
          type: string
        adresse4:
          type: string
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Marseille"
        pays:
          type: string
          example: "France"
        province:
          type: string
        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:  # Seulement en modification, pas de visualisation
          type: string
          example: "fdrehm:lcfjnfj"
          description: Seulement pour la modification, pas de visualisation
    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: "Durant"
        prenom:
          type: string
          example: "Juliette"
        civilite:
          type: string
          example: "Mme"
        uid_identifiant:
          type: string
          example: "UID_Ident_Durand"
        cas_identifiant:
          type: string
          example: "cas_Ident_Durand"
        adfs_identifiant:
          type: string
          example: "adfs_Ident_Durand"
        saml_identifiant:
          type: string
          example: "saml_Ident_Durand"
        identifiant_connexion:
          type: string
          example: "connexion_Ident_Durand"
        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: "Martin@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:  # Seulement en modification, pas de visualisation
          type: string
          example: "fdrehm:lcfjnfj"
          description: Seulement pour la modification, pas de visualisation
    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: "petit memo"    
        reference:
          type: string
          example: "Ref. HP 000001"    
        uid_identifiant:
          type: string
          example: "uididentducours388"    
        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
        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"
    CoursAnnules:               # 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: "petit commentaire"    
        uid_identifiant:
          type: string
          example: "uididentducours388"    
        reference:
          type: string
          example: "Ref. HP 000001"    
        memo:
          type: string
          example: "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:
            $ref: '#/components/schemas/MatiereAuChoix'
        libelles_au_choix:
          type: array
          items:
            type: string
        Apport:
          type: array
          items:
            $ref: '#/components/schemas/Apport'
    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 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
        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: "Durant"
        prenom:
          type: string
          example: "Juliette"
        code: 
          type: string
          example: "AD"
        couleur:
          type: string
          example: "#FFFF80"
        civilite:
          type: string
          example: "Mme"
        uid_identifiant:
          type: string
          example: "UID_Ident_Durand"
        cas_identifiant:
          type: string
          example: "cas_Ident_Durand"
        adfs_identifiant:
          type: string
          example: "adfs_Ident_Durand"
        saml_identifiant:
          type: string
          example: "saml_Ident_Durand"
        identifiant_connexion:
          type: string
          example: "connexion_Ident_Durand"
        nom_jeune_fille:
          type: string
          example: "Martin"
        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: "Commentaire libre"
        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
        adresse3:
          type: string
        adresse4:
          type: string
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Marseille"
        pays:
          type: string
          example: "France"
        province:
          type: string
        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:  # Seulement en modification, pas de visualisation
          type: string
          example: "fdrehm:lcfjnfj"
          description: Seulement pour la modification, pas de visualisation
    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: "UID_Ident_Index"
        adresse1:
          type: string
          example: "12 rue de la paix"
        adresse2:
          type: string
        adresse3:
          type: string
        adresse4:
          type: string
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Marseille"
        pays:
          type: string
          example: "France"
        province:
          type: string
        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: "Martin@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]
    EtablissementOrigine:       # 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: "Durand"
        prenom1: 
          type: string
          example: "Arthur"
        prenom2:
          type: string
          example: "Benoit"
        prenom3:
          type: string
          example: "Marc"
        prenom_usage:
          type: string
          example: "Arthy"
        date_naissance:
          type: string
          example: "2010-02-22"
        civilite:
          type: string
          example: "M"
        uid_identifiant:
          type: string
          example: "UID_Ident_Durand"
        cas_identifiant:
          type: string
          example: "CAS_Ident_Durand"
        adfs_identifiant:
          type: string
          example: "adfs_Ident_Durand"
        saml_identifiant:
          type: string
          example: "saml_Ident_Durand"
        identifiant_connexion:
          type: string
          example: "Connexion_Ident_Durand"
        mot_de_passe:
          type: string
          example: "kgsfrtd;lfhc:d"
          description: Seulement pour la modification, pas de visualisation
        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: "Martin"
        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: "commentaire"
        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
        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": "Rubrique2"}]
    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: "UID_Ident_LV1_Anglais"
        libelle_long:
          type: string
          example: "Voici_un_libelle_long_pour_LV1_anglais"
        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:
            $ref: '#/components/schemas/MatiereAuChoix'
        libelles_au_choix:
          type: array
          items:
            type: string
        Apport:
          type: array
          items:
            $ref: '#/components/schemas/Apport'
    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: "Martine"
        civilite: 
          type: string
          example: "Mme"
        nom_naissance:
          type: string
          example: "DUPONT"
        email:
          type: string
          example: "MDUPONT@mail.fr"
        destinataire_courriers_absences:
          type: boolean
          example: true
        uid_identifiant:
          type: string
          example: "UID_Ident_DUPOND"
        cas_identifiant:
          type: string
          example: "CAS_Ident_DUPOND"
        adfs_identifiant:
          type: string
          example: "adfs_Ident_DUPOND"
        saml_identifiant:
          type: string
          example: "saml_Ident_DUPOND"
        commentaire:
          type: string
          example: "Permet d'inserer un commentaire"
        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: "Id_connexion_DUPOND"
        acces_espace_parents:
          type: boolean
          example: true
        mot_de_passe:
          type: string
          example: "hcfgh,skucf!a"
          description: Seulement pour la modification, pas de visualisation
        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_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
    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]

    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: "UID_Ident_1GM1"
        libelle_long:
          type: string
          example: "Voici_un_libelle_long_pour_1GM1"
        email:
          type: string
          example: "1gm1@mail.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: "UID_Ident_GM1-2"
        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_long_pour_Salle_001"
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        uid_identifiant:
          type: string
          example: "UID_Ident_001"
        capacite:
          type: integer
          example: 50
        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
          # attention: "seulement pour les salles simples"
        salles_de_ce_groupe_de_salle:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
          # 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 détaillé du stage"
        commentaire:
          type: string
          example: "commentaire sur le stage"
        objectifs:
          type: string
          example: "objectifs du stage"
        activites_prevues:
          type: string
          example: "activités prévues du stage"
        competences_visees:
          type: string
          example: "compétences visées du stage"
        modalites_concertation:
          type: string
          example: "modalités de concertation du stage"
        modalites_evaluation:
          type: string
          example: "modalités d'évaluation du stage"
        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: "UID_Ident_TD1"
        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_long_pour_TD1"
        email:
          type: string
          example: "TD1@mail.fr"
        proprietaire:
          type: integer
          example: 10
          #$ref: '#/components/schemas/Proprietaire'
        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"
    TypeDernierDiplome:         # 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: "Claude"
        profil_utilisation:
          type: object
          properties:
            cle:
              type: integer
            nom: 
              type: string
          example:  {"cle": 2,"nom": "Modifiant"}
        civilite:
          type: string
          example: "Mr"
        statut:
          type: string
          description: "Format attendu : 'U' ou 'utilisateur', 'S' ou 'superadministrateur', 'A' ou 'administrateur de base'"
          example: "Superadministrateur"
        ldap_identifiant:
          type: string
          example: "ldap_Ident_Dupond"
        cas_identifiant:
          type: string
          example: "cas_Ident_Dupond"
        adfs_identifiant:
          type: string
          example: "adfs_Ident_Dupond"
        saml_identifiant:
          type: string
          example: "saml_Ident_Dupond"
        identifiant_connexion:
          type: string
          example: "connexion_Ident_Dupond"
        e_mail:
          type: string
          example: "Dupond@email.fr"
        adresse1:
          type: string
          example: "12 rue de la paix"
        adresse2:
          type: string
        adresse3:
          type: string
        adresse4:
          type: string
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Marseille"
        pays:
          type: string
          example: "France"
        province:
          type: string
        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:  # Seulement en modification, pas de visualisation
          type: string
          example: "fdrehm:lcfjnfj"
          description: Seulement pour la modification, pas de visualisation
    Apport:                     # Object definition
      type: object
      properties:
        cle_matiere:
          type: integer
          example: 11
        type:
          type: string
          example: "EXAM"
        duree_totale:
          type: number
          example: 0.5
        duree_seance:
          type: number          
          example: 0.041666666666666664
    Cout:                       # Object definition
      type: object
      properties:
        domaine:
          type: array
          items:
              type: integer
        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
    Couts:                      # Object definition
      type: object
      properties:
        domaine:
          type: array
          items:
              type: integer
        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
                cout: 
                    type: number
    DureeCours:                 # Object definition
      type: object
      properties:
        domaine:
          type: array
          items:
              type: integer
        avec_jours_feries: 
          type: boolean
          example: true
        avec_cours_non_places: 
          type: boolean
          example: true
        duree_cours: 
          type: number
    DureesCours:                # Object definition
      type: object
      properties:
        domaine:
          type: array
          items:
              type: integer
        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
                duree: 
                    type: number
    DureeDisponible:            # Object definition
      type: object
      properties:
        domaine:
          type: array
          items:
              type: integer
        avec_jours_feries: 
          type: boolean
          example: true
        duree_diponible: 
          type: number
    DureesDisponible:           # Object definition
      type: object
      properties:
        domaine:
          type: array
          items:
              type: integer
        avec_jours_feries: 
          type: boolean
          example: true
        duree_diponible: 
          type: array
          items:
            type: object
            properties:
                cle:
                    type: integer
                duree: 
                    type: number
    Icals:                      # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        domaine:
          type: string
          example: true
        matiere_code: 
          type: boolean
          # defaut: false
        matiere_libelle:
          type: boolean
          # defaut: true
        matiere_libelle_long:
          type: boolean
          # defaut: false
        enseignant_code:
          type: boolean
          # defaut: false
        enseignant_civilite:
          type: boolean
          # defaut: true
        enseignant_nom:
          type: boolean
          # defaut: true
        ennseignant_nom_majuscule:
          type: boolean
          # defaut: false
        enseignant_prenom:
          type: boolean
          # defaut: true
        enseignant_prenom_initale:
          type: boolean
          # defaut: false
        regroupement_code:
          type: boolean
          # defaut: false
        regroupement_nom:
          type: boolean
          # defaut: true
        promotion_code:
          type: boolean
          # defaut: false
        promotion_nom:
          type: boolean
          # defaut: true
        promotion_libelle_long:
          type: boolean
          # defaut: false
        td_code:
          type: boolean
          # defaut: false
        td_nom:
          type: boolean
          # defaut: true
        td_libelle_long:
          type: boolean
          # defaut: false
        option_code:
          type: boolean
          # defaut: false
        option_nom:
          type: boolean
          # defaut: true
        option_libelle_long:
          type: boolean
          # defaut: false
        salle_code:
          type: boolean
          # defaut: false
        salle_nom:
          type: boolean
          # defaut: true
        salle_libelle_long:
          type: boolean
          # defaut: false
        site_Tous:
          type: boolean
          # defaut: true
        site_sauf_defaut:
          type: boolean
          # defaut: false
        type:
          type: boolean
          # defaut: true
        ponderation:
          type: boolean
          # defaut: true
        memo:
          type: boolean
          # defaut: true
        memo_premiere_ligne:
          type: boolean
          # defaut: true
        effectif:
          type: boolean
          # defaut: true
    MatiereAuChoix:             # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 11
        libelle:
          type: string
          example: "Options"
    Photos:                     # Object definition
      type: object
      properties:
        format:
          type: string
          example: "jpeg"
        base64binary: 
          type: string

security:
  - basicAuth: []  # <-- use the same name here		  
